From 9f54aab110f32236b777f1546bec01b9a80df992 Mon Sep 17 00:00:00 2001 From: joel kronenberg Date: Mon, 16 Apr 2007 16:22:41 +0000 Subject: [PATCH 1/1] tagging as ATutor 1.5.4-release --- 404.php | 25 + about.php | 26 + acl.php | 16 + acollab/bounce.php | 35 + acollab/index.php | 43 + acollab/integrate.php | 31 + admin/admin_delete.php | 159 + admin/admin_deny.php | 151 + admin/admin_email.php | 132 + admin/admins/create.php | 174 + admin/admins/delete.php | 59 + admin/admins/detail_log.php | 86 + admin/admins/edit.php | 155 + admin/admins/index.php | 138 + admin/admins/log.php | 99 + admin/admins/my_edit.php | 94 + admin/admins/my_password.php | 78 + admin/admins/password.php | 95 + admin/admins/reset_log.php | 46 + admin/backup/create.php | 85 + admin/backup/delete.php | 45 + admin/backup/edit.php | 68 + admin/backup/index.php | 120 + admin/backup/restore.php | 124 + admin/config_edit.php | 297 + admin/config_template.php | 139 + admin/course_categories.php | 91 + admin/courses.php | 208 + admin/create_category.php | 137 + admin/create_course.php | 47 + admin/create_user.php | 242 + admin/cron.php | 34 + admin/cron_config.php | 25 + admin/default_preferences.php | 141 + admin/delete_category.php | 67 + admin/delete_course.php | 52 + admin/edit_category.php | 146 + admin/edit_course.php | 48 + admin/edit_user.php | 260 + admin/enrollment/enroll_edit.php | 23 + admin/enrollment/index.php | 37 + admin/enrollment/privileges.php | 23 + admin/error_logging.php | 176 + admin/error_logging_bundle.php | 283 + admin/error_logging_details.php | 194 + admin/error_logging_reset.php | 49 + admin/error_logging_view.php | 73 + admin/fix_content.php | 56 + admin/forum_add.php | 112 + admin/forum_delete.php | 77 + admin/forum_edit.php | 167 + admin/forums.php | 109 + admin/index.php | 94 + admin/instructor_login.php | 59 + admin/instructor_requests.php | 129 + admin/language.php | 97 + admin/language_add.php | 96 + admin/language_delete.php | 57 + admin/language_edit.php | 122 + admin/language_editor.php | 166 + admin/language_import.php | 105 + admin/language_term.php | 102 + admin/language_translate.php | 72 + admin/master_list.php | 340 + admin/master_list_delete.php | 49 + admin/master_list_edit.php | 74 + admin/missing_language.php | 38 + admin/modules/add_new.php | 81 + admin/modules/create.php | 138 + admin/modules/default_mods.php | 256 + admin/modules/default_side.php | 100 + admin/modules/details.php | 186 + admin/modules/index.php | 201 + admin/modules/module.template.php | 24 + admin/password_user.php | 115 + admin/profile_picture.php | 20 + admin/rss_feeds/add_feed.php | 136 + admin/rss_feeds/delete_feed.php | 65 + admin/rss_feeds/edit_feed.php | 100 + admin/rss_feeds/index.php | 82 + admin/rss_feeds/preview.php | 58 + admin/themes/delete.php | 40 + admin/themes/import.php | 203 + admin/themes/index.php | 160 + admin/translate.php | 44 + admin/translate_atutor.php | 83 + admin/translator.php | 602 ++ admin/user_status.php | 63 + admin/users.php | 396 + assignments/add_assignment.php | 370 + assignments/delete_assignment.php | 58 + assignments/edit_assignment.php | 16 + assignments/index.php | 17 + assignments/index_instructor.php | 134 + blogs/add_post.php | 98 + blogs/delete_comment.php | 64 + blogs/delete_post.php | 67 + blogs/edit_post.php | 106 + blogs/index.php | 46 + blogs/post.php | 135 + blogs/view.php | 94 + bounce.php | 430 ++ browse.php | 21 + chat/MachineThatGoesBing.class | Bin 0 -> 2452 bytes chat/admin.settings.default | 10 + chat/atrc.gif | Bin 0 -> 2353 bytes chat/bing.php | 30 + chat/bings/.html | 37 + chat/bings/chime.au | Bin 0 -> 23846 bytes chat/bings/chime.wav | Bin 0 -> 47672 bytes chat/bings/taras.html | 39 + chat/bings/taras.php | 37 + chat/chat.php | 83 + chat/display.php | 130 + chat/filterHistory.php | 61 + chat/help.php | 76 + chat/history.php | 128 + chat/include/html/chat_footer.inc.php | 2 + chat/include/html/chat_header.inc.php | 16 + chat/include/html/login_footer.inc.php | 5 + chat/include/html/login_header.inc.php | 11 + chat/index.php | 130 + chat/logout.php | 57 + chat/options.php | 88 + chat/poster.php | 46 + chat/prefs.php | 89 + chat/prefs2.php | 79 + chat/view_transcript.php | 34 + confirm.php | 133 + contact_instructor.php | 142 + content.php | 169 + directory.php | 185 + documentation/add_note.php | 105 + documentation/admin/administrators.php | 23 + documentation/admin/backups.php | 20 + documentation/admin/categories.php | 6 + documentation/admin/configuration.php | 6 + documentation/admin/courses.php | 6 + documentation/admin/creating_courses.php | 17 + documentation/admin/creating_themes.php | 6 + documentation/admin/cron_setup.php | 32 + documentation/admin/default_preferences.php | 7 + documentation/admin/default_side_menu.php | 7 + documentation/admin/default_student_tools.php | 7 + documentation/admin/email_users.php | 6 + documentation/admin/en/index.php | 17 + documentation/admin/enrollment.php | 8 + documentation/admin/enrollment_privileges.php | 8 + documentation/admin/error_logging.php | 6 + documentation/admin/feeds.php | 6 + documentation/admin/forums.php | 6 + documentation/admin/fr/index.php | 22 + documentation/admin/google_key.php | 7 + documentation/admin/importing_themes.php | 8 + documentation/admin/index.php | 1 + documentation/admin/installation.php | 6 + documentation/admin/instructor_requests.php | 10 + documentation/admin/introduction.php | 6 + documentation/admin/languages.php | 58 + documentation/admin/link-out.gif | Bin 0 -> 52 bytes .../admin/managing_existing_themes.php | 28 + documentation/admin/master_student_list.php | 20 + documentation/admin/modules.php | 12 + documentation/admin/my_account.php | 6 + documentation/admin/new_installation.php | 46 + documentation/admin/pages.inc.php | 38 + .../admin/requirements_recommendations.php | 75 + documentation/admin/styles.css | 131 + documentation/admin/system_preferences.php | 78 + documentation/admin/themes.php | 8 + documentation/admin/troubleshooting.php | 30 + documentation/admin/upgrading.php | 48 + documentation/admin/users.php | 28 + documentation/approve_note.php | 59 + documentation/common/body_footer.inc.php | 86 + documentation/common/body_header.inc.php | 90 + documentation/common/folder.gif | Bin 0 -> 65 bytes documentation/common/fr/text.php | 9 + documentation/common/frame_header.php | 77 + documentation/common/frame_toc.php | 203 + documentation/common/link-out.gif | Bin 0 -> 52 bytes documentation/common/paper.gif | Bin 0 -> 65 bytes documentation/common/print.php | 41 + documentation/common/search.php | 83 + documentation/common/styles.css | 161 + documentation/common/text.php | 43 + documentation/common/vitals.inc.php | 167 + documentation/config.inc.php | 43 + documentation/delete_note.php | 63 + documentation/developer/database.gif | Bin 0 -> 195789 bytes documentation/developer/guidelines.html | 1573 ++++ documentation/developer/modules.html | 772 ++ documentation/developer/styles.css | 137 + documentation/general/browse_courses.php | 9 + documentation/general/create_course.php | 7 + documentation/general/en/index.php | 17 + documentation/general/export_content.php | 9 + documentation/general/file_storage.php | 28 + documentation/general/fr/index.php | 22 + documentation/general/inbox.php | 10 + documentation/general/index.php | 1 + documentation/general/inside_course.php | 9 + documentation/general/introduction.php | 7 + documentation/general/login.php | 7 + documentation/general/my_courses.php | 8 + documentation/general/my_start_page.php | 7 + documentation/general/packages.php | 7 + documentation/general/pages.inc.php | 20 + documentation/general/password_reminder.php | 7 + documentation/general/preferences.php | 30 + documentation/general/profile.php | 8 + documentation/general/register.php | 9 + documentation/general/tile.php | 9 + documentation/index.php | 106 + documentation/index/en/index.php | 17 + documentation/index/fr/index.php | 22 + documentation/index/index.php | 163 + documentation/index_list.php | 4 + documentation/instructor/accessibility.php | 30 + documentation/instructor/add_questions.php | 9 + documentation/instructor/announcements.php | 8 + documentation/instructor/assignments.php | 14 + .../instructor/authenticated_access.php | 6 + documentation/instructor/backups.php | 10 + documentation/instructor/chat.php | 8 + documentation/instructor/content.html | 140 + documentation/instructor/content.php | 8 + documentation/instructor/content_edit.php | 51 + documentation/instructor/content_packages.php | 24 + documentation/instructor/content_preview.php | 7 + .../instructor/content_properties.php | 21 + documentation/instructor/content_usage.php | 9 + documentation/instructor/course_email.php | 6 + documentation/instructor/creating_courses.php | 35 + .../instructor/creating_editing_content.php | 7 + .../instructor/creating_questions.php | 32 + .../instructor/creating_restoring.php | 8 + .../instructor/creating_tests_surveys.php | 44 + documentation/instructor/delete_course.php | 6 + .../instructor/downloading_uploading.php | 10 + .../instructor/edit_delete_tests.php | 9 + documentation/instructor/editing_deleting.php | 8 + documentation/instructor/en/index.php | 17 + documentation/instructor/enrollment.php | 8 + .../instructor/enrollment_alumni.php | 7 + .../instructor/enrollment_course_list.php | 20 + .../instructor/enrollment_privileges.php | 8 + .../instructor/extracting_zip_archives.php | 9 + documentation/instructor/faq.php | 8 + documentation/instructor/feeds.php | 6 + documentation/instructor/file_manager.php | 28 + documentation/instructor/forums.php | 19 + documentation/instructor/fr/index.php | 22 + documentation/instructor/glossary.php | 8 + documentation/instructor/glossary_terms.php | 8 + documentation/instructor/groups.php | 25 + documentation/instructor/index.php | 17 + documentation/instructor/introduction.php | 9 + documentation/instructor/links.php | 14 + .../instructor/managing_files_folders.php | 13 + documentation/instructor/managing_posts.php | 29 + documentation/instructor/managing_threads.php | 42 + documentation/instructor/pages.inc.php | 58 + documentation/instructor/polls.php | 6 + documentation/instructor/preview.php | 7 + documentation/instructor/properties.php | 41 + .../instructor/question_categories.php | 6 + .../instructor/question_database.php | 6 + documentation/instructor/reading_list.php | 12 + documentation/instructor/scorm_packages.php | 24 + documentation/instructor/side_menu.php | 6 + documentation/instructor/statistics.php | 6 + .../instructor/student_submissions.php | 10 + documentation/instructor/student_tools.php | 20 + documentation/instructor/test_statistics.php | 7 + documentation/instructor/tests_surveys.php | 6 + documentation/instructor/tile_repository.php | 8 + documentation/instructor/web_search.php | 8 + documentation/link-out.gif | Bin 0 -> 52 bytes documentation/styles.css | 137 + editor/add_content.php | 17 + editor/add_forum.php | 69 + editor/add_news.php | 143 + editor/delete_content.php | 62 + editor/delete_forum.php | 73 + editor/delete_news.php | 67 + editor/edit_content.php | 304 + editor/edit_forum.php | 94 + editor/edit_news.php | 154 + editor/edit_post.php | 146 + editor/index.php | 26 + editor/view_item.php | 22 + enroll.php | 163 + exestyles.css | 197 + export.php | 95 + faq/add_question.php | 106 + faq/add_topic.php | 61 + faq/delete_question.php | 61 + faq/delete_topic.php | 58 + faq/edit_question.php | 129 + faq/edit_topic.php | 86 + faq/icon.gif | Bin 0 -> 502 bytes faq/index.php | 52 + faq/index_instructor.php | 94 + favicon.ico | Bin 0 -> 3262 bytes file_storage/assignment.php | 151 + file_storage/comments.php | 194 + file_storage/delete_comment.php | 62 + file_storage/delete_revision.php | 91 + file_storage/edit.php | 221 + file_storage/edit_folder.php | 86 + file_storage/index.php | 679 ++ file_storage/move.php | 129 + file_storage/new.php | 159 + file_storage/revisions.php | 142 + forum/delete_thread.php | 131 + forum/index.php | 57 + forum/list.php | 94 + forum/lock_thread.php | 98 + forum/move_thread.php | 108 + forum/new_thread.php | 187 + forum/stick.php | 30 + forum/subscribe.php | 82 + forum/subscribe_forum.php | 52 + forum/view.php | 182 + get.php | 129 + get_acheck.php | 44 + get_profile_img.php | 77 + get_rss.php | 102 + glossary/index.php | 146 + google_search/admin/module_prefs.php | 63 + google_search/google.gif | Bin 0 -> 1446 bytes google_search/index.php | 92 + groups.php | 53 + headstuff.php | 124 + help/accessibility.php | 25 + help/contact_support.php | 130 + help/index.php | 42 + images/after.gif | Bin 0 -> 73 bytes images/archive.gif | Bin 0 -> 140 bytes images/arrow_ltr.gif | Bin 0 -> 88 bytes images/arrowicon.gif | Bin 0 -> 74 bytes images/at-logo.gif | Bin 0 -> 1627 bytes images/at-logo.v.3.gif | Bin 0 -> 1627 bytes images/before.gif | Bin 0 -> 71 bytes images/blue.gif | Bin 0 -> 802 bytes images/changes_bullet.gif | Bin 0 -> 211 bytes images/check.gif | Bin 0 -> 57 bytes images/checkbox_check.gif | Bin 0 -> 100 bytes images/checkbox_empty.gif | Bin 0 -> 861 bytes images/checkmark.gif | Bin 0 -> 285 bytes images/child_of.gif | Bin 0 -> 73 bytes images/clr.gif | Bin 0 -> 44 bytes images/content_pkg.gif | Bin 0 -> 1684 bytes images/courses/3dgraph.jpg | Bin 0 -> 1910 bytes images/courses/anotomy.jpg | Bin 0 -> 2008 bytes images/courses/art_supplies.jpg | Bin 0 -> 1969 bytes images/courses/astronaut.jpg | Bin 0 -> 1789 bytes images/courses/bar_graph.jpg | Bin 0 -> 1961 bytes images/courses/books.jpg | Bin 0 -> 1958 bytes images/courses/botany.jpg | Bin 0 -> 2048 bytes images/courses/brain2.jpg | Bin 0 -> 1544 bytes images/courses/business.jpg | Bin 0 -> 1428 bytes images/courses/business_service.jpg | Bin 0 -> 1477 bytes images/courses/caduceus.jpg | Bin 0 -> 1505 bytes images/courses/car_wireframe.jpg | Bin 0 -> 1235 bytes images/courses/cell-anatomy.jpg | Bin 0 -> 1667 bytes images/courses/chemistry.jpg | Bin 0 -> 1470 bytes images/courses/columbus.jpg | Bin 0 -> 1747 bytes images/courses/disabled_sign.gif | Bin 0 -> 870 bytes images/courses/drafting.jpg | Bin 0 -> 1729 bytes images/courses/engine.jpg | Bin 0 -> 1876 bytes images/courses/feather-pen.jpg | Bin 0 -> 1470 bytes images/courses/fire_helmut.jpg | Bin 0 -> 1274 bytes images/courses/fractal.jpg | Bin 0 -> 1496 bytes images/courses/head_wireframe.jpg | Bin 0 -> 1299 bytes images/courses/helix.jpg | Bin 0 -> 1297 bytes images/courses/helmet.jpg | Bin 0 -> 1722 bytes images/courses/light-bulb.jpg | Bin 0 -> 1556 bytes images/courses/map.jpg | Bin 0 -> 1064 bytes images/courses/microchip.jpg | Bin 0 -> 1611 bytes images/courses/microscope.jpg | Bin 0 -> 1778 bytes images/courses/molecule.jpg | Bin 0 -> 1708 bytes images/courses/nav_wheel.jpg | Bin 0 -> 1902 bytes images/courses/normal_surfaces.jpg | Bin 0 -> 1871 bytes images/courses/pedal.jpg | Bin 0 -> 1702 bytes images/courses/pharao.jpg | Bin 0 -> 1953 bytes images/courses/pharmacy.jpg | Bin 0 -> 1845 bytes images/courses/planet-earth.jpg | Bin 0 -> 1501 bytes images/courses/police_hat.jpg | Bin 0 -> 1337 bytes images/courses/recycling.jpg | Bin 0 -> 1874 bytes images/courses/skull.jpg | Bin 0 -> 2043 bytes images/courses/skull_wireframe.jpg | Bin 0 -> 1751 bytes images/courses/sl_logo.gif | Bin 0 -> 1504 bytes images/courses/snail.jpg | Bin 0 -> 1187 bytes images/courses/sphere.jpg | Bin 0 -> 1589 bytes images/courses/sphinx.jpg | Bin 0 -> 1994 bytes images/courses/toolbox.jpg | Bin 0 -> 1636 bytes images/courses/triangle.jpg | Bin 0 -> 1234 bytes images/courses/two_roads.jpg | Bin 0 -> 1461 bytes images/edit.gif | Bin 0 -> 231 bytes images/feedback.gif | Bin 0 -> 156 bytes images/file.gif | Bin 0 -> 117 bytes images/file_types/audio.gif | Bin 0 -> 1010 bytes images/file_types/binary.gif | Bin 0 -> 1016 bytes images/file_types/csv.gif | Bin 0 -> 1050 bytes images/file_types/doc.gif | Bin 0 -> 1028 bytes images/file_types/dvi.gif | Bin 0 -> 972 bytes images/file_types/generic.gif | Bin 0 -> 373 bytes images/file_types/image.gif | Bin 0 -> 1025 bytes images/file_types/mdb.gif | Bin 0 -> 1032 bytes images/file_types/mpp.gif | Bin 0 -> 1035 bytes images/file_types/ood.gif | Bin 0 -> 1048 bytes images/file_types/oop.gif | Bin 0 -> 1044 bytes images/file_types/oos.gif | Bin 0 -> 1041 bytes images/file_types/oot.gif | Bin 0 -> 1031 bytes images/file_types/pdf.gif | Bin 0 -> 1023 bytes images/file_types/ppt.gif | Bin 0 -> 1040 bytes images/file_types/ps.gif | Bin 0 -> 990 bytes images/file_types/psd.gif | Bin 0 -> 951 bytes images/file_types/qt.gif | Bin 0 -> 603 bytes images/file_types/rtf.gif | Bin 0 -> 975 bytes images/file_types/sql.gif | Bin 0 -> 328 bytes images/file_types/sql2.gif | Bin 0 -> 610 bytes images/file_types/src.gif | Bin 0 -> 995 bytes images/file_types/swf.gif | Bin 0 -> 1010 bytes images/file_types/treeview.gif | Bin 0 -> 1008 bytes images/file_types/txt.gif | Bin 0 -> 972 bytes images/file_types/video.gif | Bin 0 -> 1041 bytes images/file_types/viewlet.gif | Bin 0 -> 1052 bytes images/file_types/vsd.gif | Bin 0 -> 1020 bytes images/file_types/xls.gif | Bin 0 -> 1028 bytes images/file_types/xml.gif | Bin 0 -> 970 bytes images/file_types/zip.gif | Bin 0 -> 1005 bytes images/folder.gif | Bin 0 -> 601 bytes images/forum/19.gif | Bin 0 -> 456 bytes images/forum/27.gif | Bin 0 -> 702 bytes images/forum/3.gif | Bin 0 -> 112 bytes images/forum/30.gif | Bin 0 -> 379 bytes images/forum/51.gif | Bin 0 -> 880 bytes images/forum/52.gif | Bin 0 -> 879 bytes images/forum/54.gif | Bin 0 -> 158 bytes images/forum/55.gif | Bin 0 -> 542 bytes images/forum/56.gif | Bin 0 -> 341 bytes images/forum/57.gif | Bin 0 -> 303 bytes images/forum/58.gif | Bin 0 -> 400 bytes images/forum/frown.gif | Bin 0 -> 878 bytes images/forum/happy.gif | Bin 0 -> 880 bytes images/forum/index.html | 0 images/forum/move.gif | Bin 0 -> 267 bytes images/forum/ohwell.gif | Bin 0 -> 877 bytes images/forum/smile.gif | Bin 0 -> 877 bytes images/forum/sticky.gif | Bin 0 -> 385 bytes images/forum/tongue.gif | Bin 0 -> 881 bytes images/forum/topic_stick.gif | Bin 0 -> 442 bytes images/forum/wink.gif | Bin 0 -> 150 bytes images/glossary.gif | Bin 0 -> 214 bytes images/glossary_small.gif | Bin 0 -> 623 bytes images/graph.gif | Bin 0 -> 51 bytes images/grey.gif | Bin 0 -> 56 bytes images/help3.gif | Bin 0 -> 650 bytes images/help4.gif | Bin 0 -> 67 bytes images/home-acollab.gif | Bin 0 -> 1667 bytes images/home-blogs.gif | Bin 0 -> 1616 bytes images/home-chat.gif | Bin 0 -> 1084 bytes images/home-directory.gif | Bin 0 -> 954 bytes images/home-export_content.gif | Bin 0 -> 2451 bytes images/home-file_storage.gif | Bin 0 -> 682 bytes images/home-forums.gif | Bin 0 -> 1653 bytes images/home-glossary.gif | Bin 0 -> 2237 bytes images/home-links.gif | Bin 0 -> 2148 bytes images/home-polls.gif | Bin 0 -> 1095 bytes images/home-reading_list.gif | Bin 0 -> 1518 bytes images/home-site_map.gif | Bin 0 -> 1483 bytes images/home-tests.gif | Bin 0 -> 1938 bytes images/home-tile_search.gif | Bin 0 -> 1906 bytes images/home-tracker.gif | Bin 0 -> 642 bytes images/icon-zip.gif | Bin 0 -> 164 bytes images/icon_delete.gif | Bin 0 -> 279 bytes images/icon_minipost.gif | Bin 0 -> 122 bytes images/index.html | 1 + images/lock.gif | Bin 0 -> 266 bytes images/logo.gif | Bin 0 -> 1282 bytes images/move-down.gif | Bin 0 -> 70 bytes images/move-up.gif | Bin 0 -> 70 bytes images/new.gif | Bin 0 -> 591 bytes images/pen.gif | Bin 0 -> 84 bytes images/pen2.gif | Bin 0 -> 85 bytes images/pen3.gif | Bin 0 -> 146 bytes images/pub_default.jpg | Bin 0 -> 20193 bytes images/question.gif | Bin 0 -> 136 bytes images/red.gif | Bin 0 -> 802 bytes images/rtl_tree/index.html | 0 images/rtl_tree/tree_collapse.gif | Bin 0 -> 115 bytes images/rtl_tree/tree_end.gif | Bin 0 -> 107 bytes images/rtl_tree/tree_expand.gif | Bin 0 -> 117 bytes images/rtl_tree/tree_horizontal.gif | Bin 0 -> 105 bytes images/rtl_tree/tree_split.gif | Bin 0 -> 110 bytes images/rtl_tree/tree_vertline.gif | Bin 0 -> 108 bytes images/search.gif | Bin 0 -> 315 bytes images/star.gif | Bin 0 -> 319 bytes images/toc.gif | Bin 0 -> 860 bytes images/topic_lock.gif | Bin 0 -> 316 bytes images/transfer.gif | Bin 0 -> 468 bytes images/tree/index.html | 0 images/tree/tree_collapse.gif | Bin 0 -> 115 bytes images/tree/tree_disabled.gif | Bin 0 -> 116 bytes images/tree/tree_end.gif | Bin 0 -> 107 bytes images/tree/tree_expand.gif | Bin 0 -> 117 bytes images/tree/tree_horizontal.gif | Bin 0 -> 105 bytes images/tree/tree_space.gif | Bin 0 -> 88 bytes images/tree/tree_split.gif | Bin 0 -> 110 bytes images/tree/tree_vertline.gif | Bin 0 -> 108 bytes images/unlock.gif | Bin 0 -> 266 bytes images/x.gif | Bin 0 -> 344 bytes inbox/export.php | 111 + inbox/index.php | 177 + inbox/send_message.php | 238 + inbox/sent_messages.php | 178 + include/classes/Backup/Backup.class.php | 423 ++ include/classes/Backup/TableBackup.class.php | 1132 +++ include/classes/CSVExport.class.php | 78 + include/classes/CSVImport.class.php | 159 + include/classes/ContentManager.class.php | 923 +++ .../ErrorHandler/ErrorHandler.class.php | 530 ++ include/classes/FileManager.class.php | 544 ++ include/classes/Language/Language.class.php | 213 + .../classes/Language/LanguageEditor.class.php | 436 ++ .../Language/LanguageManager.class.php | 400 + .../classes/Language/LanguageParser.class.php | 115 + .../Language/LanguagesParser.class.php | 38 + .../Language/RemoteLanguageManager.class.php | 77 + include/classes/Message/Message.class.php | 462 ++ include/classes/Module/Module.class.php | 605 ++ include/classes/Module/ModuleParser.class.php | 131 + include/classes/Savant2/Savant2.php | 1793 +++++ include/classes/Savant2/Savant2/Compiler.php | 72 + include/classes/Savant2/Savant2/Error.php | 125 + include/classes/Savant2/Savant2/Filter.php | 76 + include/classes/Savant2/Savant2/Plugin.php | 74 + .../Savant2/Savant2_Error_exception.php | 53 + .../Savant2/Savant2/Savant2_Error_pear.php | 56 + .../Savant2/Savant2/Savant2_Error_stack.php | 60 + .../Savant2/Savant2/Savant2_Plugin_cycle.php | 97 + include/classes/Themes/ThemeParser.class.php | 84 + .../HTMLSax/XML_HTMLSax_Decorators.php | 306 + .../HTMLSax/XML_HTMLSax_States.php | 292 + include/classes/XML/XML_HTMLSax/OS/Guess.php | 343 + include/classes/XML/XML_HTMLSax/PEAR.php | 1095 +++ .../XML/XML_HTMLSax/PEAR/Autoloader.php | 223 + .../classes/XML/XML_HTMLSax/PEAR/Common.php | 1140 +++ .../classes/XML/XML_HTMLSax/PEAR/Config.php | 2054 +++++ .../classes/XML/XML_HTMLSax/PEAR/Remote.php | 519 ++ include/classes/XML/XML_HTMLSax/System.php | 580 ++ .../classes/XML/XML_HTMLSax/XML_HTMLSax.php | 671 ++ include/classes/cssparser.php | 238 + include/classes/feedcreator.class.php | 1545 ++++ include/classes/lastRSS.php | 226 + include/classes/nusoap.php | 5467 ++++++++++++++ include/classes/pclzip.lib.php | 5207 +++++++++++++ .../classes/phpmailer/atutormailer.class.php | 144 + include/classes/phpmailer/class.phpmailer.php | 1499 ++++ include/classes/phpmailer/class.smtp.php | 1045 +++ .../classes/phpmailer/phpmailer.lang-en.php | 23 + include/classes/sqlutility.class.php | 187 + include/classes/testQuestions.class.php | 820 ++ include/classes/vcard.php | 158 + include/classes/zipfile.class.php | 368 + include/footer.inc.php | 89 + include/header.inc.php | 227 + include/html/announcements.inc.php | 89 + include/html/browse.inc.php | 91 + include/html/code_picker.inc.php | 77 + include/html/copyright.inc.php | 35 + include/html/course_properties.inc.php | 501 ++ include/html/dropdowns/glossary.inc.php | 81 + include/html/dropdowns/menu_menu.inc.php | 35 + include/html/dropdowns/poll.inc.php | 101 + include/html/dropdowns/posts.inc.php | 46 + include/html/dropdowns/related_topics.inc.php | 41 + include/html/dropdowns/search.inc.php | 47 + include/html/dropdowns/users_online.inc.php | 45 + .../html/editor_tabs/accessibility.inc.php | 107 + .../editor_tabs/content_code_picker.inc.php | 63 + include/html/editor_tabs/edit.inc.php | 75 + include/html/editor_tabs/glossary.inc.php | 98 + include/html/editor_tabs/preview.inc.php | 30 + include/html/editor_tabs/properties.inc.php | 130 + include/html/enroll_edit.inc.php | 326 + include/html/enroll_tab_functions.inc.php | 132 + include/html/enrollment.inc.php | 410 + include/html/filemanager_display.inc.php | 384 + include/html/forum.inc.php | 200 + include/html/frameset/footer.inc.php | 2 + include/html/frameset/header.inc.php | 36 + include/html/languages.inc.php | 33 + include/html/new_thread.inc.php | 95 + include/html/privileges.inc.php | 160 + include/html/profile_picture.inc.php | 176 + include/html/release_date.inc.php | 72 + include/html/search.inc.php | 310 + include/html/tests_questions.inc.php | 120 + include/ims/adlcp_rootv1p2.xsd | 110 + include/ims/footer.html | 17 + include/ims/ims.css | 40 + include/ims/ims_template.inc.php | 372 + include/ims/ims_xml.xsd | 20 + include/ims/imscp_rootv1p1p2.xsd | 345 + include/ims/imsmd_rootv1p2p1.xsd | 573 ++ include/index.html | 1 + include/lib/admin_categories.inc.php | 148 + include/lib/chat.inc.php | 555 ++ include/lib/chat_defaults.inc.php | 169 + include/lib/constants.inc.php | 325 + include/lib/course.inc.php | 252 + include/lib/delete_course.inc.php | 71 + include/lib/editor_tab_functions.inc.php | 390 + include/lib/enroll.inc.php | 207 + include/lib/file_storage.inc.php | 563 ++ include/lib/filemanager.inc.php | 401 + include/lib/forums.inc.php | 282 + include/lib/html_resource_parser.inc.php | 98 + include/lib/likert_presets.inc.php | 29 + include/lib/links.inc.php | 229 + include/lib/menu_pages.php | 394 + include/lib/mime.inc.php | 171 + include/lib/output.inc.php | 845 +++ include/lib/search.inc.php | 190 + include/lib/test_result_functions.inc.php | 91 + include/lib/theme_template.inc.php | 15 + include/lib/themes.inc.php | 296 + include/lib/tinymce.inc.php | 60 + include/lib/tracker.inc.php | 274 + include/lib/tracker2.inc.php | 131 + include/lib/tracker_stats.inc.php | 487 ++ include/lib/tracker_stats2.inc.php | 87 + include/phpCache/ChangeLog | 30 + include/phpCache/LICENSE | 227 + include/phpCache/README | 33 + include/phpCache/gc.php | 27 + include/phpCache/phpCache.inc.php | 532 ++ include/side_menu.inc.php | 46 + include/style_popup.css | 172 + include/vitals.inc.php | 910 +++ index.php | 94 + install/db/atutor_language_text.sql | 1683 +++++ install/db/atutor_schema.sql | 921 +++ install/db/atutor_upgrade_1.0_to_1.1.sql | 182 + install/db/atutor_upgrade_1.1_to_1.2.sql | 139 + install/db/atutor_upgrade_1.2_to_1.3.sql | 86 + install/db/atutor_upgrade_1.3.2_to_1.4.sql | 44 + install/db/atutor_upgrade_1.3_to_1.3.2.sql | 12 + install/db/atutor_upgrade_1.4.1_to_1.4.2.sql | 11 + install/db/atutor_upgrade_1.4.2_to_1.4.3.sql | 156 + install/db/atutor_upgrade_1.4.3_to_1.5.sql | 80 + install/db/atutor_upgrade_1.4_to_1.4.1.sql | 45 + install/db/atutor_upgrade_1.5.1_to_1.5.2.sql | 91 + install/db/atutor_upgrade_1.5.2_to_1.5.3.sql | 214 + .../db/atutor_upgrade_1.5.3.1_to_1.5.3.2.sql | 5 + .../db/atutor_upgrade_1.5.3.2_to_1.5.3.3.sql | 27 + .../db/atutor_upgrade_1.5.3.3_to_1.5.4.sql | 56 + .../db/atutor_upgrade_1.5.3_to_1.5.3.1.sql | 5 + install/db/atutor_upgrade_1.5_to_1.5.1.sql | 17 + install/images/bad.gif | Bin 0 -> 174 bytes install/images/feedback.gif | Bin 0 -> 543 bytes install/images/question.gif | Bin 0 -> 136 bytes install/include/classes/sqlutility.php | 155 + install/include/common.inc.php | 244 + install/include/config_template.php | 132 + install/include/footer.php | 18 + install/include/header.php | 46 + install/include/step1.php | 40 + install/include/step2.php | 129 + install/include/step3.php | 256 + install/include/step4.php | 127 + install/include/step5.php | 236 + install/include/step6.php | 112 + install/include/step7.php | 147 + install/include/step8.php | 34 + install/include/upgrade_header.php | 53 + install/include/ustep1.php | 269 + install/include/ustep2.php | 150 + install/include/ustep3.php | 241 + install/include/ustep4.php | 84 + install/include/ustep5.php | 103 + install/include/ustep6.php | 31 + install/index.php | 300 + install/install.php | 74 + install/not_installed.php | 31 + install/stylesheet.css | 495 ++ install/update_config.php | 58 + install/upgrade.php | 77 + jscripts/help.js | 25 + jscripts/interface.js | 8 + jscripts/jquery.js | 1 + jscripts/tiny_mce/blank.htm | 9 + jscripts/tiny_mce/langs/ar.js | 43 + jscripts/tiny_mce/langs/ca.js | 41 + jscripts/tiny_mce/langs/cs.js | 52 + jscripts/tiny_mce/langs/cy.js | 41 + jscripts/tiny_mce/langs/da.js | 41 + jscripts/tiny_mce/langs/de.js | 41 + jscripts/tiny_mce/langs/el.js | 41 + jscripts/tiny_mce/langs/en.js | 41 + jscripts/tiny_mce/langs/es.js | 50 + jscripts/tiny_mce/langs/fa.js | 46 + jscripts/tiny_mce/langs/fi.js | 42 + jscripts/tiny_mce/langs/fr.js | 43 + jscripts/tiny_mce/langs/fr_ca.js | 40 + jscripts/tiny_mce/langs/he.js | 41 + jscripts/tiny_mce/langs/hu.js | 41 + jscripts/tiny_mce/langs/is.js | 41 + jscripts/tiny_mce/langs/it.js | 41 + jscripts/tiny_mce/langs/ja.js | 41 + jscripts/tiny_mce/langs/ko.js | 40 + jscripts/tiny_mce/langs/nb.js | 41 + jscripts/tiny_mce/langs/nl.js | 42 + jscripts/tiny_mce/langs/nn.js | 41 + jscripts/tiny_mce/langs/pl.js | 44 + jscripts/tiny_mce/langs/pt.js | 42 + jscripts/tiny_mce/langs/pt_br.js | 50 + jscripts/tiny_mce/langs/readme.txt | 7 + jscripts/tiny_mce/langs/ru.js | 43 + jscripts/tiny_mce/langs/ru_KOI8-R.js | 43 + jscripts/tiny_mce/langs/ru_UTF-8.js | 43 + jscripts/tiny_mce/langs/sk.js | 50 + jscripts/tiny_mce/langs/sv.js | 43 + jscripts/tiny_mce/langs/th.js | 40 + jscripts/tiny_mce/langs/zh_cn.js | 41 + jscripts/tiny_mce/langs/zh_tw.js | 42 + jscripts/tiny_mce/langs/zh_tw_utf8.js | 42 + jscripts/tiny_mce/license.txt | 437 ++ .../plugins/_template/editor_plugin.js | 1 + .../plugins/_template/editor_plugin_src.js | 238 + .../plugins/_template/images/template.gif | Bin 0 -> 87 bytes .../tiny_mce/plugins/_template/langs/da.js | 8 + .../tiny_mce/plugins/_template/langs/de.js | 9 + .../tiny_mce/plugins/_template/langs/en.js | 8 + .../tiny_mce/plugins/_template/langs/es.js | 14 + .../tiny_mce/plugins/_template/langs/fr.js | 9 + .../tiny_mce/plugins/_template/langs/fr_ca.js | 8 + .../tiny_mce/plugins/_template/langs/he.js | 8 + .../tiny_mce/plugins/_template/langs/hu.js | 8 + .../tiny_mce/plugins/_template/langs/is.js | 8 + .../tiny_mce/plugins/_template/langs/nb.js | 8 + .../tiny_mce/plugins/_template/langs/nl.js | 8 + .../tiny_mce/plugins/_template/langs/nn.js | 8 + .../tiny_mce/plugins/_template/langs/pl.js | 8 + .../tiny_mce/plugins/_template/langs/pt_br.js | 13 + .../tiny_mce/plugins/_template/langs/ru.js | 8 + .../plugins/_template/langs/ru_KOI8-R.js | 8 + .../plugins/_template/langs/ru_UTF-8.js | 8 + .../tiny_mce/plugins/_template/langs/zh_cn.js | 8 + .../tiny_mce/plugins/_template/langs/zh_tw.js | 7 + .../plugins/_template/langs/zh_tw_utf8.js | 7 + jscripts/tiny_mce/plugins/_template/popup.htm | 48 + .../tiny_mce/plugins/_template/readme.txt | 1 + .../tiny_mce/plugins/acheck/editor_plugin.js | 191 + .../tiny_mce/plugins/acheck/images/acheck.gif | Bin 0 -> 1087 bytes jscripts/tiny_mce/plugins/acheck/langs/en.js | 8 + jscripts/tiny_mce/plugins/advhr/css/advhr.css | 23 + .../tiny_mce/plugins/advhr/editor_plugin.js | 1 + .../plugins/advhr/editor_plugin_src.js | 92 + .../tiny_mce/plugins/advhr/images/advhr.gif | Bin 0 -> 153 bytes .../tiny_mce/plugins/advhr/jscripts/rule.js | 41 + jscripts/tiny_mce/plugins/advhr/langs/cs.js | 14 + jscripts/tiny_mce/plugins/advhr/langs/cy.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/da.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/de.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/en.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/es.js | 10 + jscripts/tiny_mce/plugins/advhr/langs/fa.js | 13 + jscripts/tiny_mce/plugins/advhr/langs/fi.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/fr.js | 9 + .../tiny_mce/plugins/advhr/langs/fr_ca.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/he.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/hu.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/is.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/nb.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/nl.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/nn.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/pl.js | 11 + .../tiny_mce/plugins/advhr/langs/pt_br.js | 16 + jscripts/tiny_mce/plugins/advhr/langs/ru.js | 8 + .../tiny_mce/plugins/advhr/langs/ru_KOI8-R.js | 8 + .../tiny_mce/plugins/advhr/langs/ru_UTF-8.js | 8 + jscripts/tiny_mce/plugins/advhr/langs/sk.js | 16 + jscripts/tiny_mce/plugins/advhr/langs/sv.js | 8 + .../tiny_mce/plugins/advhr/langs/zh_cn.js | 8 + .../tiny_mce/plugins/advhr/langs/zh_tw.js | 10 + .../plugins/advhr/langs/zh_tw_utf8.js | 10 + jscripts/tiny_mce/plugins/advhr/readme.txt | 1 + jscripts/tiny_mce/plugins/advhr/rule.htm | 61 + .../plugins/advimage/css/advimage.css | 66 + .../plugins/advimage/editor_plugin.js | 1 + .../plugins/advimage/editor_plugin_src.js | 150 + jscripts/tiny_mce/plugins/advimage/image.htm | 240 + .../plugins/advimage/images/sample.gif | Bin 0 -> 1624 bytes .../plugins/advimage/jscripts/functions.js | 545 ++ .../tiny_mce/plugins/advimage/langs/cs.js | 8 + .../tiny_mce/plugins/advimage/langs/cy.js | 27 + .../tiny_mce/plugins/advimage/langs/da.js | 26 + .../tiny_mce/plugins/advimage/langs/de.js | 27 + .../tiny_mce/plugins/advimage/langs/en.js | 27 + .../tiny_mce/plugins/advimage/langs/es.js | 35 + .../tiny_mce/plugins/advimage/langs/fa.js | 13 + .../tiny_mce/plugins/advimage/langs/fa_ca.js | 8 + .../tiny_mce/plugins/advimage/langs/fr.js | 47 + .../tiny_mce/plugins/advimage/langs/fr_ca.js | 8 + .../tiny_mce/plugins/advimage/langs/he.js | 27 + .../tiny_mce/plugins/advimage/langs/hu.js | 27 + .../tiny_mce/plugins/advimage/langs/is.js | 27 + .../tiny_mce/plugins/advimage/langs/ko.js | 8 + .../tiny_mce/plugins/advimage/langs/nb.js | 27 + .../tiny_mce/plugins/advimage/langs/nl.js | 27 + .../tiny_mce/plugins/advimage/langs/nn.js | 27 + .../tiny_mce/plugins/advimage/langs/pl.js | 28 + .../tiny_mce/plugins/advimage/langs/pt_br.js | 35 + .../tiny_mce/plugins/advimage/langs/ru.js | 26 + .../plugins/advimage/langs/ru_KOI8-R.js | 26 + .../plugins/advimage/langs/ru_UTF-8.js | 26 + .../tiny_mce/plugins/advimage/langs/sk.js | 16 + .../tiny_mce/plugins/advimage/langs/sv.js | 27 + .../tiny_mce/plugins/advimage/langs/zh_cn.js | 27 + .../tiny_mce/plugins/advimage/langs/zh_tw.js | 29 + .../plugins/advimage/langs/zh_tw_utf8.js | 29 + jscripts/tiny_mce/plugins/advimage/readme.txt | 1 + .../tiny_mce/plugins/advlink/css/advlink.css | 35 + .../tiny_mce/plugins/advlink/editor_plugin.js | 1 + .../plugins/advlink/editor_plugin_src.js | 90 + .../plugins/advlink/jscripts/functions.js | 568 ++ jscripts/tiny_mce/plugins/advlink/langs/cs.js | 28 + jscripts/tiny_mce/plugins/advlink/langs/cy.js | 46 + jscripts/tiny_mce/plugins/advlink/langs/da.js | 46 + jscripts/tiny_mce/plugins/advlink/langs/de.js | 47 + jscripts/tiny_mce/plugins/advlink/langs/en.js | 46 + jscripts/tiny_mce/plugins/advlink/langs/es.js | 54 + jscripts/tiny_mce/plugins/advlink/langs/fa.js | 27 + jscripts/tiny_mce/plugins/advlink/langs/fr.js | 22 + .../tiny_mce/plugins/advlink/langs/fr_ca.js | 22 + jscripts/tiny_mce/plugins/advlink/langs/he.js | 46 + jscripts/tiny_mce/plugins/advlink/langs/hu.js | 46 + jscripts/tiny_mce/plugins/advlink/langs/is.js | 46 + jscripts/tiny_mce/plugins/advlink/langs/ko.js | 21 + jscripts/tiny_mce/plugins/advlink/langs/nb.js | 46 + jscripts/tiny_mce/plugins/advlink/langs/nl.js | 46 + jscripts/tiny_mce/plugins/advlink/langs/nn.js | 46 + jscripts/tiny_mce/plugins/advlink/langs/pl.js | 49 + .../tiny_mce/plugins/advlink/langs/pt_br.js | 54 + jscripts/tiny_mce/plugins/advlink/langs/ru.js | 47 + .../plugins/advlink/langs/ru_KOI8-R.js | 46 + .../plugins/advlink/langs/ru_UTF-8.js | 46 + jscripts/tiny_mce/plugins/advlink/langs/sk.js | 30 + jscripts/tiny_mce/plugins/advlink/langs/sv.js | 46 + .../tiny_mce/plugins/advlink/langs/zh_cn.js | 46 + .../tiny_mce/plugins/advlink/langs/zh_tw.js | 47 + .../plugins/advlink/langs/zh_tw_utf8.js | 47 + jscripts/tiny_mce/plugins/advlink/link.htm | 334 + jscripts/tiny_mce/plugins/advlink/readme.txt | 1 + .../plugins/autosave/editor_plugin.js | 1 + .../plugins/autosave/editor_plugin_src.js | 48 + .../tiny_mce/plugins/autosave/langs/cs.js | 11 + .../tiny_mce/plugins/autosave/langs/cy.js | 5 + .../tiny_mce/plugins/autosave/langs/da.js | 5 + .../tiny_mce/plugins/autosave/langs/de.js | 5 + .../tiny_mce/plugins/autosave/langs/en.js | 5 + .../tiny_mce/plugins/autosave/langs/es.js | 13 + .../tiny_mce/plugins/autosave/langs/fr.js | 5 + .../tiny_mce/plugins/autosave/langs/he.js | 5 + .../tiny_mce/plugins/autosave/langs/hu.js | 5 + .../tiny_mce/plugins/autosave/langs/is.js | 5 + .../tiny_mce/plugins/autosave/langs/nb.js | 6 + .../tiny_mce/plugins/autosave/langs/nl.js | 5 + .../tiny_mce/plugins/autosave/langs/nn.js | 6 + .../tiny_mce/plugins/autosave/langs/pl.js | 8 + .../tiny_mce/plugins/autosave/langs/pt_br.js | 12 + .../tiny_mce/plugins/autosave/langs/ru.js | 5 + .../plugins/autosave/langs/ru_KOI8-R.js | 5 + .../plugins/autosave/langs/ru_UTF-8.js | 5 + .../tiny_mce/plugins/autosave/langs/sk.js | 13 + .../tiny_mce/plugins/autosave/langs/sv.js | 6 + .../tiny_mce/plugins/autosave/langs/zh_cn.js | 5 + .../tiny_mce/plugins/autosave/langs/zh_tw.js | 6 + .../plugins/autosave/langs/zh_tw_utf8.js | 6 + jscripts/tiny_mce/plugins/autosave/readme.txt | 1 + .../tiny_mce/plugins/cleanup/editor_plugin.js | 0 .../plugins/cleanup/editor_plugin_src.js | 12 + jscripts/tiny_mce/plugins/cleanup/readme.txt | 1 + .../plugins/contextmenu/css/contextmenu.css | 74 + .../plugins/contextmenu/editor_plugin.js | 1 + .../plugins/contextmenu/editor_plugin_src.js | 356 + .../plugins/contextmenu/images/spacer.gif | Bin 0 -> 43 bytes .../tiny_mce/plugins/contextmenu/readme.txt | 1 + .../plugins/directionality/editor_plugin.js | 1 + .../directionality/editor_plugin_src.js | 92 + .../plugins/directionality/images/ltr.gif | Bin 0 -> 155 bytes .../plugins/directionality/images/rtl.gif | Bin 0 -> 153 bytes .../plugins/directionality/langs/cs.js | 12 + .../plugins/directionality/langs/cy.js | 6 + .../plugins/directionality/langs/da.js | 6 + .../plugins/directionality/langs/de.js | 6 + .../plugins/directionality/langs/en.js | 6 + .../plugins/directionality/langs/es.js | 14 + .../plugins/directionality/langs/fr.js | 6 + .../plugins/directionality/langs/fr_ca.js | 6 + .../plugins/directionality/langs/he.js | 6 + .../plugins/directionality/langs/hu.js | 6 + .../plugins/directionality/langs/is.js | 6 + .../plugins/directionality/langs/nb.js | 6 + .../plugins/directionality/langs/nl.js | 6 + .../plugins/directionality/langs/nn.js | 6 + .../plugins/directionality/langs/pl.js | 8 + .../plugins/directionality/langs/pt_br.js | 13 + .../plugins/directionality/langs/ru.js | 6 + .../plugins/directionality/langs/ru_KOI8-R.js | 6 + .../plugins/directionality/langs/ru_UTF-8.js | 6 + .../plugins/directionality/langs/sk.js | 14 + .../plugins/directionality/langs/sv.js | 6 + .../plugins/directionality/langs/zh_cn.js | 6 + .../plugins/directionality/langs/zh_tw.js | 7 + .../directionality/langs/zh_tw_utf8.js | 7 + .../plugins/directionality/readme.txt | 1 + .../plugins/emotions/editor_plugin.js | 1 + .../plugins/emotions/editor_plugin_src.js | 65 + .../tiny_mce/plugins/emotions/emotions.htm | 40 + .../plugins/emotions/images/emotions.gif | Bin 0 -> 319 bytes .../plugins/emotions/images/readme.txt | 2 + .../plugins/emotions/images/smiley-cool.gif | Bin 0 -> 354 bytes .../plugins/emotions/images/smiley-cry.gif | Bin 0 -> 329 bytes .../emotions/images/smiley-embarassed.gif | Bin 0 -> 331 bytes .../emotions/images/smiley-foot-in-mouth.gif | Bin 0 -> 344 bytes .../plugins/emotions/images/smiley-frown.gif | Bin 0 -> 340 bytes .../emotions/images/smiley-innocent.gif | Bin 0 -> 336 bytes .../plugins/emotions/images/smiley-kiss.gif | Bin 0 -> 338 bytes .../emotions/images/smiley-laughing.gif | Bin 0 -> 344 bytes .../emotions/images/smiley-money-mouth.gif | Bin 0 -> 321 bytes .../plugins/emotions/images/smiley-sealed.gif | Bin 0 -> 325 bytes .../plugins/emotions/images/smiley-smile.gif | Bin 0 -> 345 bytes .../emotions/images/smiley-surprised.gif | Bin 0 -> 342 bytes .../emotions/images/smiley-tongue-out.gif | Bin 0 -> 328 bytes .../emotions/images/smiley-undecided.gif | Bin 0 -> 337 bytes .../plugins/emotions/images/smiley-wink.gif | Bin 0 -> 351 bytes .../plugins/emotions/images/smiley-yell.gif | Bin 0 -> 336 bytes .../plugins/emotions/jscripts/functions.js | 21 + .../tiny_mce/plugins/emotions/langs/cs.js | 12 + .../tiny_mce/plugins/emotions/langs/cy.js | 22 + .../tiny_mce/plugins/emotions/langs/da.js | 22 + .../tiny_mce/plugins/emotions/langs/de.js | 22 + .../tiny_mce/plugins/emotions/langs/el.js | 6 + .../tiny_mce/plugins/emotions/langs/en.js | 22 + .../tiny_mce/plugins/emotions/langs/es.js | 30 + .../tiny_mce/plugins/emotions/langs/fa.js | 11 + .../tiny_mce/plugins/emotions/langs/fr.js | 22 + .../tiny_mce/plugins/emotions/langs/fr_ca.js | 6 + .../tiny_mce/plugins/emotions/langs/he.js | 22 + .../tiny_mce/plugins/emotions/langs/hu.js | 22 + .../tiny_mce/plugins/emotions/langs/is.js | 22 + .../tiny_mce/plugins/emotions/langs/it.js | 6 + .../tiny_mce/plugins/emotions/langs/ko.js | 6 + .../tiny_mce/plugins/emotions/langs/nb.js | 22 + .../tiny_mce/plugins/emotions/langs/nl.js | 22 + .../tiny_mce/plugins/emotions/langs/nn.js | 22 + .../tiny_mce/plugins/emotions/langs/pl.js | 25 + .../tiny_mce/plugins/emotions/langs/pt_br.js | 29 + .../tiny_mce/plugins/emotions/langs/ru.js | 22 + .../plugins/emotions/langs/ru_KOI8-R.js | 22 + .../plugins/emotions/langs/ru_UTF-8.js | 22 + .../tiny_mce/plugins/emotions/langs/sk.js | 14 + .../tiny_mce/plugins/emotions/langs/sv.js | 22 + .../tiny_mce/plugins/emotions/langs/zh_cn.js | 22 + .../tiny_mce/plugins/emotions/langs/zh_tw.js | 23 + .../plugins/emotions/langs/zh_tw_utf8.js | 23 + jscripts/tiny_mce/plugins/emotions/readme.txt | 1 + .../tiny_mce/plugins/flash/css/content.css | 7 + jscripts/tiny_mce/plugins/flash/css/flash.css | 11 + .../tiny_mce/plugins/flash/editor_plugin.js | 1 + .../plugins/flash/editor_plugin_src.js | 287 + jscripts/tiny_mce/plugins/flash/flash.htm | 70 + .../tiny_mce/plugins/flash/images/flash.gif | Bin 0 -> 241 bytes .../tiny_mce/plugins/flash/jscripts/flash.js | 107 + jscripts/tiny_mce/plugins/flash/langs/cs.js | 14 + jscripts/tiny_mce/plugins/flash/langs/cy.js | 11 + jscripts/tiny_mce/plugins/flash/langs/da.js | 11 + jscripts/tiny_mce/plugins/flash/langs/de.js | 11 + jscripts/tiny_mce/plugins/flash/langs/en.js | 11 + jscripts/tiny_mce/plugins/flash/langs/es.js | 19 + jscripts/tiny_mce/plugins/flash/langs/fa.js | 13 + jscripts/tiny_mce/plugins/flash/langs/fr.js | 11 + .../tiny_mce/plugins/flash/langs/fr_ca.js | 9 + jscripts/tiny_mce/plugins/flash/langs/he.js | 11 + jscripts/tiny_mce/plugins/flash/langs/hu.js | 11 + jscripts/tiny_mce/plugins/flash/langs/is.js | 11 + jscripts/tiny_mce/plugins/flash/langs/nb.js | 11 + jscripts/tiny_mce/plugins/flash/langs/nl.js | 11 + jscripts/tiny_mce/plugins/flash/langs/nn.js | 11 + jscripts/tiny_mce/plugins/flash/langs/pl.js | 14 + .../tiny_mce/plugins/flash/langs/pt_br.js | 19 + jscripts/tiny_mce/plugins/flash/langs/ru.js | 11 + .../tiny_mce/plugins/flash/langs/ru_KOI8-R.js | 11 + .../tiny_mce/plugins/flash/langs/ru_UTF-8.js | 11 + jscripts/tiny_mce/plugins/flash/langs/sk.js | 16 + jscripts/tiny_mce/plugins/flash/langs/sv.js | 11 + .../tiny_mce/plugins/flash/langs/zh_cn.js | 11 + .../tiny_mce/plugins/flash/langs/zh_tw.js | 12 + .../plugins/flash/langs/zh_tw_utf8.js | 12 + jscripts/tiny_mce/plugins/flash/readme.txt | 1 + jscripts/tiny_mce/plugins/fullpage/blank.htm | 9 + .../plugins/fullpage/css/fullpage.css | 172 + .../plugins/fullpage/editor_plugin.js | 1 + .../plugins/fullpage/editor_plugin_src.js | 229 + .../tiny_mce/plugins/fullpage/fullpage.htm | 577 ++ .../tiny_mce/plugins/fullpage/images/add.gif | Bin 0 -> 893 bytes .../plugins/fullpage/images/fullpage.gif | Bin 0 -> 632 bytes .../plugins/fullpage/images/move_down.gif | Bin 0 -> 194 bytes .../plugins/fullpage/images/move_up.gif | Bin 0 -> 200 bytes .../plugins/fullpage/images/remove.gif | Bin 0 -> 180 bytes .../plugins/fullpage/jscripts/fullpage.js | 580 ++ .../tiny_mce/plugins/fullpage/langs/en.js | 92 + .../plugins/fullscreen/editor_plugin.js | 1 + .../plugins/fullscreen/editor_plugin_src.js | 63 + .../plugins/fullscreen/fullscreen.htm | 91 + .../plugins/fullscreen/images/fullscreen.gif | Bin 0 -> 198 bytes .../tiny_mce/plugins/fullscreen/langs/cs.js | 12 + .../tiny_mce/plugins/fullscreen/langs/cy.js | 6 + .../tiny_mce/plugins/fullscreen/langs/da.js | 6 + .../tiny_mce/plugins/fullscreen/langs/de.js | 6 + .../tiny_mce/plugins/fullscreen/langs/en.js | 6 + .../tiny_mce/plugins/fullscreen/langs/es.js | 8 + .../tiny_mce/plugins/fullscreen/langs/fr.js | 6 + .../plugins/fullscreen/langs/fr_ca.js | 6 + .../tiny_mce/plugins/fullscreen/langs/he.js | 6 + .../tiny_mce/plugins/fullscreen/langs/hu.js | 6 + .../tiny_mce/plugins/fullscreen/langs/is.js | 6 + .../tiny_mce/plugins/fullscreen/langs/nb.js | 6 + .../tiny_mce/plugins/fullscreen/langs/nl.js | 6 + .../tiny_mce/plugins/fullscreen/langs/nn.js | 6 + .../tiny_mce/plugins/fullscreen/langs/pl.js | 9 + .../plugins/fullscreen/langs/pt_br.js | 14 + .../tiny_mce/plugins/fullscreen/langs/ru.js | 6 + .../plugins/fullscreen/langs/ru_KOI8-R.js | 6 + .../plugins/fullscreen/langs/ru_UTF-8.js | 6 + .../tiny_mce/plugins/fullscreen/langs/sk.js | 14 + .../tiny_mce/plugins/fullscreen/langs/sv.js | 6 + .../plugins/fullscreen/langs/zh_cn.js | 6 + .../plugins/fullscreen/langs/zh_tw.js | 7 + .../plugins/fullscreen/langs/zh_tw_utf8.js | 7 + .../tiny_mce/plugins/fullscreen/readme.txt | 1 + .../tiny_mce/plugins/iespell/editor_plugin.js | 1 + .../plugins/iespell/editor_plugin_src.js | 60 + .../plugins/iespell/images/iespell.gif | Bin 0 -> 124 bytes jscripts/tiny_mce/plugins/iespell/langs/cs.js | 12 + jscripts/tiny_mce/plugins/iespell/langs/cy.js | 7 + jscripts/tiny_mce/plugins/iespell/langs/da.js | 7 + jscripts/tiny_mce/plugins/iespell/langs/de.js | 7 + jscripts/tiny_mce/plugins/iespell/langs/el.js | 7 + jscripts/tiny_mce/plugins/iespell/langs/en.js | 7 + jscripts/tiny_mce/plugins/iespell/langs/es.js | 15 + jscripts/tiny_mce/plugins/iespell/langs/fr.js | 7 + .../tiny_mce/plugins/iespell/langs/fr_ca.js | 6 + jscripts/tiny_mce/plugins/iespell/langs/he.js | 6 + jscripts/tiny_mce/plugins/iespell/langs/hu.js | 7 + jscripts/tiny_mce/plugins/iespell/langs/is.js | 7 + jscripts/tiny_mce/plugins/iespell/langs/it.js | 7 + jscripts/tiny_mce/plugins/iespell/langs/ko.js | 7 + jscripts/tiny_mce/plugins/iespell/langs/nb.js | 6 + jscripts/tiny_mce/plugins/iespell/langs/nl.js | 6 + jscripts/tiny_mce/plugins/iespell/langs/nn.js | 6 + jscripts/tiny_mce/plugins/iespell/langs/pl.js | 8 + .../tiny_mce/plugins/iespell/langs/pt_br.js | 14 + jscripts/tiny_mce/plugins/iespell/langs/ru.js | 7 + .../plugins/iespell/langs/ru_KOI8-R.js | 7 + .../plugins/iespell/langs/ru_UTF-8.js | 7 + jscripts/tiny_mce/plugins/iespell/langs/sk.js | 14 + jscripts/tiny_mce/plugins/iespell/langs/sv.js | 6 + .../tiny_mce/plugins/iespell/langs/zh_cn.js | 6 + .../tiny_mce/plugins/iespell/langs/zh_tw.js | 7 + .../plugins/iespell/langs/zh_tw_utf8.js | 8 + jscripts/tiny_mce/plugins/iespell/readme.txt | 1 + .../plugins/inlinepopups/css/inlinepopup.css | 69 + .../plugins/inlinepopups/editor_plugin.js | 1 + .../plugins/inlinepopups/editor_plugin_src.js | 662 ++ .../plugins/inlinepopups/images/spacer.gif | Bin 0 -> 43 bytes .../inlinepopups/images/window_close.gif | Bin 0 -> 110 bytes .../inlinepopups/images/window_maximize.gif | Bin 0 -> 111 bytes .../inlinepopups/images/window_minimize.gif | Bin 0 -> 112 bytes .../inlinepopups/images/window_resize.gif | Bin 0 -> 74 bytes .../inlinepopups/jscripts/mcwindows.js | 455 ++ .../tiny_mce/plugins/inlinepopups/readme.txt | 0 .../plugins/insertdatetime/editor_plugin.js | 1 + .../insertdatetime/editor_plugin_src.js | 93 + .../insertdatetime/images/insertdate.gif | Bin 0 -> 287 bytes .../insertdatetime/images/inserttime.gif | Bin 0 -> 239 bytes .../plugins/insertdatetime/langs/cs.js | 18 + .../plugins/insertdatetime/langs/cy.js | 12 + .../plugins/insertdatetime/langs/da.js | 12 + .../plugins/insertdatetime/langs/de.js | 12 + .../plugins/insertdatetime/langs/el.js | 12 + .../plugins/insertdatetime/langs/en.js | 12 + .../plugins/insertdatetime/langs/es.js | 20 + .../plugins/insertdatetime/langs/fa.js | 13 + .../plugins/insertdatetime/langs/fi.js | 12 + .../plugins/insertdatetime/langs/fr.js | 12 + .../plugins/insertdatetime/langs/fr_ca.js | 10 + .../plugins/insertdatetime/langs/he.js | 12 + .../plugins/insertdatetime/langs/hu.js | 12 + .../plugins/insertdatetime/langs/is.js | 12 + .../plugins/insertdatetime/langs/it.js | 12 + .../plugins/insertdatetime/langs/ko.js | 12 + .../plugins/insertdatetime/langs/nb.js | 12 + .../plugins/insertdatetime/langs/nl.js | 12 + .../plugins/insertdatetime/langs/nn.js | 12 + .../plugins/insertdatetime/langs/pl.js | 15 + .../plugins/insertdatetime/langs/pt_br.js | 20 + .../plugins/insertdatetime/langs/ru.js | 12 + .../plugins/insertdatetime/langs/ru_KOI8-R.js | 12 + .../plugins/insertdatetime/langs/ru_UTF-8.js | 12 + .../plugins/insertdatetime/langs/sk.js | 20 + .../plugins/insertdatetime/langs/sv.js | 12 + .../plugins/insertdatetime/langs/zh_cn.js | 12 + .../plugins/insertdatetime/langs/zh_tw.js | 13 + .../insertdatetime/langs/zh_tw_utf8.js | 13 + .../plugins/insertdatetime/readme.txt | 1 + .../tiny_mce/plugins/layer/editor_plugin.js | 1 + .../plugins/layer/editor_plugin_src.js | 252 + .../plugins/layer/images/absolute.gif | Bin 0 -> 209 bytes .../plugins/layer/images/backward.gif | Bin 0 -> 360 bytes .../tiny_mce/plugins/layer/images/forward.gif | Bin 0 -> 358 bytes .../plugins/layer/images/insert_layer.gif | Bin 0 -> 264 bytes jscripts/tiny_mce/plugins/layer/langs/en.js | 9 + jscripts/tiny_mce/plugins/layer/readme.txt | 1 + .../plugins/noneditable/css/noneditable.css | 17 + .../plugins/noneditable/editor_plugin.js | 1 + .../plugins/noneditable/editor_plugin_src.js | 164 + .../tiny_mce/plugins/noneditable/readme.txt | 1 + jscripts/tiny_mce/plugins/paste/blank.htm | 19 + jscripts/tiny_mce/plugins/paste/css/blank.css | 13 + .../tiny_mce/plugins/paste/css/pasteword.css | 3 + .../tiny_mce/plugins/paste/editor_plugin.js | 1 + .../plugins/paste/editor_plugin_src.js | 388 + .../plugins/paste/images/pastetext.gif | Bin 0 -> 294 bytes .../plugins/paste/images/pasteword.gif | Bin 0 -> 299 bytes .../plugins/paste/images/selectall.gif | Bin 0 -> 205 bytes .../plugins/paste/jscripts/pastetext.js | 34 + .../plugins/paste/jscripts/pasteword.js | 46 + jscripts/tiny_mce/plugins/paste/langs/cs.js | 16 + jscripts/tiny_mce/plugins/paste/langs/cy.js | 10 + jscripts/tiny_mce/plugins/paste/langs/da.js | 10 + jscripts/tiny_mce/plugins/paste/langs/de.js | 10 + jscripts/tiny_mce/plugins/paste/langs/en.js | 10 + jscripts/tiny_mce/plugins/paste/langs/es.js | 12 + jscripts/tiny_mce/plugins/paste/langs/fi.js | 10 + jscripts/tiny_mce/plugins/paste/langs/fr.js | 10 + .../tiny_mce/plugins/paste/langs/fr_ca.js | 10 + jscripts/tiny_mce/plugins/paste/langs/he.js | 10 + jscripts/tiny_mce/plugins/paste/langs/hu.js | 10 + jscripts/tiny_mce/plugins/paste/langs/is.js | 10 + jscripts/tiny_mce/plugins/paste/langs/nb.js | 10 + jscripts/tiny_mce/plugins/paste/langs/nl.js | 10 + jscripts/tiny_mce/plugins/paste/langs/nn.js | 10 + jscripts/tiny_mce/plugins/paste/langs/pl.js | 12 + .../tiny_mce/plugins/paste/langs/pt_br.js | 17 + jscripts/tiny_mce/plugins/paste/langs/ru.js | 10 + .../tiny_mce/plugins/paste/langs/ru_KOI8-R.js | 10 + .../tiny_mce/plugins/paste/langs/ru_UTF-8.js | 10 + jscripts/tiny_mce/plugins/paste/langs/sk.js | 18 + jscripts/tiny_mce/plugins/paste/langs/sv.js | 10 + .../tiny_mce/plugins/paste/langs/zh_cn.js | 10 + .../tiny_mce/plugins/paste/langs/zh_tw.js | 11 + .../plugins/paste/langs/zh_tw_utf8.js | 11 + jscripts/tiny_mce/plugins/paste/pastetext.htm | 34 + jscripts/tiny_mce/plugins/paste/pasteword.htm | 29 + jscripts/tiny_mce/plugins/paste/readme.txt | 1 + .../tiny_mce/plugins/preview/editor_plugin.js | 1 + .../plugins/preview/editor_plugin_src.js | 92 + .../tiny_mce/plugins/preview/example.html | 13 + .../plugins/preview/images/preview.gif | Bin 0 -> 286 bytes jscripts/tiny_mce/plugins/preview/langs/cs.js | 11 + jscripts/tiny_mce/plugins/preview/langs/cy.js | 5 + jscripts/tiny_mce/plugins/preview/langs/da.js | 5 + jscripts/tiny_mce/plugins/preview/langs/de.js | 5 + jscripts/tiny_mce/plugins/preview/langs/el.js | 5 + jscripts/tiny_mce/plugins/preview/langs/en.js | 5 + jscripts/tiny_mce/plugins/preview/langs/es.js | 7 + jscripts/tiny_mce/plugins/preview/langs/fa.js | 10 + jscripts/tiny_mce/plugins/preview/langs/fr.js | 6 + .../tiny_mce/plugins/preview/langs/fr_ca.js | 5 + jscripts/tiny_mce/plugins/preview/langs/he.js | 5 + jscripts/tiny_mce/plugins/preview/langs/hu.js | 5 + jscripts/tiny_mce/plugins/preview/langs/is.js | 5 + jscripts/tiny_mce/plugins/preview/langs/it.js | 5 + jscripts/tiny_mce/plugins/preview/langs/ko.js | 5 + jscripts/tiny_mce/plugins/preview/langs/nb.js | 5 + jscripts/tiny_mce/plugins/preview/langs/nl.js | 5 + jscripts/tiny_mce/plugins/preview/langs/nn.js | 5 + jscripts/tiny_mce/plugins/preview/langs/pl.js | 7 + jscripts/tiny_mce/plugins/preview/langs/pt.js | 5 + .../tiny_mce/plugins/preview/langs/pt_br.js | 13 + jscripts/tiny_mce/plugins/preview/langs/ru.js | 5 + .../plugins/preview/langs/ru_KOI8-R.js | 5 + .../plugins/preview/langs/ru_UTF-8.js | 5 + jscripts/tiny_mce/plugins/preview/langs/sk.js | 13 + jscripts/tiny_mce/plugins/preview/langs/sv.js | 5 + .../tiny_mce/plugins/preview/langs/zh_cn.js | 5 + .../tiny_mce/plugins/preview/langs/zh_tw.js | 6 + .../plugins/preview/langs/zh_tw_utf8.js | 6 + jscripts/tiny_mce/plugins/preview/readme.txt | 1 + .../tiny_mce/plugins/print/editor_plugin.js | 1 + .../plugins/print/editor_plugin_src.js | 49 + .../tiny_mce/plugins/print/images/print.gif | Bin 0 -> 211 bytes jscripts/tiny_mce/plugins/print/langs/cs.js | 11 + jscripts/tiny_mce/plugins/print/langs/cy.js | 5 + jscripts/tiny_mce/plugins/print/langs/da.js | 5 + jscripts/tiny_mce/plugins/print/langs/de.js | 5 + jscripts/tiny_mce/plugins/print/langs/en.js | 5 + jscripts/tiny_mce/plugins/print/langs/es.js | 7 + jscripts/tiny_mce/plugins/print/langs/fa.js | 10 + jscripts/tiny_mce/plugins/print/langs/fi.js | 5 + jscripts/tiny_mce/plugins/print/langs/fr.js | 5 + .../tiny_mce/plugins/print/langs/fr_ca.js | 5 + jscripts/tiny_mce/plugins/print/langs/he.js | 5 + jscripts/tiny_mce/plugins/print/langs/hu.js | 5 + jscripts/tiny_mce/plugins/print/langs/is.js | 5 + jscripts/tiny_mce/plugins/print/langs/nb.js | 5 + jscripts/tiny_mce/plugins/print/langs/nl.js | 5 + jscripts/tiny_mce/plugins/print/langs/nn.js | 5 + jscripts/tiny_mce/plugins/print/langs/pl.js | 5 + .../tiny_mce/plugins/print/langs/pt_br.js | 13 + jscripts/tiny_mce/plugins/print/langs/ru.js | 5 + .../tiny_mce/plugins/print/langs/ru_KOI8-R.js | 5 + .../tiny_mce/plugins/print/langs/ru_UTF-8.js | 5 + jscripts/tiny_mce/plugins/print/langs/sk.js | 13 + jscripts/tiny_mce/plugins/print/langs/sv.js | 5 + .../tiny_mce/plugins/print/langs/zh_cn.js | 6 + .../tiny_mce/plugins/print/langs/zh_tw.js | 6 + .../plugins/print/langs/zh_tw_utf8.js | 6 + jscripts/tiny_mce/plugins/print/readme.txt | 1 + jscripts/tiny_mce/plugins/readme.txt | 1 + .../tiny_mce/plugins/save/editor_plugin.js | 1 + .../plugins/save/editor_plugin_src.js | 117 + .../tiny_mce/plugins/save/images/save.gif | Bin 0 -> 285 bytes jscripts/tiny_mce/plugins/save/langs/cs.js | 11 + jscripts/tiny_mce/plugins/save/langs/cy.js | 5 + jscripts/tiny_mce/plugins/save/langs/da.js | 5 + jscripts/tiny_mce/plugins/save/langs/de.js | 5 + jscripts/tiny_mce/plugins/save/langs/en.js | 5 + jscripts/tiny_mce/plugins/save/langs/es.js | 7 + jscripts/tiny_mce/plugins/save/langs/fa.js | 11 + jscripts/tiny_mce/plugins/save/langs/fi.js | 5 + jscripts/tiny_mce/plugins/save/langs/fr.js | 6 + jscripts/tiny_mce/plugins/save/langs/fr_ca.js | 6 + jscripts/tiny_mce/plugins/save/langs/he.js | 5 + jscripts/tiny_mce/plugins/save/langs/hu.js | 5 + jscripts/tiny_mce/plugins/save/langs/is.js | 5 + jscripts/tiny_mce/plugins/save/langs/nb.js | 5 + jscripts/tiny_mce/plugins/save/langs/nl.js | 5 + jscripts/tiny_mce/plugins/save/langs/nn.js | 5 + jscripts/tiny_mce/plugins/save/langs/pl.js | 5 + jscripts/tiny_mce/plugins/save/langs/pt_br.js | 13 + jscripts/tiny_mce/plugins/save/langs/ru.js | 5 + .../tiny_mce/plugins/save/langs/ru_KOI8-R.js | 5 + .../tiny_mce/plugins/save/langs/ru_UTF-8.js | 5 + jscripts/tiny_mce/plugins/save/langs/sk.js | 13 + jscripts/tiny_mce/plugins/save/langs/sv.js | 5 + jscripts/tiny_mce/plugins/save/langs/zh_cn.js | 7 + jscripts/tiny_mce/plugins/save/langs/zh_tw.js | 6 + .../tiny_mce/plugins/save/langs/zh_tw_utf8.js | 6 + jscripts/tiny_mce/plugins/save/readme.txt | 1 + .../plugins/searchreplace/editor_plugin.js | 1 + .../searchreplace/editor_plugin_src.js | 185 + .../plugins/searchreplace/images/replace.gif | Bin 0 -> 125 bytes .../plugins/searchreplace/images/search.gif | Bin 0 -> 191 bytes .../plugins/searchreplace/jscripts/replace.js | 40 + .../plugins/searchreplace/jscripts/search.js | 36 + .../plugins/searchreplace/langs/cs.js | 27 + .../plugins/searchreplace/langs/cy.js | 22 + .../plugins/searchreplace/langs/da.js | 21 + .../plugins/searchreplace/langs/de.js | 22 + .../plugins/searchreplace/langs/en.js | 21 + .../plugins/searchreplace/langs/es.js | 30 + .../plugins/searchreplace/langs/fa.js | 26 + .../plugins/searchreplace/langs/fi.js | 21 + .../plugins/searchreplace/langs/fr.js | 22 + .../plugins/searchreplace/langs/fr_ca.js | 21 + .../plugins/searchreplace/langs/he.js | 21 + .../plugins/searchreplace/langs/hu.js | 21 + .../plugins/searchreplace/langs/is.js | 22 + .../plugins/searchreplace/langs/nb.js | 21 + .../plugins/searchreplace/langs/nl.js | 21 + .../plugins/searchreplace/langs/nn.js | 21 + .../plugins/searchreplace/langs/pl.js | 23 + .../plugins/searchreplace/langs/pt_br.js | 29 + .../plugins/searchreplace/langs/ru.js | 22 + .../plugins/searchreplace/langs/ru_KOI8-R.js | 21 + .../plugins/searchreplace/langs/ru_UTF-8.js | 21 + .../plugins/searchreplace/langs/sk.js | 29 + .../plugins/searchreplace/langs/sv.js | 21 + .../plugins/searchreplace/langs/zh_cn.js | 21 + .../plugins/searchreplace/langs/zh_tw.js | 22 + .../plugins/searchreplace/langs/zh_tw_utf8.js | 22 + .../tiny_mce/plugins/searchreplace/readme.txt | 1 + .../plugins/searchreplace/replace.htm | 49 + .../tiny_mce/plugins/searchreplace/search.htm | 42 + jscripts/tiny_mce/plugins/style/css/props.css | 63 + .../tiny_mce/plugins/style/editor_plugin.js | 1 + .../plugins/style/editor_plugin_src.js | 81 + .../plugins/style/images/apply_button_bg.gif | Bin 0 -> 1096 bytes .../plugins/style/images/style_info.gif | Bin 0 -> 562 bytes .../tiny_mce/plugins/style/jscripts/props.js | 630 ++ jscripts/tiny_mce/plugins/style/langs/en.js | 60 + jscripts/tiny_mce/plugins/style/props.htm | 580 ++ jscripts/tiny_mce/plugins/style/readme.txt | 1 + jscripts/tiny_mce/plugins/table/cell.htm | 182 + jscripts/tiny_mce/plugins/table/css/cell.css | 17 + jscripts/tiny_mce/plugins/table/css/row.css | 25 + jscripts/tiny_mce/plugins/table/css/table.css | 13 + .../tiny_mce/plugins/table/editor_plugin.js | 1 + .../plugins/table/editor_plugin_src.js | 1054 +++ .../tiny_mce/plugins/table/images/buttons.gif | Bin 0 -> 1356 bytes .../tiny_mce/plugins/table/images/table.gif | Bin 0 -> 287 bytes .../plugins/table/images/table_cell_props.gif | Bin 0 -> 189 bytes .../plugins/table/images/table_delete.gif | Bin 0 -> 372 bytes .../plugins/table/images/table_delete_col.gif | Bin 0 -> 163 bytes .../plugins/table/images/table_delete_row.gif | Bin 0 -> 171 bytes .../table/images/table_insert_col_after.gif | Bin 0 -> 165 bytes .../table/images/table_insert_col_before.gif | Bin 0 -> 165 bytes .../table/images/table_insert_row_after.gif | Bin 0 -> 163 bytes .../table/images/table_insert_row_before.gif | Bin 0 -> 159 bytes .../table/images/table_merge_cells.gif | Bin 0 -> 198 bytes .../plugins/table/images/table_row_props.gif | Bin 0 -> 187 bytes .../table/images/table_split_cells.gif | Bin 0 -> 210 bytes .../tiny_mce/plugins/table/jscripts/cell.js | 249 + .../plugins/table/jscripts/merge_cells.js | 19 + .../tiny_mce/plugins/table/jscripts/row.js | 200 + .../tiny_mce/plugins/table/jscripts/table.js | 344 + jscripts/tiny_mce/plugins/table/langs/ar.js | 43 + jscripts/tiny_mce/plugins/table/langs/cs.js | 49 + jscripts/tiny_mce/plugins/table/langs/cy.js | 76 + jscripts/tiny_mce/plugins/table/langs/da.js | 69 + jscripts/tiny_mce/plugins/table/langs/de.js | 76 + jscripts/tiny_mce/plugins/table/langs/el.js | 43 + jscripts/tiny_mce/plugins/table/langs/en.js | 78 + jscripts/tiny_mce/plugins/table/langs/es.js | 84 + jscripts/tiny_mce/plugins/table/langs/fa.js | 47 + jscripts/tiny_mce/plugins/table/langs/fi.js | 77 + jscripts/tiny_mce/plugins/table/langs/fr.js | 77 + .../tiny_mce/plugins/table/langs/fr_ca.js | 43 + jscripts/tiny_mce/plugins/table/langs/he.js | 75 + jscripts/tiny_mce/plugins/table/langs/hu.js | 75 + jscripts/tiny_mce/plugins/table/langs/is.js | 76 + jscripts/tiny_mce/plugins/table/langs/it.js | 43 + jscripts/tiny_mce/plugins/table/langs/ja.js | 43 + jscripts/tiny_mce/plugins/table/langs/ko.js | 43 + jscripts/tiny_mce/plugins/table/langs/nb.js | 75 + jscripts/tiny_mce/plugins/table/langs/nl.js | 75 + jscripts/tiny_mce/plugins/table/langs/nn.js | 76 + jscripts/tiny_mce/plugins/table/langs/pl.js | 78 + jscripts/tiny_mce/plugins/table/langs/pt.js | 84 + .../tiny_mce/plugins/table/langs/pt_br.js | 85 + .../tiny_mce/plugins/table/langs/readme.txt | 4 + jscripts/tiny_mce/plugins/table/langs/ru.js | 77 + .../tiny_mce/plugins/table/langs/ru_KOI8-R.js | 75 + .../tiny_mce/plugins/table/langs/ru_UTF-8.js | 75 + jscripts/tiny_mce/plugins/table/langs/sk.js | 51 + jscripts/tiny_mce/plugins/table/langs/sv.js | 76 + jscripts/tiny_mce/plugins/table/langs/tw.js | 43 + .../tiny_mce/plugins/table/langs/zh_cn.js | 75 + .../tiny_mce/plugins/table/langs/zh_tw.js | 76 + .../plugins/table/langs/zh_tw_utf8.js | 76 + .../tiny_mce/plugins/table/merge_cells.htm | 37 + jscripts/tiny_mce/plugins/table/readme.txt | 1 + jscripts/tiny_mce/plugins/table/row.htm | 159 + jscripts/tiny_mce/plugins/table/table.htm | 155 + .../tiny_mce/plugins/zoom/editor_plugin.js | 1 + .../plugins/zoom/editor_plugin_src.js | 58 + jscripts/tiny_mce/plugins/zoom/langs/es.js | 3 + jscripts/tiny_mce/plugins/zoom/langs/fr.js | 3 + jscripts/tiny_mce/plugins/zoom/langs/he.js | 5 + jscripts/tiny_mce/plugins/zoom/langs/pt_br.js | 10 + jscripts/tiny_mce/plugins/zoom/langs/ru.js | 5 + .../tiny_mce/plugins/zoom/langs/ru_KOI8-R.js | 5 + .../tiny_mce/plugins/zoom/langs/ru_UTF-8.js | 5 + jscripts/tiny_mce/plugins/zoom/langs/zh_tw.js | 6 + .../tiny_mce/plugins/zoom/langs/zh_tw_utf8.js | 6 + jscripts/tiny_mce/plugins/zoom/readme.txt | 1 + jscripts/tiny_mce/themes/advanced/about.htm | 52 + jscripts/tiny_mce/themes/advanced/anchor.htm | 33 + jscripts/tiny_mce/themes/advanced/charmap.htm | 53 + .../tiny_mce/themes/advanced/color_picker.htm | 13 + .../themes/advanced/css/editor_content.css | 58 + .../themes/advanced/css/editor_popup.css | 327 + .../themes/advanced/css/editor_ui.css | 353 + .../themes/advanced/docs/cs/about.htm | 31 + .../advanced/docs/cs/common_buttons.htm | 170 + .../docs/cs/images/insert_image_window.png | Bin 0 -> 4799 bytes .../docs/cs/images/insert_link_window.png | Bin 0 -> 3833 bytes .../docs/cs/images/insert_table_window.png | Bin 0 -> 4620 bytes .../themes/advanced/docs/cs/index.htm | 26 + .../advanced/docs/cs/insert_image_button.htm | 66 + .../advanced/docs/cs/insert_link_button.htm | 34 + .../advanced/docs/cs/insert_table_button.htm | 68 + .../themes/advanced/docs/cs/style.css | 28 + .../themes/advanced/docs/da/about.htm | 31 + .../advanced/docs/da/common_buttons.htm | 162 + .../docs/da/create_accessible_content.htm | 76 + .../docs/da/images/insert_anchor_window.gif | Bin 0 -> 5189 bytes .../docs/da/images/insert_image_window.gif | Bin 0 -> 7195 bytes .../docs/da/images/insert_link_window.gif | Bin 0 -> 5658 bytes .../docs/da/images/insert_table_window.gif | Bin 0 -> 10359 bytes .../themes/advanced/docs/da/index.htm | 28 + .../advanced/docs/da/insert_anchor_button.htm | 33 + .../advanced/docs/da/insert_image_button.htm | 67 + .../advanced/docs/da/insert_link_button.htm | 34 + .../advanced/docs/da/insert_table_button.htm | 72 + .../themes/advanced/docs/da/style.css | 28 + .../themes/advanced/docs/de/about.htm | 31 + .../advanced/docs/de/common_buttons.htm | 107 + .../docs/de/images/insert_image_window.gif | Bin 0 -> 4822 bytes .../docs/de/images/insert_link_window.gif | Bin 0 -> 5135 bytes .../themes/advanced/docs/de/index.htm | 24 + .../advanced/docs/de/insert_image_button.htm | 33 + .../advanced/docs/de/insert_link_button.htm | 34 + .../themes/advanced/docs/de/style.css | 28 + .../themes/advanced/docs/en/about.htm | 31 + .../advanced/docs/en/common_buttons.htm | 162 + .../docs/en/create_accessible_content.htm | 45 + .../docs/en/images/insert_anchor_window.gif | Bin 0 -> 5189 bytes .../docs/en/images/insert_image_window.gif | Bin 0 -> 7195 bytes .../docs/en/images/insert_link_window.gif | Bin 0 -> 5658 bytes .../docs/en/images/insert_table_window.gif | Bin 0 -> 7094 bytes .../themes/advanced/docs/en/index.htm | 27 + .../advanced/docs/en/insert_anchor_button.htm | 32 + .../advanced/docs/en/insert_image_button.htm | 65 + .../advanced/docs/en/insert_link_button.htm | 33 + .../advanced/docs/en/insert_table_button.htm | 71 + .../themes/advanced/docs/en/style.css | 28 + .../themes/advanced/docs/es/about.htm | 28 + .../advanced/docs/es/common_buttons.htm | 155 + .../docs/es/images/insert_image_window.gif | Bin 0 -> 7195 bytes .../docs/es/images/insert_link_window.gif | Bin 0 -> 5658 bytes .../docs/es/images/insert_table_window.gif | Bin 0 -> 6747 bytes .../themes/advanced/docs/es/index.htm | 25 + .../advanced/docs/es/insert_image_button.htm | 64 + .../advanced/docs/es/insert_link_button.htm | 32 + .../advanced/docs/es/insert_table_button.htm | 67 + .../themes/advanced/docs/es/style.css | 28 + .../themes/advanced/docs/fi/about.htm | 28 + .../advanced/docs/fi/common_buttons.htm | 156 + .../docs/fi/images/insert_image_window.gif | Bin 0 -> 8825 bytes .../docs/fi/images/insert_link_window.gif | Bin 0 -> 8223 bytes .../docs/fi/images/insert_table_window.gif | Bin 0 -> 8442 bytes .../themes/advanced/docs/fi/index.htm | 25 + .../advanced/docs/fi/insert_image_button.htm | 65 + .../advanced/docs/fi/insert_link_button.htm | 35 + .../advanced/docs/fi/insert_table_button.htm | 67 + .../themes/advanced/docs/fi/style.css | 28 + .../themes/advanced/docs/fr/about.htm | 32 + .../advanced/docs/fr/common_buttons.htm | 160 + .../docs/fr/images/insert_image_window.gif | Bin 0 -> 38920 bytes .../docs/fr/images/insert_link_window.gif | Bin 0 -> 20970 bytes .../docs/fr/images/insert_table_window.gif | Bin 0 -> 32353 bytes .../themes/advanced/docs/fr/index.htm | 25 + .../advanced/docs/fr/insert_image_button.htm | 66 + .../advanced/docs/fr/insert_link_button.htm | 34 + .../advanced/docs/fr/insert_table_button.htm | 71 + .../themes/advanced/docs/fr/style.css | 28 + .../themes/advanced/docs/fr_ca/about.htm | 32 + .../advanced/docs/fr_ca/common_buttons.htm | 160 + .../fr_ca/images/insert_anchor_window.gif | Bin 0 -> 12662 bytes .../docs/fr_ca/images/insert_image_window.gif | Bin 0 -> 38920 bytes .../docs/fr_ca/images/insert_link_window.gif | Bin 0 -> 20970 bytes .../docs/fr_ca/images/insert_table_window.gif | Bin 0 -> 32353 bytes .../themes/advanced/docs/fr_ca/index.htm | 25 + .../docs/fr_ca/insert_anchor_button.htm | 32 + .../docs/fr_ca/insert_image_button.htm | 66 + .../docs/fr_ca/insert_link_button.htm | 34 + .../docs/fr_ca/insert_table_button.htm | 71 + .../themes/advanced/docs/fr_ca/style.css | 28 + .../themes/advanced/docs/hu/about.htm | 28 + .../advanced/docs/hu/common_buttons.htm | 106 + .../docs/hu/images/insert_image_window.gif | Bin 0 -> 5486 bytes .../docs/hu/images/insert_link_window.gif | Bin 0 -> 5762 bytes .../themes/advanced/docs/hu/index.htm | 24 + .../advanced/docs/hu/insert_image_button.htm | 32 + .../advanced/docs/hu/insert_link_button.htm | 31 + .../themes/advanced/docs/hu/style.css | 28 + .../themes/advanced/docs/images/table.gif | Bin 0 -> 1018 bytes .../advanced/docs/images/table_delete_col.gif | Bin 0 -> 929 bytes .../advanced/docs/images/table_delete_row.gif | Bin 0 -> 942 bytes .../docs/images/table_insert_col_after.gif | Bin 0 -> 936 bytes .../docs/images/table_insert_col_before.gif | Bin 0 -> 935 bytes .../docs/images/table_insert_row_after.gif | Bin 0 -> 928 bytes .../docs/images/table_insert_row_before.gif | Bin 0 -> 928 bytes .../themes/advanced/docs/it/about.htm | 37 + .../advanced/docs/it/common_buttons.htm | 180 + .../docs/it/images/insert_anchor_window.gif | Bin 0 -> 5336 bytes .../docs/it/images/insert_image_window.gif | Bin 0 -> 7248 bytes .../docs/it/images/insert_link_window.gif | Bin 0 -> 5909 bytes .../docs/it/images/insert_table_window.gif | Bin 0 -> 7379 bytes .../themes/advanced/docs/it/index.htm | 30 + .../advanced/docs/it/insert_anchor_button.htm | 32 + .../advanced/docs/it/insert_image_button.htm | 66 + .../advanced/docs/it/insert_link_button.htm | 41 + .../advanced/docs/it/insert_table_button.htm | 71 + .../themes/advanced/docs/it/style.css | 28 + .../themes/advanced/docs/nb/about.htm | 32 + .../advanced/docs/nb/common_buttons.htm | 163 + .../docs/nb/images/insert_anchor_window.gif | Bin 0 -> 5229 bytes .../docs/nb/images/insert_image_window.gif | Bin 0 -> 7844 bytes .../docs/nb/images/insert_link_window.gif | Bin 0 -> 5767 bytes .../docs/nb/images/insert_table_window.gif | Bin 0 -> 7099 bytes .../themes/advanced/docs/nb/index.htm | 27 + .../advanced/docs/nb/insert_anchor_button.htm | 34 + .../advanced/docs/nb/insert_image_button.htm | 71 + .../advanced/docs/nb/insert_link_button.htm | 33 + .../advanced/docs/nb/insert_table_button.htm | 72 + .../themes/advanced/docs/nb/style.css | 28 + .../themes/advanced/docs/nl/about.htm | 31 + .../advanced/docs/nl/common_buttons.htm | 188 + .../docs/nl/images/html_source_window.gif | Bin 0 -> 16012 bytes .../docs/nl/images/insert_anchor_window.gif | Bin 0 -> 4031 bytes .../docs/nl/images/insert_image_window.gif | Bin 0 -> 8363 bytes .../docs/nl/images/insert_link_window.gif | Bin 0 -> 5569 bytes .../docs/nl/images/insert_specchar_window.gif | Bin 0 -> 10407 bytes .../docs/nl/images/insert_table_window.gif | Bin 0 -> 7337 bytes .../themes/advanced/docs/nl/index.htm | 27 + .../advanced/docs/nl/insert_anchor_button.htm | 37 + .../advanced/docs/nl/insert_image_button.htm | 65 + .../advanced/docs/nl/insert_link_button.htm | 35 + .../docs/nl/insert_specchar_button.htm | 32 + .../advanced/docs/nl/insert_table_button.htm | 73 + .../themes/advanced/docs/nl/style.css | 28 + .../themes/advanced/docs/nn/about.htm | 32 + .../advanced/docs/nn/common_buttons.htm | 163 + .../docs/nn/images/html_source_window.gif | Bin 0 -> 16012 bytes .../docs/nn/images/insert_anchor_window.gif | Bin 0 -> 5229 bytes .../docs/nn/images/insert_image_window.gif | Bin 0 -> 7844 bytes .../docs/nn/images/insert_link_window.gif | Bin 0 -> 5767 bytes .../docs/nn/images/insert_specchar_window.gif | Bin 0 -> 10407 bytes .../docs/nn/images/insert_table_window.gif | Bin 0 -> 7099 bytes .../themes/advanced/docs/nn/index.htm | 27 + .../advanced/docs/nn/insert_anchor_button.htm | 34 + .../advanced/docs/nn/insert_image_button.htm | 71 + .../advanced/docs/nn/insert_link_button.htm | 33 + .../advanced/docs/nn/insert_table_button.htm | 72 + .../themes/advanced/docs/nn/style.css | 28 + .../themes/advanced/docs/pl/about.htm | 33 + .../advanced/docs/pl/common_buttons.htm | 164 + .../docs/pl/images/insert_anchor_window.gif | Bin 0 -> 5401 bytes .../docs/pl/images/insert_image_window.gif | Bin 0 -> 7532 bytes .../docs/pl/images/insert_link_window.gif | Bin 0 -> 5781 bytes .../docs/pl/images/insert_table_window.gif | Bin 0 -> 7418 bytes .../themes/advanced/docs/pl/index.htm | 28 + .../advanced/docs/pl/insert_anchor_button.htm | 33 + .../advanced/docs/pl/insert_image_button.htm | 65 + .../advanced/docs/pl/insert_link_button.htm | 35 + .../advanced/docs/pl/insert_table_button.htm | 73 + .../themes/advanced/docs/pl/style.css | 28 + .../themes/advanced/docs/sk/about.htm | 32 + .../advanced/docs/sk/common_buttons.htm | 170 + .../docs/sk/images/insert_image_window.png | Bin 0 -> 4799 bytes .../docs/sk/images/insert_link_window.png | Bin 0 -> 3833 bytes .../docs/sk/images/insert_table_window.png | Bin 0 -> 4620 bytes .../themes/advanced/docs/sk/index.htm | 26 + .../advanced/docs/sk/insert_image_button.htm | 66 + .../advanced/docs/sk/insert_link_button.htm | 34 + .../advanced/docs/sk/insert_table_button.htm | 68 + .../themes/advanced/docs/sk/style.css | 28 + .../themes/advanced/docs/sv/about.htm | 32 + .../advanced/docs/sv/common_buttons.htm | 163 + .../docs/sv/images/insert_anchor_window.gif | Bin 0 -> 5229 bytes .../docs/sv/images/insert_image_window.gif | Bin 0 -> 7844 bytes .../docs/sv/images/insert_link_window.gif | Bin 0 -> 5767 bytes .../docs/sv/images/insert_table_window.gif | Bin 0 -> 7099 bytes .../themes/advanced/docs/sv/index.htm | 27 + .../advanced/docs/sv/insert_anchor_button.htm | 34 + .../advanced/docs/sv/insert_image_button.htm | 71 + .../advanced/docs/sv/insert_link_button.htm | 33 + .../advanced/docs/sv/insert_table_button.htm | 72 + .../themes/advanced/docs/sv/style.css | 28 + .../themes/advanced/docs/zh_cn/about.htm | 29 + .../advanced/docs/zh_cn/common_buttons.htm | 160 + .../zh_cn/images/insert_anchor_window.gif | Bin 0 -> 10444 bytes .../docs/zh_cn/images/insert_image_window.gif | Bin 0 -> 21752 bytes .../docs/zh_cn/images/insert_link_window.gif | Bin 0 -> 12005 bytes .../docs/zh_cn/images/insert_table_window.gif | Bin 0 -> 19062 bytes .../themes/advanced/docs/zh_cn/index.htm | 27 + .../docs/zh_cn/insert_anchor_button.htm | 31 + .../docs/zh_cn/insert_image_button.htm | 63 + .../docs/zh_cn/insert_link_button.htm | 32 + .../docs/zh_cn/insert_table_button.htm | 71 + .../themes/advanced/docs/zh_cn/style.css | 28 + .../themes/advanced/editor_template.js | 1 + .../themes/advanced/editor_template_src.js | 1411 ++++ jscripts/tiny_mce/themes/advanced/image.htm | 100 + .../themes/advanced/images/anchor.gif | Bin 0 -> 171 bytes .../themes/advanced/images/anchor_symbol.gif | Bin 0 -> 70 bytes .../themes/advanced/images/backcolor.gif | Bin 0 -> 174 bytes .../tiny_mce/themes/advanced/images/bold.gif | Bin 0 -> 76 bytes .../themes/advanced/images/bold_de_se.gif | Bin 0 -> 73 bytes .../themes/advanced/images/bold_es.gif | Bin 0 -> 80 bytes .../themes/advanced/images/bold_fr.gif | Bin 0 -> 78 bytes .../themes/advanced/images/bold_ru.gif | Bin 0 -> 77 bytes .../themes/advanced/images/bold_tw.gif | Bin 0 -> 207 bytes .../themes/advanced/images/browse.gif | Bin 0 -> 113 bytes .../themes/advanced/images/bullist.gif | Bin 0 -> 108 bytes .../themes/advanced/images/button_menu.gif | Bin 0 -> 57 bytes .../themes/advanced/images/buttons.gif | Bin 0 -> 8399 bytes .../advanced/images/cancel_button_bg.gif | Bin 0 -> 677 bytes .../themes/advanced/images/charmap.gif | Bin 0 -> 245 bytes .../themes/advanced/images/cleanup.gif | Bin 0 -> 256 bytes .../tiny_mce/themes/advanced/images/close.gif | Bin 0 -> 102 bytes .../tiny_mce/themes/advanced/images/code.gif | Bin 0 -> 110 bytes .../tiny_mce/themes/advanced/images/color.gif | Bin 0 -> 125 bytes .../tiny_mce/themes/advanced/images/copy.gif | Bin 0 -> 263 bytes .../themes/advanced/images/custom_1.gif | Bin 0 -> 76 bytes .../tiny_mce/themes/advanced/images/cut.gif | Bin 0 -> 187 bytes .../themes/advanced/images/forecolor.gif | Bin 0 -> 272 bytes .../tiny_mce/themes/advanced/images/help.gif | Bin 0 -> 295 bytes .../tiny_mce/themes/advanced/images/hr.gif | Bin 0 -> 63 bytes .../tiny_mce/themes/advanced/images/image.gif | Bin 0 -> 194 bytes .../themes/advanced/images/indent.gif | Bin 0 -> 112 bytes .../advanced/images/insert_button_bg.gif | Bin 0 -> 703 bytes .../themes/advanced/images/italic.gif | Bin 0 -> 79 bytes .../themes/advanced/images/italic_de_se.gif | Bin 0 -> 75 bytes .../themes/advanced/images/italic_es.gif | Bin 0 -> 74 bytes .../themes/advanced/images/italic_ru.gif | Bin 0 -> 78 bytes .../themes/advanced/images/italic_tw.gif | Bin 0 -> 274 bytes .../themes/advanced/images/justifycenter.gif | Bin 0 -> 70 bytes .../themes/advanced/images/justifyfull.gif | Bin 0 -> 71 bytes .../themes/advanced/images/justifyleft.gif | Bin 0 -> 71 bytes .../themes/advanced/images/justifyright.gif | Bin 0 -> 70 bytes .../tiny_mce/themes/advanced/images/link.gif | Bin 0 -> 175 bytes .../themes/advanced/images/menu_check.gif | Bin 0 -> 51 bytes .../themes/advanced/images/newdocument.gif | Bin 0 -> 170 bytes .../themes/advanced/images/numlist.gif | Bin 0 -> 111 bytes .../themes/advanced/images/opacity.png | Bin 0 -> 147 bytes .../themes/advanced/images/outdent.gif | Bin 0 -> 110 bytes .../tiny_mce/themes/advanced/images/paste.gif | Bin 0 -> 286 bytes .../tiny_mce/themes/advanced/images/redo.gif | Bin 0 -> 169 bytes .../themes/advanced/images/removeformat.gif | Bin 0 -> 168 bytes .../themes/advanced/images/separator.gif | Bin 0 -> 57 bytes .../themes/advanced/images/spacer.gif | Bin 0 -> 43 bytes .../advanced/images/statusbar_resize.gif | Bin 0 -> 79 bytes .../themes/advanced/images/strikethrough.gif | Bin 0 -> 83 bytes .../tiny_mce/themes/advanced/images/sub.gif | Bin 0 -> 148 bytes .../tiny_mce/themes/advanced/images/sup.gif | Bin 0 -> 147 bytes .../tiny_mce/themes/advanced/images/table.gif | Bin 0 -> 287 bytes .../advanced/images/table_delete_col.gif | Bin 0 -> 163 bytes .../advanced/images/table_delete_row.gif | Bin 0 -> 171 bytes .../images/table_insert_col_after.gif | Bin 0 -> 165 bytes .../images/table_insert_col_before.gif | Bin 0 -> 165 bytes .../images/table_insert_row_after.gif | Bin 0 -> 163 bytes .../images/table_insert_row_before.gif | Bin 0 -> 159 bytes .../themes/advanced/images/underline.gif | Bin 0 -> 88 bytes .../themes/advanced/images/underline_es.gif | Bin 0 -> 79 bytes .../themes/advanced/images/underline_fr.gif | Bin 0 -> 79 bytes .../themes/advanced/images/underline_ru.gif | Bin 0 -> 77 bytes .../themes/advanced/images/underline_tw.gif | Bin 0 -> 245 bytes .../tiny_mce/themes/advanced/images/undo.gif | Bin 0 -> 175 bytes .../themes/advanced/images/unlink.gif | Bin 0 -> 190 bytes .../themes/advanced/images/visualaid.gif | Bin 0 -> 206 bytes .../themes/advanced/images/xp/tab_bg.gif | Bin 0 -> 694 bytes .../themes/advanced/images/xp/tab_end.gif | Bin 0 -> 169 bytes .../themes/advanced/images/xp/tab_sel_bg.gif | Bin 0 -> 428 bytes .../themes/advanced/images/xp/tab_sel_end.gif | Bin 0 -> 101 bytes .../themes/advanced/images/xp/tabs_bg.gif | Bin 0 -> 48 bytes .../themes/advanced/jscripts/about.js | 75 + .../themes/advanced/jscripts/anchor.js | 74 + .../themes/advanced/jscripts/charmap.js | 326 + .../themes/advanced/jscripts/color_picker.js | 108 + .../themes/advanced/jscripts/image.js | 81 + .../tiny_mce/themes/advanced/jscripts/link.js | 70 + .../themes/advanced/jscripts/source_editor.js | 66 + jscripts/tiny_mce/themes/advanced/langs/ar.js | 63 + jscripts/tiny_mce/themes/advanced/langs/ca.js | 64 + jscripts/tiny_mce/themes/advanced/langs/cs.js | 70 + jscripts/tiny_mce/themes/advanced/langs/cy.js | 76 + jscripts/tiny_mce/themes/advanced/langs/da.js | 75 + jscripts/tiny_mce/themes/advanced/langs/de.js | 76 + jscripts/tiny_mce/themes/advanced/langs/el.js | 64 + jscripts/tiny_mce/themes/advanced/langs/en.js | 81 + jscripts/tiny_mce/themes/advanced/langs/es.js | 101 + jscripts/tiny_mce/themes/advanced/langs/fa.js | 65 + jscripts/tiny_mce/themes/advanced/langs/fi.js | 77 + jscripts/tiny_mce/themes/advanced/langs/fr.js | 78 + .../tiny_mce/themes/advanced/langs/fr_ca.js | 64 + jscripts/tiny_mce/themes/advanced/langs/he.js | 76 + jscripts/tiny_mce/themes/advanced/langs/hu.js | 75 + jscripts/tiny_mce/themes/advanced/langs/is.js | 76 + jscripts/tiny_mce/themes/advanced/langs/it.js | 64 + jscripts/tiny_mce/themes/advanced/langs/ja.js | 62 + jscripts/tiny_mce/themes/advanced/langs/ko.js | 65 + jscripts/tiny_mce/themes/advanced/langs/nb.js | 77 + jscripts/tiny_mce/themes/advanced/langs/nl.js | 76 + jscripts/tiny_mce/themes/advanced/langs/nn.js | 77 + jscripts/tiny_mce/themes/advanced/langs/pl.js | 79 + jscripts/tiny_mce/themes/advanced/langs/pt.js | 65 + .../tiny_mce/themes/advanced/langs/pt_br.js | 115 + .../tiny_mce/themes/advanced/langs/readme.txt | 4 + jscripts/tiny_mce/themes/advanced/langs/ru.js | 76 + .../themes/advanced/langs/ru_KOI8-R.js | 76 + .../themes/advanced/langs/ru_UTF-8.js | 76 + jscripts/tiny_mce/themes/advanced/langs/sk.js | 72 + jscripts/tiny_mce/themes/advanced/langs/sv.js | 77 + jscripts/tiny_mce/themes/advanced/langs/tw.js | 91 + .../tiny_mce/themes/advanced/langs/zh_cn.js | 76 + .../tiny_mce/themes/advanced/langs/zh_tw.js | 78 + .../themes/advanced/langs/zh_tw_utf8.js | 78 + jscripts/tiny_mce/themes/advanced/link.htm | 100 + .../themes/advanced/source_editor.htm | 30 + .../themes/simple/css/editor_content.css | 25 + .../themes/simple/css/editor_popup.css | 41 + .../tiny_mce/themes/simple/css/editor_ui.css | 125 + .../tiny_mce/themes/simple/editor_template.js | 4 + .../themes/simple/editor_template_src.js | 86 + .../tiny_mce/themes/simple/images/bold.gif | Bin 0 -> 76 bytes .../themes/simple/images/bold_de_se.gif | Bin 0 -> 73 bytes .../tiny_mce/themes/simple/images/bold_fr.gif | Bin 0 -> 78 bytes .../tiny_mce/themes/simple/images/bold_ru.gif | Bin 0 -> 77 bytes .../tiny_mce/themes/simple/images/bold_tw.gif | Bin 0 -> 207 bytes .../tiny_mce/themes/simple/images/bullist.gif | Bin 0 -> 108 bytes .../tiny_mce/themes/simple/images/buttons.gif | Bin 0 -> 1054 bytes .../tiny_mce/themes/simple/images/cleanup.gif | Bin 0 -> 256 bytes .../tiny_mce/themes/simple/images/italic.gif | Bin 0 -> 79 bytes .../themes/simple/images/italic_de_se.gif | Bin 0 -> 75 bytes .../themes/simple/images/italic_ru.gif | Bin 0 -> 78 bytes .../themes/simple/images/italic_tw.gif | Bin 0 -> 274 bytes .../tiny_mce/themes/simple/images/numlist.gif | Bin 0 -> 111 bytes .../tiny_mce/themes/simple/images/redo.gif | Bin 0 -> 169 bytes .../themes/simple/images/separator.gif | Bin 0 -> 57 bytes .../tiny_mce/themes/simple/images/spacer.gif | Bin 0 -> 43 bytes .../themes/simple/images/strikethrough.gif | Bin 0 -> 83 bytes .../themes/simple/images/underline.gif | Bin 0 -> 88 bytes .../themes/simple/images/underline_fr.gif | Bin 0 -> 79 bytes .../themes/simple/images/underline_ru.gif | Bin 0 -> 77 bytes .../themes/simple/images/underline_tw.gif | Bin 0 -> 245 bytes .../tiny_mce/themes/simple/images/undo.gif | Bin 0 -> 175 bytes jscripts/tiny_mce/tiny_mce.js | 1 + jscripts/tiny_mce/tiny_mce_popup.js | 272 + jscripts/tiny_mce/tiny_mce_src.js | 6719 +++++++++++++++++ jscripts/tiny_mce/utils/editable_selects.js | 63 + jscripts/tiny_mce/utils/form_utils.js | 210 + jscripts/tiny_mce/utils/mclayer.js | 212 + jscripts/tiny_mce/utils/mctabs.js | 76 + jscripts/tiny_mce/utils/validate.js | 50 + jscripts/wz_jsgraphics.js | 943 +++ license/gpl_licence.txt | 280 + links/add.php | 139 + links/index.php | 194 + login.php | 170 + logout.php | 33 + mods/_core/backups/module.php | 61 + mods/_core/backups/module.xml | 23 + mods/_core/backups/module_delete.php | 14 + mods/_core/cats_categories/module.php | 30 + mods/_core/cats_categories/module.xml | 23 + mods/_core/content/module.php | 31 + mods/_core/content/module.xml | 23 + mods/_core/content/module_backup.php | 53 + mods/_core/content/module_delete.php | 25 + mods/_core/content_packaging/module.php | 18 + mods/_core/content_packaging/module.xml | 20 + mods/_core/courses/module.php | 36 + mods/_core/courses/module.xml | 23 + mods/_core/enrolment/module.php | 50 + mods/_core/enrolment/module.xml | 23 + mods/_core/enrolment/module_delete.php | 10 + mods/_core/file_manager/module.php | 30 + mods/_core/file_manager/module.xml | 23 + mods/_core/file_manager/module_backup.php | 6 + mods/_core/file_manager/module_delete.php | 9 + mods/_core/glossary/module.php | 30 + mods/_core/glossary/module.xml | 23 + mods/_core/glossary/module_backup.php | 22 + mods/_core/glossary/module_delete.php | 11 + mods/_core/groups/module.php | 43 + mods/_core/groups/module.xml | 23 + mods/_core/groups/module_backup.php | 33 + mods/_core/groups/module_delete.php | 26 + mods/_core/languages/module.php | 41 + mods/_core/languages/module.xml | 23 + mods/_core/languages/module_cron.php | 28 + mods/_core/properties/module.php | 44 + mods/_core/properties/module.xml | 23 + mods/_core/properties/module_delete.php | 11 + mods/_core/themes/module.php | 25 + mods/_core/themes/module.xml | 23 + mods/_core/users/module.php | 90 + mods/_core/users/module.xml | 23 + mods/_standard/announcements/module.php | 21 + mods/_standard/announcements/module.xml | 23 + .../_standard/announcements/module_backup.php | 33 + .../_standard/announcements/module_delete.php | 20 + mods/_standard/assignments/module.php | 70 + mods/_standard/assignments/module.sql | 33 + mods/_standard/assignments/module.xml | 19 + mods/_standard/assignments/module_backup.php | 19 + mods/_standard/assignments/module_delete.php | 10 + mods/_standard/assignments/module_groups.php | 12 + mods/_standard/blogs/module.php | 77 + mods/_standard/blogs/module.xml | 20 + mods/_standard/blogs/module_delete.php | 7 + mods/_standard/blogs/module_groups.php | 29 + mods/_standard/calendar/module.php | 30 + mods/_standard/calendar/module.xml | 23 + mods/_standard/calendar/module_backup.php | 9 + mods/_standard/calendar/module_delete.php | 19 + mods/_standard/calendar/module_groups.php | 15 + mods/_standard/chat/module.php | 36 + mods/_standard/chat/module.xml | 23 + mods/_standard/chat/module_delete.php | 13 + mods/_standard/course_email/module.php | 12 + mods/_standard/course_email/module.xml | 23 + mods/_standard/directory/module.php | 11 + mods/_standard/directory/module.xml | 23 + mods/_standard/faq/module.php | 40 + mods/_standard/faq/module.xml | 19 + mods/_standard/faq/module_backup.php | 29 + mods/_standard/faq/module_delete.php | 17 + mods/_standard/file_storage/module.php | 55 + mods/_standard/file_storage/module.xml | 23 + mods/_standard/file_storage/module_delete.php | 19 + mods/_standard/file_storage/module_groups.php | 24 + mods/_standard/forums/module.php | 66 + mods/_standard/forums/module.xml | 23 + mods/_standard/forums/module_delete.php | 74 + mods/_standard/forums/module_groups.php | 31 + mods/_standard/google_search/SOAP_Google.php | 114 + mods/_standard/google_search/module.php | 24 + mods/_standard/google_search/module.xml | 23 + .../_standard/google_search/side_menu.inc.php | 30 + mods/_standard/links/module.php | 84 + mods/_standard/links/module.xml | 23 + mods/_standard/links/module_backup.php | 39 + mods/_standard/links/module_delete.php | 16 + mods/_standard/links/module_groups.php | 27 + mods/_standard/polls/module.php | 31 + mods/_standard/polls/module.xml | 23 + mods/_standard/polls/module_backup.php | 32 + mods/_standard/polls/module_delete.php | 19 + mods/_standard/profile_pictures/module.php | 14 + mods/_standard/profile_pictures/module.xml | 19 + mods/_standard/reading_list/module.php | 101 + mods/_standard/reading_list/module.xml | 19 + mods/_standard/reading_list/module_backup.php | 36 + mods/_standard/reading_list/module_delete.php | 13 + mods/_standard/rss_feeds/load_file.php | 7 + mods/_standard/rss_feeds/module.php | 112 + mods/_standard/rss_feeds/module.xml | 19 + mods/_standard/sitemap/module.php | 12 + mods/_standard/sitemap/module.xml | 23 + mods/_standard/statistics/module.php | 9 + mods/_standard/statistics/module.xml | 23 + mods/_standard/statistics/module_backup.php | 17 + mods/_standard/statistics/module_delete.php | 11 + mods/_standard/student_tools/module.php | 16 + mods/_standard/student_tools/module.xml | 23 + mods/_standard/tests/module.php | 133 + mods/_standard/tests/module.xml | 23 + mods/_standard/tests/module_backup.php | 115 + mods/_standard/tests/module_delete.php | 33 + mods/_standard/tests/module_groups.php | 15 + mods/_standard/tile_search/module.php | 33 + mods/_standard/tile_search/module.xml | 23 + mods/_standard/tracker/module.php | 23 + mods/_standard/tracker/module.xml | 20 + mods/acollab/module.php | 23 + mods/acollab/module.xml | 28 + mods/acollab/module_install.php | 26 + mods/hello_world/hello_world.jpg | Bin 0 -> 1827 bytes mods/hello_world/index.php | 12 + mods/hello_world/index_admin.php | 10 + mods/hello_world/index_instructor.php | 10 + mods/hello_world/index_mystart.php | 13 + mods/hello_world/index_public.php | 15 + mods/hello_world/module.css | 11 + mods/hello_world/module.php | 66 + mods/hello_world/module.sql | 9 + mods/hello_world/module.xml | 19 + mods/hello_world/module_backup.php | 18 + mods/hello_world/module_cron.php | 13 + mods/hello_world/module_delete.php | 21 + mods/hello_world/module_install.php | 67 + mods/hello_world/side_menu.inc.php | 13 + mods/index.html | 1 + mods/scorm_packages/module.php | 40 + mods/scorm_packages/module.sql | 75 + mods/scorm_packages/module.xml | 19 + mods/scorm_packages/module_install.php | 26 + .../scorm_packages/possible_module_backup.php | 65 + my_stats.php | 61 + overlib.js | 1274 ++++ overlib_mini.js | 709 ++ overlib_mini_help.js | 709 ++ packages/index.php | 44 + packages/preferences.php | 115 + password_reminder.php | 167 + polls/index.php | 93 + popuphelp.php | 39 + profile.php | 57 + reading_list/add_resource_av.php | 163 + reading_list/add_resource_book.php | 172 + reading_list/add_resource_file.php | 171 + reading_list/add_resource_handout.php | 154 + reading_list/add_resource_url.php | 155 + reading_list/delete_reading.php | 61 + reading_list/delete_resource.php | 60 + reading_list/display_resource.php | 143 + reading_list/display_resources.php | 110 + reading_list/edit_reading_av.php | 179 + reading_list/edit_reading_book.php | 184 + reading_list/edit_reading_file.php | 181 + reading_list/edit_reading_handout.php | 180 + reading_list/edit_reading_url.php | 179 + reading_list/index.php | 77 + reading_list/index_instructor.php | 160 + reading_list/new_reading_av.php | 181 + reading_list/new_reading_book.php | 179 + reading_list/new_reading_file.php | 183 + reading_list/new_reading_handout.php | 184 + reading_list/new_reading_url.php | 184 + reading_list/reading_details.php | 90 + readme | 17 + registration.php | 257 + search.php | 24 + sha-1factory.js | 198 + sitemap.php | 69 + svn.php | 28 + themes/blumin/content.tmpl.php | 31 + themes/blumin/forms.css | 73 + themes/blumin/ie_styles.css | 19 + themes/blumin/images/arrow_ltr.gif | Bin 0 -> 88 bytes themes/blumin/images/back.gif | Bin 0 -> 331 bytes themes/blumin/images/continue.gif | Bin 0 -> 410 bytes themes/blumin/images/linkOpaque.gif | Bin 0 -> 101 bytes themes/blumin/images/linkTransparent.gif | Bin 0 -> 102 bytes themes/blumin/images/newsitem_icon.gif | Bin 0 -> 951 bytes themes/blumin/images/next.gif | Bin 0 -> 904 bytes themes/blumin/images/previous.gif | Bin 0 -> 901 bytes themes/blumin/images/resume.gif | Bin 0 -> 919 bytes themes/blumin/images/side_arrow.gif | Bin 0 -> 58 bytes themes/blumin/images/sort.gif | Bin 0 -> 64 bytes themes/blumin/images/user-star.gif | Bin 0 -> 319 bytes themes/blumin/images/user.gif | Bin 0 -> 882 bytes themes/blumin/include/box.tmpl.php | 7 + themes/blumin/include/footer.tmpl.php | 25 + themes/blumin/include/header.tmpl.php | 228 + themes/blumin/include/side_menu.tmpl.php | 8 + themes/blumin/print.css | 13 + themes/blumin/readme.txt | 9 + themes/blumin/screenshot.gif | Bin 0 -> 1393 bytes themes/blumin/styles.css | 1345 ++++ themes/blumin/theme.cfg.php | 44 + themes/blumin/theme_info.xml | 11 + themes/default/confirmmessage.tmpl.php | 32 + themes/default/content.tmpl.php | 32 + themes/default/errormessage.tmpl.php | 21 + themes/default/feedbackmessage.tmpl.php | 20 + themes/default/forms.css | 124 + themes/default/ie_styles.css | 19 + themes/default/images/arrow_ltr.gif | Bin 0 -> 88 bytes themes/default/images/back.gif | Bin 0 -> 331 bytes themes/default/images/error-large.gif | Bin 0 -> 234 bytes themes/default/images/guide.gif | Bin 0 -> 122 bytes themes/default/images/instructor.gif | Bin 0 -> 886 bytes themes/default/images/next.gif | Bin 0 -> 904 bytes themes/default/images/pen.gif | Bin 0 -> 84 bytes themes/default/images/pen2.gif | Bin 0 -> 85 bytes themes/default/images/pencils.jpg | Bin 0 -> 14565 bytes themes/default/images/previous.gif | Bin 0 -> 901 bytes themes/default/images/resume.gif | Bin 0 -> 919 bytes themes/default/images/side_arrow.gif | Bin 0 -> 58 bytes themes/default/images/sort.gif | Bin 0 -> 64 bytes themes/default/images/user-star.gif | Bin 0 -> 319 bytes themes/default/images/user.gif | Bin 0 -> 918 bytes themes/default/include/box.tmpl.php | 7 + themes/default/include/fm_footer.tmpl.php | 2 + themes/default/include/fm_header.tmpl.php | 41 + themes/default/include/footer.tmpl.php | 46 + themes/default/include/header.tmpl.php | 330 + themes/default/index.tmpl.php | 45 + themes/default/infomessage.tmpl.php | 18 + themes/default/login.tmpl.php | 61 + themes/default/password_change.tmpl.php | 32 + themes/default/password_reminder.tmpl.php | 22 + .../password_reminder_feedback.tmpl.php | 6 + themes/default/print.css | 13 + themes/default/profile.tmpl.php | 65 + themes/default/readme.txt | 6 + themes/default/registration.tmpl.php | 185 + themes/default/rtl.css | 14 + themes/default/screenshot.gif | Bin 0 -> 8496 bytes themes/default/styles.css | 1285 ++++ themes/default/test_questions/footer.tmpl.php | 1 + themes/default/test_questions/header.tmpl.php | 17 + themes/default/test_questions/likert.tmpl.php | 12 + .../test_questions/likert_qti_2p1.tmpl.php | 24 + .../test_questions/likert_result.tmpl.php | 16 + .../test_questions/likert_stats.tmpl.php | 28 + themes/default/test_questions/long.tmpl.php | 15 + .../test_questions/long_qti_2p1.tmpl.php | 31 + .../test_questions/long_result.tmpl.php | 3 + .../test_questions/long_stats.tmpl.php | 21 + .../test_questions/manifest_qti_2p1.tmpl.php | 29 + .../default/test_questions/matching.tmpl.php | 28 + .../test_questions/matching_qti_2p1.tmpl.php | 54 + .../test_questions/matching_result.tmpl.php | 37 + .../test_questions/matching_stats.tmpl.php | 27 + .../test_questions/matchingdd.tmpl.php | 6 + .../matchingdd_qti_2p1.tmpl.php | 1 + .../test_questions/matchingdd_result.tmpl.php | 1 + .../test_questions/matchingdd_stats.tmpl.php | 1 + .../test_questions/multianswer.tmpl.php | 10 + .../multianswer_qti_2p1.tmpl.php | 46 + .../multianswer_result.tmpl.php | 1 + .../test_questions/multianswer_stats.tmpl.php | 1 + .../test_questions/multichoice.tmpl.php | 11 + .../multichoice_qti_2p1.tmpl.php | 39 + .../multichoice_result.tmpl.php | 23 + .../test_questions/multichoice_stats.tmpl.php | 33 + .../default/test_questions/ordering.tmpl.php | 14 + .../test_questions/ordering_qti_2p1.tmpl.php | 37 + .../test_questions/ordering_result.tmpl.php | 14 + .../test_questions/ordering_stats.tmpl.php | 23 + .../default/test_questions/truefalse.tmpl.php | 7 + .../test_questions/truefalse_qti_2p1.tmpl.php | 38 + .../test_questions/truefalse_result.tmpl.php | 36 + .../test_questions/truefalse_stats.tmpl.php | 31 + themes/default/theme.cfg.php | 43 + themes/default/users/browse.tmpl.php | 94 + themes/default/users/email_change.tmpl.php | 35 + themes/default/users/index.tmpl.php | 72 + themes/default/users/password_change.tmpl.php | 31 + themes/default/users/preferences.tmpl.php | 120 + themes/default/users/profile.tmpl.php | 131 + themes/default/warningmessage.tmpl.php | 20 + themes/default_classic/ie_styles.css | 19 + themes/default_classic/images/guide.gif | Bin 0 -> 122 bytes themes/default_classic/images/user-star.gif | Bin 0 -> 319 bytes .../default_classic/include/footer.tmpl.php | 41 + .../default_classic/include/header.tmpl.php | 304 + themes/default_classic/print.css | 13 + themes/default_classic/rtl.css | 14 + themes/default_classic/screenshot.gif | Bin 0 -> 9001 bytes themes/default_classic/styles.css | 1209 +++ themes/default_classic/theme.cfg.php | 42 + themes/themes_readme.txt | 87 + tile.php | 158 + tools/access.php | 157 + tools/backup/create.php | 63 + tools/backup/delete.php | 52 + tools/backup/edit.php | 57 + tools/backup/index.php | 96 + tools/backup/restore.php | 104 + tools/backup/upload.php | 83 + tools/chat/delete_transcript.php | 58 + tools/chat/index.php | 150 + tools/chat/start_transcript.php | 235 + tools/chat/view_transcript.php | 22 + tools/content/index.php | 143 + tools/course_email.php | 215 + tools/course_properties.php | 69 + tools/course_stats.php | 204 + tools/course_tracker.php | 315 + tools/delete_course.php | 50 + tools/edit_styles.php | 51 + tools/enrollment/create_course_list.php | 68 + tools/enrollment/enroll_edit.php | 23 + tools/enrollment/export_course_list.php | 123 + tools/enrollment/import_course_list.php | 51 + tools/enrollment/index.php | 28 + tools/enrollment/privileges.php | 27 + tools/enrollment/verify_list.php | 216 + tools/filemanager/delete.php | 140 + tools/filemanager/edit.php | 146 + tools/filemanager/index.php | 50 + tools/filemanager/move.php | 196 + tools/filemanager/new.php | 207 + tools/filemanager/preview.php | 46 + tools/filemanager/preview_top.php | 44 + tools/filemanager/rename.php | 100 + tools/filemanager/top.php | 194 + tools/filemanager/upload.php | 146 + tools/filemanager/zip.php | 289 + tools/forums/index.php | 89 + tools/glossary/add.php | 153 + tools/glossary/delete.php | 64 + tools/glossary/edit.php | 145 + tools/glossary/index.php | 120 + tools/groups/create.php | 44 + tools/groups/create_automatic.php | 228 + tools/groups/create_manual.php | 149 + tools/groups/delete_group.php | 90 + tools/groups/delete_type.php | 71 + tools/groups/edit_group.php | 139 + tools/groups/edit_type.php | 74 + tools/groups/index.php | 111 + tools/groups/members.php | 222 + tools/ims/ims_export.php | 304 + tools/ims/ims_import.php | 605 ++ tools/ims/index.php | 156 + tools/index.php | 41 + tools/links/add.php | 169 + tools/links/categories.php | 110 + tools/links/categories_create.php | 119 + tools/links/categories_delete.php | 78 + tools/links/categories_edit.php | 119 + tools/links/delete.php | 74 + tools/links/edit.php | 155 + tools/links/index.php | 174 + tools/modules.php | 195 + tools/my_tests.php | 164 + tools/news/index.php | 93 + tools/packages/delete.php | 71 + tools/packages/import.php | 97 + tools/packages/index.php | 62 + tools/packages/lib.inc.php | 90 + tools/packages/scorm-1.2/images/active.png | Bin 0 -> 499 bytes tools/packages/scorm-1.2/images/asset.png | Bin 0 -> 453 bytes tools/packages/scorm-1.2/images/browsed.png | Bin 0 -> 505 bytes tools/packages/scorm-1.2/images/busy.png | Bin 0 -> 499 bytes tools/packages/scorm-1.2/images/completed.png | Bin 0 -> 505 bytes tools/packages/scorm-1.2/images/failed.png | Bin 0 -> 206 bytes .../packages/scorm-1.2/images/incomplete.png | Bin 0 -> 538 bytes .../scorm-1.2/images/not-attempted.png | Bin 0 -> 532 bytes tools/packages/scorm-1.2/images/passed.png | Bin 0 -> 232 bytes tools/packages/scorm-1.2/import.php | 492 ++ .../scorm-1.2/java/ATutorApiAdapterApplet.jar | Bin 0 -> 3574 bytes .../java/ATutorApiAdapterApplet.java | 313 + .../java/PfPLMS-API-adapter-core.jar | Bin 0 -> 17318 bytes tools/packages/scorm-1.2/java/gnu.jar | Bin 0 -> 24398 bytes tools/packages/scorm-1.2/learner_view.php | 45 + tools/packages/scorm-1.2/lib.inc.php | 253 + tools/packages/scorm-1.2/read.php | 106 + tools/packages/scorm-1.2/settings.php | 121 + tools/packages/scorm-1.2/view.inc.php | 399 + tools/packages/scorm-1.2/view.php | 405 + tools/packages/scorm-1.2/write.php | 59 + tools/packages/settings.php | 65 + tools/polls/add.php | 84 + tools/polls/delete.php | 63 + tools/polls/edit.php | 108 + tools/polls/index.php | 103 + tools/prog.php | 88 + tools/side_menu.php | 86 + tools/take_test.php | 198 + tools/tests/add_test_questions.php | 39 + tools/tests/add_test_questions_confirm.php | 96 + tools/tests/create_question_likert.php | 214 + tools/tests/create_question_long.php | 137 + tools/tests/create_question_matching.php | 175 + tools/tests/create_question_matchingdd.php | 176 + tools/tests/create_question_multi.php | 148 + tools/tests/create_question_multianswer.php | 179 + tools/tests/create_question_multichoice.php | 1 + tools/tests/create_question_ordering.php | 164 + tools/tests/create_question_tf.php | 134 + tools/tests/create_question_truefalse.php | 1 + tools/tests/create_test.php | 338 + tools/tests/dd.php | 206 + tools/tests/delete_question.php | 52 + tools/tests/delete_result.php | 56 + tools/tests/delete_test.php | 79 + tools/tests/edit_question_likert.php | 230 + tools/tests/edit_question_long.php | 134 + tools/tests/edit_question_matching.php | 211 + tools/tests/edit_question_matchingdd.php | 211 + tools/tests/edit_question_multi.php | 169 + tools/tests/edit_question_multianswer.php | 183 + tools/tests/edit_question_multichoice.php | 1 + tools/tests/edit_question_ordering.php | 176 + tools/tests/edit_question_tf.php | 148 + tools/tests/edit_question_truefalse.php | 1 + tools/tests/edit_test.php | 366 + tools/tests/form_editor.php | 124 + tools/tests/index.php | 157 + tools/tests/preview.php | 141 + tools/tests/preview_question.php | 57 + tools/tests/question_cats.php | 62 + tools/tests/question_cats_delete.php | 62 + tools/tests/question_cats_manage.php | 81 + tools/tests/question_db.php | 113 + tools/tests/question_remove.php | 58 + tools/tests/questions.php | 229 + tools/tests/results.php | 212 + tools/tests/results_all.php | 189 + tools/tests/results_all_csv.php | 121 + tools/tests/results_all_quest.php | 93 + tools/tests/results_quest_long.php | 75 + tools/tests/view_results.php | 131 + tools/tile/import.php | 91 + tools/tile/index.php | 164 + tools/tracker.php | 64 + tools/tracker/export.php | 61 + tools/tracker/index.php | 128 + tools/tracker/page_student_stats.php | 59 + tools/tracker/reset.php | 46 + tools/tracker/student_usage.php | 83 + tools/view_results.php | 138 + users/browse.php | 24 + users/contact_instructor.php | 174 + users/course_properties.php | 45 + users/course_stats.php | 224 + users/create_course.php | 92 + users/email_change.php | 139 + users/index.php | 103 + users/password_change.php | 89 + users/preferences.php | 79 + users/private_enroll.php | 110 + users/profile.php | 148 + users/profile_picture.php | 20 + users/prog.php | 86 + users/remove_course.php | 44 + users/request_instructor.php | 107 + users/search.php | 28 + 2215 files changed, 165952 insertions(+) create mode 100644 404.php create mode 100644 about.php create mode 100644 acl.php create mode 100644 acollab/bounce.php create mode 100644 acollab/index.php create mode 100644 acollab/integrate.php create mode 100644 admin/admin_delete.php create mode 100644 admin/admin_deny.php create mode 100644 admin/admin_email.php create mode 100644 admin/admins/create.php create mode 100644 admin/admins/delete.php create mode 100644 admin/admins/detail_log.php create mode 100644 admin/admins/edit.php create mode 100644 admin/admins/index.php create mode 100644 admin/admins/log.php create mode 100644 admin/admins/my_edit.php create mode 100644 admin/admins/my_password.php create mode 100644 admin/admins/password.php create mode 100644 admin/admins/reset_log.php create mode 100644 admin/backup/create.php create mode 100644 admin/backup/delete.php create mode 100644 admin/backup/edit.php create mode 100644 admin/backup/index.php create mode 100644 admin/backup/restore.php create mode 100644 admin/config_edit.php create mode 100644 admin/config_template.php create mode 100644 admin/course_categories.php create mode 100644 admin/courses.php create mode 100644 admin/create_category.php create mode 100644 admin/create_course.php create mode 100644 admin/create_user.php create mode 100644 admin/cron.php create mode 100644 admin/cron_config.php create mode 100644 admin/default_preferences.php create mode 100644 admin/delete_category.php create mode 100644 admin/delete_course.php create mode 100644 admin/edit_category.php create mode 100644 admin/edit_course.php create mode 100644 admin/edit_user.php create mode 100644 admin/enrollment/enroll_edit.php create mode 100644 admin/enrollment/index.php create mode 100644 admin/enrollment/privileges.php create mode 100644 admin/error_logging.php create mode 100644 admin/error_logging_bundle.php create mode 100644 admin/error_logging_details.php create mode 100644 admin/error_logging_reset.php create mode 100644 admin/error_logging_view.php create mode 100644 admin/fix_content.php create mode 100644 admin/forum_add.php create mode 100644 admin/forum_delete.php create mode 100644 admin/forum_edit.php create mode 100644 admin/forums.php create mode 100644 admin/index.php create mode 100644 admin/instructor_login.php create mode 100644 admin/instructor_requests.php create mode 100644 admin/language.php create mode 100644 admin/language_add.php create mode 100644 admin/language_delete.php create mode 100644 admin/language_edit.php create mode 100644 admin/language_editor.php create mode 100644 admin/language_import.php create mode 100644 admin/language_term.php create mode 100644 admin/language_translate.php create mode 100644 admin/master_list.php create mode 100644 admin/master_list_delete.php create mode 100644 admin/master_list_edit.php create mode 100644 admin/missing_language.php create mode 100644 admin/modules/add_new.php create mode 100644 admin/modules/create.php create mode 100644 admin/modules/default_mods.php create mode 100644 admin/modules/default_side.php create mode 100644 admin/modules/details.php create mode 100644 admin/modules/index.php create mode 100644 admin/modules/module.template.php create mode 100644 admin/password_user.php create mode 100644 admin/profile_picture.php create mode 100644 admin/rss_feeds/add_feed.php create mode 100644 admin/rss_feeds/delete_feed.php create mode 100644 admin/rss_feeds/edit_feed.php create mode 100644 admin/rss_feeds/index.php create mode 100644 admin/rss_feeds/preview.php create mode 100644 admin/themes/delete.php create mode 100644 admin/themes/import.php create mode 100644 admin/themes/index.php create mode 100644 admin/translate.php create mode 100644 admin/translate_atutor.php create mode 100644 admin/translator.php create mode 100644 admin/user_status.php create mode 100644 admin/users.php create mode 100644 assignments/add_assignment.php create mode 100644 assignments/delete_assignment.php create mode 100644 assignments/edit_assignment.php create mode 100644 assignments/index.php create mode 100644 assignments/index_instructor.php create mode 100644 blogs/add_post.php create mode 100644 blogs/delete_comment.php create mode 100644 blogs/delete_post.php create mode 100644 blogs/edit_post.php create mode 100644 blogs/index.php create mode 100644 blogs/post.php create mode 100644 blogs/view.php create mode 100644 bounce.php create mode 100644 browse.php create mode 100644 chat/MachineThatGoesBing.class create mode 100644 chat/admin.settings.default create mode 100644 chat/atrc.gif create mode 100644 chat/bing.php create mode 100644 chat/bings/.html create mode 100644 chat/bings/chime.au create mode 100644 chat/bings/chime.wav create mode 100644 chat/bings/taras.html create mode 100644 chat/bings/taras.php create mode 100644 chat/chat.php create mode 100644 chat/display.php create mode 100644 chat/filterHistory.php create mode 100644 chat/help.php create mode 100644 chat/history.php create mode 100644 chat/include/html/chat_footer.inc.php create mode 100644 chat/include/html/chat_header.inc.php create mode 100644 chat/include/html/login_footer.inc.php create mode 100644 chat/include/html/login_header.inc.php create mode 100644 chat/index.php create mode 100644 chat/logout.php create mode 100644 chat/options.php create mode 100644 chat/poster.php create mode 100644 chat/prefs.php create mode 100644 chat/prefs2.php create mode 100644 chat/view_transcript.php create mode 100644 confirm.php create mode 100644 contact_instructor.php create mode 100644 content.php create mode 100644 directory.php create mode 100644 documentation/add_note.php create mode 100644 documentation/admin/administrators.php create mode 100644 documentation/admin/backups.php create mode 100644 documentation/admin/categories.php create mode 100644 documentation/admin/configuration.php create mode 100644 documentation/admin/courses.php create mode 100644 documentation/admin/creating_courses.php create mode 100644 documentation/admin/creating_themes.php create mode 100644 documentation/admin/cron_setup.php create mode 100644 documentation/admin/default_preferences.php create mode 100644 documentation/admin/default_side_menu.php create mode 100644 documentation/admin/default_student_tools.php create mode 100644 documentation/admin/email_users.php create mode 100644 documentation/admin/en/index.php create mode 100644 documentation/admin/enrollment.php create mode 100644 documentation/admin/enrollment_privileges.php create mode 100644 documentation/admin/error_logging.php create mode 100644 documentation/admin/feeds.php create mode 100644 documentation/admin/forums.php create mode 100644 documentation/admin/fr/index.php create mode 100644 documentation/admin/google_key.php create mode 100644 documentation/admin/importing_themes.php create mode 100644 documentation/admin/index.php create mode 100644 documentation/admin/installation.php create mode 100644 documentation/admin/instructor_requests.php create mode 100644 documentation/admin/introduction.php create mode 100644 documentation/admin/languages.php create mode 100644 documentation/admin/link-out.gif create mode 100644 documentation/admin/managing_existing_themes.php create mode 100644 documentation/admin/master_student_list.php create mode 100644 documentation/admin/modules.php create mode 100644 documentation/admin/my_account.php create mode 100644 documentation/admin/new_installation.php create mode 100644 documentation/admin/pages.inc.php create mode 100644 documentation/admin/requirements_recommendations.php create mode 100644 documentation/admin/styles.css create mode 100644 documentation/admin/system_preferences.php create mode 100644 documentation/admin/themes.php create mode 100644 documentation/admin/troubleshooting.php create mode 100644 documentation/admin/upgrading.php create mode 100644 documentation/admin/users.php create mode 100644 documentation/approve_note.php create mode 100644 documentation/common/body_footer.inc.php create mode 100644 documentation/common/body_header.inc.php create mode 100644 documentation/common/folder.gif create mode 100644 documentation/common/fr/text.php create mode 100644 documentation/common/frame_header.php create mode 100644 documentation/common/frame_toc.php create mode 100644 documentation/common/link-out.gif create mode 100644 documentation/common/paper.gif create mode 100644 documentation/common/print.php create mode 100644 documentation/common/search.php create mode 100644 documentation/common/styles.css create mode 100644 documentation/common/text.php create mode 100644 documentation/common/vitals.inc.php create mode 100644 documentation/config.inc.php create mode 100644 documentation/delete_note.php create mode 100644 documentation/developer/database.gif create mode 100644 documentation/developer/guidelines.html create mode 100644 documentation/developer/modules.html create mode 100644 documentation/developer/styles.css create mode 100644 documentation/general/browse_courses.php create mode 100644 documentation/general/create_course.php create mode 100644 documentation/general/en/index.php create mode 100644 documentation/general/export_content.php create mode 100644 documentation/general/file_storage.php create mode 100644 documentation/general/fr/index.php create mode 100644 documentation/general/inbox.php create mode 100644 documentation/general/index.php create mode 100644 documentation/general/inside_course.php create mode 100644 documentation/general/introduction.php create mode 100644 documentation/general/login.php create mode 100644 documentation/general/my_courses.php create mode 100644 documentation/general/my_start_page.php create mode 100644 documentation/general/packages.php create mode 100644 documentation/general/pages.inc.php create mode 100644 documentation/general/password_reminder.php create mode 100644 documentation/general/preferences.php create mode 100644 documentation/general/profile.php create mode 100644 documentation/general/register.php create mode 100644 documentation/general/tile.php create mode 100644 documentation/index.php create mode 100644 documentation/index/en/index.php create mode 100644 documentation/index/fr/index.php create mode 100644 documentation/index/index.php create mode 100644 documentation/index_list.php create mode 100644 documentation/instructor/accessibility.php create mode 100644 documentation/instructor/add_questions.php create mode 100644 documentation/instructor/announcements.php create mode 100644 documentation/instructor/assignments.php create mode 100644 documentation/instructor/authenticated_access.php create mode 100644 documentation/instructor/backups.php create mode 100644 documentation/instructor/chat.php create mode 100644 documentation/instructor/content.html create mode 100644 documentation/instructor/content.php create mode 100644 documentation/instructor/content_edit.php create mode 100644 documentation/instructor/content_packages.php create mode 100644 documentation/instructor/content_preview.php create mode 100644 documentation/instructor/content_properties.php create mode 100644 documentation/instructor/content_usage.php create mode 100644 documentation/instructor/course_email.php create mode 100644 documentation/instructor/creating_courses.php create mode 100644 documentation/instructor/creating_editing_content.php create mode 100644 documentation/instructor/creating_questions.php create mode 100644 documentation/instructor/creating_restoring.php create mode 100644 documentation/instructor/creating_tests_surveys.php create mode 100644 documentation/instructor/delete_course.php create mode 100644 documentation/instructor/downloading_uploading.php create mode 100644 documentation/instructor/edit_delete_tests.php create mode 100644 documentation/instructor/editing_deleting.php create mode 100644 documentation/instructor/en/index.php create mode 100644 documentation/instructor/enrollment.php create mode 100644 documentation/instructor/enrollment_alumni.php create mode 100644 documentation/instructor/enrollment_course_list.php create mode 100644 documentation/instructor/enrollment_privileges.php create mode 100644 documentation/instructor/extracting_zip_archives.php create mode 100644 documentation/instructor/faq.php create mode 100644 documentation/instructor/feeds.php create mode 100644 documentation/instructor/file_manager.php create mode 100644 documentation/instructor/forums.php create mode 100644 documentation/instructor/fr/index.php create mode 100644 documentation/instructor/glossary.php create mode 100644 documentation/instructor/glossary_terms.php create mode 100644 documentation/instructor/groups.php create mode 100644 documentation/instructor/index.php create mode 100644 documentation/instructor/introduction.php create mode 100644 documentation/instructor/links.php create mode 100644 documentation/instructor/managing_files_folders.php create mode 100644 documentation/instructor/managing_posts.php create mode 100644 documentation/instructor/managing_threads.php create mode 100644 documentation/instructor/pages.inc.php create mode 100644 documentation/instructor/polls.php create mode 100644 documentation/instructor/preview.php create mode 100644 documentation/instructor/properties.php create mode 100644 documentation/instructor/question_categories.php create mode 100644 documentation/instructor/question_database.php create mode 100644 documentation/instructor/reading_list.php create mode 100644 documentation/instructor/scorm_packages.php create mode 100644 documentation/instructor/side_menu.php create mode 100644 documentation/instructor/statistics.php create mode 100644 documentation/instructor/student_submissions.php create mode 100644 documentation/instructor/student_tools.php create mode 100644 documentation/instructor/test_statistics.php create mode 100644 documentation/instructor/tests_surveys.php create mode 100644 documentation/instructor/tile_repository.php create mode 100644 documentation/instructor/web_search.php create mode 100644 documentation/link-out.gif create mode 100644 documentation/styles.css create mode 100644 editor/add_content.php create mode 100644 editor/add_forum.php create mode 100644 editor/add_news.php create mode 100644 editor/delete_content.php create mode 100644 editor/delete_forum.php create mode 100644 editor/delete_news.php create mode 100644 editor/edit_content.php create mode 100644 editor/edit_forum.php create mode 100644 editor/edit_news.php create mode 100644 editor/edit_post.php create mode 100644 editor/index.php create mode 100644 editor/view_item.php create mode 100644 enroll.php create mode 100644 exestyles.css create mode 100644 export.php create mode 100644 faq/add_question.php create mode 100644 faq/add_topic.php create mode 100644 faq/delete_question.php create mode 100644 faq/delete_topic.php create mode 100644 faq/edit_question.php create mode 100644 faq/edit_topic.php create mode 100644 faq/icon.gif create mode 100644 faq/index.php create mode 100644 faq/index_instructor.php create mode 100644 favicon.ico create mode 100644 file_storage/assignment.php create mode 100644 file_storage/comments.php create mode 100644 file_storage/delete_comment.php create mode 100644 file_storage/delete_revision.php create mode 100644 file_storage/edit.php create mode 100644 file_storage/edit_folder.php create mode 100644 file_storage/index.php create mode 100644 file_storage/move.php create mode 100644 file_storage/new.php create mode 100644 file_storage/revisions.php create mode 100644 forum/delete_thread.php create mode 100644 forum/index.php create mode 100644 forum/list.php create mode 100644 forum/lock_thread.php create mode 100644 forum/move_thread.php create mode 100644 forum/new_thread.php create mode 100644 forum/stick.php create mode 100644 forum/subscribe.php create mode 100644 forum/subscribe_forum.php create mode 100644 forum/view.php create mode 100644 get.php create mode 100644 get_acheck.php create mode 100644 get_profile_img.php create mode 100644 get_rss.php create mode 100644 glossary/index.php create mode 100644 google_search/admin/module_prefs.php create mode 100644 google_search/google.gif create mode 100644 google_search/index.php create mode 100644 groups.php create mode 100644 headstuff.php create mode 100644 help/accessibility.php create mode 100644 help/contact_support.php create mode 100644 help/index.php create mode 100644 images/after.gif create mode 100644 images/archive.gif create mode 100644 images/arrow_ltr.gif create mode 100644 images/arrowicon.gif create mode 100644 images/at-logo.gif create mode 100644 images/at-logo.v.3.gif create mode 100644 images/before.gif create mode 100644 images/blue.gif create mode 100644 images/changes_bullet.gif create mode 100644 images/check.gif create mode 100644 images/checkbox_check.gif create mode 100644 images/checkbox_empty.gif create mode 100644 images/checkmark.gif create mode 100644 images/child_of.gif create mode 100644 images/clr.gif create mode 100644 images/content_pkg.gif create mode 100644 images/courses/3dgraph.jpg create mode 100644 images/courses/anotomy.jpg create mode 100644 images/courses/art_supplies.jpg create mode 100644 images/courses/astronaut.jpg create mode 100644 images/courses/bar_graph.jpg create mode 100644 images/courses/books.jpg create mode 100644 images/courses/botany.jpg create mode 100644 images/courses/brain2.jpg create mode 100644 images/courses/business.jpg create mode 100644 images/courses/business_service.jpg create mode 100644 images/courses/caduceus.jpg create mode 100644 images/courses/car_wireframe.jpg create mode 100644 images/courses/cell-anatomy.jpg create mode 100644 images/courses/chemistry.jpg create mode 100644 images/courses/columbus.jpg create mode 100644 images/courses/disabled_sign.gif create mode 100644 images/courses/drafting.jpg create mode 100644 images/courses/engine.jpg create mode 100644 images/courses/feather-pen.jpg create mode 100644 images/courses/fire_helmut.jpg create mode 100644 images/courses/fractal.jpg create mode 100644 images/courses/head_wireframe.jpg create mode 100644 images/courses/helix.jpg create mode 100644 images/courses/helmet.jpg create mode 100644 images/courses/light-bulb.jpg create mode 100644 images/courses/map.jpg create mode 100644 images/courses/microchip.jpg create mode 100644 images/courses/microscope.jpg create mode 100644 images/courses/molecule.jpg create mode 100644 images/courses/nav_wheel.jpg create mode 100644 images/courses/normal_surfaces.jpg create mode 100644 images/courses/pedal.jpg create mode 100644 images/courses/pharao.jpg create mode 100644 images/courses/pharmacy.jpg create mode 100644 images/courses/planet-earth.jpg create mode 100644 images/courses/police_hat.jpg create mode 100644 images/courses/recycling.jpg create mode 100644 images/courses/skull.jpg create mode 100644 images/courses/skull_wireframe.jpg create mode 100644 images/courses/sl_logo.gif create mode 100644 images/courses/snail.jpg create mode 100644 images/courses/sphere.jpg create mode 100644 images/courses/sphinx.jpg create mode 100644 images/courses/toolbox.jpg create mode 100644 images/courses/triangle.jpg create mode 100644 images/courses/two_roads.jpg create mode 100644 images/edit.gif create mode 100644 images/feedback.gif create mode 100644 images/file.gif create mode 100644 images/file_types/audio.gif create mode 100644 images/file_types/binary.gif create mode 100644 images/file_types/csv.gif create mode 100644 images/file_types/doc.gif create mode 100644 images/file_types/dvi.gif create mode 100644 images/file_types/generic.gif create mode 100644 images/file_types/image.gif create mode 100644 images/file_types/mdb.gif create mode 100644 images/file_types/mpp.gif create mode 100644 images/file_types/ood.gif create mode 100644 images/file_types/oop.gif create mode 100644 images/file_types/oos.gif create mode 100644 images/file_types/oot.gif create mode 100644 images/file_types/pdf.gif create mode 100644 images/file_types/ppt.gif create mode 100644 images/file_types/ps.gif create mode 100644 images/file_types/psd.gif create mode 100644 images/file_types/qt.gif create mode 100644 images/file_types/rtf.gif create mode 100644 images/file_types/sql.gif create mode 100644 images/file_types/sql2.gif create mode 100644 images/file_types/src.gif create mode 100644 images/file_types/swf.gif create mode 100644 images/file_types/treeview.gif create mode 100644 images/file_types/txt.gif create mode 100644 images/file_types/video.gif create mode 100644 images/file_types/viewlet.gif create mode 100644 images/file_types/vsd.gif create mode 100644 images/file_types/xls.gif create mode 100644 images/file_types/xml.gif create mode 100644 images/file_types/zip.gif create mode 100644 images/folder.gif create mode 100644 images/forum/19.gif create mode 100644 images/forum/27.gif create mode 100644 images/forum/3.gif create mode 100644 images/forum/30.gif create mode 100644 images/forum/51.gif create mode 100644 images/forum/52.gif create mode 100644 images/forum/54.gif create mode 100644 images/forum/55.gif create mode 100644 images/forum/56.gif create mode 100644 images/forum/57.gif create mode 100644 images/forum/58.gif create mode 100644 images/forum/frown.gif create mode 100644 images/forum/happy.gif create mode 100644 images/forum/index.html create mode 100644 images/forum/move.gif create mode 100644 images/forum/ohwell.gif create mode 100644 images/forum/smile.gif create mode 100644 images/forum/sticky.gif create mode 100644 images/forum/tongue.gif create mode 100644 images/forum/topic_stick.gif create mode 100644 images/forum/wink.gif create mode 100644 images/glossary.gif create mode 100644 images/glossary_small.gif create mode 100644 images/graph.gif create mode 100644 images/grey.gif create mode 100644 images/help3.gif create mode 100644 images/help4.gif create mode 100644 images/home-acollab.gif create mode 100644 images/home-blogs.gif create mode 100644 images/home-chat.gif create mode 100644 images/home-directory.gif create mode 100644 images/home-export_content.gif create mode 100644 images/home-file_storage.gif create mode 100644 images/home-forums.gif create mode 100644 images/home-glossary.gif create mode 100644 images/home-links.gif create mode 100644 images/home-polls.gif create mode 100644 images/home-reading_list.gif create mode 100644 images/home-site_map.gif create mode 100644 images/home-tests.gif create mode 100644 images/home-tile_search.gif create mode 100644 images/home-tracker.gif create mode 100644 images/icon-zip.gif create mode 100644 images/icon_delete.gif create mode 100644 images/icon_minipost.gif create mode 100644 images/index.html create mode 100644 images/lock.gif create mode 100644 images/logo.gif create mode 100644 images/move-down.gif create mode 100644 images/move-up.gif create mode 100644 images/new.gif create mode 100644 images/pen.gif create mode 100644 images/pen2.gif create mode 100644 images/pen3.gif create mode 100644 images/pub_default.jpg create mode 100644 images/question.gif create mode 100644 images/red.gif create mode 100644 images/rtl_tree/index.html create mode 100644 images/rtl_tree/tree_collapse.gif create mode 100644 images/rtl_tree/tree_end.gif create mode 100644 images/rtl_tree/tree_expand.gif create mode 100644 images/rtl_tree/tree_horizontal.gif create mode 100644 images/rtl_tree/tree_split.gif create mode 100644 images/rtl_tree/tree_vertline.gif create mode 100644 images/search.gif create mode 100644 images/star.gif create mode 100644 images/toc.gif create mode 100644 images/topic_lock.gif create mode 100644 images/transfer.gif create mode 100644 images/tree/index.html create mode 100644 images/tree/tree_collapse.gif create mode 100644 images/tree/tree_disabled.gif create mode 100644 images/tree/tree_end.gif create mode 100644 images/tree/tree_expand.gif create mode 100644 images/tree/tree_horizontal.gif create mode 100644 images/tree/tree_space.gif create mode 100644 images/tree/tree_split.gif create mode 100644 images/tree/tree_vertline.gif create mode 100644 images/unlock.gif create mode 100644 images/x.gif create mode 100644 inbox/export.php create mode 100644 inbox/index.php create mode 100644 inbox/send_message.php create mode 100644 inbox/sent_messages.php create mode 100644 include/classes/Backup/Backup.class.php create mode 100644 include/classes/Backup/TableBackup.class.php create mode 100644 include/classes/CSVExport.class.php create mode 100644 include/classes/CSVImport.class.php create mode 100644 include/classes/ContentManager.class.php create mode 100644 include/classes/ErrorHandler/ErrorHandler.class.php create mode 100644 include/classes/FileManager.class.php create mode 100644 include/classes/Language/Language.class.php create mode 100644 include/classes/Language/LanguageEditor.class.php create mode 100644 include/classes/Language/LanguageManager.class.php create mode 100644 include/classes/Language/LanguageParser.class.php create mode 100644 include/classes/Language/LanguagesParser.class.php create mode 100644 include/classes/Language/RemoteLanguageManager.class.php create mode 100644 include/classes/Message/Message.class.php create mode 100644 include/classes/Module/Module.class.php create mode 100644 include/classes/Module/ModuleParser.class.php create mode 100644 include/classes/Savant2/Savant2.php create mode 100644 include/classes/Savant2/Savant2/Compiler.php create mode 100644 include/classes/Savant2/Savant2/Error.php create mode 100644 include/classes/Savant2/Savant2/Filter.php create mode 100644 include/classes/Savant2/Savant2/Plugin.php create mode 100644 include/classes/Savant2/Savant2/Savant2_Error_exception.php create mode 100644 include/classes/Savant2/Savant2/Savant2_Error_pear.php create mode 100644 include/classes/Savant2/Savant2/Savant2_Error_stack.php create mode 100644 include/classes/Savant2/Savant2/Savant2_Plugin_cycle.php create mode 100644 include/classes/Themes/ThemeParser.class.php create mode 100644 include/classes/XML/XML_HTMLSax/HTMLSax/XML_HTMLSax_Decorators.php create mode 100644 include/classes/XML/XML_HTMLSax/HTMLSax/XML_HTMLSax_States.php create mode 100644 include/classes/XML/XML_HTMLSax/OS/Guess.php create mode 100644 include/classes/XML/XML_HTMLSax/PEAR.php create mode 100644 include/classes/XML/XML_HTMLSax/PEAR/Autoloader.php create mode 100644 include/classes/XML/XML_HTMLSax/PEAR/Common.php create mode 100644 include/classes/XML/XML_HTMLSax/PEAR/Config.php create mode 100644 include/classes/XML/XML_HTMLSax/PEAR/Remote.php create mode 100644 include/classes/XML/XML_HTMLSax/System.php create mode 100644 include/classes/XML/XML_HTMLSax/XML_HTMLSax.php create mode 100644 include/classes/cssparser.php create mode 100644 include/classes/feedcreator.class.php create mode 100644 include/classes/lastRSS.php create mode 100644 include/classes/nusoap.php create mode 100644 include/classes/pclzip.lib.php create mode 100644 include/classes/phpmailer/atutormailer.class.php create mode 100644 include/classes/phpmailer/class.phpmailer.php create mode 100644 include/classes/phpmailer/class.smtp.php create mode 100644 include/classes/phpmailer/phpmailer.lang-en.php create mode 100644 include/classes/sqlutility.class.php create mode 100644 include/classes/testQuestions.class.php create mode 100644 include/classes/vcard.php create mode 100644 include/classes/zipfile.class.php create mode 100644 include/footer.inc.php create mode 100644 include/header.inc.php create mode 100644 include/html/announcements.inc.php create mode 100644 include/html/browse.inc.php create mode 100644 include/html/code_picker.inc.php create mode 100644 include/html/copyright.inc.php create mode 100644 include/html/course_properties.inc.php create mode 100644 include/html/dropdowns/glossary.inc.php create mode 100644 include/html/dropdowns/menu_menu.inc.php create mode 100644 include/html/dropdowns/poll.inc.php create mode 100644 include/html/dropdowns/posts.inc.php create mode 100644 include/html/dropdowns/related_topics.inc.php create mode 100644 include/html/dropdowns/search.inc.php create mode 100644 include/html/dropdowns/users_online.inc.php create mode 100644 include/html/editor_tabs/accessibility.inc.php create mode 100644 include/html/editor_tabs/content_code_picker.inc.php create mode 100644 include/html/editor_tabs/edit.inc.php create mode 100644 include/html/editor_tabs/glossary.inc.php create mode 100644 include/html/editor_tabs/preview.inc.php create mode 100644 include/html/editor_tabs/properties.inc.php create mode 100644 include/html/enroll_edit.inc.php create mode 100644 include/html/enroll_tab_functions.inc.php create mode 100644 include/html/enrollment.inc.php create mode 100644 include/html/filemanager_display.inc.php create mode 100644 include/html/forum.inc.php create mode 100644 include/html/frameset/footer.inc.php create mode 100644 include/html/frameset/header.inc.php create mode 100644 include/html/languages.inc.php create mode 100644 include/html/new_thread.inc.php create mode 100644 include/html/privileges.inc.php create mode 100644 include/html/profile_picture.inc.php create mode 100644 include/html/release_date.inc.php create mode 100644 include/html/search.inc.php create mode 100644 include/html/tests_questions.inc.php create mode 100644 include/ims/adlcp_rootv1p2.xsd create mode 100644 include/ims/footer.html create mode 100644 include/ims/ims.css create mode 100644 include/ims/ims_template.inc.php create mode 100644 include/ims/ims_xml.xsd create mode 100644 include/ims/imscp_rootv1p1p2.xsd create mode 100644 include/ims/imsmd_rootv1p2p1.xsd create mode 100644 include/index.html create mode 100644 include/lib/admin_categories.inc.php create mode 100644 include/lib/chat.inc.php create mode 100644 include/lib/chat_defaults.inc.php create mode 100644 include/lib/constants.inc.php create mode 100644 include/lib/course.inc.php create mode 100644 include/lib/delete_course.inc.php create mode 100644 include/lib/editor_tab_functions.inc.php create mode 100644 include/lib/enroll.inc.php create mode 100644 include/lib/file_storage.inc.php create mode 100644 include/lib/filemanager.inc.php create mode 100644 include/lib/forums.inc.php create mode 100644 include/lib/html_resource_parser.inc.php create mode 100644 include/lib/likert_presets.inc.php create mode 100644 include/lib/links.inc.php create mode 100644 include/lib/menu_pages.php create mode 100644 include/lib/mime.inc.php create mode 100644 include/lib/output.inc.php create mode 100644 include/lib/search.inc.php create mode 100644 include/lib/test_result_functions.inc.php create mode 100644 include/lib/theme_template.inc.php create mode 100644 include/lib/themes.inc.php create mode 100644 include/lib/tinymce.inc.php create mode 100644 include/lib/tracker.inc.php create mode 100644 include/lib/tracker2.inc.php create mode 100644 include/lib/tracker_stats.inc.php create mode 100644 include/lib/tracker_stats2.inc.php create mode 100644 include/phpCache/ChangeLog create mode 100644 include/phpCache/LICENSE create mode 100644 include/phpCache/README create mode 100644 include/phpCache/gc.php create mode 100644 include/phpCache/phpCache.inc.php create mode 100644 include/side_menu.inc.php create mode 100644 include/style_popup.css create mode 100644 include/vitals.inc.php create mode 100644 index.php create mode 100644 install/db/atutor_language_text.sql create mode 100644 install/db/atutor_schema.sql create mode 100644 install/db/atutor_upgrade_1.0_to_1.1.sql create mode 100644 install/db/atutor_upgrade_1.1_to_1.2.sql create mode 100644 install/db/atutor_upgrade_1.2_to_1.3.sql create mode 100644 install/db/atutor_upgrade_1.3.2_to_1.4.sql create mode 100644 install/db/atutor_upgrade_1.3_to_1.3.2.sql create mode 100644 install/db/atutor_upgrade_1.4.1_to_1.4.2.sql create mode 100644 install/db/atutor_upgrade_1.4.2_to_1.4.3.sql create mode 100644 install/db/atutor_upgrade_1.4.3_to_1.5.sql create mode 100644 install/db/atutor_upgrade_1.4_to_1.4.1.sql create mode 100644 install/db/atutor_upgrade_1.5.1_to_1.5.2.sql create mode 100644 install/db/atutor_upgrade_1.5.2_to_1.5.3.sql create mode 100644 install/db/atutor_upgrade_1.5.3.1_to_1.5.3.2.sql create mode 100644 install/db/atutor_upgrade_1.5.3.2_to_1.5.3.3.sql create mode 100644 install/db/atutor_upgrade_1.5.3.3_to_1.5.4.sql create mode 100644 install/db/atutor_upgrade_1.5.3_to_1.5.3.1.sql create mode 100644 install/db/atutor_upgrade_1.5_to_1.5.1.sql create mode 100644 install/images/bad.gif create mode 100644 install/images/feedback.gif create mode 100644 install/images/question.gif create mode 100644 install/include/classes/sqlutility.php create mode 100644 install/include/common.inc.php create mode 100644 install/include/config_template.php create mode 100644 install/include/footer.php create mode 100644 install/include/header.php create mode 100644 install/include/step1.php create mode 100644 install/include/step2.php create mode 100644 install/include/step3.php create mode 100644 install/include/step4.php create mode 100644 install/include/step5.php create mode 100644 install/include/step6.php create mode 100644 install/include/step7.php create mode 100644 install/include/step8.php create mode 100644 install/include/upgrade_header.php create mode 100644 install/include/ustep1.php create mode 100644 install/include/ustep2.php create mode 100644 install/include/ustep3.php create mode 100644 install/include/ustep4.php create mode 100644 install/include/ustep5.php create mode 100644 install/include/ustep6.php create mode 100644 install/index.php create mode 100644 install/install.php create mode 100644 install/not_installed.php create mode 100644 install/stylesheet.css create mode 100644 install/update_config.php create mode 100644 install/upgrade.php create mode 100644 jscripts/help.js create mode 100644 jscripts/interface.js create mode 100644 jscripts/jquery.js create mode 100644 jscripts/tiny_mce/blank.htm create mode 100644 jscripts/tiny_mce/langs/ar.js create mode 100644 jscripts/tiny_mce/langs/ca.js create mode 100644 jscripts/tiny_mce/langs/cs.js create mode 100644 jscripts/tiny_mce/langs/cy.js create mode 100644 jscripts/tiny_mce/langs/da.js create mode 100644 jscripts/tiny_mce/langs/de.js create mode 100644 jscripts/tiny_mce/langs/el.js create mode 100644 jscripts/tiny_mce/langs/en.js create mode 100644 jscripts/tiny_mce/langs/es.js create mode 100644 jscripts/tiny_mce/langs/fa.js create mode 100644 jscripts/tiny_mce/langs/fi.js create mode 100644 jscripts/tiny_mce/langs/fr.js create mode 100644 jscripts/tiny_mce/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/langs/he.js create mode 100644 jscripts/tiny_mce/langs/hu.js create mode 100644 jscripts/tiny_mce/langs/is.js create mode 100644 jscripts/tiny_mce/langs/it.js create mode 100644 jscripts/tiny_mce/langs/ja.js create mode 100644 jscripts/tiny_mce/langs/ko.js create mode 100644 jscripts/tiny_mce/langs/nb.js create mode 100644 jscripts/tiny_mce/langs/nl.js create mode 100644 jscripts/tiny_mce/langs/nn.js create mode 100644 jscripts/tiny_mce/langs/pl.js create mode 100644 jscripts/tiny_mce/langs/pt.js create mode 100644 jscripts/tiny_mce/langs/pt_br.js create mode 100644 jscripts/tiny_mce/langs/readme.txt create mode 100644 jscripts/tiny_mce/langs/ru.js create mode 100644 jscripts/tiny_mce/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/langs/sk.js create mode 100644 jscripts/tiny_mce/langs/sv.js create mode 100644 jscripts/tiny_mce/langs/th.js create mode 100644 jscripts/tiny_mce/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/license.txt create mode 100644 jscripts/tiny_mce/plugins/_template/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/_template/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/_template/images/template.gif create mode 100644 jscripts/tiny_mce/plugins/_template/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/_template/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/_template/popup.htm create mode 100644 jscripts/tiny_mce/plugins/_template/readme.txt create mode 100644 jscripts/tiny_mce/plugins/acheck/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/acheck/images/acheck.gif create mode 100644 jscripts/tiny_mce/plugins/acheck/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/advhr/css/advhr.css create mode 100644 jscripts/tiny_mce/plugins/advhr/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/advhr/images/advhr.gif create mode 100644 jscripts/tiny_mce/plugins/advhr/jscripts/rule.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/fi.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/advhr/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/advhr/readme.txt create mode 100644 jscripts/tiny_mce/plugins/advhr/rule.htm create mode 100644 jscripts/tiny_mce/plugins/advimage/css/advimage.css create mode 100644 jscripts/tiny_mce/plugins/advimage/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/advimage/image.htm create mode 100644 jscripts/tiny_mce/plugins/advimage/images/sample.gif create mode 100644 jscripts/tiny_mce/plugins/advimage/jscripts/functions.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/fa_ca.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/ko.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/advimage/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/advimage/readme.txt create mode 100644 jscripts/tiny_mce/plugins/advlink/css/advlink.css create mode 100644 jscripts/tiny_mce/plugins/advlink/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/advlink/jscripts/functions.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/ko.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/advlink/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/advlink/link.htm create mode 100644 jscripts/tiny_mce/plugins/advlink/readme.txt create mode 100644 jscripts/tiny_mce/plugins/autosave/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/autosave/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/autosave/readme.txt create mode 100644 jscripts/tiny_mce/plugins/cleanup/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/cleanup/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/cleanup/readme.txt create mode 100644 jscripts/tiny_mce/plugins/contextmenu/css/contextmenu.css create mode 100644 jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/contextmenu/images/spacer.gif create mode 100644 jscripts/tiny_mce/plugins/contextmenu/readme.txt create mode 100644 jscripts/tiny_mce/plugins/directionality/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/directionality/images/ltr.gif create mode 100644 jscripts/tiny_mce/plugins/directionality/images/rtl.gif create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/directionality/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/directionality/readme.txt create mode 100644 jscripts/tiny_mce/plugins/emotions/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/emotions/emotions.htm create mode 100644 jscripts/tiny_mce/plugins/emotions/images/emotions.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/readme.txt create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-cool.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-cry.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-embarassed.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-foot-in-mouth.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-frown.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-innocent.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-kiss.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-laughing.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-money-mouth.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-sealed.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-smile.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-surprised.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-tongue-out.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-undecided.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/images/smiley-yell.gif create mode 100644 jscripts/tiny_mce/plugins/emotions/jscripts/functions.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/el.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/it.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/ko.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/emotions/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/emotions/readme.txt create mode 100644 jscripts/tiny_mce/plugins/flash/css/content.css create mode 100644 jscripts/tiny_mce/plugins/flash/css/flash.css create mode 100644 jscripts/tiny_mce/plugins/flash/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/flash/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/flash/flash.htm create mode 100644 jscripts/tiny_mce/plugins/flash/images/flash.gif create mode 100644 jscripts/tiny_mce/plugins/flash/jscripts/flash.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/flash/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/flash/readme.txt create mode 100644 jscripts/tiny_mce/plugins/fullpage/blank.htm create mode 100644 jscripts/tiny_mce/plugins/fullpage/css/fullpage.css create mode 100644 jscripts/tiny_mce/plugins/fullpage/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/fullpage/fullpage.htm create mode 100644 jscripts/tiny_mce/plugins/fullpage/images/add.gif create mode 100644 jscripts/tiny_mce/plugins/fullpage/images/fullpage.gif create mode 100644 jscripts/tiny_mce/plugins/fullpage/images/move_down.gif create mode 100644 jscripts/tiny_mce/plugins/fullpage/images/move_up.gif create mode 100644 jscripts/tiny_mce/plugins/fullpage/images/remove.gif create mode 100644 jscripts/tiny_mce/plugins/fullpage/jscripts/fullpage.js create mode 100644 jscripts/tiny_mce/plugins/fullpage/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm create mode 100644 jscripts/tiny_mce/plugins/fullscreen/images/fullscreen.gif create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/fullscreen/readme.txt create mode 100644 jscripts/tiny_mce/plugins/iespell/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/iespell/images/iespell.gif create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/el.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/it.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/ko.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/iespell/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/iespell/readme.txt create mode 100644 jscripts/tiny_mce/plugins/inlinepopups/css/inlinepopup.css create mode 100644 jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/inlinepopups/images/spacer.gif create mode 100644 jscripts/tiny_mce/plugins/inlinepopups/images/window_close.gif create mode 100644 jscripts/tiny_mce/plugins/inlinepopups/images/window_maximize.gif create mode 100644 jscripts/tiny_mce/plugins/inlinepopups/images/window_minimize.gif create mode 100644 jscripts/tiny_mce/plugins/inlinepopups/images/window_resize.gif create mode 100644 jscripts/tiny_mce/plugins/inlinepopups/jscripts/mcwindows.js create mode 100644 jscripts/tiny_mce/plugins/inlinepopups/readme.txt create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/images/insertdate.gif create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/images/inserttime.gif create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/el.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/fi.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/it.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/ko.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/insertdatetime/readme.txt create mode 100644 jscripts/tiny_mce/plugins/layer/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/layer/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/layer/images/absolute.gif create mode 100644 jscripts/tiny_mce/plugins/layer/images/backward.gif create mode 100644 jscripts/tiny_mce/plugins/layer/images/forward.gif create mode 100644 jscripts/tiny_mce/plugins/layer/images/insert_layer.gif create mode 100644 jscripts/tiny_mce/plugins/layer/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/layer/readme.txt create mode 100644 jscripts/tiny_mce/plugins/noneditable/css/noneditable.css create mode 100644 jscripts/tiny_mce/plugins/noneditable/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/noneditable/readme.txt create mode 100644 jscripts/tiny_mce/plugins/paste/blank.htm create mode 100644 jscripts/tiny_mce/plugins/paste/css/blank.css create mode 100644 jscripts/tiny_mce/plugins/paste/css/pasteword.css create mode 100644 jscripts/tiny_mce/plugins/paste/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/paste/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/paste/images/pastetext.gif create mode 100644 jscripts/tiny_mce/plugins/paste/images/pasteword.gif create mode 100644 jscripts/tiny_mce/plugins/paste/images/selectall.gif create mode 100644 jscripts/tiny_mce/plugins/paste/jscripts/pastetext.js create mode 100644 jscripts/tiny_mce/plugins/paste/jscripts/pasteword.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/fi.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/paste/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/paste/pastetext.htm create mode 100644 jscripts/tiny_mce/plugins/paste/pasteword.htm create mode 100644 jscripts/tiny_mce/plugins/paste/readme.txt create mode 100644 jscripts/tiny_mce/plugins/preview/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/preview/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/preview/example.html create mode 100644 jscripts/tiny_mce/plugins/preview/images/preview.gif create mode 100644 jscripts/tiny_mce/plugins/preview/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/el.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/it.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/ko.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/pt.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/preview/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/preview/readme.txt create mode 100644 jscripts/tiny_mce/plugins/print/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/print/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/print/images/print.gif create mode 100644 jscripts/tiny_mce/plugins/print/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/fi.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/print/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/print/readme.txt create mode 100644 jscripts/tiny_mce/plugins/readme.txt create mode 100644 jscripts/tiny_mce/plugins/save/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/save/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/save/images/save.gif create mode 100644 jscripts/tiny_mce/plugins/save/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/fi.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/save/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/save/readme.txt create mode 100644 jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/images/replace.gif create mode 100644 jscripts/tiny_mce/plugins/searchreplace/images/search.gif create mode 100644 jscripts/tiny_mce/plugins/searchreplace/jscripts/replace.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/jscripts/search.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/fi.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/searchreplace/readme.txt create mode 100644 jscripts/tiny_mce/plugins/searchreplace/replace.htm create mode 100644 jscripts/tiny_mce/plugins/searchreplace/search.htm create mode 100644 jscripts/tiny_mce/plugins/style/css/props.css create mode 100644 jscripts/tiny_mce/plugins/style/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/style/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/style/images/apply_button_bg.gif create mode 100644 jscripts/tiny_mce/plugins/style/images/style_info.gif create mode 100644 jscripts/tiny_mce/plugins/style/jscripts/props.js create mode 100644 jscripts/tiny_mce/plugins/style/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/style/props.htm create mode 100644 jscripts/tiny_mce/plugins/style/readme.txt create mode 100644 jscripts/tiny_mce/plugins/table/cell.htm create mode 100644 jscripts/tiny_mce/plugins/table/css/cell.css create mode 100644 jscripts/tiny_mce/plugins/table/css/row.css create mode 100644 jscripts/tiny_mce/plugins/table/css/table.css create mode 100644 jscripts/tiny_mce/plugins/table/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/table/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/table/images/buttons.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_cell_props.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_delete.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_delete_col.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_delete_row.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_insert_col_after.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_insert_col_before.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_insert_row_after.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_insert_row_before.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_merge_cells.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_row_props.gif create mode 100644 jscripts/tiny_mce/plugins/table/images/table_split_cells.gif create mode 100644 jscripts/tiny_mce/plugins/table/jscripts/cell.js create mode 100644 jscripts/tiny_mce/plugins/table/jscripts/merge_cells.js create mode 100644 jscripts/tiny_mce/plugins/table/jscripts/row.js create mode 100644 jscripts/tiny_mce/plugins/table/jscripts/table.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/ar.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/cs.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/cy.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/da.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/de.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/el.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/en.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/fa.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/fi.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/hu.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/is.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/it.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/ja.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/ko.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/nb.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/nl.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/nn.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/pl.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/pt.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/readme.txt create mode 100644 jscripts/tiny_mce/plugins/table/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/sk.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/sv.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/tw.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/table/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/table/merge_cells.htm create mode 100644 jscripts/tiny_mce/plugins/table/readme.txt create mode 100644 jscripts/tiny_mce/plugins/table/row.htm create mode 100644 jscripts/tiny_mce/plugins/table/table.htm create mode 100644 jscripts/tiny_mce/plugins/zoom/editor_plugin.js create mode 100644 jscripts/tiny_mce/plugins/zoom/editor_plugin_src.js create mode 100644 jscripts/tiny_mce/plugins/zoom/langs/es.js create mode 100644 jscripts/tiny_mce/plugins/zoom/langs/fr.js create mode 100644 jscripts/tiny_mce/plugins/zoom/langs/he.js create mode 100644 jscripts/tiny_mce/plugins/zoom/langs/pt_br.js create mode 100644 jscripts/tiny_mce/plugins/zoom/langs/ru.js create mode 100644 jscripts/tiny_mce/plugins/zoom/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/plugins/zoom/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/plugins/zoom/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/plugins/zoom/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/plugins/zoom/readme.txt create mode 100644 jscripts/tiny_mce/themes/advanced/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/anchor.htm create mode 100644 jscripts/tiny_mce/themes/advanced/charmap.htm create mode 100644 jscripts/tiny_mce/themes/advanced/color_picker.htm create mode 100644 jscripts/tiny_mce/themes/advanced/css/editor_content.css create mode 100644 jscripts/tiny_mce/themes/advanced/css/editor_popup.css create mode 100644 jscripts/tiny_mce/themes/advanced/css/editor_ui.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/cs/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/cs/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/cs/images/insert_image_window.png create mode 100644 jscripts/tiny_mce/themes/advanced/docs/cs/images/insert_link_window.png create mode 100644 jscripts/tiny_mce/themes/advanced/docs/cs/images/insert_table_window.png create mode 100644 jscripts/tiny_mce/themes/advanced/docs/cs/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/cs/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/cs/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/cs/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/cs/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/create_accessible_content.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/images/insert_anchor_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/insert_anchor_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/da/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/de/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/de/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/de/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/de/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/de/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/de/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/de/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/de/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/create_accessible_content.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/images/insert_anchor_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/en/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/es/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/es/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/es/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/es/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/es/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/es/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/es/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/es/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/es/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/es/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fi/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fi/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fi/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fi/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fi/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fi/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fi/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fi/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fi/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fi/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/images/insert_anchor_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_anchor_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/fr_ca/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/hu/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/hu/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/hu/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/hu/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/hu/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/hu/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/hu/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/hu/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/images/table.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/images/table_delete_col.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/images/table_delete_row.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/images/table_insert_col_after.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/images/table_insert_col_before.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/images/table_insert_row_after.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/images/table_insert_row_before.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/images/insert_anchor_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/insert_anchor_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/it/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/images/insert_anchor_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/insert_anchor_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nb/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/images/html_source_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_anchor_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_specchar_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/insert_anchor_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/insert_specchar_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nl/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/images/html_source_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_anchor_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_specchar_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/insert_anchor_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/nn/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/images/insert_anchor_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/insert_anchor_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/pl/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sk/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sk/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sk/images/insert_image_window.png create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sk/images/insert_link_window.png create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sk/images/insert_table_window.png create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sk/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sk/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sk/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sk/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sk/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/images/insert_anchor_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/insert_anchor_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/sv/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/about.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/common_buttons.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/images/insert_anchor_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/images/insert_image_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/images/insert_link_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/images/insert_table_window.gif create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/index.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_anchor_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_image_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_link_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_table_button.htm create mode 100644 jscripts/tiny_mce/themes/advanced/docs/zh_cn/style.css create mode 100644 jscripts/tiny_mce/themes/advanced/editor_template.js create mode 100644 jscripts/tiny_mce/themes/advanced/editor_template_src.js create mode 100644 jscripts/tiny_mce/themes/advanced/image.htm create mode 100644 jscripts/tiny_mce/themes/advanced/images/anchor.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/anchor_symbol.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/backcolor.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/bold.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/bold_de_se.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/bold_es.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/bold_fr.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/bold_ru.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/bold_tw.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/browse.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/bullist.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/button_menu.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/buttons.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/cancel_button_bg.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/charmap.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/cleanup.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/close.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/code.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/color.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/copy.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/custom_1.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/cut.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/forecolor.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/help.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/hr.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/image.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/indent.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/insert_button_bg.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/italic.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/italic_de_se.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/italic_es.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/italic_ru.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/italic_tw.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/justifycenter.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/justifyfull.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/justifyleft.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/justifyright.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/link.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/menu_check.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/newdocument.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/numlist.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/opacity.png create mode 100644 jscripts/tiny_mce/themes/advanced/images/outdent.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/paste.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/redo.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/removeformat.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/separator.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/spacer.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/statusbar_resize.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/strikethrough.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/sub.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/sup.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/table.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/table_delete_col.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/table_delete_row.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/table_insert_col_after.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/table_insert_col_before.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/table_insert_row_after.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/table_insert_row_before.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/underline.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/underline_es.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/underline_fr.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/underline_ru.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/underline_tw.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/undo.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/unlink.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/visualaid.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/xp/tab_bg.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/xp/tab_end.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/xp/tab_sel_bg.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/xp/tab_sel_end.gif create mode 100644 jscripts/tiny_mce/themes/advanced/images/xp/tabs_bg.gif create mode 100644 jscripts/tiny_mce/themes/advanced/jscripts/about.js create mode 100644 jscripts/tiny_mce/themes/advanced/jscripts/anchor.js create mode 100644 jscripts/tiny_mce/themes/advanced/jscripts/charmap.js create mode 100644 jscripts/tiny_mce/themes/advanced/jscripts/color_picker.js create mode 100644 jscripts/tiny_mce/themes/advanced/jscripts/image.js create mode 100644 jscripts/tiny_mce/themes/advanced/jscripts/link.js create mode 100644 jscripts/tiny_mce/themes/advanced/jscripts/source_editor.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/ar.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/ca.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/cs.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/cy.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/da.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/de.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/el.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/en.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/es.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/fa.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/fi.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/fr.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/fr_ca.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/he.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/hu.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/is.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/it.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/ja.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/ko.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/nb.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/nl.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/nn.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/pl.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/pt.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/pt_br.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/readme.txt create mode 100644 jscripts/tiny_mce/themes/advanced/langs/ru.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/ru_KOI8-R.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/ru_UTF-8.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/sk.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/sv.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/tw.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/zh_cn.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/zh_tw.js create mode 100644 jscripts/tiny_mce/themes/advanced/langs/zh_tw_utf8.js create mode 100644 jscripts/tiny_mce/themes/advanced/link.htm create mode 100644 jscripts/tiny_mce/themes/advanced/source_editor.htm create mode 100644 jscripts/tiny_mce/themes/simple/css/editor_content.css create mode 100644 jscripts/tiny_mce/themes/simple/css/editor_popup.css create mode 100644 jscripts/tiny_mce/themes/simple/css/editor_ui.css create mode 100644 jscripts/tiny_mce/themes/simple/editor_template.js create mode 100644 jscripts/tiny_mce/themes/simple/editor_template_src.js create mode 100644 jscripts/tiny_mce/themes/simple/images/bold.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/bold_de_se.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/bold_fr.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/bold_ru.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/bold_tw.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/bullist.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/buttons.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/cleanup.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/italic.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/italic_de_se.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/italic_ru.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/italic_tw.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/numlist.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/redo.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/separator.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/spacer.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/strikethrough.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/underline.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/underline_fr.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/underline_ru.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/underline_tw.gif create mode 100644 jscripts/tiny_mce/themes/simple/images/undo.gif create mode 100644 jscripts/tiny_mce/tiny_mce.js create mode 100644 jscripts/tiny_mce/tiny_mce_popup.js create mode 100644 jscripts/tiny_mce/tiny_mce_src.js create mode 100644 jscripts/tiny_mce/utils/editable_selects.js create mode 100644 jscripts/tiny_mce/utils/form_utils.js create mode 100644 jscripts/tiny_mce/utils/mclayer.js create mode 100644 jscripts/tiny_mce/utils/mctabs.js create mode 100644 jscripts/tiny_mce/utils/validate.js create mode 100644 jscripts/wz_jsgraphics.js create mode 100644 license/gpl_licence.txt create mode 100644 links/add.php create mode 100644 links/index.php create mode 100644 login.php create mode 100644 logout.php create mode 100644 mods/_core/backups/module.php create mode 100644 mods/_core/backups/module.xml create mode 100644 mods/_core/backups/module_delete.php create mode 100644 mods/_core/cats_categories/module.php create mode 100644 mods/_core/cats_categories/module.xml create mode 100644 mods/_core/content/module.php create mode 100644 mods/_core/content/module.xml create mode 100644 mods/_core/content/module_backup.php create mode 100644 mods/_core/content/module_delete.php create mode 100644 mods/_core/content_packaging/module.php create mode 100644 mods/_core/content_packaging/module.xml create mode 100644 mods/_core/courses/module.php create mode 100644 mods/_core/courses/module.xml create mode 100644 mods/_core/enrolment/module.php create mode 100644 mods/_core/enrolment/module.xml create mode 100644 mods/_core/enrolment/module_delete.php create mode 100644 mods/_core/file_manager/module.php create mode 100644 mods/_core/file_manager/module.xml create mode 100644 mods/_core/file_manager/module_backup.php create mode 100644 mods/_core/file_manager/module_delete.php create mode 100644 mods/_core/glossary/module.php create mode 100644 mods/_core/glossary/module.xml create mode 100644 mods/_core/glossary/module_backup.php create mode 100644 mods/_core/glossary/module_delete.php create mode 100644 mods/_core/groups/module.php create mode 100644 mods/_core/groups/module.xml create mode 100644 mods/_core/groups/module_backup.php create mode 100644 mods/_core/groups/module_delete.php create mode 100644 mods/_core/languages/module.php create mode 100644 mods/_core/languages/module.xml create mode 100644 mods/_core/languages/module_cron.php create mode 100644 mods/_core/properties/module.php create mode 100644 mods/_core/properties/module.xml create mode 100644 mods/_core/properties/module_delete.php create mode 100644 mods/_core/themes/module.php create mode 100644 mods/_core/themes/module.xml create mode 100644 mods/_core/users/module.php create mode 100644 mods/_core/users/module.xml create mode 100644 mods/_standard/announcements/module.php create mode 100644 mods/_standard/announcements/module.xml create mode 100644 mods/_standard/announcements/module_backup.php create mode 100644 mods/_standard/announcements/module_delete.php create mode 100644 mods/_standard/assignments/module.php create mode 100644 mods/_standard/assignments/module.sql create mode 100644 mods/_standard/assignments/module.xml create mode 100644 mods/_standard/assignments/module_backup.php create mode 100644 mods/_standard/assignments/module_delete.php create mode 100644 mods/_standard/assignments/module_groups.php create mode 100644 mods/_standard/blogs/module.php create mode 100644 mods/_standard/blogs/module.xml create mode 100644 mods/_standard/blogs/module_delete.php create mode 100644 mods/_standard/blogs/module_groups.php create mode 100644 mods/_standard/calendar/module.php create mode 100644 mods/_standard/calendar/module.xml create mode 100644 mods/_standard/calendar/module_backup.php create mode 100644 mods/_standard/calendar/module_delete.php create mode 100644 mods/_standard/calendar/module_groups.php create mode 100644 mods/_standard/chat/module.php create mode 100644 mods/_standard/chat/module.xml create mode 100644 mods/_standard/chat/module_delete.php create mode 100644 mods/_standard/course_email/module.php create mode 100644 mods/_standard/course_email/module.xml create mode 100644 mods/_standard/directory/module.php create mode 100644 mods/_standard/directory/module.xml create mode 100644 mods/_standard/faq/module.php create mode 100644 mods/_standard/faq/module.xml create mode 100644 mods/_standard/faq/module_backup.php create mode 100644 mods/_standard/faq/module_delete.php create mode 100644 mods/_standard/file_storage/module.php create mode 100644 mods/_standard/file_storage/module.xml create mode 100644 mods/_standard/file_storage/module_delete.php create mode 100644 mods/_standard/file_storage/module_groups.php create mode 100644 mods/_standard/forums/module.php create mode 100644 mods/_standard/forums/module.xml create mode 100644 mods/_standard/forums/module_delete.php create mode 100644 mods/_standard/forums/module_groups.php create mode 100644 mods/_standard/google_search/SOAP_Google.php create mode 100644 mods/_standard/google_search/module.php create mode 100644 mods/_standard/google_search/module.xml create mode 100644 mods/_standard/google_search/side_menu.inc.php create mode 100644 mods/_standard/links/module.php create mode 100644 mods/_standard/links/module.xml create mode 100644 mods/_standard/links/module_backup.php create mode 100644 mods/_standard/links/module_delete.php create mode 100644 mods/_standard/links/module_groups.php create mode 100644 mods/_standard/polls/module.php create mode 100644 mods/_standard/polls/module.xml create mode 100644 mods/_standard/polls/module_backup.php create mode 100644 mods/_standard/polls/module_delete.php create mode 100644 mods/_standard/profile_pictures/module.php create mode 100644 mods/_standard/profile_pictures/module.xml create mode 100644 mods/_standard/reading_list/module.php create mode 100644 mods/_standard/reading_list/module.xml create mode 100644 mods/_standard/reading_list/module_backup.php create mode 100644 mods/_standard/reading_list/module_delete.php create mode 100644 mods/_standard/rss_feeds/load_file.php create mode 100644 mods/_standard/rss_feeds/module.php create mode 100644 mods/_standard/rss_feeds/module.xml create mode 100644 mods/_standard/sitemap/module.php create mode 100644 mods/_standard/sitemap/module.xml create mode 100644 mods/_standard/statistics/module.php create mode 100644 mods/_standard/statistics/module.xml create mode 100644 mods/_standard/statistics/module_backup.php create mode 100644 mods/_standard/statistics/module_delete.php create mode 100644 mods/_standard/student_tools/module.php create mode 100644 mods/_standard/student_tools/module.xml create mode 100644 mods/_standard/tests/module.php create mode 100644 mods/_standard/tests/module.xml create mode 100644 mods/_standard/tests/module_backup.php create mode 100644 mods/_standard/tests/module_delete.php create mode 100644 mods/_standard/tests/module_groups.php create mode 100644 mods/_standard/tile_search/module.php create mode 100644 mods/_standard/tile_search/module.xml create mode 100644 mods/_standard/tracker/module.php create mode 100644 mods/_standard/tracker/module.xml create mode 100644 mods/acollab/module.php create mode 100644 mods/acollab/module.xml create mode 100644 mods/acollab/module_install.php create mode 100644 mods/hello_world/hello_world.jpg create mode 100644 mods/hello_world/index.php create mode 100644 mods/hello_world/index_admin.php create mode 100644 mods/hello_world/index_instructor.php create mode 100644 mods/hello_world/index_mystart.php create mode 100644 mods/hello_world/index_public.php create mode 100644 mods/hello_world/module.css create mode 100644 mods/hello_world/module.php create mode 100644 mods/hello_world/module.sql create mode 100644 mods/hello_world/module.xml create mode 100644 mods/hello_world/module_backup.php create mode 100644 mods/hello_world/module_cron.php create mode 100644 mods/hello_world/module_delete.php create mode 100644 mods/hello_world/module_install.php create mode 100644 mods/hello_world/side_menu.inc.php create mode 100644 mods/index.html create mode 100644 mods/scorm_packages/module.php create mode 100644 mods/scorm_packages/module.sql create mode 100644 mods/scorm_packages/module.xml create mode 100644 mods/scorm_packages/module_install.php create mode 100644 mods/scorm_packages/possible_module_backup.php create mode 100644 my_stats.php create mode 100644 overlib.js create mode 100644 overlib_mini.js create mode 100644 overlib_mini_help.js create mode 100644 packages/index.php create mode 100644 packages/preferences.php create mode 100644 password_reminder.php create mode 100644 polls/index.php create mode 100644 popuphelp.php create mode 100644 profile.php create mode 100644 reading_list/add_resource_av.php create mode 100644 reading_list/add_resource_book.php create mode 100644 reading_list/add_resource_file.php create mode 100644 reading_list/add_resource_handout.php create mode 100644 reading_list/add_resource_url.php create mode 100644 reading_list/delete_reading.php create mode 100644 reading_list/delete_resource.php create mode 100644 reading_list/display_resource.php create mode 100644 reading_list/display_resources.php create mode 100644 reading_list/edit_reading_av.php create mode 100644 reading_list/edit_reading_book.php create mode 100644 reading_list/edit_reading_file.php create mode 100644 reading_list/edit_reading_handout.php create mode 100644 reading_list/edit_reading_url.php create mode 100644 reading_list/index.php create mode 100644 reading_list/index_instructor.php create mode 100644 reading_list/new_reading_av.php create mode 100644 reading_list/new_reading_book.php create mode 100644 reading_list/new_reading_file.php create mode 100644 reading_list/new_reading_handout.php create mode 100644 reading_list/new_reading_url.php create mode 100644 reading_list/reading_details.php create mode 100644 readme create mode 100644 registration.php create mode 100644 search.php create mode 100644 sha-1factory.js create mode 100644 sitemap.php create mode 100644 svn.php create mode 100644 themes/blumin/content.tmpl.php create mode 100644 themes/blumin/forms.css create mode 100644 themes/blumin/ie_styles.css create mode 100644 themes/blumin/images/arrow_ltr.gif create mode 100644 themes/blumin/images/back.gif create mode 100644 themes/blumin/images/continue.gif create mode 100644 themes/blumin/images/linkOpaque.gif create mode 100644 themes/blumin/images/linkTransparent.gif create mode 100644 themes/blumin/images/newsitem_icon.gif create mode 100644 themes/blumin/images/next.gif create mode 100644 themes/blumin/images/previous.gif create mode 100644 themes/blumin/images/resume.gif create mode 100644 themes/blumin/images/side_arrow.gif create mode 100644 themes/blumin/images/sort.gif create mode 100644 themes/blumin/images/user-star.gif create mode 100644 themes/blumin/images/user.gif create mode 100644 themes/blumin/include/box.tmpl.php create mode 100644 themes/blumin/include/footer.tmpl.php create mode 100644 themes/blumin/include/header.tmpl.php create mode 100644 themes/blumin/include/side_menu.tmpl.php create mode 100644 themes/blumin/print.css create mode 100644 themes/blumin/readme.txt create mode 100644 themes/blumin/screenshot.gif create mode 100644 themes/blumin/styles.css create mode 100644 themes/blumin/theme.cfg.php create mode 100644 themes/blumin/theme_info.xml create mode 100644 themes/default/confirmmessage.tmpl.php create mode 100644 themes/default/content.tmpl.php create mode 100644 themes/default/errormessage.tmpl.php create mode 100644 themes/default/feedbackmessage.tmpl.php create mode 100644 themes/default/forms.css create mode 100644 themes/default/ie_styles.css create mode 100644 themes/default/images/arrow_ltr.gif create mode 100644 themes/default/images/back.gif create mode 100644 themes/default/images/error-large.gif create mode 100644 themes/default/images/guide.gif create mode 100644 themes/default/images/instructor.gif create mode 100644 themes/default/images/next.gif create mode 100644 themes/default/images/pen.gif create mode 100644 themes/default/images/pen2.gif create mode 100644 themes/default/images/pencils.jpg create mode 100644 themes/default/images/previous.gif create mode 100644 themes/default/images/resume.gif create mode 100644 themes/default/images/side_arrow.gif create mode 100644 themes/default/images/sort.gif create mode 100644 themes/default/images/user-star.gif create mode 100644 themes/default/images/user.gif create mode 100644 themes/default/include/box.tmpl.php create mode 100644 themes/default/include/fm_footer.tmpl.php create mode 100644 themes/default/include/fm_header.tmpl.php create mode 100644 themes/default/include/footer.tmpl.php create mode 100644 themes/default/include/header.tmpl.php create mode 100644 themes/default/index.tmpl.php create mode 100644 themes/default/infomessage.tmpl.php create mode 100644 themes/default/login.tmpl.php create mode 100644 themes/default/password_change.tmpl.php create mode 100644 themes/default/password_reminder.tmpl.php create mode 100644 themes/default/password_reminder_feedback.tmpl.php create mode 100644 themes/default/print.css create mode 100644 themes/default/profile.tmpl.php create mode 100644 themes/default/readme.txt create mode 100644 themes/default/registration.tmpl.php create mode 100644 themes/default/rtl.css create mode 100644 themes/default/screenshot.gif create mode 100644 themes/default/styles.css create mode 100644 themes/default/test_questions/footer.tmpl.php create mode 100644 themes/default/test_questions/header.tmpl.php create mode 100644 themes/default/test_questions/likert.tmpl.php create mode 100644 themes/default/test_questions/likert_qti_2p1.tmpl.php create mode 100644 themes/default/test_questions/likert_result.tmpl.php create mode 100644 themes/default/test_questions/likert_stats.tmpl.php create mode 100644 themes/default/test_questions/long.tmpl.php create mode 100644 themes/default/test_questions/long_qti_2p1.tmpl.php create mode 100644 themes/default/test_questions/long_result.tmpl.php create mode 100644 themes/default/test_questions/long_stats.tmpl.php create mode 100644 themes/default/test_questions/manifest_qti_2p1.tmpl.php create mode 100644 themes/default/test_questions/matching.tmpl.php create mode 100644 themes/default/test_questions/matching_qti_2p1.tmpl.php create mode 100644 themes/default/test_questions/matching_result.tmpl.php create mode 100644 themes/default/test_questions/matching_stats.tmpl.php create mode 100644 themes/default/test_questions/matchingdd.tmpl.php create mode 100644 themes/default/test_questions/matchingdd_qti_2p1.tmpl.php create mode 100644 themes/default/test_questions/matchingdd_result.tmpl.php create mode 100644 themes/default/test_questions/matchingdd_stats.tmpl.php create mode 100644 themes/default/test_questions/multianswer.tmpl.php create mode 100644 themes/default/test_questions/multianswer_qti_2p1.tmpl.php create mode 100644 themes/default/test_questions/multianswer_result.tmpl.php create mode 100644 themes/default/test_questions/multianswer_stats.tmpl.php create mode 100644 themes/default/test_questions/multichoice.tmpl.php create mode 100644 themes/default/test_questions/multichoice_qti_2p1.tmpl.php create mode 100644 themes/default/test_questions/multichoice_result.tmpl.php create mode 100644 themes/default/test_questions/multichoice_stats.tmpl.php create mode 100644 themes/default/test_questions/ordering.tmpl.php create mode 100644 themes/default/test_questions/ordering_qti_2p1.tmpl.php create mode 100644 themes/default/test_questions/ordering_result.tmpl.php create mode 100644 themes/default/test_questions/ordering_stats.tmpl.php create mode 100644 themes/default/test_questions/truefalse.tmpl.php create mode 100644 themes/default/test_questions/truefalse_qti_2p1.tmpl.php create mode 100644 themes/default/test_questions/truefalse_result.tmpl.php create mode 100644 themes/default/test_questions/truefalse_stats.tmpl.php create mode 100644 themes/default/theme.cfg.php create mode 100644 themes/default/users/browse.tmpl.php create mode 100644 themes/default/users/email_change.tmpl.php create mode 100644 themes/default/users/index.tmpl.php create mode 100644 themes/default/users/password_change.tmpl.php create mode 100644 themes/default/users/preferences.tmpl.php create mode 100644 themes/default/users/profile.tmpl.php create mode 100644 themes/default/warningmessage.tmpl.php create mode 100644 themes/default_classic/ie_styles.css create mode 100644 themes/default_classic/images/guide.gif create mode 100644 themes/default_classic/images/user-star.gif create mode 100644 themes/default_classic/include/footer.tmpl.php create mode 100644 themes/default_classic/include/header.tmpl.php create mode 100644 themes/default_classic/print.css create mode 100644 themes/default_classic/rtl.css create mode 100644 themes/default_classic/screenshot.gif create mode 100644 themes/default_classic/styles.css create mode 100644 themes/default_classic/theme.cfg.php create mode 100644 themes/themes_readme.txt create mode 100644 tile.php create mode 100644 tools/access.php create mode 100644 tools/backup/create.php create mode 100644 tools/backup/delete.php create mode 100644 tools/backup/edit.php create mode 100644 tools/backup/index.php create mode 100644 tools/backup/restore.php create mode 100644 tools/backup/upload.php create mode 100644 tools/chat/delete_transcript.php create mode 100644 tools/chat/index.php create mode 100644 tools/chat/start_transcript.php create mode 100644 tools/chat/view_transcript.php create mode 100644 tools/content/index.php create mode 100644 tools/course_email.php create mode 100644 tools/course_properties.php create mode 100644 tools/course_stats.php create mode 100644 tools/course_tracker.php create mode 100644 tools/delete_course.php create mode 100644 tools/edit_styles.php create mode 100644 tools/enrollment/create_course_list.php create mode 100644 tools/enrollment/enroll_edit.php create mode 100644 tools/enrollment/export_course_list.php create mode 100644 tools/enrollment/import_course_list.php create mode 100644 tools/enrollment/index.php create mode 100644 tools/enrollment/privileges.php create mode 100644 tools/enrollment/verify_list.php create mode 100644 tools/filemanager/delete.php create mode 100644 tools/filemanager/edit.php create mode 100644 tools/filemanager/index.php create mode 100644 tools/filemanager/move.php create mode 100644 tools/filemanager/new.php create mode 100644 tools/filemanager/preview.php create mode 100644 tools/filemanager/preview_top.php create mode 100644 tools/filemanager/rename.php create mode 100644 tools/filemanager/top.php create mode 100644 tools/filemanager/upload.php create mode 100644 tools/filemanager/zip.php create mode 100644 tools/forums/index.php create mode 100644 tools/glossary/add.php create mode 100644 tools/glossary/delete.php create mode 100644 tools/glossary/edit.php create mode 100644 tools/glossary/index.php create mode 100644 tools/groups/create.php create mode 100644 tools/groups/create_automatic.php create mode 100644 tools/groups/create_manual.php create mode 100644 tools/groups/delete_group.php create mode 100644 tools/groups/delete_type.php create mode 100644 tools/groups/edit_group.php create mode 100644 tools/groups/edit_type.php create mode 100644 tools/groups/index.php create mode 100644 tools/groups/members.php create mode 100644 tools/ims/ims_export.php create mode 100644 tools/ims/ims_import.php create mode 100644 tools/ims/index.php create mode 100644 tools/index.php create mode 100644 tools/links/add.php create mode 100644 tools/links/categories.php create mode 100644 tools/links/categories_create.php create mode 100644 tools/links/categories_delete.php create mode 100644 tools/links/categories_edit.php create mode 100644 tools/links/delete.php create mode 100644 tools/links/edit.php create mode 100644 tools/links/index.php create mode 100644 tools/modules.php create mode 100644 tools/my_tests.php create mode 100644 tools/news/index.php create mode 100644 tools/packages/delete.php create mode 100644 tools/packages/import.php create mode 100644 tools/packages/index.php create mode 100644 tools/packages/lib.inc.php create mode 100644 tools/packages/scorm-1.2/images/active.png create mode 100644 tools/packages/scorm-1.2/images/asset.png create mode 100644 tools/packages/scorm-1.2/images/browsed.png create mode 100644 tools/packages/scorm-1.2/images/busy.png create mode 100644 tools/packages/scorm-1.2/images/completed.png create mode 100644 tools/packages/scorm-1.2/images/failed.png create mode 100644 tools/packages/scorm-1.2/images/incomplete.png create mode 100644 tools/packages/scorm-1.2/images/not-attempted.png create mode 100644 tools/packages/scorm-1.2/images/passed.png create mode 100644 tools/packages/scorm-1.2/import.php create mode 100644 tools/packages/scorm-1.2/java/ATutorApiAdapterApplet.jar create mode 100644 tools/packages/scorm-1.2/java/ATutorApiAdapterApplet.java create mode 100644 tools/packages/scorm-1.2/java/PfPLMS-API-adapter-core.jar create mode 100644 tools/packages/scorm-1.2/java/gnu.jar create mode 100644 tools/packages/scorm-1.2/learner_view.php create mode 100644 tools/packages/scorm-1.2/lib.inc.php create mode 100644 tools/packages/scorm-1.2/read.php create mode 100644 tools/packages/scorm-1.2/settings.php create mode 100644 tools/packages/scorm-1.2/view.inc.php create mode 100644 tools/packages/scorm-1.2/view.php create mode 100644 tools/packages/scorm-1.2/write.php create mode 100644 tools/packages/settings.php create mode 100644 tools/polls/add.php create mode 100644 tools/polls/delete.php create mode 100644 tools/polls/edit.php create mode 100644 tools/polls/index.php create mode 100644 tools/prog.php create mode 100644 tools/side_menu.php create mode 100644 tools/take_test.php create mode 100644 tools/tests/add_test_questions.php create mode 100644 tools/tests/add_test_questions_confirm.php create mode 100644 tools/tests/create_question_likert.php create mode 100644 tools/tests/create_question_long.php create mode 100644 tools/tests/create_question_matching.php create mode 100644 tools/tests/create_question_matchingdd.php create mode 100644 tools/tests/create_question_multi.php create mode 100644 tools/tests/create_question_multianswer.php create mode 100644 tools/tests/create_question_multichoice.php create mode 100644 tools/tests/create_question_ordering.php create mode 100644 tools/tests/create_question_tf.php create mode 100644 tools/tests/create_question_truefalse.php create mode 100644 tools/tests/create_test.php create mode 100644 tools/tests/dd.php create mode 100644 tools/tests/delete_question.php create mode 100644 tools/tests/delete_result.php create mode 100644 tools/tests/delete_test.php create mode 100644 tools/tests/edit_question_likert.php create mode 100644 tools/tests/edit_question_long.php create mode 100644 tools/tests/edit_question_matching.php create mode 100644 tools/tests/edit_question_matchingdd.php create mode 100644 tools/tests/edit_question_multi.php create mode 100644 tools/tests/edit_question_multianswer.php create mode 100644 tools/tests/edit_question_multichoice.php create mode 100644 tools/tests/edit_question_ordering.php create mode 100644 tools/tests/edit_question_tf.php create mode 100644 tools/tests/edit_question_truefalse.php create mode 100644 tools/tests/edit_test.php create mode 100644 tools/tests/form_editor.php create mode 100644 tools/tests/index.php create mode 100644 tools/tests/preview.php create mode 100644 tools/tests/preview_question.php create mode 100644 tools/tests/question_cats.php create mode 100644 tools/tests/question_cats_delete.php create mode 100644 tools/tests/question_cats_manage.php create mode 100644 tools/tests/question_db.php create mode 100644 tools/tests/question_remove.php create mode 100644 tools/tests/questions.php create mode 100644 tools/tests/results.php create mode 100644 tools/tests/results_all.php create mode 100644 tools/tests/results_all_csv.php create mode 100644 tools/tests/results_all_quest.php create mode 100644 tools/tests/results_quest_long.php create mode 100644 tools/tests/view_results.php create mode 100644 tools/tile/import.php create mode 100644 tools/tile/index.php create mode 100644 tools/tracker.php create mode 100644 tools/tracker/export.php create mode 100644 tools/tracker/index.php create mode 100644 tools/tracker/page_student_stats.php create mode 100644 tools/tracker/reset.php create mode 100644 tools/tracker/student_usage.php create mode 100644 tools/view_results.php create mode 100644 users/browse.php create mode 100644 users/contact_instructor.php create mode 100644 users/course_properties.php create mode 100644 users/course_stats.php create mode 100644 users/create_course.php create mode 100644 users/email_change.php create mode 100644 users/index.php create mode 100644 users/password_change.php create mode 100644 users/preferences.php create mode 100644 users/private_enroll.php create mode 100644 users/profile.php create mode 100644 users/profile_picture.php create mode 100644 users/prog.php create mode 100644 users/remove_course.php create mode 100644 users/request_instructor.php create mode 100644 users/search.php diff --git a/404.php b/404.php new file mode 100644 index 000000000..9f948301e --- /dev/null +++ b/404.php @@ -0,0 +1,25 @@ +printInfos($_info); + +$msg->printAll(); + +require (AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/about.php b/about.php new file mode 100644 index 000000000..21d0ffa1f --- /dev/null +++ b/about.php @@ -0,0 +1,26 @@ + +

+ + + + \ No newline at end of file diff --git a/acl.php b/acl.php new file mode 100644 index 000000000..bdeb94d3d --- /dev/null +++ b/acl.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/acollab/bounce.php b/acollab/bounce.php new file mode 100644 index 000000000..255bc9521 --- /dev/null +++ b/acollab/bounce.php @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/acollab/index.php b/acollab/index.php new file mode 100644 index 000000000..ea6dea812 --- /dev/null +++ b/acollab/index.php @@ -0,0 +1,43 @@ + +

+ + + +
+ +
+ + \ No newline at end of file diff --git a/acollab/integrate.php b/acollab/integrate.php new file mode 100644 index 000000000..491004c88 --- /dev/null +++ b/acollab/integrate.php @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/admin/admin_delete.php b/admin/admin_delete.php new file mode 100644 index 000000000..6dca8ba6e --- /dev/null +++ b/admin/admin_delete.php @@ -0,0 +1,159 @@ +addError('NODELETE_USER'); + header('Location: '.AT_BASE_HREF.'users.php'); + exit;*/ + return; + } + + $sql = "DELETE FROM ".TABLE_PREFIX."course_enrollment WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'course_enrollment', mysql_affected_rows($db), $sql); + + $sql = "DELETE FROM ".TABLE_PREFIX."forums_accessed WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'forums_accessed', mysql_affected_rows($db), $sql); + + $sql = "DELETE FROM ".TABLE_PREFIX."forums_subscriptions WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'forums_subscriptions', mysql_affected_rows($db), $sql); + + + /****/ + /* delete forum threads block: */ + /* delete the thread replies: */ + $sql = "SELECT COUNT(*) AS cnt, parent_id, forum_id FROM ".TABLE_PREFIX."forums_threads WHERE member_id=$id AND parent_id<>0 GROUP BY parent_id"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + /* update the forum posts counter */ + $sql = "UPDATE ".TABLE_PREFIX."forums SET num_posts=num_posts - $row[cnt], last_post=last_post WHERE forum_id=$row[forum_id]"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_UPDATE, 'forums', mysql_affected_rows($db), $sql); + + /* update the topics reply counter */ + $sql = "UPDATE ".TABLE_PREFIX."forums_threads SET num_comments=num_comments-$row[cnt], last_comment=last_comment, date=date WHERE post_id=$row[parent_id]"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_UPDATE, 'forums_threads', mysql_affected_rows($db), $sql); + } + + /* delete threads this member started: */ + $sql = "SELECT post_id, forum_id, num_comments FROM ".TABLE_PREFIX."forums_threads WHERE member_id=$id AND parent_id=0"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + /* update the forum posts and topics counters */ + $num_posts = $row['num_comments'] + 1; + $sql = "UPDATE ".TABLE_PREFIX."forums SET num_topics=num_topics-1, num_posts=num_posts - $num_posts, last_post=last_post WHERE forum_id=$row[forum_id]"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_UPDATE, 'forums', mysql_affected_rows($db), $sql); + + /* delete the replies */ + $sql = "DELETE FROM ".TABLE_PREFIX."forums_threads WHERE parent_id=$row[post_id]"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'forums_threads', mysql_affected_rows($db), $sql); + } + /* delete the actual threads */ + $sql = "DELETE FROM ".TABLE_PREFIX."forums_threads WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'forums_threads', mysql_affected_rows($db), $sql); + + /* end delete forum threads block. */ + /****/ + + $sql = "DELETE FROM ".TABLE_PREFIX."instructor_approvals WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'instructor_approvals', mysql_affected_rows($db), $sql); + + $sql = "DELETE FROM ".TABLE_PREFIX."messages WHERE from_member_id=$id OR to_member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'messages', mysql_affected_rows($db), $sql); + + $sql = "DELETE FROM ".TABLE_PREFIX."polls_members WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'polls_members', mysql_affected_rows($db), $sql); + + $sql = "DELETE FROM ".TABLE_PREFIX."tests_answers WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'tests_answers', mysql_affected_rows($db), $sql); + + $sql = "DELETE FROM ".TABLE_PREFIX."tests_results WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'tests_results', mysql_affected_rows($db), $sql); + + $sql = "DELETE FROM ".TABLE_PREFIX."users_online WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'users_online', mysql_affected_rows($db), $sql); + + $sql = "DELETE FROM ".TABLE_PREFIX."members WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'members', mysql_affected_rows($db), $sql); + + $sql = "DELETE FROM ".TABLE_PREFIX."member_track WHERE member_id=$id"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'member_track', mysql_affected_rows($db), $sql); + + return; +} + +$ids = explode(',', $_REQUEST['id']); + +if (isset($_POST['submit_yes'])) { + + foreach($ids as $id) { + delete_user(intval($id)); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + if (isset($_POST['ml']) && $_REQUEST['ml']) { + header('Location: '.AT_BASE_HREF.'admin/master_list.php'); + } else { + header('Location: '.AT_BASE_HREF.'admin/users.php'); + } + exit; +} else if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + if (isset($_POST['ml']) && $_REQUEST['ml']) { + header('Location: '.AT_BASE_HREF.'admin/master_list.php'); + } else { + header('Location: '.AT_BASE_HREF.'admin/users.php'); + } + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +$names = get_login($ids); +$names_html = ''; +$hidden_vars['id'] = implode(',', array_keys($names)); +$hidden_vars['ml'] = intval($_REQUEST['ml']); + +$confirm = array('DELETE_USER', $names_html); +$msg->addConfirm($confirm, $hidden_vars); +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/admin/admin_deny.php b/admin/admin_deny.php new file mode 100644 index 000000000..3b8928706 --- /dev/null +++ b/admin/admin_deny.php @@ -0,0 +1,151 @@ +addFeedback('PROFILE_UPDATED_ADMIN'); + + /* notify the users that they have been denied: */ + $sql = "SELECT email, first_name, last_name FROM ".TABLE_PREFIX."members WHERE member_id=".$_POST['id']; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_array($result)) { + $to_email = $row['email']; + + $message = _AT('instructor_request_deny', AT_BASE_HREF)." \n"; + if ($_POST['msg_option'] == $other_option) { + $message.=addslashes($_POST['other_msg']); + } else if ($_POST['msg_option']) { + $message.= '\n'.$msg_options[$_POST['msg_option']]; + } + + if ($to_email != '') { + + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + + $mail = new ATutorMailer; + + $mail->From = $_config['contact_email']; + $mail->AddAddress($to_email); + $mail->Subject = _AT('instructor_request'); + $mail->Body = $message; + + if(!$mail->Send()) { + //echo 'There was an error sending the message'; + $msg->printErrors('SENDING_ERROR'); + exit; + } + + unset($mail); + } + } + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + Header('Location: index.php'); + exit; +} else if ($_POST['cancel']) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT email, first_name, last_name FROM ".TABLE_PREFIX."members WHERE member_id=".$request_id; +$result = mysql_query($sql, $db); + +if ($row = mysql_fetch_array($result)) { + $username = ''; + if ($row['first_name']!="") { + $username .= $row['first_name'].' '; + } + + if ($row['last_name']!="") { + $username .= $row['last_name'].' '; + } + $username .= $row['email']; +} else { + require(AT_INCLUDE_PATH.'header.inc.php'); + echo _AT('no_user_found'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +?> + +
+ + + +
+
+ +
+ +
+
+ +
'; + + $num_msgs = count($msg_options) - 1; + for ($i = 1; $i<$num_msgs; $i++) { + echo '
'; + } + + echo ''; + ?> + +
+
+ +
+ + +
+
+
+ + \ No newline at end of file diff --git a/admin/admin_email.php b/admin/admin_email.php new file mode 100644 index 000000000..dc058ff3e --- /dev/null +++ b/admin/admin_email.php @@ -0,0 +1,132 @@ +addFeedback('CANCELLED'); + + header('Location: users.php#feedback'); + exit; +} else if ($_POST['submit']) { + $missing_fields = array(); + + $_POST['subject'] = trim($_POST['subject']); + $_POST['body'] = trim($_POST['body']); + + if (($_POST['to'] == '') || ($_POST['to'] == 0)) { + $missing_fields[] = _AT('to'); + } + + if ($_POST['subject'] == '') { + $missing_fields[] = _AT('subject'); + } + + if ($_POST['body'] == '') { + $missing_fields[] = _AT('body'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + if (!$msg->containsErrors()) { + if ($_POST['to'] == 1) { + // choose all instructors + $sql = "SELECT * FROM ".TABLE_PREFIX."members WHERE status = ".AT_STATUS_INSTRUCTOR; + } else if ($_POST['to'] == 2) { + // choose all students + $sql = "SELECT * FROM ".TABLE_PREFIX."members WHERE status = ".AT_STATUS_STUDENT; + } else { + // choose all members + $sql = "SELECT * FROM ".TABLE_PREFIX."members WHERE status = ".AT_STATUS_INSTRUCTOR." OR status = ".AT_STATUS_STUDENT; + } + + $result = mysql_query($sql,$db); + + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + + $mail = new ATutorMailer; + + while ($row = mysql_fetch_assoc($result)) { + $mail->AddBCC($row['email']); + } + + + $mail->From = $_config['contact_email']; + $mail->FromName = $_config['site_name']; + $mail->AddAddress($_config['contact_email']); + $mail->Subject = $stripslashes($_POST['subject']); + $mail->Body = $stripslashes($_POST['body']); + + if(!$mail->Send()) { + //echo 'There was an error sending the message'; + $msg->printErrors('SENDING_ERROR'); + exit; + } + unset($mail); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: users.php'); + exit; + } +} + +$title = _AT('admin_email'); + +$onload = 'document.form.subject.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."members ORDER BY login"; +$result = mysql_query($sql,$db); +$row = mysql_fetch_array($result); +if ($row['cnt'] == 0) { + $msg->printErrors('NO_MEMBERS'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +?> +
+ + +
+
+
*

+ + /> + /> +
+ +
+
*

+ +
+ +
+
*

+ +
+ +
+ + +
+
+
+ + \ No newline at end of file diff --git a/admin/admins/create.php b/admin/admins/create.php new file mode 100644 index 000000000..1ab107737 --- /dev/null +++ b/admin/admins/create.php @@ -0,0 +1,174 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $missing_fields = array(); + + /* login validation */ + if ($_POST['login'] == '') { + $missing_fields[] = _AT('login_name'); + } else { + /* check for special characters */ + if (!(eregi("^[a-zA-Z0-9_]([a-zA-Z0-9_])*$", $_POST['login']))) { + $msg->addError('LOGIN_CHARS'); + } else { + $result = mysql_query("SELECT * FROM ".TABLE_PREFIX."members WHERE login='$_POST[login]'",$db); + if (mysql_num_rows($result) != 0) { + $msg->addError('LOGIN_EXISTS'); + } + + $result = mysql_query("SELECT * FROM ".TABLE_PREFIX."admins WHERE login='$_POST[login]'",$db); + if (mysql_num_rows($result) != 0) { + $msg->addError('LOGIN_EXISTS'); + } + } + } + + /* password validation */ + if ($_POST['password'] == '') { + $missing_fields[] = _AT('password'); + } else { + // check for valid passwords + if ($_POST['password'] != $_POST['confirm_password']){ + $msg->addError('PASSWORD_MISMATCH'); + } + } + + /* email validation */ + if ($_POST['email'] == '') { + $missing_fields[] = _AT('email'); + } else if (!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,6}$", $_POST['email'])) { + $msg->addError('EMAIL_INVALID'); + } + $result = mysql_query("SELECT * FROM ".TABLE_PREFIX."members WHERE email LIKE '$_POST[email]'",$db); + if (mysql_num_rows($result) != 0) { + $valid = 'no'; + $msg->addError('EMAIL_EXISTS'); + } + + $priv = 0; + if (isset($_POST['priv_admin'])) { + // overrides all above. + $priv = AT_ADMIN_PRIV_ADMIN; + } else if (isset($_POST['privs'])) { + foreach ($_POST['privs'] as $value) { + $priv += intval($value); + } + } + $_POST['privs'] = $priv; + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $_POST['login'] = $addslashes($_POST['login']); + $_POST['password'] = $addslashes($_POST['password']); + $_POST['real_name'] = $addslashes($_POST['real_name']); + $_POST['email'] = $addslashes($_POST['email']); + + $admin_lang = $_config['default_language']; + + $sql = "INSERT INTO ".TABLE_PREFIX."admins VALUES ('$_POST[login]', '$_POST[password]', '$_POST[real_name]', '$_POST[email]', '$admin_lang', $priv, 0)"; + $result = mysql_query($sql, $db); + + $sql = "INSERT INTO ".TABLE_PREFIX."admins VALUES ('$_POST[login]', '*****', '$_POST[real_name]', '$_POST[email]', '$admin_lang', $priv, 0)"; + write_to_log(AT_ADMIN_LOG_INSERT, 'admins', mysql_affected_rows($db), $sql); + + $msg->addFeedback('ADMIN_CREATED'); + header('Location: index.php'); + exit; + } + $_POST['login'] = $stripslashes($_POST['login']); + $_POST['password'] = $stripslashes($_POST['password']); + $_POST['confirm_password'] = $stripslashes($_POST['confirm_password']); + $_POST['real_name'] = $stripslashes($_POST['real_name']); + $_POST['email'] = $stripslashes($_POST['email']); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
+
+
+
*

+ +
+ +
+
*

+ +
+ +
+
*

+ +
+ +
+
+ +
+ +
+
*

+ +
+ +
+
+ />

+ + getModules(AT_MODULE_STATUS_ENABLED, 0, TRUE); + $keys = array_keys($module_list); + ?> + + + + getAdminPrivilege() > 1)) { continue; } ?> + getAdminPrivilege())) { echo 'checked="checked"'; } ?> />
+ +
+ +
+ + +
+
+
+ + + + \ No newline at end of file diff --git a/admin/admins/delete.php b/admin/admins/delete.php new file mode 100644 index 000000000..95140965d --- /dev/null +++ b/admin/admins/delete.php @@ -0,0 +1,59 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $_POST['login'] = $addslashes($_POST['login']); + + $sql = "DELETE FROM ".TABLE_PREFIX."admins WHERE login='$_POST[login]'"; + $result = mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_DELETE, 'admins', mysql_affected_rows($db), $sql); + + $msg->addFeedback('ADMIN_DELETED'); + header('Location: index.php'); + exit; +} +?> + +addError('CANNOT_DELETE_OWN_ACCOUNT'); + $msg->printErrors(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$sql = "SELECT * FROM ".TABLE_PREFIX."admins WHERE login='$_GET[login]'"; +$result = mysql_query($sql, $db); +if (!($row = mysql_fetch_assoc($result))) { + echo _AT('no_user_found'); +} else { + $hidden_vars['login'] = $_GET['login']; + $confirm = array('DELETE_USER', $row['login']); + $msg->addConfirm($confirm, $hidden_vars); + $msg->printConfirm(); +} +?> + \ No newline at end of file diff --git a/admin/admins/detail_log.php b/admin/admins/detail_log.php new file mode 100644 index 000000000..40af47d57 --- /dev/null +++ b/admin/admins/detail_log.php @@ -0,0 +1,86 @@ + +
+ + +
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+
+
+ + + +
+ +
+ +
+
+
+ + \ No newline at end of file diff --git a/admin/admins/edit.php b/admin/admins/edit.php new file mode 100644 index 000000000..4887fc2f2 --- /dev/null +++ b/admin/admins/edit.php @@ -0,0 +1,155 @@ +addError('ADMIN_EDIT_OWN_ACCOUNT'); + header('Location: index.php'); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $missing_fields = array(); + + /* email validation */ + if ($_POST['email'] == '') { + $missing_fields[] = _AT('email'); + } else if (!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,6}$", $_POST['email'])) { + $msg->addError('EMAIL_INVALID'); + } + $result = mysql_query("SELECT * FROM ".TABLE_PREFIX."members WHERE email LIKE '$_POST[email]'",$db); + if (mysql_num_rows($result) != 0) { + $valid = 'no'; + $msg->addError('EMAIL_EXISTS'); + } + + $priv = 0; + + if (isset($_POST['priv_admin'])) { + // overrides all above. + $priv = AT_ADMIN_PRIV_ADMIN; + } else if (isset($_POST['privs'])) { + foreach ($_POST['privs'] as $value) { + $priv += intval($value); + } + } + $_POST['privs'] = $priv; + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $_POST['login'] = $addslashes($_POST['login']); + $_POST['real_name'] = $addslashes($_POST['real_name']); + $_POST['email'] = $addslashes($_POST['email']); + + $sql = "UPDATE ".TABLE_PREFIX."admins SET real_name='$_POST[real_name]', email='$_POST[email]', `privileges`=$priv, last_login=last_login WHERE login='$_POST[login]'"; + $result = mysql_query($sql, $db); + + $sql = "UPDATE ".TABLE_PREFIX."admins SET real_name='$_POST[real_name]', email='$_POST[email]', `privileges`=$priv WHERE login='$_POST[login]'"; + + write_to_log(AT_ADMIN_LOG_UPDATE, 'admins', mysql_affected_rows($db), $sql); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; + } + $_POST['login'] = $stripslashes($_POST['login']); + $_POST['real_name'] = $stripslashes($_POST['real_name']); + $_POST['email'] = $stripslashes($_POST['email']); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$_GET['login'] = $addslashes($_REQUEST['login']); + +$sql = "SELECT * FROM ".TABLE_PREFIX."admins WHERE login='$_GET[login]'"; +$result = mysql_query($sql, $db); +if (!($row = mysql_fetch_assoc($result))) { + $msg->addError('USER_NOT_FOUND'); + $msg->printErrors(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +if (!isset($_POST['submit'])) { + $_POST = $row; + if (query_bit($row['privileges'], AT_ADMIN_PRIV_ADMIN)) { + $_POST['priv_admin'] = 1; + } + $_POST['privs'] = intval($row['privileges']); +} + +?> +
+ +
+
+

+
+ +
+
+ +
+ +
+
*

+ +
+ +
+
+ />

+ + getModules(AT_MODULE_STATUS_ENABLED, 0, TRUE); + $keys = array_keys($module_list); + ?> + + + + getAdminPrivilege() > 1)) { continue; } ?> + getAdminPrivilege())) { echo 'checked="checked"'; } ?> />
+ +
+ +
+ /> + +
+
+
+ + + + \ No newline at end of file diff --git a/admin/admins/index.php b/admin/admins/index.php new file mode 100644 index 000000000..36c43dd49 --- /dev/null +++ b/admin/admins/index.php @@ -0,0 +1,138 @@ +addError('NO_ITEM_SELECTED'); +} + +$id = $_GET['id']; +$L = $_GET['L']; +require(AT_INCLUDE_PATH.'header.inc.php'); + + +$orders = array('asc' => 'desc', 'desc' => 'asc'); +$cols = array('login' => 1, 'real_name' => 1, 'email' => 1, 'last_login' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'login'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'login'; +} else { + // no order set + $order = 'asc'; + $col = 'login'; +} + +?> + +
+ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ + + + +
0) { + echo _AT('active_admin'); + } else { + echo _AT('inactive_admin'); + } + ?>
+
+ + \ No newline at end of file diff --git a/admin/admins/log.php b/admin/admins/log.php new file mode 100644 index 000000000..f1a417afb --- /dev/null +++ b/admin/admins/log.php @@ -0,0 +1,99 @@ +'._AT('no_log_found_').''; + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + + $num_results = $row[0]; + $results_per_page = 50; + $num_pages = max(ceil($num_results / $results_per_page), 1); + $page = intval($_GET['p']); + if (!$page) { + $page = 1; + } + $count = (($page-1) * $results_per_page) + 1; + + echo '
'; + echo ''; + echo '
'; + + $offset = ($page-1)*$results_per_page; + + $sql = "SELECT * FROM ".TABLE_PREFIX."admin_log $login_where ORDER BY `time` DESC LIMIT $offset, $results_per_page"; + $result = mysql_query($sql, $db); +?> + + + + + + + + + + + 0) : ?> + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/admin/admins/my_edit.php b/admin/admins/my_edit.php new file mode 100644 index 000000000..75718ccdc --- /dev/null +++ b/admin/admins/my_edit.php @@ -0,0 +1,94 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/index.php'); + exit; +} else if (isset($_POST['submit'])) { + $missing_fields = array(); + + /* email validation */ + if ($_POST['email'] == '') { + $missing_fields[] = _AT('email'); + } else if (!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,6}$", $_POST['email'])) { + $msg->addError('EMAIL_INVALID'); + } + $result = mysql_query("SELECT * FROM ".TABLE_PREFIX."members WHERE email LIKE '$_POST[email]'",$db); + if (mysql_num_rows($result) != 0) { + $valid = 'no'; + $msg->addError('EMAIL_EXISTS'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $_POST['password'] = $addslashes($_POST['password']); + $_POST['real_name'] = $addslashes($_POST['real_name']); + $_POST['email'] = $addslashes($_POST['email']); + + $sql = "UPDATE ".TABLE_PREFIX."admins SET real_name='$_POST[real_name]', email='$_POST[email]', last_login=last_login WHERE login='$_SESSION[login]'"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'admin/index.php'); + exit; + } + $_POST['real_name'] = $stripslashes($_POST['real_name']); + $_POST['email'] = $stripslashes($_POST['email']); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT real_name, email FROM ".TABLE_PREFIX."admins WHERE login='$_SESSION[login]'"; +$result = mysql_query($sql, $db); +if (!($row = mysql_fetch_assoc($result))) { + $msg->addError('USER_NOT_FOUND'); + $msg->printErrors(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +if (!isset($_POST['submit'])) { + $_POST = $row; + $_POST['confirm_password'] = $_POST['password']; +} + +?> +
+
+
+
+ +
+ +
+
*

+ +
+ +
+ + +
+
+
+ + \ No newline at end of file diff --git a/admin/admins/my_password.php b/admin/admins/my_password.php new file mode 100644 index 000000000..a36e439f9 --- /dev/null +++ b/admin/admins/my_password.php @@ -0,0 +1,78 @@ +printInfos($info); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + Header('Location: profile.php'); + exit; +} + +if (isset($_POST['submit'])) { + if (!empty($_POST['old_password'])) { + //check if old password entered is correct + $sql = "SELECT password FROM ".TABLE_PREFIX."admins WHERE login='$_SESSION[login]'"; + $result = mysql_query($sql,$db); + if ($row = mysql_fetch_assoc($result)) { + if ($row['password'] != trim($_POST['old_password'])) { + $msg->addError('WRONG_PASSWORD'); + Header('Location: my_password.php'); + exit; + } + } + } else { + $msg->addError(array('EMPTY_FIELDS', _AT('password'))); + header('Location: my_password.php'); + exit; + } + + // new password check + if ($_POST['password'] == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('password'))); + } else { + if ($_POST['password'] != $_POST['password2']) { + $msg->addError('PASSWORD_MISMATCH'); + } else if (strlen($_POST['password']) < 8) { + $msg->addError('PASSWORD_LENGTH'); + } else if ((preg_match('/[a-z]+/i', $_POST['password']) + preg_match('/[0-9]+/i', $_POST['password']) + preg_match('/[_\-\/+!@#%^$*&)(|.]+/i', $_POST['password'])) < 2) { + $msg->addError('PASSWORD_CHARS'); + } + } + + if (!$msg->containsErrors()) { + $_POST['password'] = $addslashes($_POST['password']); + + $sql = "UPDATE ".TABLE_PREFIX."admins SET password='$_POST[password]', last_login=last_login WHERE login='$_SESSION[login]'"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('PASSWORD_CHANGED'); + header('Location: ../index.php'); + exit; + } +} + +/* template starts here */ +$onload = 'document.form.old_password.focus();'; +$savant->display('users/password_change.tmpl.php'); + +?> \ No newline at end of file diff --git a/admin/admins/password.php b/admin/admins/password.php new file mode 100644 index 000000000..57f1def44 --- /dev/null +++ b/admin/admins/password.php @@ -0,0 +1,95 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/users.php'); + exit; +} else if (isset($_POST['submit'])) { + if ($_POST['password'] == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('password'))); + } else { + // check for valid passwords + if ($_POST['password'] != $_POST['password2']){ + $msg->addError('PASSWORD_MISMATCH'); + } + } + + if (!$msg->containsErrors()) { + $_POST['password'] = $addslashes($_POST['password']); + + $sql = "UPDATE ".TABLE_PREFIX."admins SET password='$_POST[password]', last_login=last_login WHERE login='$_POST[login]'"; + $result = mysql_query($sql, $db); + + $sql = "UPDATE ".TABLE_PREFIX."admins SET password='********' WHERE login='$_POST[login]'"; + write_to_log(AT_ADMIN_LOG_UPDATE, 'admins', mysql_affected_rows($db), $sql); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; + } + $_POST['login'] = $stripslashes($_POST['login']); +} + + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$_GET['login'] = $addslashes($_REQUEST['login']); + +$sql = "SELECT login FROM ".TABLE_PREFIX."admins WHERE login='$_GET[login]'"; +$result = mysql_query($sql, $db); +if (!($row = mysql_fetch_assoc($result))) { + $msg->addError('USER_NOT_FOUND'); + $msg->printErrors(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +if (!isset($_POST['submit'])) { + $_POST = $row; + $_POST['confirm_password'] = $_POST['password']; + if (query_bit($row['privileges'], AT_ADMIN_PRIV_ADMIN)) { + $_POST['priv_admin'] = 1; + } + $_POST['privs'] = intval($row['privileges']); +} + +?> +
+ +
+
+

+
+ +
+
*

+ +
+ +
+
*

+ +
+ +
+ + +
+
+
+ + \ No newline at end of file diff --git a/admin/admins/reset_log.php b/admin/admins/reset_log.php new file mode 100644 index 000000000..1383422bf --- /dev/null +++ b/admin/admins/reset_log.php @@ -0,0 +1,46 @@ +addFeedback('CANCELLED'); + header('Location: ./log.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + //clean up the db + $sql = "DELETE FROM ".TABLE_PREFIX."admin_log"; + $result = mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_DELETE, 'admin_log', mysql_affected_rows($db), $sql); + + $msg->addFeedback('ADMIN_LOG_RESET'); + header('Location: ./log.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +//print confirmation +$hidden_vars['all'] = TRUE; + +$confirm = array('RESET_ADMIN_LOG', $_SERVER['PHP_SELF']); +$msg->addConfirm($confirm, $hidden_vars); +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/admin/backup/create.php b/admin/backup/create.php new file mode 100644 index 000000000..6ef5a32e4 --- /dev/null +++ b/admin/backup/create.php @@ -0,0 +1,85 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + + $Backup->setCourseID($_POST['course']); + $error = $Backup->create($_POST['description']); + if ($error !== FALSE) { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + + +
+ +
+
+

+
+ + + getNumAvailable() >= AT_COURSE_BACKUPS)): ?> +
+

+
+ +
+
*

+ +
+
+
+ +
+
+ +
+ + +
+

+
+ +
+
+ + \ No newline at end of file diff --git a/admin/backup/delete.php b/admin/backup/delete.php new file mode 100644 index 000000000..891850d68 --- /dev/null +++ b/admin/backup/delete.php @@ -0,0 +1,45 @@ +delete($_POST['backup_id']); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$hidden_vars['backup_id'] = $_GET['backup_id']; +$hidden_vars['course'] = $_GET['course']; +$msg->addConfirm('DELETE', $hidden_vars); +$msg->printConfirm(); + +require (AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/admin/backup/edit.php b/admin/backup/edit.php new file mode 100644 index 000000000..8beac202b --- /dev/null +++ b/admin/backup/edit.php @@ -0,0 +1,68 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +$Backup =& new Backup($db, $_REQUEST['course']); +$backup_row = $Backup->getRow($_REQUEST['backup_id']); + +if (isset($_POST['edit'])) { + $Backup->edit($_POST['backup_id'], $_POST['new_description']); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} + +//check for errors + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
+ + + +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ \ No newline at end of file diff --git a/admin/backup/index.php b/admin/backup/index.php new file mode 100644 index 000000000..42467bdc6 --- /dev/null +++ b/admin/backup/index.php @@ -0,0 +1,120 @@ +download($backup_id); + exit; // never reached + +} else if (isset($_POST['delete'], $backup_id)) { + header('Location: delete.php?backup_id=' . $backup_id . SEP . 'course=' . $course); + exit; + +} else if (isset($_POST['edit'], $backup_id)) { + header('Location: edit.php?backup_id=' . $backup_id . SEP . 'course=' . $course); + exit; +} else if (!empty($_POST) && !$backup_id) { + $msg->addError('NO_ITEM_SELECTED'); +} + + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
+ + + + + + + + + + + + + + + + + +setCourseID($course['course_id']); + $list = $Backup->getAvailableList(); + + echo ''; + + if (empty($list)) { ?> + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + $num_backups ++; + } + } + } +?> + + + + + + +
+ + +
'.$course['title'].'
'; + echo ''.AT_date(_AT('filemanager_date_format'), $row['date_timestamp'], AT_DATE_UNIX_TIMESTAMP).''.get_human_size($row['file_size']).''.$row['description'].'
+
+ + \ No newline at end of file diff --git a/admin/backup/restore.php b/admin/backup/restore.php new file mode 100644 index 000000000..2578c9f97 --- /dev/null +++ b/admin/backup/restore.php @@ -0,0 +1,124 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + if (!$_POST['material']) { + $msg->addError(array('EMPTY_FIELDS', _AT('material'))); + } + + if (!$msg->containsErrors()) { + $Backup =& new Backup($db, $_POST['in_course']); + $Backup->restore($_POST['material'], $_POST['action'], $_POST['backup_id'], $_POST['course']); + + $msg->addFeedBack('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$Backup =& new Backup($db, $_REQUEST['course']); + +$row = $Backup->getRow($_REQUEST['backup_id']); + +?> + +
+ + + +
+
+

+
+
+
*

+ +

+ + getModules(AT_MODULE_STATUS_ENABLED | AT_MODULE_STATUS_DISABLED, 0, TRUE); + $keys = array_keys($modules); + $i = 0; + ?> + + + isBackupable()): ?> +
+ + + +
+ +
+
*

+ + +
+ +
+
+
+ +
+
+
+ +
+ +
+
+
+ + + \ No newline at end of file diff --git a/admin/config_edit.php b/admin/config_edit.php new file mode 100644 index 000000000..2171afb5d --- /dev/null +++ b/admin/config_edit.php @@ -0,0 +1,297 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $missing_fields = array(); + + $_POST['site_name'] = trim($_POST['site_name']); + $_POST['home_url'] = trim($_POST['home_url']); + $_POST['default_language'] = trim($_POST['default_language']); + $_POST['contact_email'] = trim($_POST['contact_email']); + $_POST['max_file_size'] = intval($_POST['max_file_size']); + $_POST['max_file_size'] = max(0, $_POST['max_file_size']); + $_POST['max_course_size'] = intval($_POST['max_course_size']); + $_POST['max_course_size'] = max(0, $_POST['max_course_size']); + $_POST['max_course_float'] = intval($_POST['max_course_float']); + $_POST['max_course_float'] = max(0, $_POST['max_course_float']); + $_POST['master_list'] = intval($_POST['master_list']); + $_POST['email_confirmation'] = intval($_POST['email_confirmation']); + $_POST['email_notification'] = intval($_POST['email_notification']); + $_POST['sent_msgs_ttl'] = intval($_POST['sent_msgs_ttl']); + $_POST['allow_instructor_requests'] = intval($_POST['allow_instructor_requests']); + $_POST['auto_approve_instructors'] = intval($_POST['auto_approve_instructors']); + $_POST['theme_categories'] = intval($_POST['theme_categories']); + $_POST['user_notes'] = intval($_POST['user_notes']); + $_POST['illegal_extentions'] = str_replace(array(' ', ' '), array(' ','|'), $_POST['illegal_extentions']); + $_POST['cache_dir'] = trim($_POST['cache_dir']); + $_POST['course_backups'] = intval($_POST['course_backups']); + $_POST['course_backups'] = max(0, $_POST['course_backups']); + $_POST['check_version'] = $_POST['check_version'] ? 1 : 0; + $_POST['fs_versioning'] = $_POST['fs_versioning'] ? 1 : 0; + $_POST['enable_mail_queue'] = $_POST['enable_mail_queue'] ? 1 : 0; + $_POST['display_name_format'] = intval($_POST['display_name_format']); + + if (!isset($display_name_formats[$_POST['display_name_format']])) { + $_POST['display_name_format'] = $_config_defaults['display_name_format']; + } + + //check that all values have been set + if (!$_POST['site_name']) { + $missing_fields[] = _AT('site_name'); + } + + /* email check */ + if (!$_POST['contact_email']) { + $missing_fields[] = _AT('contact_email'); + } else if (!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,6}$", $_POST['contact_email'])) { + $msg->addError('EMAIL_INVALID'); + } + + if ($_POST['cache_dir']) { + if (!is_dir($_POST['cache_dir'])) { + $msg->addError('CACHE_DIR_NOT_EXIST'); + } else if (!is_writable($_POST['cache_dir'])){ + $msg->addError('CACHE_DIR_NOT_WRITEABLE'); + } + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $_POST['site_name'] = $addslashes($_POST['site_name']); + $_POST['home_url'] = $addslashes($_POST['home_url']); + $_POST['default_language'] = $addslashes($_POST['default_language']); + $_POST['contact_email'] = $addslashes($_POST['contact_email']); + $_POST['time_zone'] = $addslashes($_POST['time_zone']); + + foreach ($_config as $name => $value) { + // the isset() is needed to avoid overridding settings that don't get set here (ie. modules) + if (isset($_POST[$name]) && (stripslashes($_POST[$name]) != $value) && (stripslashes($_POST[$name]) != $_config_defaults[$name])) { + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES ('$name', '$_POST[$name]')"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_REPLACE, 'config', mysql_affected_rows($db), $sql); + } else if (isset($_POST[$name]) && (stripslashes($_POST[$name]) == $_config_defaults[$name])) { + $sql = "DELETE FROM ".TABLE_PREFIX."config WHERE name='$name'"; + mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'config', mysql_affected_rows($db), $sql); + } + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + // special case: disabling the mail queue should flush all queued mail: + if (!$_POST['enable_mail_queue'] && $_POST['old_enable_mail_queue']) { + require_once(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + $mail = new ATutorMailer; + $mail->SendQueue(); + } + + header('Location: '.$_SERVER['PHP_SELF']); + exit; + } +} + +$onload = 'document.form.sitename.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (!isset($_POST['submit'])) { + +} else { + $defaults = $_POST; +} +?> + +
+
+
+
*

+ +
+ +
+
+ + +
+ +
+
+ + + + + + printDropdown($select_lang, 'default_language', 'default_lang'); ?> + +
+ +
+
*

+ +
+ +
+
*

+ + + + + + +
+ +
+ (: )
+ +
+ +
+ (: )
+ +
+ +
+ (: )
+ +
+ +
+ (: )
+ $value): ?> + />
+ +
+ +
+ (: )
+ /> + + /> +
+ +
+ (: )
+ /> /> +
+ +
+ (: )
+ /> /> +
+ +
+ (: )
+ /> /> +
+ +
+ (: )
+ /> /> +
+ +
+ (: )
+ /> /> +
+ +
+ (: )
+ /> /> +
+ +
+
+ +
+ +
+
+ +
+ +
+ (: )
+ +
+ +
+ (: )
+ +
+ +
+ (: )
+ /> /> +
+ +
+ (: )
+ /> /> +
+ +
+ + (: )
+
+ 2 * 60 * 60)): ?> + + + /> /> + +
+ +
+ (: )
+
+ 2 * 60 * 60)): ?> + + + /> /> + +
+ +
+ + +
+
+
+ + \ No newline at end of file diff --git a/admin/config_template.php b/admin/config_template.php new file mode 100644 index 000000000..a4377d5a9 --- /dev/null +++ b/admin/config_template.php @@ -0,0 +1,139 @@ + \ No newline at end of file diff --git a/admin/course_categories.php b/admin/course_categories.php new file mode 100644 index 000000000..0d34d8625 --- /dev/null +++ b/admin/course_categories.php @@ -0,0 +1,91 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+
+ +
+
+ +
+ + + \ No newline at end of file diff --git a/admin/courses.php b/admin/courses.php new file mode 100644 index 000000000..8be332a47 --- /dev/null +++ b/admin/courses.php @@ -0,0 +1,208 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$page_string = ''; + +if ($_GET['reset_filter']) { + unset($_GET); +} + +$orders = array('asc' => 'desc', 'desc' => 'asc'); +$cols = array('title' => 1, 'login' => 1, 'access' => 1, 'created_date' => 1, 'cat_name' => 1); +$_access = array('public', 'protected', 'private'); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'title'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'title'; +} else { + // no order set + $order = 'asc'; + $col = 'title'; +} + +if (isset($_GET['access']) && ($_GET['access'] != '') && isset($_access[$_GET['access']])) { + $access = 'C.access = \'' . $_access[$_GET['access']].'\''; + $page_string .= SEP.'access='.$_GET['access']; +} else { + $access = '1'; +} + +if ($_GET['search']) { + $page_string .= SEP.'search='.urlencode($_GET['search']); + $search = $addslashes($_GET['search']); + $search = str_replace(array('%','_'), array('\%', '\_'), $search); + $search = '%'.$search.'%'; + $search = "((C.title LIKE '$search') OR (C.description LIKE '$search'))"; +} else { + $search = '1'; +} + +// get number of courses on the system +$sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."courses C WHERE 1 AND $access AND $search"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_assoc($result); +$num_results = $row['cnt']; + +$results_per_page = 100; +$num_pages = max(ceil($num_results / $results_per_page), 1); +$page = intval($_GET['p']); +if (!$page) { + $page = 1; +} +$count = (($page-1) * $results_per_page) + 1; +$offset = ($page-1)*$results_per_page; + +${'highlight_'.$col} = ' style="background-color: #fff;"'; + +$sql = "SELECT COUNT(*) AS cnt, approved, course_id FROM ".TABLE_PREFIX."course_enrollment WHERE approved='y' OR approved='a' GROUP BY course_id, approved"; +$result = mysql_query($sql, $db); +while ($row = mysql_fetch_assoc($result)) { + if ($row['approved'] == 'y') { + $row['cnt']--; // remove the instructor + } + $enrolled[$row['course_id']][$row['approved']] = $row['cnt']; +} + +$sql = "SELECT C.*, M.login, T.cat_name FROM ".TABLE_PREFIX."members M INNER JOIN ".TABLE_PREFIX."courses C USING (member_id) LEFT JOIN ".TABLE_PREFIX."course_cats T USING (cat_id) WHERE 1 AND $access AND $search ORDER BY $col $order LIMIT $offset, $results_per_page"; +$result = mysql_query($sql, $db); + +$num_rows = mysql_num_rows($result); +?> + +
+
+
+

+
+ +
+
+ + /> + + /> + + /> + + /> +
+ +
+
+ +
+ +
+ + +
+
+
+ + + +
+ + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ + +
+
+ \ No newline at end of file diff --git a/admin/create_category.php b/admin/create_category.php new file mode 100644 index 000000000..884a3dba8 --- /dev/null +++ b/admin/create_category.php @@ -0,0 +1,137 @@ +addError(array('EMPTY_FIELDS', _AT('title'))); + } + + if ($_POST['theme_parent']) { + $sql = "SELECT theme FROM ".TABLE_PREFIX."course_cats WHERE cat_id=$cat_parent_id"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $cat_theme = $row['theme']; + } + } + + if (!$msg->containsErrors()) { + + $sql = "INSERT INTO ".TABLE_PREFIX."course_cats VALUES (NULL, '$cat_name', $cat_parent_id, '$cat_theme')"; + $result = mysql_query($sql, $db); + $cat_id = mysql_insert_id($db); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + write_to_log(AT_ADMIN_LOG_INSERT, 'course_cats', mysql_affected_rows($db), $sql); + + header('Location: course_categories.php'); + exit; + } +} else if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: course_categories.php'); + exit; +} + +/* $categories[category_id] = array(cat_name, cat_parent, num_courses, [array(children)]) */ +$categories = get_categories(); + +require(AT_INCLUDE_PATH.'header.inc.php'); +$msg->printAll(); + +?> + +
+ + + +
+
+
*

+ +
+ +
+
*

+ +
+ + +
+
+ + +
+ + + +
+ + +

+
+ + +
+ + +
+
+
+ + \ No newline at end of file diff --git a/admin/create_course.php b/admin/create_course.php new file mode 100644 index 000000000..11d35b79f --- /dev/null +++ b/admin/create_course.php @@ -0,0 +1,47 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/courses.php'); + exit; +} else if (isset($_POST['form_course']) && !isset($_POST['setvisual'])) { + $errors = add_update_course($_POST, TRUE); + + if ($errors !== FALSE) { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'admin/courses.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$msg->printAll(); + +$course = 0; +$isadmin = TRUE; + +require(AT_INCLUDE_PATH.'html/course_properties.inc.php'); + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/admin/create_user.php b/admin/create_user.php new file mode 100644 index 000000000..f21913dd9 --- /dev/null +++ b/admin/create_user.php @@ -0,0 +1,242 @@ +0",$db); + if (mysql_num_rows($result) != 0) { + $msg->addError('CREATE_MASTER_USED'); + } + } + + /* login name check */ + if ($_POST['login'] == '') { + $missing_fields[] = _AT('login_name'); + } else { + /* check for special characters */ + if (!(eregi("^[a-zA-Z0-9_.-]([a-zA-Z0-9_.-])*$", $_POST['login']))) { + $msg->addError('LOGIN_CHARS'); + } else { + $result = mysql_query("SELECT * FROM ".TABLE_PREFIX."members WHERE login='$_POST[login]'",$db); + if (mysql_num_rows($result) != 0) { + $valid = 'no'; + $msg->addError('LOGIN_EXISTS'); + } else { + $result = mysql_query("SELECT * FROM ".TABLE_PREFIX."admins WHERE login='$_POST[login]'",$db); + if (mysql_num_rows($result) != 0) { + $msg->addError('LOGIN_EXISTS'); + } + } + } + } + + /* password check: */ + if ($_POST['password'] == '') { + $missing_fields[] = _AT('password'); + } else { + // check for valid passwords + if ($_POST['password'] != $_POST['password2']){ + $valid= 'no'; + $msg->addError('PASSWORD_MISMATCH'); + } + } + + /* email check */ + if ($_POST['email'] == '') { + $missing_fields[] = _AT('email'); + } else if (!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,6}$", $_POST['email'])) { + $msg->addError('EMAIL_INVALID'); + } + + $_POST['email'] = $addslashes($_POST['email']); + $result = mysql_query("SELECT member_id FROM ".TABLE_PREFIX."members WHERE email LIKE '$_POST[email]'",$db); + if (mysql_num_rows($result) != 0) { + $msg->addError('EMAIL_EXISTS'); + } + + if (!$_POST['first_name']) { + $missing_fields[] = _AT('first_name'); + } + + if (!$_POST['last_name']) { + $missing_fields[] = _AT('last_name'); + } + + $_POST['first_name'] = str_replace('<', '', $_POST['first_name']); + $_POST['second_name'] = str_replace('<', '', $_POST['second_name']); + $_POST['last_name'] = str_replace('<', '', $_POST['last_name']); + + // check if first+last is unique + if ($_POST['first_name'] && $_POST['last_name']) { + $first_name_sql = $addslashes($_POST['first_name']); + $last_name_sql = $addslashes($_POST['last_name']); + $second_name_sql = $addslashes($_POST['second_name']); + + $sql = "SELECT member_id FROM ".TABLE_PREFIX."members WHERE first_name='$first_name_sql' AND second_name='$second_name_sql' AND last_name='$last_name_sql' LIMIT 1"; + $result = mysql_query($sql, $db); + if (mysql_fetch_assoc($result)) { + $msg->addError('FIRST_LAST_NAME_UNIQUE'); + } + } + + + $_POST['login'] = strtolower($_POST['login']); + + //check date of birth + $mo = intval($_POST['month']); + $day = intval($_POST['day']); + $yr = intval($_POST['year']); + + /* let's us take (one or) two digit years (ex. 78 = 1978, 3 = 2003) */ + if ($yr < date('y')) { + $yr += 2000; + } else if ($yr < 1900) { + $yr += 1900; + } + + $dob = $yr.'-'.$mo.'-'.$day; + + if ($mo && $day && $yr && !checkdate($mo, $day, $yr)) { + $msg->addError('DOB_INVALID'); + } else if (!$mo || !$day || !$yr) { + $dob = '0000-00-00'; + $yr = $mo = $day = 0; + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + if (($_POST['website']) && (!ereg('://',$_POST['website']))) { + $_POST['website'] = 'http://' . $_POST['website']; + } + if ($_POST['website'] == 'http://') { + $_POST['website'] = ''; + } + $_POST['postal'] = strtoupper(trim($_POST['postal'])); + + if (isset($_POST['private_email'])) { + $_POST['private_email'] = 1; + } else { + $_POST['private_email'] = 0; + } + $_POST['password'] = $addslashes($_POST['password']); + $_POST['website'] = $addslashes($_POST['website']); + $_POST['first_name'] = $addslashes($_POST['first_name']); + $_POST['second_name'] = $addslashes($_POST['second_name']); + $_POST['last_name'] = $addslashes($_POST['last_name']); + $_POST['address'] = $addslashes($_POST['address']); + $_POST['postal'] = $addslashes($_POST['postal']); + $_POST['city'] = $addslashes($_POST['city']); + $_POST['province'] = $addslashes($_POST['province']); + $_POST['country'] = $addslashes($_POST['country']); + $_POST['phone'] = $addslashes($_POST['phone']); + $_POST['status'] = intval($_POST['status']); + $_POST['gender'] = $addslashes($_POST['gender']); + + $now = date('Y-m-d H:i:s'); // we use this later for the email confirmation. + + /* insert into the db. (the last 0 for status) */ + $sql = "INSERT INTO ".TABLE_PREFIX."members VALUES (NULL,'$_POST[login]','$_POST[password]','$_POST[email]','$_POST[website]','$_POST[first_name]', '$_POST[second_name]', '$_POST[last_name]', '$dob', '$_POST[gender]', '$_POST[address]','$_POST[postal]','$_POST[city]','$_POST[province]','$_POST[country]', '$_POST[phone]',$_POST[status], '$_config[pref_defaults]', '$now','$_config[default_language]', $_config[pref_inbox_notify], $_POST[private_email], '0000-00-00 00:00:00')"; + + $result = mysql_query($sql, $db); + + $m_id = mysql_insert_id($db); + if (!$result) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->addError('DB_NOT_UPDATED'); + $msg->printAll(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + if (defined('AT_MASTER_LIST') && AT_MASTER_LIST) { + $student_id = $addslashes($_POST['student_id']); + $student_pin = md5($addslashes($_POST['student_pin'])); + if ($student_id) { + $sql = "UPDATE ".TABLE_PREFIX."master_list SET member_id=$m_id WHERE public_field='$student_id'"; + mysql_query($sql, $db); + if (mysql_affected_rows($db) == 0) { + $sql = "REPLACE INTO ".TABLE_PREFIX."master_list VALUES ('$student_id', '$student_pin', $m_id)"; + mysql_query($sql, $db); + } + } + } + + + if ($_POST['pref'] == 'access') { + $_SESSION['member_id'] = $m_id; + save_prefs(); + unset($_SESSION['member_id']); + } + + + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + $mail = new ATutorMailer(); + $mail->AddAddress($_POST['email']); + $mail->From = $_config['contact_email']; + + if (defined('AT_EMAIL_CONFIRMATION') && AT_EMAIL_CONFIRMATION && ($_POST['status'] == AT_STATUS_UNCONFIRMED)) { + $code = substr(md5($_POST['email'] . $now . $m_id), 0, 10); + $confirmation_link = AT_BASE_HREF . 'confirm.php?id='.$m_id.SEP.'m='.$code; + + /* send the email confirmation message: */ + $mail->Subject = $_config['site_name'] . ': ' . _AT('email_confirmation_subject'); + $body .= _AT('admin_new_account_confirm', $_config['site_name'], $confirmation_link)."\n\n"; + + } else { + $mail->Subject = $_config['site_name'].": "._AT('account_information'); + $body .= _AT('admin_new_account', $_config['site_name'])."\n\n"; + } + $body .= _AT('web_site') .' : '.AT_BASE_HREF."\n"; + $body .= _AT('login_name') .' : '.$_POST['login'] . "\n"; + $body .= _AT('password') .' : '.$_POST['password'] . "\n"; + $mail->Body = $body; + $mail->Send(); + + $msg->addFeedback('PROFILE_CREATED_ADMIN'); + header('Location: '.AT_BASE_HREF.'admin/users.php'); + exit; + } +} + +$onload = 'document.form.login.focus();'; + +$savant->assign('languageManager', $languageManager); + +if (!isset($_POST['status'])) { + if (defined('AT_EMAIL_CONFIRMATION') && AT_EMAIL_CONFIRMATION) { + $_POST['status'] = AT_STATUS_UNCONFIRMED; + } else { + $_POST['status'] = AT_STATUS_STUDENT; + } +} + +$savant->display('registration.tmpl.php'); + +?> \ No newline at end of file diff --git a/admin/cron.php b/admin/cron.php new file mode 100644 index 000000000..7f42e769a --- /dev/null +++ b/admin/cron.php @@ -0,0 +1,34 @@ +getModules(AT_MODULE_STATUS_ENABLED, AT_MODULE_TYPE_CORE + AT_MODULE_TYPE_STANDARD + AT_MODULE_TYPE_EXTRA); +$keys = array_keys($module_list); + +foreach($keys as $dir_name) { + $module =& $module_list[$dir_name]; + + if (!$module->getCronInterval()) { + continue; + } + + $module->runCron(); +} + +// run the mail queue last +if ($_config['enable_mail_queue']) { + require_once(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + $mail = new ATutorMailer; + $mail->SendQueue(); +} +?> \ No newline at end of file diff --git a/admin/cron_config.php b/admin/cron_config.php new file mode 100644 index 000000000..ed5d64748 --- /dev/null +++ b/admin/cron_config.php @@ -0,0 +1,25 @@ + + +
+
+

+
+
+
+ admin/cron.php?k= +
+
+ + \ No newline at end of file diff --git a/admin/default_preferences.php b/admin/default_preferences.php new file mode 100644 index 000000000..546dc303e --- /dev/null +++ b/admin/default_preferences.php @@ -0,0 +1,141 @@ +addFeedback('CANCELLED'); + header('Location: users.php'); + exit; +} + +if (isset($_GET['submit'])) { + + $_GET['mnot'] = intval($_GET['mnot']); + $_GET['numbering'] = intval($_GET['numbering']); + $_GET['use_jump_redirect'] = intval($_GET['use_jump_redirect']); + $_GET['form_focus'] = intval($_GET['form_focus']); + $_GET['content_editor'] = intval($_GET['content_editor']); + + $default_theme = get_default_theme(); + + $pref_defaults = array('PREF_THEME'=>$default_theme['dir_name'], 'PREF_NUMBERING'=>$_GET['numbering'], 'PREF_JUMP_REDIRECT'=>$_GET['use_jump_redirect'], 'PREF_FORM_FOCUS'=>$_GET['form_focus'], 'PREF_CONTENT_EDITOR' => $_GET['content_editor']); + + $pref_defaults = serialize($pref_defaults); + + if (!($_config_defaults['pref_defaults'] == $pref_defaults) && (strlen($pref_defaults) < 256)) { + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES ('pref_defaults','$pref_defaults')"; + } else if ($_config_defaults['pref_defaults'] == $pref_defaults) { + $sql = "DELETE FROM ".TABLE_PREFIX."config WHERE name='pref_defaults'"; + } + $result = mysql_query($sql, $db); + + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES ('pref_inbox_notify','$_GET[mnot]')"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} + +$pref_defaults = unserialize($_config['pref_defaults']); + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
+
+ +
+
+ + /> + /> +
+ +
+
+ /> + /> +
+ +
+
+ /> + /> +
+ +
+
+ /> + /> +
+ +
+ +
+ /> + /> + /> +
+ +
+ + +
+
+
+ + \ No newline at end of file diff --git a/admin/delete_category.php b/admin/delete_category.php new file mode 100644 index 000000000..9011245ae --- /dev/null +++ b/admin/delete_category.php @@ -0,0 +1,67 @@ +addFeedback('CANCELLED'); + header('Location: course_categories.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + /* delete has been confirmed, delete this category */ + $cat_id = intval($_POST['cat_id']); + + if (!is_array($categories[$cat_id]['children'])) { + $sql = "DELETE FROM ".TABLE_PREFIX."course_cats WHERE cat_id=$cat_id"; + $result = mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_DELETE, 'course_cats', mysql_affected_rows($db), $sql); + + $sql = "UPDATE ".TABLE_PREFIX."courses SET cat_id=0 WHERE cat_id=$cat_id"; + $result = mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_DELETE, 'courses', mysql_affected_rows($db), $sql); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: course_categories.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + $_GET['cat_id'] = intval($_GET['cat_id']); + + $sql = "SELECT * FROM ".TABLE_PREFIX."course_cats WHERE cat_id=$_GET[cat_id]"; + $result = mysql_query($sql,$db); + + if (mysql_num_rows($result) == 0) { + $msg->printErrors('ITEM_NOT_FOUND'); + } else { + $row = mysql_fetch_assoc($result); + + $hidden_vars['cat_name']= $row['cat_name']; + $hidden_vars['cat_id'] = $row['cat_id']; + + $confirm = array('DELETE_CATEGORY', AT_print($row['cat_name'], 'course_cats.cat_name')); + $msg->addConfirm($confirm, $hidden_vars); + + $msg->printConfirm(); + } + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/admin/delete_course.php b/admin/delete_course.php new file mode 100644 index 000000000..083119f8b --- /dev/null +++ b/admin/delete_course.php @@ -0,0 +1,52 @@ +addFeedback('CANCELLED'); + header('Location: courses.php'); + exit; +} else if (isset($_POST['step']) && ($_POST['step'] == 2) && isset($_POST['submit_yes'])) { + require(AT_INCLUDE_PATH.'lib/filemanager.inc.php'); + require(AT_INCLUDE_PATH.'lib/delete_course.inc.php'); + + delete_course($course, $entire_course = true, $rel_path = '../'); // delete the course + cache_purge('system_courses','system_courses'); // purge the system_courses cache (if successful) + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: courses.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (!isset($_POST['step'])) { + $hidden_vars['step'] = 1; + $hidden_vars['course'] = $course; + $msg->addConfirm(array('DELETE_COURSE_1', $system_courses[$course]['title']), $hidden_vars); + $msg->printConfirm(); +} else if ($_POST['step'] == 1) { + $hidden_vars['step'] = 2; + $hidden_vars['course'] = $course; + $msg->addConfirm(array('DELETE_COURSE_2', $system_courses[$course]['title']), $hidden_vars); + $msg->printConfirm(); +} + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/admin/edit_category.php b/admin/edit_category.php new file mode 100644 index 000000000..0c52bfcd5 --- /dev/null +++ b/admin/edit_category.php @@ -0,0 +1,146 @@ +addError(array('EMPTY_FIELDS', _AT('title'))); + } + + if (!$msg->containsErrors()) { + + if ($_POST['theme_children']) { + // apply this theme to all the sub-categories recursively. + $children = recursive_get_subcategories($cat_id); + $children = implode(',', $children); + + if ($children) { + $sql = "UPDATE ".TABLE_PREFIX."course_cats SET theme='$cat_theme' WHERE cat_id IN ($children)"; + $result = mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_UPDATE, 'course_cats', mysql_affected_rows($db), $sql); + } + } + + $sql = "UPDATE ".TABLE_PREFIX."course_cats SET cat_parent=$cat_parent_id, cat_name='$cat_name', theme='$cat_theme' WHERE cat_id=$cat_id"; + $result = mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_UPDATE, 'course_cats', mysql_affected_rows($db), $sql); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: course_categories.php'); + exit; + } +} else if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: course_categories.php'); + exit; +} + +/* get all the categories: */ +/* $categories[category_id] = array(cat_name, cat_parent, num_courses, [array(children)]) */ +$categories = get_categories(); + +require(AT_INCLUDE_PATH.'header.inc.php'); +$msg->printAll(); + +?> + +
+ + + +
+
+
*

+ +
+ +
+
*

+ +
+ + + +
+
+ + +
+ + + +
+ + +

+
+ + +
+ + +
+
+
+ + \ No newline at end of file diff --git a/admin/edit_course.php b/admin/edit_course.php new file mode 100644 index 000000000..5bc71e6f8 --- /dev/null +++ b/admin/edit_course.php @@ -0,0 +1,48 @@ +addFeedback('CANCELLED'); + header('Location: courses.php'); + exit; +} else if (isset($_POST['course']) && !isset($_POST['setvisual'])) { + require(AT_INCLUDE_PATH.'lib/course.inc.php'); + $errors = add_update_course($_POST, TRUE); + + if (is_numeric($errors)) { + $msg->addFeedback('COURSE_PROPERTIES'); + header('Location: '.AT_BASE_HREF.'admin/courses.php'); + exit; + } + +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$msg->printAll(); + +$course = intval($_REQUEST['course']); +$isadmin = TRUE; + + +require(AT_INCLUDE_PATH.'html/course_properties.inc.php'); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/admin/edit_user.php b/admin/edit_user.php new file mode 100644 index 000000000..90ceea4aa --- /dev/null +++ b/admin/edit_user.php @@ -0,0 +1,260 @@ +0 AND member_id<>$id",$db); + if (mysql_num_rows($result) != 0) { + $msg->addError('CREATE_MASTER_USED'); + } + } + + /* email check */ + if ($_POST['email'] == '') { + $missing_fields[] = _AT('email'); + } else if (!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,6}$", $_POST['email'])) { + $msg->addError('EMAIL_INVALID'); + } + $result = mysql_query("SELECT * FROM ".TABLE_PREFIX."members WHERE email LIKE '$_POST[email]' AND member_id <> $id",$db); + + if (mysql_num_rows($result) != 0) { + $valid = 'no'; + $msg->addError('EMAIL_EXISTS'); + } + + if (!$_POST['first_name']) { + $missing_fields[] = _AT('first_name'); + } + + if (!$_POST['last_name']) { + $missing_fields[] = _AT('last_name'); + } + + $_POST['first_name'] = str_replace('<', '', $_POST['first_name']); + $_POST['second_name'] = str_replace('<', '', $_POST['second_name']); + $_POST['last_name'] = str_replace('<', '', $_POST['last_name']); + + // check if first+last is unique + if ($_POST['first_name'] && $_POST['last_name']) { + $first_name_sql = $addslashes($_POST['first_name']); + $last_name_sql = $addslashes($_POST['last_name']); + $second_name_sql = $addslashes($_POST['second_name']); + + $sql = "SELECT member_id FROM ".TABLE_PREFIX."members WHERE first_name='$first_name_sql' AND second_name='$second_name_sql' AND last_name='$last_name_sql' AND member_id<>$id LIMIT 1"; + $result = mysql_query($sql, $db); + if (mysql_fetch_assoc($result)) { + $msg->addError('FIRST_LAST_NAME_UNIQUE'); + } + } + + + //check date of birth + $mo = intval($_POST['month']); + $day = intval($_POST['day']); + $yr = intval($_POST['year']); + + /* let's us take (one or) two digit years (ex. 78 = 1978, 3 = 2003) */ + if ($yr < date('y')) { + $yr += 2000; + } else if ($yr < 1900) { + $yr += 1900; + } + + $dob = $yr.'-'.$mo.'-'.$day; + + if ($mo && $day && $yr && !checkdate($mo, $day, $yr)) { + $msg->addError('DOB_INVALID'); + } else if (!$mo || !$day || !$yr) { + $dob = '0000-00-00'; + $yr = $mo = $day = 0; + } + + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + if (isset($_POST['profile_pic_delete'])) { + profile_image_delete($id); + } + if (($_POST['website']) && (!ereg("://",$_POST['website']))) { + $_POST['website'] = "http://".$_POST['website']; + } + if ($_POST['website'] == 'http://') { + $_POST['website'] = ''; + } + $_POST['postal'] = strtoupper(trim($_POST['postal'])); + + if (isset($_POST['private_email'])) { + $_POST['private_email'] = 1; + } else { + $_POST['private_email'] = 0; + } + + //$_POST['password'] = $addslashes($_POST['password']); + $_POST['website'] = $addslashes($_POST['website']); + $_POST['first_name'] = $addslashes($_POST['first_name']); + $_POST['second_name'] = $addslashes($_POST['second_name']); + $_POST['last_name'] = $addslashes($_POST['last_name']); + $_POST['address'] = $addslashes($_POST['address']); + $_POST['postal'] = $addslashes($_POST['postal']); + $_POST['city'] = $addslashes($_POST['city']); + $_POST['province'] = $addslashes($_POST['province']); + $_POST['country'] = $addslashes($_POST['country']); + $_POST['phone'] = $addslashes($_POST['phone']); + $_POST['status'] = intval($_POST['status']); + $_POST['old_status'] = intval($_POST['old_status']); + $_POST['gender'] = $addslashes($_POST['gender']); + + /* insert into the db. (the last 0 for status) */ + $sql = "UPDATE ".TABLE_PREFIX."members SET email = '$_POST[email]', + website = '$_POST[website]', + first_name = '$_POST[first_name]', + second_name= '$_POST[second_name]', + last_name = '$_POST[last_name]', + dob = '$dob', + gender = '$_POST[gender]', + address = '$_POST[address]', + postal = '$_POST[postal]', + city = '$_POST[city]', + province = '$_POST[province]', + country = '$_POST[country]', + phone = '$_POST[phone]', + status = $_POST[status], + language = '$_SESSION[lang]', + private_email = $_POST[private_email], + creation_date=creation_date, + last_login=last_login + WHERE member_id = $id"; + $result = mysql_query($sql, $db); + if (!$result) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->addError('DB_NOT_UPDATED'); + $msg->printAll(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + + if (defined('AT_MASTER_LIST') && AT_MASTER_LIST) { + $_POST['student_id'] = $addslashes($_POST['student_id']); + $student_pin = sha1($addslashes($_POST['student_pin'])); + + //if changed, delete old stud id + if (!empty($_POST['old_student_id']) && $_POST['old_student_id'] != $_POST['student_id']) { + $sql = "DELETE FROM ".TABLE_PREFIX."master_list WHERE public_field=".$_POST['old_student_id']." AND member_id=$id"; + $result = mysql_query($sql, $db); + } + //if new is set + if (!empty($_POST['student_id']) && $_POST['old_student_id'] != $_POST['student_id']) { + $sql = "REPLACE INTO ".TABLE_PREFIX."master_list VALUES ('$_POST[student_id]', '', $id)"; + $result = mysql_query($sql, $db); + } + } + + + if (defined('AT_EMAIL_CONFIRMATION') && AT_EMAIL_CONFIRMATION && ($_POST['status'] == AT_STATUS_UNCONFIRMED) && ($_POST['old_status'] != AT_STATUS_UNCONFIRMED)) { + + $sql = "SELECT email, creation_date FROM ".TABLE_PREFIX."members WHERE member_id=$id"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + $code = substr(md5($row['email'] . $row['creation_date']. $id), 0, 10); + $confirmation_link = AT_BASE_HREF . 'confirm.php?id='.$id.SEP.'m='.$code; + + /* send the email confirmation message: */ + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + $mail = new ATutorMailer(); + + $mail->AddAddress($row['email']); + $mail->From = $_config['contact_email']; + $mail->Subject = $_config['site_name'] . ' - ' . _AT('email_confirmation_subject'); + $mail->Body = _AT('email_confirmation_message', $_config['site_name'], $confirmation_link); + + $mail->Send(); + } + + $msg->addFeedback('PROFILE_UPDATED_ADMIN'); + if (isset($_POST['ml']) && $_REQUEST['ml']) { + header('Location: '.AT_BASE_HREF.'admin/master_list.php'); + } else { + header('Location: '.AT_BASE_HREF.'admin/users.php'); + } + exit; + } +} + +$id = intval($_REQUEST['id']); + +if (empty($_POST)) { + $sql = "SELECT * FROM ".TABLE_PREFIX."members WHERE member_id = $id"; + $result = mysql_query($sql, $db); + if (!($row = mysql_fetch_assoc($result))) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->addError('USER_NOT_FOUND'); + $msg->printAll(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $_POST = $row; + list($_POST['year'],$_POST['month'],$_POST['day']) = explode('-', $row['dob']); + //$_POST['password2'] = $_POST['password']; + $_POST['old_status'] = $_POST['status']; + + if (admin_authenticate(AT_ADMIN_PRIV_USERS, TRUE) && defined('AT_MASTER_LIST') && AT_MASTER_LIST) { + $sql = "SELECT public_field FROM ".TABLE_PREFIX."master_list WHERE member_id=$id"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $_POST['old_student_id'] = $row['public_field']; + $_POST['student_id'] = $row['public_field']; + } + } +} + +$savant->assign('languageManager', $languageManager); + +if (isset($_REQUEST['ml']) && $_REQUEST['ml']) { + // redirect back to the master list + $savant->assign('ml', 1); +} else { + $savant->assign('ml', 0); +} + + +/* HAVE TO SEND MEMBER_ID THROUGH FORM AS A HIDDEN POST VARIABLE!!! */ +/* PUT IN IF LOOP THAT LETS YOU SEE STATUS RADIO BUTTONS */ +$savant->display('registration.tmpl.php'); + +?> \ No newline at end of file diff --git a/admin/enrollment/enroll_edit.php b/admin/enrollment/enroll_edit.php new file mode 100644 index 000000000..1436d9631 --- /dev/null +++ b/admin/enrollment/enroll_edit.php @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/admin/enrollment/index.php b/admin/enrollment/index.php new file mode 100644 index 000000000..8c81307f5 --- /dev/null +++ b/admin/enrollment/index.php @@ -0,0 +1,37 @@ + \ No newline at end of file diff --git a/admin/enrollment/privileges.php b/admin/enrollment/privileges.php new file mode 100644 index 000000000..2e3a2da39 --- /dev/null +++ b/admin/enrollment/privileges.php @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/admin/error_logging.php b/admin/error_logging.php new file mode 100644 index 000000000..f3d0bf319 --- /dev/null +++ b/admin/error_logging.php @@ -0,0 +1,176 @@ + + +
+ + + + + + + + + + + + + + +printNoLookupFeedback('Could not access /content/logs. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + + /** + * Run through the logs directory and lets get all the profiles of all the logs of all the dates, sort + * by primary key as date, secondary key is profile name + */ + $logdirs; + + // loop through folder to get files and directory listing + while (($file = readdir($dir)) !== false) { + + /* if the name is not a directory */ + if( ($file == '.') || ($file == '..')) { + continue; + } + + if (is_dir($dir_ . '/' . $file)) { + $logdirs{$file} = $file; // store the day log dir + } + } + closedir($dir); // clean it up + + if (empty($logdirs)) { ?> + + + + $val) { + $log_profiles; // store all the profiles under the dir /content/logs/$val + $log_profiles_bug_count; // store the amount of bugs per profile + + if (!($dir = opendir($dir_ . '/' . $val))) { + $msg->printNoLookupFeedback('Could not access /content/logs/' . $val . '. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + // Open a read pointer to run through each log date directory getting all the profiles + while (($file = readdir($dir)) !== false) { + + if (($file == '.') || ($file == '..') || is_dir($file)) { + continue; + } + + if (strpos($file, 'profile') !== false) { // found a profile, store its md5 key identifier + $tmp_ = substr($file, strpos($file, '_') + 1); + $tmp_ = substr($tmp_, 0, strpos($tmp_, '.log.php')); + $log_profiles{$file} = $tmp_; + } + + } + closedir($dir); // clean it up + + /** + * Open a read pointer to run through each log date directory getting all the bugs associated + * all the profiles in $log_profiles + */ + if (empty($log_profiles)) { + $msg->printNoLookupFeedback('Warning. No profile found in ' . $dir_ . '/' . $val); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + + foreach ($log_profiles as $elem => $val_) { + $count = 0; + + /* for each profile get the number of bugs associated with it */ + if (!($dir = opendir($dir_ . '/' . $val))) { + $msg->printNoLookupFeedback('Could not access /content/logs' . $val . '. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + + while (($file = readdir($dir)) !== false) { + + // make sure we ignore profiles too!, just look at bug files + if( ($file == '.') || ($file == '..') || is_dir($file) || (strpos($file, 'profile') !== false)) { + continue; + } + + // found a bug that maps to $val_ md5 profile identifer + if (strpos($file, $val_) !== false) { + $count++; + } + } + closedir($dir); + + // store the amount of bugs associated with profile + $log_profiles_bug_count{$val}[$val_] = $count; + } + $log_profiles = array(); + } + /** + * At this point ($log_profiles => key) = ($log_profiles_bug_count => key). + * + * Lets print out + + + + + + +
+ + +
rows corresponding to all profiles found in the following format: + * + * Profile name, profile date, profile bug count. + */ + foreach ($log_profiles_bug_count as $day => $profile) : + foreach ($profile as $stamp => $total) : + ?> +
+ + + \ No newline at end of file diff --git a/admin/error_logging_bundle.php b/admin/error_logging_bundle.php new file mode 100644 index 000000000..94708c653 --- /dev/null +++ b/admin/error_logging_bundle.php @@ -0,0 +1,283 @@ +addError(array('EMPTY_FIELDS', _AT('recipient_address'))); + + header('Location: ' . $_SERVER['PHP_SELF']); + exit; + } + /* First lets check if they selected any profiles to bundle, run through $POST['file(\d)'] */ + foreach($_POST as $elem => $val) { + if (strpos($elem, 'file') !== false) { + $found = true; + + $work = $val; + + $date = substr($work, 0, strpos($work, ':')); + $id = substr($work, strpos($work, ':') + 1); + /* Parse the variable */ + $profiles{$id} = $date; + } + } + + if ($found === true) { + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + require(AT_INCLUDE_PATH.'classes/zipfile.class.php'); + + $mail = new ATutorMailer; + + $zipfile = new zipfile(); + + $dir_ = AT_CONTENT_DIR . 'logs'; + + foreach($profiles as $elem => $val) { + $store_some; + + // read the dir where this profile and its associated log files are located + if (!($dir = opendir($dir_ . '/' . $val))) { + $msg->printNoLookupFeedback('Could not access /content/logs/' . $val . '. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + // Open a read pointer to run through each log date directory getting all the profiles + while (($file = readdir($dir)) !== false) { + + if (($file == '.') || ($file == '..') || is_dir($file)) { + continue; + } + + // any files mathcing the $elem key correspond to this profile + if (strpos($file, $elem) !== false) { + $store_some{$dir_ . '/'. $val . '/' . $file} = $file; + } + + } + closedir($dir); // clean it up + + // The dir pointer is closed lets add to the zip + foreach($store_some as $val_ => $e) + $zipfile->add_file(file_get_contents($val_), $e); + } + + $zipfile->close(); + + if ($file_handle = fopen($dir_ . '/bundle.log', "w")) { + if (!fwrite($file_handle, $zipfile->get_file())) { } + } else { } + fclose($file_handle); + + $mail->From = $_config['contact_email']; + $mail->addAddress($_POST['email_add']); + $mail->Subject = _AT('log_file_bundle'); + $mail->Body = _AT('see_attached'); + $mail->AddAttachment($dir_ . '/bundle.log'); + + // clean up the file at the redirection point + if(!$mail->Send()) { + $msg->addError('SENDING_ERROR'); + /* Make sure the tmp bundle file never exists past the lifetime of the bundle manager page */ + unlink($dir_ . '/bundle.log'); + header('Location: ' . $_SERVER['PHP_SELF']); + exit; + } + unset($mail); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + /* Make sure the tmp bundle file never exists past the lifetime of the bundle manager page */ + unlink($dir_ . '/bundle.log'); + header('Location: error_logging.php'); + exit; + } else { + $msg->addError('NO_LOGS_SELECTED'); + header('Location: ' . $_SERVER['PHP_SELF']); + exit; + } +} // else step 1 + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$msg->printAll(); + + +?> +

+ +

+ +
+ + + + + + + + + + + + + + +printNoLookupFeedback('Could not access /content/logs. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + + /** + * Run through the logs directory and lets get all the profiles of all the logs of all the dates, sort + * by primary key as date, secondary key is profile name + */ + $logdirs; + + // loop through folder to get files and directory listing + while (($file = readdir($dir)) !== false) { + + /* if the name is not a directory */ + if( ($file == '.') || ($file == '..')) { + continue; + } + + if (is_dir($dir_ . '/' . $file)) { + $logdirs{$file} = $file; // store the day log dir + } + } + closedir($dir); // clean it up + + if (empty($logdirs)) { ?> + + + + $val) { + $log_profiles; // store all the profiles under the dir /content/logs/$val + $log_profiles_bug_count; // store the amount of bugs per profile + + if (!($dir = opendir($dir_ . '/' . $val))) { + $msg->printNoLookupFeedback('Could not access /content/logs/' . $val . '. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + // Open a read pointer to run through each log date directory getting all the profiles + while (($file = readdir($dir)) !== false) { + + if (($file == '.') || ($file == '..') || is_dir($file)) { + continue; + } + + if (strpos($file, 'profile') !== false) { // found a profile, store its md5 key identifier + $tmp_ = substr($file, strpos($file, '_') + 1); + $tmp_ = substr($tmp_, 0, strpos($tmp_, '.log.php')); + $log_profiles{$file} = $tmp_; + } + + } + closedir($dir); // clean it up + + /** + * Open a read pointer to run through each log date directory getting all the bugs associated + * all the profiles in $log_profiles + */ + if (empty($log_profiles)) { + $msg->printNoLookupFeedback('Warning. No profile found in ' . $dir_ . '/' . $val); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + + foreach ($log_profiles as $elem => $val_) { + $count = 0; + + /* for each profile get the number of bugs associated with it */ + if (!($dir = opendir($dir_ . '/' . $val))) { + $msg->printNoLookupFeedback('Could not access /content/logs' . $val . '. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + + while (($file = readdir($dir)) !== false) { + + // make sure we ignore profiles too!, just look at bug files + if( ($file == '.') || ($file == '..') || is_dir($file) || (strpos($file, 'profile') !== false)) { + continue; + } + + // found a bug that maps to $val_ md5 profile identifer + if (strpos($file, $val_) !== false) { + $count++; + } + } + closedir($dir); + + // store the amount of bugs associated with profile + $log_profiles_bug_count{$val}[$val_] = $count; + } + $log_profiles = array(); + } + /** + * At this point ($log_profiles => key) = ($log_profiles_bug_count => key). + * + * Lets print out + + + + + + +
+
+ + + +
rows corresponding to all profiles found in the following format: + * + * Profile name, profile date, profile bug count. + */ + foreach ($log_profiles_bug_count as $day => $profile) : + foreach ($profile as $stamp => $total) : + ?> +
+ + + \ No newline at end of file diff --git a/admin/error_logging_details.php b/admin/error_logging_details.php new file mode 100644 index 000000000..1a73d5077 --- /dev/null +++ b/admin/error_logging_details.php @@ -0,0 +1,194 @@ +addError('NO_PROFILE_SELECTED'); + header('Location: error_logging.php'); + exit; +} // else we have a profile we can work with + +if (isset($_POST['delete'])) { + + $key = substr($_POST['data'], 0, strpos($_POST['data'], ':')); + $date = substr($_POST['data'], strpos($_POST['data'], ':') + 1); + $dir_ = AT_CONTENT_DIR . 'logs/' . $date; + $delete_store; + + if (!($dir = opendir($dir_))) { + $msg->printNoLookupFeedback('Could not access /content/logs/' . $date . '. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + + $cnt = 0; + // Open a read pointer to run through each log date directory getting all the profiles + while (($file = readdir($dir)) !== false) { + + if (($file == '.') || ($file == '..') || is_dir($file)) { + continue; + } + + if (strpos($file, $key) !== false) { // found a bug associated with our profile key + $delete_store{$file} = $file; + } else { + $cnt++; + } + + } + closedir($dir); // clean it up + + if (count($delete_store) > 0) { + // Now run through the files and unlink them all + foreach($delete_store as $elem => $val) + unlink($dir_ . '/' . $elem); + } + + // remove the directory as well if there are no oother profiles in it + if ($cnt == 0) { + rmdir($dir_); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: error_logging.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (isset($_POST['view'])) { + // Grab all the bugs associated with this $_POST['data'] corresponding md5 key + $key = substr($_POST['data'], 0, strpos($_POST['data'], ':')); + $date = substr($_POST['data'], strpos($_POST['data'], ':') + 1); + $dir_ = AT_CONTENT_DIR . 'logs/' . $date; + $log_profiles_bugs; + + ?> + +
+ + + + + + + + + + + + + + + printNoLookupFeedback('Could not access /content/logs/' . $date . '. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + + // Open a read pointer to run through each log date directory getting all the profiles + while (($file = readdir($dir)) !== false) { + + if (($file == '.') || ($file == '..') || is_dir($file) || (strpos($file, 'profile') !== false)) { + continue; + } + + if (strpos($file, $key) !== false) { // found a bug associated with our profile key + $log_profile_bugs{$file} = $file; + } + + } + closedir($dir); // clean it up + + if (empty($log_profile_bugs)) { ?> + + + + + $lm) { + // construct timestamp from millis since epoch in bug identifier + $timestamp = substr($lm, strpos($lm, '_') + 1); + $timestamp = substr($timestamp, 0, strpos($lm, '_') + 2); + + $timestamp = AT_Date(_AT('inbox_date_format'), $timestamp, AT_DATE_UNIX_TIMESTAMP); + + $str_prefix = substr($lm, 0, strpos($lm, '_')); + ?> + + + + + + +
+ + + + +
+ + + printNoLookupFeedback('Could not access /content/logs/' . $date . '. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + + // Open a read pointer to run through each log date directory getting all the profiles + while (($file = readdir($dir)) !== false) { + + if (($file == '.') || ($file == '..') || is_dir($file)) { + continue; + } + + if (strpos($file, $key) !== false) { // found a bug associated with our profile key + $delete_store{$file} = $file; + } + + } + closedir($dir); // clean it up + + // Now run through the files and unlink them all + foreach($delete_store as $elem => $val) + unlink($dir_ . '/' . $elem); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: ' . $_SERVER['PHP_SELF']); +} +?> \ No newline at end of file diff --git a/admin/error_logging_reset.php b/admin/error_logging_reset.php new file mode 100644 index 000000000..97834bde3 --- /dev/null +++ b/admin/error_logging_reset.php @@ -0,0 +1,49 @@ +addFeedback('CANCELLED'); + header('Location: ./error_logging.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + + //clean up the db + require(AT_INCLUDE_PATH.'lib/filemanager.inc.php'); + + if (($result = clr_dir(AT_CONTENT_DIR . 'logs/'))) { + $msg->addFeedback('ERROR_LOG_RESET'); + } else { + $msg->addError('ERROR_LOG_NOT_RESET'); + } + + header('Location: ./error_logging.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +//print confirmation +$hidden_vars['all'] = TRUE; + +$confirm = array('RESET_ERROR_LOG', $_SERVER['PHP_SELF']); +$msg->addConfirm($confirm, $hidden_vars); +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/admin/error_logging_view.php b/admin/error_logging_view.php new file mode 100644 index 000000000..78ae2a1ef --- /dev/null +++ b/admin/error_logging_view.php @@ -0,0 +1,73 @@ + $val) { + $str_ = substr($elem, 0, 4); + if ($str_ == 'file') { + $files[] = $elem; + } + } + if (empty($files)) { + $msg->addError('NO_LOG_SELECTED'); + header('Location: error_logging.php'); + exit; + } +} + +$back_ref = $_POST['profile_id'] . ':' . $_POST['profile_date']; + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> +
+ + + +
+
+

+
+ +
+ +
printErrors(array('CANNOT_READ_FILE', AT_CONTENT_DIR . 'logs/' . $_POST[$file])); + } + } + } ?> + +
+ +
+
+
+ + \ No newline at end of file diff --git a/admin/fix_content.php b/admin/fix_content.php new file mode 100644 index 000000000..d1cc68319 --- /dev/null +++ b/admin/fix_content.php @@ -0,0 +1,56 @@ +
';
+
+echo "cpID\torder\t cID";
+
+$sql    = "SELECT content_id, content_parent_id, ordering, course_id FROM ".TABLE_PREFIX."content ORDER BY course_id, content_parent_id, ordering";
+$result = mysql_query($sql, $db);
+while ($row = mysql_fetch_assoc($result)) {
+	if ($current_course_id != $row['course_id']) {
+		echo "\n\n-- course id $row[course_id]\n\n";
+		$current_course_id = $row['course_id'];
+		unset($current_parent_id);
+		unset($ordering);
+	}
+	echo $row['content_parent_id'] . "\t" . $row['ordering'] . "\t" . $row['content_id'];
+	if ($current_parent_id != $row['content_parent_id']) {
+		$current_parent_id = $row['content_parent_id'];
+		$ordering = 1;
+	}
+
+	if ($row['ordering'] != $ordering) {
+		echo "\t mismatch : expecting $ordering [fixed]";
+		$sql = "UPDATE ".TABLE_PREFIX."content SET ordering=$ordering WHERE content_id=$row[content_id]";
+		mysql_query($sql, $db);
+		write_to_log(AT_ADMIN_LOG_UPDATE, 'content', mysql_affected_rows($db), $sql);
+	}
+
+	 echo "\n";
+
+	$ordering++;
+}
+
+echo' 
'; + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/admin/forum_add.php b/admin/forum_add.php new file mode 100644 index 000000000..1d199e613 --- /dev/null +++ b/admin/forum_add.php @@ -0,0 +1,112 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/forums.php'); + exit; +} else if (isset($_POST['add_forum'])) { + $missing_fields = array(); + + if (empty($_POST['title'])) { + $missing_fields[] = _AT('title'); + } + + if (empty($_POST['courses'])) { + $missing_fields[] = _AT('courses'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + $_POST['edit'] = intval($_POST['edit']); + + if (!($msg->containsErrors())) { + //add forum + $sql = "INSERT INTO ".TABLE_PREFIX."forums (title, description, mins_to_edit) VALUES ('" . $_POST['title'] . "','" . $_POST['description'] ."', $_POST[edit])"; + $result = mysql_query($sql, $db); + $forum_id = mysql_insert_id($db); + write_to_log(AT_ADMIN_LOG_INSERT, 'forums', mysql_affected_rows($db), $sql); + + //for each course, add an entry to the forums_courses table + foreach ($_POST['courses'] as $course) { + $sql = "INSERT INTO ".TABLE_PREFIX."forums_courses VALUES (" . $forum_id . "," . $course . ")"; + $result = mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_INSERT, 'forums_courses', mysql_affected_rows($db), $sql); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + if($course =="0"){ + $msg->addFeedback('FORUM_POSTING'); + } + header('Location: '.AT_BASE_HREF.'admin/forums.php'); + exit; + } +} + +$onload = 'document.form.title.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
+ + +
+
+
*

+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
*

+ + + + + +
+ +
+ + +
+
+
+ + \ No newline at end of file diff --git a/admin/forum_delete.php b/admin/forum_delete.php new file mode 100644 index 000000000..8fb90dce1 --- /dev/null +++ b/admin/forum_delete.php @@ -0,0 +1,77 @@ +addFeedback('CANCELLED'); + header('Location: forums.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $forum_id = intval($_POST['forum']); + + $sql = "SELECT post_id FROM ".TABLE_PREFIX."forums_threads WHERE forum_id=$forum_id"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_array($result)) { + $sql = "DELETE FROM ".TABLE_PREFIX."forums_accessed WHERE post_id=$row[post_id]"; + $result2 = mysql_query($sql, $db); + } + + $sql = "DELETE FROM ".TABLE_PREFIX."forums_subscriptions WHERE forum_id=$forum_id"; + $result = mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."forums_threads WHERE forum_id=$forum_id"; + $result = mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."forums_courses WHERE forum_id=$forum_id"; + $result = mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'forums_courses', mysql_affected_rows($db), $sql); + + $sql = "DELETE FROM ".TABLE_PREFIX."forums WHERE forum_id=$forum_id"; + $result = mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'forums', mysql_affected_rows($db), $sql); + + $sql = "OPTIMIZE TABLE ".TABLE_PREFIX."forums_threads"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: forums.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + $_GET['forum'] = intval($_GET['forum']); + + $row = get_forum($_GET['forum']); + + if (!is_array($row)) { + $msg->addError('FORUM_NOT_FOUND'); + $msg->printErrors(); + } else { + + $hidden_vars['delete_forum'] = TRUE; + $hidden_vars['forum'] = $_GET['forum']; + $msg->addConfirm(array('DELETE_FORUM', AT_print($row['title'], 'forums.title')), $hidden_vars); + $msg->printConfirm(); + } + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/admin/forum_edit.php b/admin/forum_edit.php new file mode 100644 index 000000000..ce8b06e67 --- /dev/null +++ b/admin/forum_edit.php @@ -0,0 +1,167 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/forums.php'); + exit; +} else if (isset($_POST['edit_forum'])) { + $missing_fields = array(); + if (empty($_POST['title'])) { + $missing_fields[] = _AT('title'); + } + + if (empty($_POST['courses'])) { + $missing_fields[] = _AT('courses'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!($msg->containsErrors())) { + + //update forum + $forum_id = intval($_POST['forum']); + $_POST['title'] = $addslashes($_POST['title']); + $_POST['edit'] = intval($_POST['edit']); + $_POST['description'] = $addslashes($_POST['description']); + + $sql = "UPDATE ".TABLE_PREFIX."forums SET title='" . $_POST['title'] . "', description='" . $_POST['description'] . "', last_post=last_post, mins_to_edit=$_POST[edit] WHERE forum_id=".$forum_id; + $result = mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_UPDATE, 'forums', mysql_affected_rows($db), $sql); + + // unsubscribe all the members who are NOT in $_POST['courses'] + $courses_list = implode(',', $_POST['courses']); + + // list of all the students who are in other courses as well + $sql = "SELECT member_id FROM ".TABLE_PREFIX."course_enrollment WHERE course_id IN ($courses_list)"; + $result2 = mysql_query($sql, $db); + while ($row2 = mysql_fetch_assoc($result2)) { + $students[] = $row2['member_id']; + } + + // list of students who must REMAIN subscribed! + $students_list = implode(',', $students); + + if ($students_list) { + // remove the subscriptions + $sql = "SELECT post_id FROM ".TABLE_PREFIX."forums_threads WHERE forum_id=$forum_id"; + $result2 = mysql_query($sql, $db); + while ($row2 = mysql_fetch_assoc($result2)) { + $sql = "DELETE FROM ".TABLE_PREFIX."forums_accessed WHERE post_id=$row2[post_id] AND member_id NOT IN ($students_list)"; + $result3 = mysql_query($sql, $db); + } + + $sql = "DELETE FROM ".TABLE_PREFIX."forums_subscriptions WHERE forum_id=$forum_id AND member_id NOT IN ($students_list)"; + $result3 = mysql_query($sql, $db); + } + + $sql = "DELETE FROM ".TABLE_PREFIX."forums_courses WHERE forum_id=$forum_id AND course_id NOT IN ($courses_list)"; + $result = mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_DELETE, 'forums_courses', mysql_affected_rows($db), $sql); + + //update forums_courses + if (in_array('0', $_POST['courses'])) { + //general course - used by all. put one entry in forums_courses w/ course_id=0 + $sql = "REPLACE INTO ".TABLE_PREFIX."forums_courses VALUES (" . $_POST['forum'] . ", 0)"; + $result = mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_REPLACE, 'forums_courses', mysql_affected_rows($db), $sql); + } else { + foreach ($_POST['courses'] as $course) { + $sql = "REPLACE INTO ".TABLE_PREFIX."forums_courses VALUES (" . $_POST['forum'] . "," . $course . ")"; + $result = mysql_query($sql, $db); + write_to_log(AT_ADMIN_LOG_REPLACE, 'forums_courses', mysql_affected_rows($db), $sql); + } + } + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'admin/forums.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (!($forum = @get_forum($_GET['forum']))) { + //no such forum + $msg->addError('FORUM_NOT_FOUND'); + $msg->printAll(); +} else { + $msg->printAll(); + + $sql = "SELECT * FROM ".TABLE_PREFIX."forums_courses WHERE forum_id=$forum[forum_id]"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $courses[] = $row['course_id']; + } +?> +
+ + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+ +
+
+
+ \ No newline at end of file diff --git a/admin/forums.php b/admin/forums.php new file mode 100644 index 000000000..f62b38388 --- /dev/null +++ b/admin/forums.php @@ -0,0 +1,109 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'lib/forums.inc.php'); + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
+ + + + + + + + + + + + + + + + + + +'; + echo ''; + echo ' '; + echo ' '; + echo ' '; + echo ''; + } + } else { + echo ''; + echo ' '; + echo ''; + } +?> + + + + + + + + + + + + + + + + + + + + +
 
' . $forum['description'] . ''; + + $courses = array(); + $sql = "SELECT F.course_id FROM ".TABLE_PREFIX."forums_courses F WHERE F.forum_id=$forum[forum_id]"; + $c_result = mysql_query($sql, $db); + while ($course = mysql_fetch_assoc($c_result)) { + $courses[] = $system_courses[$course['course_id']]['title']; + } + natcasesort($courses); + echo implode(', ', $courses); + echo '
' . _AT('no_forums') . '
+
+ + \ No newline at end of file diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 000000000..752176fd7 --- /dev/null +++ b/admin/index.php @@ -0,0 +1,94 @@ +addWarning('TRANSLATE_ON'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($_config['check_version']) { + $request = @file('http://atutor.ca/check_atutor_version.php?return'); + if ($request && version_compare(VERSION, $request[0], '<')) { + $msg->printFeedbacks('ATUTOR_UPDATE_AVAILABLE'); + } +} +?> + +
+ + + + +
+
+
+

+

+
+ +
+ +
+
+
+ + + +
+
+ +
+

+

+
+ +
+ +
+
+
+
+ +
+ '; + foreach ($_top_level_pages as $page_info) { + echo '
  • ' . $page_info['title'] . ' '; + + $page_info['url'] = substr($page_info['url'], $path_length); + + if ($_pages[$page_info['url']]['children']) { + echo ''; + } + echo '
  • '; + } + echo ''; +?> +
    + \ No newline at end of file diff --git a/admin/instructor_login.php b/admin/instructor_login.php new file mode 100644 index 000000000..b21ed962d --- /dev/null +++ b/admin/instructor_login.php @@ -0,0 +1,59 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/courses.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + $sql = "SELECT * FROM ".TABLE_PREFIX."courses WHERE course_id=".$_REQUEST['course']; + $result = mysql_query($sql, $db); + $row = mysql_fetch_array($result); + + $hidden_vars['course'] = $_GET['course']; + + $msg->addConfirm(array('LOGIN_INSTRUCTOR', SITE_NAME, $row['title']), $hidden_vars); + $msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/admin/instructor_requests.php b/admin/instructor_requests.php new file mode 100644 index 000000000..d0b39cfc4 --- /dev/null +++ b/admin/instructor_requests.php @@ -0,0 +1,129 @@ +From = $_config['contact_email']; + $mail->AddAddress($to_email); + $mail->Subject = _AT('instructor_request'); + $mail->Body = $tmp_message; + + if(!$mail->Send()) { + //echo 'There was an error sending the message'; + $msg->printErrors('SENDING_ERROR'); + exit; + } + + unset($mail); + } + } + + $msg->addFeedback('PROFILE_UPDATED_ADMIN'); +} else if (!empty($_GET) && !$_GET['submit']) { + $msg->addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT M.login, M.first_name, M.last_name, M.email, M.member_id, A.* FROM ".TABLE_PREFIX."members M, ".TABLE_PREFIX."instructor_approvals A WHERE A.member_id=M.member_id ORDER BY M.login"; +$result = mysql_query($sql, $db); +$num_pending = mysql_num_rows($result); +?> + +
    + + + + + + + + + + + + + + + + + +'; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + + echo ''; + } while ($row = mysql_fetch_assoc($result)); + } else { + echo ''; + } +?> + +
     
    + +
    '.AT_print($row['first_name'], 'members.first_name').''.AT_print($row['last_name'], 'members.last_name').''.AT_print($row['email'], 'members.email').''.AT_print($row['notes'], 'instructor_approvals.notes').'
    '._AT('none_found').'
    +
    + + \ No newline at end of file diff --git a/admin/language.php b/admin/language.php new file mode 100644 index 000000000..c75ac6446 --- /dev/null +++ b/admin/language.php @@ -0,0 +1,97 @@ +getNumLanguages() == 1) { + $msg->addError('LAST_LANGUAGE'); + } else { + header('Location: language_delete.php?lang_code='.$_POST['id']); + exit; + } +} else if (isset($_POST['export'])) { + $language =& $languageManager->getLanguage($_POST['id']); + if ($language === FALSE) { + $msg->addError('LANG_NOT_FOUND'); + } else { + $languageEditor =& new LanguageEditor($language); + $languageEditor->export(); + } +} else if (isset($_POST['edit'])) { + header('Location: language_edit.php?lang_code='.$_POST['id']); + exit; +} + +if (AT_DEVEL_TRANSLATE == 1) { + $msg->addWarning('TRANSLATE_ON'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    + + ++ + + + + + + + + + + + + + + + + + + + getAvailableLanguages() as $codes): ?> + + + + + + + + + + +
     
    + + + + + + + + + +
    getEnglishName(); ?>getCode()); ?>getCharacterSet()); ?>
    +
    + + \ No newline at end of file diff --git a/admin/language_add.php b/admin/language_add.php new file mode 100644 index 000000000..2aa8e726a --- /dev/null +++ b/admin/language_add.php @@ -0,0 +1,96 @@ +addFeedback('CANCELLED'); + header('Location: language.php'); + exit; +} else if (isset($_POST['submit'])) { + require_once(AT_INCLUDE_PATH . 'classes/Language/LanguageEditor.class.php'); + + if ($languageManager->exists($_POST['code'], $_POST['locale'])) { + $msg->addError('LANG_EXISTS'); + } else { + $state = LanguageEditor::addLanguage($_POST, $db); + } + + if (!$msg->containsErrors() && $state !== FALSE) { + $msg->addFeedback('LANG_ADDED'); + header('Location: language.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); ?> + +
    + +
    +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    *

    + +
    + +
    +
    + + />, /> +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/language_delete.php b/admin/language_delete.php new file mode 100644 index 000000000..5169b5dc1 --- /dev/null +++ b/admin/language_delete.php @@ -0,0 +1,57 @@ +addFeedback('CANCELLED'); + //shozub -- is this supposed to be lang_codeinstead of delete_lang??? + header('Location: language.php?lang_code='.$_POST['delete_lang']); + exit; +} + +if (isset($_POST['submit_yes'])) { + require_once(AT_INCLUDE_PATH . 'classes/Language/LanguageEditor.class.php'); + + $lang =& $languageManager->getLanguage($_POST['lang_code']); + $languageEditor =& new LanguageEditor($lang); + $languageEditor->deleteLanguage(); + + $msg->addFeedback('LANG_DELETED'); + header('Location: language.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$language =& $languageManager->getLanguage($_GET['lang_code']); +if ($language === FALSE) { + $msg->addError('LANG_NOT_FOUND'); // Originally AT_LANG_NOT_FOUND, make error code + $msg->printAll(); + + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$hidden_vars['lang_code'] = $_GET['lang_code']; + +$confirm = array('DELETE_LANG', $language->getEnglishName()); +$msg->addConfirm($confirm, $hidden_vars); +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/admin/language_edit.php b/admin/language_edit.php new file mode 100644 index 000000000..3f518cc2f --- /dev/null +++ b/admin/language_edit.php @@ -0,0 +1,122 @@ +getLanguage($_GET['lang_code']); +if ($lang === FALSE) { + require(AT_INCLUDE_PATH.'header.inc.php'); + echo '

    '._AT('edit_language').'

    '; + $msg->addError('NO_LANGUAGE'); + + $msg->printAll(); + + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: language.php'); + exit; +} else if (isset($_POST['submit'])) { + $languageEditor =& new LanguageEditor($_GET['lang_code']); + $state = $languageEditor->updateLanguage($_POST, $languageManager->exists($_POST['code'], $_POST['locale'])); + + if (!$msg->containsErrors() && $state !== FALSE) { + $msg->addFeedback('LANG_UPDATED'); + header('Location: language.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +$msg->printAll(); + +if (!isset($_POST['submit'])) { + $_POST['code'] = $lang->getParentCode(); + $_POST['locale'] = $lang->getLocale(); + $_POST['charset'] = $lang->getCharacterSet(); + $_POST['direction'] = $lang->getDirection(); + $_POST['reg_exp'] = $lang->getRegularExpression(); + $_POST['native_name'] = $lang->getNativeName(); + $_POST['english_name'] = $lang->getEnglishName(); +} + +?> + +
    + + + +
    +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    *

    + +
    + +
    +
    + + />, /> +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/language_editor.php b/admin/language_editor.php new file mode 100644 index 000000000..2421fb3be --- /dev/null +++ b/admin/language_editor.php @@ -0,0 +1,166 @@ +addWarning('TRANSLATE_ON'); + require(AT_INCLUDE_PATH.'header.inc.php'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$_variables = array('template' => '_template', 'feedback' => '_msgs'); +$_c_variables = array('template' => '_c_template', 'feedback' => '_c_msgs'); + +$sql_search = ''; +if (isset($_GET['filter'], $_GET['search'])) { + $_GET['search'] = trim($addslashes($_GET['search'])); + $words = explode(' ', $_GET['search']); + foreach ($words as $key => $word) { + // search `term` and `text` only + if (strlen($word) > 1) { + $word = str_replace(array('%','_'), array('\%', '\_'), $word); + $words[$key] = "(`term` LIKE '%$word%' OR `text` LIKE '%$word%')"; + } else { + unset($words[$key]); + } + } + if ($words) { + $sql_search = ' AND (' . implode(' OR ', $words).')'; + } +} else if ($_GET['reset_filter']) { + unset($_GET); +} +if (!isset($_GET['type']) || !isset($_variables[$_GET['type']])) { + $_GET['type'] = 'template'; +} + +if (isset($_GET['custom'])) { + $variable = $_c_variables[$_GET['type']]; +} else { + $variable = $_variables[$_GET['type']]; +} + +$sql = "SELECT * FROM ".TABLE_PREFIX."language_text WHERE language_code='$_SESSION[lang]' AND `variable`='$variable' $sql_search ORDER BY text"; +$result = mysql_query($sql, $db); +$num_results = mysql_num_rows($result); +?> + +
    +
    +
    +

    +
    + +
    +
    + /> + /> +
    + +
    + /> +
    + +
    +
    + +
    + +
    + + +
    +
    +
    + +
    +
    + + + + + + +
    + + + +

    + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/admin/language_import.php b/admin/language_import.php new file mode 100644 index 000000000..d81f2fbc1 --- /dev/null +++ b/admin/language_import.php @@ -0,0 +1,105 @@ +import($_POST['language']); + + header('Location: language_import.php'); + exit; +} else if (isset($_POST['submit']) && (!is_uploaded_file($_FILES['file']['tmp_name']) || !$_FILES['file']['size'])) { + $msg->addError('LANG_IMPORT_FAILED'); +} else if (isset($_POST['submit']) && !$_FILES['file']['name']) { + $msg->addError('IMPORTFILE_EMPTY'); +} else if (isset($_POST['submit']) && is_uploaded_file($_FILES['file']['tmp_name'])) { + $languageManager->import($_FILES['file']['tmp_name']); + + header('Location: language_import.php'); + exit; +} + +?> + + +
    +
    +
    +

    +
    + +
    +
    + +
    + +
    + +
    +
    +
    + + +
    +
    +
    + +
    + +
    + getNumLanguages()) { + $found = false; + foreach ($remoteLanguageManager->getAvailableLanguages() as $codes){ + $language = current($codes); + if (!$languageManager->exists($language->getCode()) && ($language->getStatus() == AT_LANG_STATUS_PUBLISHED)) { + if (!$found) { + echo '
    '; + echo '
    '; + } else { + echo _AT('none_found'); + echo '
    '; + } + } else { + echo _AT('cannot_find_remote_languages'); + echo ''; + } + ?> + +
    + + + \ No newline at end of file diff --git a/admin/language_term.php b/admin/language_term.php new file mode 100644 index 000000000..7c3249983 --- /dev/null +++ b/admin/language_term.php @@ -0,0 +1,102 @@ + + + +
    + + + +
    +
    +

    + +

    + + + +

    +

    + + + + +
    + +
    + 10) { + echo ''._AT('global_more_than_10_pages').''; + } else { + echo '
      '; + while ($page_row = mysql_fetch_assoc($result)) { + echo '
    • '.$page_row['page'] . '
    • '; + } + echo '
    '; + } + ?> +
    + +
    + + + + +
    +
    +
    + +

    + + + \ No newline at end of file diff --git a/admin/language_translate.php b/admin/language_translate.php new file mode 100644 index 000000000..fce43facd --- /dev/null +++ b/admin/language_translate.php @@ -0,0 +1,72 @@ +liveImport($addslashes($_POST['import_lang'])); + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +$button_state = ''; +if (!defined('AT_DEVEL_TRANSLATE') || !AT_DEVEL_TRANSLATE) { + $button_state = 'disabled="disabled"'; +} + +?> + +
    +
    +
    +

    +
    + +
    +

    +
    + +
    + /> +
    +
    +
    + + +
    +
    +
    + Import partial language from the live ATutor language database to your local installation for translating. +
    +
    + printDropdown($_SESSION['lang'], 'import_lang', 'import_lang'); + ?> +
    + +
    + +
    +
    +
    + + + \ No newline at end of file diff --git a/admin/master_list.php b/admin/master_list.php new file mode 100644 index 000000000..793eda0d7 --- /dev/null +++ b/admin/master_list.php @@ -0,0 +1,340 @@ +addInfo('MASTER_LIST_DISABLED'); + $msg->printInfos(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + + +if (isset($_POST['submit'])) { + if ($_FILES['file']['error'] == 1) { + $errors = array('FILE_MAX_SIZE', ini_get('upload_max_filesize')); + $msg->addError($errors); + header('Location: '.$_SERVER['PHP_SELF']); + exit; + } + + if (!$_FILES['file']['name'] || (!is_uploaded_file($_FILES['file']['tmp_name']))) { + $msg->addError('FILE_NOT_SELECTED'); + header('Location: '.$_SERVER['PHP_SELF']); + exit; + } + + $fp = fopen($_FILES['file']['tmp_name'], 'r'); + if ($fp) { + $existing_accounts = array(); + $number_of_updates = 0; + + if ($_POST['override'] > 0) { + /* Delete all the un-created accounts. (There is no member to delete or disable). */ + $sql = "DELETE FROM ".TABLE_PREFIX."master_list WHERE member_id=0"; + $result = mysql_query($sql, $db); + + /* Get all the created accounts. (They will be disabled or deleted if not in the new list). */ + $sql = "SELECT public_field, member_id FROM ".TABLE_PREFIX."master_list"; + $result = mysql_query($sql, $db); + $num_affected += mysql_affected_rows($db); + if ($num_affected > 0) { + $number_of_updated += $num_affected; + } + while ($row = mysql_fetch_assoc($result)) { + $existing_accounts[$row['public_field']] = $row['member_id']; + } + } + $sql = ''; + while (($row = fgetcsv($fp, 1000, ',')) !== FALSE) { + if (count($row) != 2) { + continue; + } + if (!$existing_accounts[$row[0]]) { + $row[0] = addslashes($row[0]); + $row[1] = md5($row[1]); // this may be hashed + + $sql = "INSERT INTO ".TABLE_PREFIX."master_list VALUES ('$row[0]', '$row[1]', 0)"; + mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_INSERT, 'master_list', mysql_affected_rows($db), $sql); + $num_affected = mysql_affected_rows($db); + if ($num_affected > 0) { + $number_of_updated += $num_affected; + } + } + unset($existing_accounts[$row[0]]); + } + fclose($fp); + + if (($_POST['override'] == 1) && $existing_accounts) { + // disable missing accounts + $existing_accounts = implode(',', $existing_accounts); + + $sql = "UPDATE ".TABLE_PREFIX."members SET status=".AT_STATUS_DISABLED.", creation_date=creation_date, last_login=last_login WHERE member_id IN ($existing_accounts)"; + $result = mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_UPDATE, 'members', mysql_affected_rows($db), $sql); + + // un-enrol disabled accounts + $sql = "DELETE FROM ".TABLE_PREFIX."course_enrollment WHERE member_id IN ($existing_accounts)"; + $result = mysql_query($sql, $db); + + $num_affected = mysql_affected_rows($db); + if ($num_affected > 0) { + $number_of_updated += $num_affected; + } + write_to_log(AT_ADMIN_LOG_DELETE, 'course_enrollment', mysql_affected_rows($db), $sql); + + } else if ($_POST['override'] == 2) { + // delete missing accounts + } + + if ($number_of_updated > 0) { + $msg->addFeedback('MASTER_LIST_UPLOADED'); + } else { + $msg->addFeedback('MASTER_LIST_NO_CHANGES'); + } + header('Location: '.$_SERVER['PHP_SELF']); + } + + exit; +} else if (isset($_GET['edit'], $_GET['id'])) { + if (substr($_GET['id'], 0, 1) != '-') { + header('Location: '.AT_BASE_HREF.'admin/edit_user.php?id='.$_GET['id'] . SEP . 'ml=1'); + } else { + header('Location: '.AT_BASE_HREF.'admin/master_list_edit.php?id='.substr($_GET['id'], 1) . SEP . 'ml=1'); + } + exit; +} else if (isset($_GET['delete'], $_GET['id'])) { + if (substr($_GET['id'], 0, 1) != '-') { + header('Location: '.AT_BASE_HREF.'admin/admin_delete.php?id='.$_GET['id'] . SEP . 'ml=1'); + } else { + header('Location: '.AT_BASE_HREF.'admin/master_list_delete.php?id='.substr($_GET['id'], 1) . SEP . 'ml=1'); + } + exit; +} else if (isset($_GET['delete']) || isset($_GET['edit'])) { + $msg->addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +if ($_GET['reset_filter']) { + unset($_GET); +} +?> + +
    +
    +
    +

    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    + +0 '; + } + $page_string .= SEP.'status='.$_GET['status']; +} else { + $status = '1'; +} + +if ($_GET['search']) { + $_GET['search'] = trim($_GET['search']); + $page_string .= SEP.'search='.urlencode($_GET['search']); + $search = $addslashes($_GET['search']); + + $search = explode(',', $search); + + $sql = ''; + foreach ($search as $term) { + $term = trim($term); + $term = str_replace(array('%','_'), array('\%', '\_'), $term); + if ($term) { + if (strpos($term, '-') === FALSE) { + $term = '%'.$term.'%'; + $sql .= "(M.public_field LIKE '$term') OR "; + } else { + // range search + $range = explode('-', $term, 2); + $range[0] = trim($range[0]); + $range[1] = trim($range[1]); + if (is_numeric($range[0]) && is_numeric($range[1])) { + $sql .= "(M.public_field >= $range[0] AND M.public_field <= $range[1]) OR "; + } else { + $sql .= "(M.public_field >= '$range[0]' AND M.public_field <= '$range[1]') OR "; + } + } + } + } + $sql = '('.substr($sql, 0, -3).')'; + $search = $sql; +} else { + $search = '1'; +} + +$sql = "SELECT COUNT(member_id) AS cnt FROM ".TABLE_PREFIX."master_list M WHERE $status AND $search"; + +$result = mysql_query($sql, $db); +$row = mysql_fetch_assoc($result); + +$num_results = $row['cnt']; + +$results_per_page = 100; +$num_pages = max(ceil($num_results / $results_per_page), 1); +$page = intval($_GET['p']); +if (!$page) { + $page = 1; +} +$offset = ($page-1)*$results_per_page; + +$sql = "SELECT M.*, B.login, B.first_name, B.second_name, B.last_name FROM ".TABLE_PREFIX."master_list M LEFT JOIN ".TABLE_PREFIX."members B USING (member_id) WHERE $status AND $search ORDER BY M.public_field LIMIT $offset, $results_per_page"; +$result = mysql_query($sql, $db); +?> + +
    +
    +
    +

    +
    + +
    +
    + /> + + /> + + /> +
    + +
    +
    + +
    + +
    + + +
    +
    +
    + +
    +
      + +
    • + + + + + +
    • + +
    +
    + + +
    + + + + + + + + + + + + + + 0): ?> + + + + + + + + + + + + + + + + + + + + + + +
     
    +
    + \ No newline at end of file diff --git a/admin/master_list_delete.php b/admin/master_list_delete.php new file mode 100644 index 000000000..9eea68636 --- /dev/null +++ b/admin/master_list_delete.php @@ -0,0 +1,49 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/master_list.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $_POST['id'] = $addslashes($_POST['id']); + + $sql = "DELETE FROM ".TABLE_PREFIX."master_list WHERE public_field='$_POST[id]'"; + $result = mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_DELETE, 'master_list', mysql_affected_rows($db), $sql); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'admin/master_list.php'); + exit; +} +require(AT_INCLUDE_PATH.'header.inc.php'); ?> +addConfirm($confirm, $hidden_vars); + $msg->printConfirm(); +} +?> + \ No newline at end of file diff --git a/admin/master_list_edit.php b/admin/master_list_edit.php new file mode 100644 index 000000000..52edf4813 --- /dev/null +++ b/admin/master_list_edit.php @@ -0,0 +1,74 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/master_list.php'); + exit; +} else if (isset($_POST['submit'])) { + $_POST['public_field'] = trim($_POST['public_field']); + if ($_POST['public_field'] == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('student_id'))); + } + + if (!$msg->containsErrors()) { + $_POST['public_field'] = $addslashes($_POST['public_field']); + + $sql = "UPDATE ".TABLE_PREFIX."master_list SET public_field='$_POST[public_field]' WHERE public_field='$_POST[id]'"; + $result = mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_UPDATE, 'master_list', mysql_affected_rows($db), $sql); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: '.AT_BASE_HREF.'admin/master_list.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT * FROM ".TABLE_PREFIX."master_list WHERE public_field='$_REQUEST[id]'"; +$result = mysql_query($sql, $db); +if (!($row = mysql_fetch_assoc($result))) { + $msg->addError('USER_NOT_FOUND'); + $msg->printErrors(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} else { + $_POST = $row; +} +?> +
    + +
    +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/missing_language.php b/admin/missing_language.php new file mode 100644 index 000000000..d1f5e70a0 --- /dev/null +++ b/admin/missing_language.php @@ -0,0 +1,38 @@ + -1) { exit; } + +if (isset($_POST['submit'])) { + unset($_POST['g']); + unset($_POST['submit']); + $langEditor->updateTerms($_POST); +} + +$params = array(); +if ($_POST['filter_new']) { + $params['new'] = true; +} +if ($_POST['filter_update']) { + $params['update'] = true; +} +$langEditor->setFilter($params); + + +$langEditor->printTerms($_GET['terms']); + + +?> \ No newline at end of file diff --git a/admin/modules/add_new.php b/admin/modules/add_new.php new file mode 100644 index 000000000..d5ed5584a --- /dev/null +++ b/admin/modules/add_new.php @@ -0,0 +1,81 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +$module_list = $moduleFactory->getModules(AT_MODULE_STATUS_UNINSTALLED | AT_MODULE_STATUS_MISSING, AT_MODULE_TYPE_EXTRA); +$keys = array_keys($module_list); +natsort($keys); + +?> + +
    +
    + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + +
    /getDescription($_SESSION['lang']); ?>
    +
    + + \ No newline at end of file diff --git a/admin/modules/create.php b/admin/modules/create.php new file mode 100644 index 000000000..dde5a5b0c --- /dev/null +++ b/admin/modules/create.php @@ -0,0 +1,138 @@ + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    + + +[[ this form is used to generate the module.xml file which must be packaged with each module ]] + +
    +
    +

    + +
    +
    *

    + +
    + +
    +
    + +
    + +
    + +
      +
    1. +
    2. + +
    3. +
    4. +
    +
    + +
    +
    + +
    + +
    +
    + +
    + + +

    + +
    +
    + +
    + +
    +
    + , + +
    + +
    +
    + +
    + +
    +
    + , + , + +
    + +
    +
    + +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/modules/default_mods.php b/admin/modules/default_mods.php new file mode 100644 index 000000000..6227db7d1 --- /dev/null +++ b/admin/modules/default_mods.php @@ -0,0 +1,256 @@ +addFeedback('CANCELLED'); + header('Location: ../courses.php'); + exit; +} + +if (isset($_POST['up'])) { + $up = key($_POST['up']); + $_new_modules = array(); + if (isset($_POST['main'])) { + foreach ($_POST['main'] as $m) { + if ($m == $up) { + $last_m = array_pop($_new_modules); + $_new_modules[] = $m; + $_new_modules[] = $last_m; + } else { + $_new_modules[] = $m; + } + } + + $_POST['main'] = $_new_modules; + } + if (isset($_POST['home'])) { + $_new_modules = array(); + foreach ($_POST['home'] as $m) { + if ($m == $up) { + $last_m = array_pop($_new_modules); + $_new_modules[] = $m; + $_new_modules[] = $last_m; + } else { + $_new_modules[] = $m; + } + } + $_POST['home'] = $_new_modules; + } + + $_POST['submit'] = TRUE; +} else if (isset($_POST['down'])) { + $_new_modules = array(); + + $down = key($_POST['down']); + + if (isset($_POST['main'])) { + foreach ($_POST['main'] as $m) { + if ($m == $down) { + $found = TRUE; + continue; + } + $_new_modules[] = $m; + if ($found) { + $_new_modules[] = $down; + $found = FALSE; + } + } + + $_POST['main'] = $_new_modules; + } + + if (isset($_POST['home'])) { + $_new_modules = array(); + foreach ($_POST['home'] as $m) { + if ($m == $down) { + $found = TRUE; + continue; + } + $_new_modules[] = $m; + if ($found) { + $_new_modules[] = $down; + $found = FALSE; + } + } + + $_POST['home'] = $_new_modules; + } + + $_POST['submit'] = TRUE; +} + +if (isset($_POST['submit'])) { + if (isset($_POST['main'])) { + $_POST['main'] = array_unique($_POST['main']); + $_POST['main'] = array_filter($_POST['main']); // remove empties + $main_defaults = implode('|', $_POST['main']); + + } else { + $main_defaults = ''; + } + + if (isset($_POST['home'])) { + $_POST['home'] = array_unique($_POST['home']); + $_POST['home'] = array_filter($_POST['home']); // remove empties + $home_defaults = implode('|', $_POST['home']); + } else { + $home_defaults = ''; + } + + if (!($_config_defaults['main_defaults'] == $main_defaults) && (strlen($main_defaults) < 256)) { + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES('main_defaults', '$main_defaults')"; + $result = mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."config WHERE name='main_defaults_2'"; + } else if (!($_config_defaults['main_defaults'] == $main_defaults) && (strlen($main_defaults) > 255)) { + // we don't have to worry about chopping in the middle since they'll be combined anyway + $main_defaults_1 = substr($main_defaults, 0, 255); + $main_defaults_2 = substr($main_defaults, 255); + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES('main_defaults', '$main_defaults_1')"; + $result = mysql_query($sql, $db); + + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES('main_defaults_2', '$main_defaults_2')"; + } else if ($_config_defaults['main_defaults'] == $main_defaults) { + $sql = "DELETE FROM ".TABLE_PREFIX."config WHERE name='main_defaults' OR name='name_defaults_2'"; + } + $result = mysql_query($sql, $db); + + + if (!($_config_defaults['home_defaults'] == $home_defaults) && (strlen($home_defaults) < 256)) { + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES('home_defaults', '$home_defaults')"; + $result = mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."config WHERE name='home_defaults_2'"; + + } else if (!($_config_defaults['home_defaults'] == $home_defaults) && (strlen($home_defaults) > 255)) { + // we don't have to worry about chopping in the middle since they'll be combined anyway + $home_defaults_1 = substr($home_defaults, 0, 255); + $home_defaults_2 = substr($home_defaults, 255); + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES('home_defaults', '$home_defaults_1')"; + $result = mysql_query($sql, $db); + + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES('home_defaults_2', '$home_defaults_2')"; + + } else if ($_config_defaults['home_defaults'] == $home_defaults) { + $sql = "DELETE FROM ".TABLE_PREFIX."config WHERE name='home_defaults' OR name='home_defaults_2'"; + } + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} + + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$main_defaults = explode('|', $_config['main_defaults']); +$home_defaults = explode('|', $_config['home_defaults']); + +$main_defaults = array_filter($main_defaults); // remove empties +$home_defaults = array_filter($home_defaults); // remove empties +?> +
    + + + + + + + + + + + + + + +getModules(AT_MODULE_STATUS_ENABLED); +$keys = array_keys($module_list); + +foreach ($keys as $dir_name) { + $module =& $module_list[$dir_name]; + + if ($module->getStudentTools()) { + $student_tools[] = $module->getStudentTools(); + } +} + +$count = 0; + +//main mods +$_current_modules = $main_defaults; +$num_main = count($_current_modules); +//main and home merged +$_current_modules = array_merge($_current_modules, array_diff($home_defaults, $main_defaults)); +$num_modules = count($_current_modules); +//all other mods +$_current_modules = array_merge($_current_modules, array_diff($student_tools, $_current_modules)); + + +foreach ($_current_modules as $tool) : + $count++; +?> + + + + + + + +
    + + +
    + + + + + + + + + + + + + +   + + 1)): ?> + + + + + + + + + + +
    +
    + + \ No newline at end of file diff --git a/admin/modules/default_side.php b/admin/modules/default_side.php new file mode 100644 index 000000000..76b677695 --- /dev/null +++ b/admin/modules/default_side.php @@ -0,0 +1,100 @@ +addFeedback('CANCELLED'); + header('Location: ../courses.php'); + exit; +} + +if (isset($_POST['submit'])) { + + $side_menu = ''; + $_stack_names = array(); + + foreach($_stacks as $name=>$file) { + $_stack_names[] = $name; + } + + $_POST['stack'] = array_unique($_POST['stack']); + $_POST['stack'] = array_intersect($_POST['stack'], $_stack_names); + + foreach($_POST['stack'] as $dropdown) { + if($dropdown != '') { + $side_menu .= $dropdown . '|'; + } + } + $side_menu = substr($side_menu, 0, -1); + + if (!($_config_defaults['side_defaults'] == $side_menu) && (strlen($side_menu) < 256)) { + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES('side_defaults', '$side_menu')"; + } else if ($_config_defaults['side_defaults'] == $side_menu) { + $sql = "DELETE FROM ".TABLE_PREFIX."config WHERE name='side_defaults'"; + } + + $result = mysql_query($sql, $db); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location:'. $_SERVER[PHP_SELF]); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    +
    +
    +

    +
    + +
    + '; + echo ''; + foreach ($_stacks as $name=>$info) { + if (isset($info['title'])) { + $title = $info['title']; + } else { + $title = _AT($info['title_var']); + } + echo ''; + } + echo ''; + echo '
    '; + } ?> +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/modules/details.php b/admin/modules/details.php new file mode 100644 index 000000000..7caa710a2 --- /dev/null +++ b/admin/modules/details.php @@ -0,0 +1,186 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/modules/add_new.php'); + exit; +} else if (isset($_POST['mod']) && isset($_POST['submit_yes'])) { + $module =& $moduleFactory->getModule($_POST['mod']); + $module->load(); + $module->install(); + + if ($msg->containsErrors()) { + header('Location: '.AT_BASE_HREF.'admin/modules/details.php?mod='.$addslashes($_POST['mod']).SEP.'new=1'); + } else { + $msg->addFeedback('MOD_INSTALLED'); + header('Location: '.AT_BASE_HREF.'admin/modules/index.php'); + } + exit; +} else if (isset($_GET['submit'])) { + $args = ''; + + if (isset($_GET['enabled']) && $_GET['enabled']) { $args .= 'enabled=1'; } + if (isset($_GET['disabled']) && $_GET['disabled']) { $args .= SEP.'disabled=1'; } + if (isset($_GET['missing']) && $_GET['missing']) { $args .= SEP.'missing=1'; } + if (isset($_GET['core']) && $_GET['core']) { $args .= SEP.'core=1'; } + if (isset($_GET['standard']) && $_GET['standard']) { $args .= SEP.'standard=1'; } + if (isset($_GET['extra']) && $_GET['extra']) { $args .= SEP.'extra=1'; } + + header('Location: index.php?'. $args); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$moduleParser =& new ModuleParser(); + +$_REQUEST['mod'] = str_replace(array('.','..'), '', $_REQUEST['mod']); + +if (!file_exists('../../mods/'.$_GET['mod'].'/module.xml')) { +?> +
    + + +
    +
    +

    +
    + +
    + +
    + +
    + + + + +
    + +
    +
    +parse(file_get_contents('../../mods/'.$_GET['mod'].'/module.xml')); + +$module =& $moduleFactory->getModule($_GET['mod']); + +$properties = $module->getProperties(array('maintainers', 'url', 'date', 'license', 'state', 'notes', 'version')); +?> +
    + + + + + + + + + + +
    +
    +

    getName(); ?>

    +
    + +
    +
    + getDescription($_SESSION['lang'])); ?> +
    + +
    +
    +
      + +
    • + +
    +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + + _pages)): ?> +
    + +
    + + _pages); ?> + +
    +
      + + +
    • + +
    + +
    + + + +
    + +
    + +
    +
    + + addConfirm(array('ADD_MODULE', $_REQUEST['mod']), $hidden_vars); + $msg->printConfirm(); + ?> + + + \ No newline at end of file diff --git a/admin/modules/index.php b/admin/modules/index.php new file mode 100644 index 000000000..73a3404ce --- /dev/null +++ b/admin/modules/index.php @@ -0,0 +1,201 @@ +getModule($_GET['mod_dir']); + if (!$module->isEnabled() && !$module->isCore() && !$module->isMissing()) { + $module->enable(); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } + + header('Location: '.$_SERVER['PHP_SELF'] . '?' . $args); + exit; +} else if (isset($_GET['mod_dir'], $_GET['disable'])) { + $module =& $moduleFactory->getModule($_GET['mod_dir']); + if ($module->isCore()) { + // core modules cannot be disabled! + $msg->addError('DISABLE_CORE_MODULE'); + } else if ($module->isMissing()) { + $msg->addError('DISABLE_MISSING_MODULE'); + } else if ($module->isEnabled()) { + $module->disable(); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } + header('Location: '.$_SERVER['PHP_SELF'] . '?' . $args); + exit; +} else if (isset($_GET['mod_dir'], $_GET['details'])) { + header('Location: details.php?mod='.$_GET['mod_dir'] . SEP . $args); + exit; + +} else if (isset($_GET['disable']) || isset($_GET['enable']) || isset($_GET['details'])) { + $msg->addError('NO_ITEM_SELECTED'); + header('Location: '.$_SERVER['PHP_SELF'] . '?' . $args); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$module_status_bits = $module_type_bits = 0; + +if (isset($_GET['enabled'])) { $module_status_bits += AT_MODULE_STATUS_ENABLED; } +if (isset($_GET['disabled'])) { $module_status_bits += AT_MODULE_STATUS_DISABLED; } +if (isset($_GET['missing'])) { $module_status_bits += AT_MODULE_STATUS_MISSING; } + +if (isset($_GET['core'])) { $module_type_bits += AT_MODULE_TYPE_CORE; } +if (isset($_GET['standard'])) { $module_type_bits += AT_MODULE_TYPE_STANDARD; } +if (isset($_GET['extra'])) { $module_type_bits += AT_MODULE_TYPE_EXTRA; } + +if ($module_status_bits == 0) { + $module_status_bits = AT_MODULE_STATUS_DISABLED | AT_MODULE_STATUS_ENABLED | AT_MODULE_STATUS_MISSING; + $_GET['enabled'] = $_GET['disabled'] = $_GET['missing'] = 1; +} + +if ($module_type_bits == 0) { + $module_type_bits = AT_MODULE_TYPE_STANDARD + AT_MODULE_TYPE_EXTRA; + $_GET['standard'] = $_GET['extra'] = 1; +} + + +$module_list = $moduleFactory->getModules($module_status_bits, $module_type_bits, $sort = TRUE); +$keys = array_keys($module_list); +?> +
    +
    +
    +

    +
    + +
    +
    + /> + + /> + + /> +
    + + +
    +
    + /> + + /> + + /> +
    + +
    + + +
    +
    +
    + +
    + + + + + + + + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + + + +
    isCore()) { + echo ''._AT('core').''; + } else if ($module->isStandard()) { + echo _AT('standard'); + } else { + echo _AT('extra'); + } + ?>isEnabled()) { + echo _AT('enabled'); + } else if ($module->isMissing()) { + echo ''._AT('missing').''; + } else { + echo ''._AT('disabled').''; + } + ?> + getCronInterval()): ?> + getCronInterval()); ?> + + - + + /
    +
    + + \ No newline at end of file diff --git a/admin/modules/module.template.php b/admin/modules/module.template.php new file mode 100644 index 000000000..0cd5c1828 --- /dev/null +++ b/admin/modules/module.template.php @@ -0,0 +1,24 @@ + + + {NAME} + {DESCRIPTION} + {MAINTAINERS} + {URL} + {LICENSE} + + {VERSION} + {USER_PRIVILEGE} + {DATE} + {STATE} + {NOTES} + +'; + +$maintainer_xml = "\n\t\t".' + {NAME} + {EMAIL} + '; + +?> \ No newline at end of file diff --git a/admin/password_user.php b/admin/password_user.php new file mode 100644 index 000000000..da125c23c --- /dev/null +++ b/admin/password_user.php @@ -0,0 +1,115 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/users.php'); + exit; +} else if (isset($_POST['submit'])) { + if ($_POST['password'] == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('password'))); + } else { + // check for valid passwords + if ($_POST['password'] != $_POST['password2']){ + $msg->addError('PASSWORD_MISMATCH'); + } + } + + if (!$msg->containsErrors()) { + $_POST['id'] = intval($_POST['id']); + + $sql = "UPDATE ".TABLE_PREFIX."members SET password= '$_POST[password]', creation_date=creation_date, last_login=last_login WHERE member_id=$_POST[id]"; + $result = mysql_query($sql, $db); + + $sql = "SELECT login, password, email FROM ".TABLE_PREFIX."members WHERE member_id=$_POST[id]"; + $result = mysql_query($sql,$db); + if ($row = mysql_fetch_assoc($result)) { + $r_login = $row['login']; + $r_passwd= $row['password']; + $r_email = $row['email']; + + $tmp_message = _AT('password_change_msg')."\n\n"; + $tmp_message .= _AT('web_site').' : '.AT_BASE_HREF."\n"; + $tmp_message .= _AT('login_name').' : '.$r_login."\n"; + $tmp_message .= _AT('password').' : '.$r_passwd."\n"; + + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + + $mail = new ATutorMailer; + + $mail->From = $_config['contact_email']; + $mail->AddAddress($r_email); + $mail->Subject = $_config['site_name'] . ': ' . _AT('password_changed'); + $mail->Body = $tmp_message; + + if(!$mail->Send()) { + $msg->printErrors('SENDING_ERROR'); + exit; + } + + } + + $msg->addFeedback('PROFILE_UPDATED_ADMIN'); + header('Location: '.AT_BASE_HREF.'admin/users.php'); + exit; + } + $_GET['id'] = $_POST['id']; +} + + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$id = intval($_GET['id']); + +$sql = "SELECT login FROM ".TABLE_PREFIX."members WHERE member_id=$id"; +$result = mysql_query($sql, $db); + +if (!$row = mysql_fetch_assoc($result)) { + $msg->printErrors('USER_NOT_FOUND'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +?> +
    + +
    +
    +

    +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/profile_picture.php b/admin/profile_picture.php new file mode 100644 index 000000000..27d6315e8 --- /dev/null +++ b/admin/profile_picture.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/admin/rss_feeds/add_feed.php b/admin/rss_feeds/add_feed.php new file mode 100644 index 000000000..22b632efd --- /dev/null +++ b/admin/rss_feeds/add_feed.php @@ -0,0 +1,136 @@ +addFeedback('CANCELLED'); + header("Location: index_admin.php"); + exit; +} else if (isset($_POST['submit'])) { + $missing_fields = array(); + + if (trim($_POST['title']) == '') { + $missing_fields[] = _AT('title'); + } + if (trim($_POST['url']) == '') { + $missing_fields[] = _AT('url'); + } + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $output = make_cache_file(0); + if (!isset($output) || empty($output)) { + $msg->addError('FEED_NO_CONTENT'); + } + } + + if ($msg->containsErrors()) { + unset($_POST['confirm']); + } + +} else if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + +} else if (isset($_POST['submit_yes'])) { + $_POST['url'] = $addslashes($_POST['url']); + + $sql = "INSERT INTO ".TABLE_PREFIX."feeds VALUES (NULL, '".$_POST['url']."')"; + $result = mysql_query($sql, $db); + + $feed_id = mysql_insert_id($db); + + //copy load file + copy('../../mods/_standard/rss_feeds/load_file.php', AT_CONTENT_DIR.'feeds/'.$feed_id.'_rss.inc.php'); + + //add language + $title_file = AT_CONTENT_DIR.'feeds/'.$feed_id.'_rss_title.cache'; + if ($f = @fopen($title_file, 'w')) { + fwrite ($f, $_POST['title'], strlen($_POST['title'])); + fclose($f); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} + +$onload = 'document.form.title.focus();'; + +require (AT_INCLUDE_PATH.'header.inc.php'); + +if (!isset($_POST['confirm'])) { +?> +
    + + +
    +
    +
    *

    +
    +
    + +
    +
    *

    +
    +
    + +
    + + +
    +
    +
    + + +
    + + +
    +
    +

    +

    +
    + +
    + +
    +
    +
    + + addConfirm('ADD_FEED', $hidden_vars); + $msg->printConfirm(); + ?> + + + + \ No newline at end of file diff --git a/admin/rss_feeds/delete_feed.php b/admin/rss_feeds/delete_feed.php new file mode 100644 index 000000000..a0428fe27 --- /dev/null +++ b/admin/rss_feeds/delete_feed.php @@ -0,0 +1,65 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $feed_id = intval($_POST['fid']); + + //delete feed + $sql = "DELETE FROM ".TABLE_PREFIX."feeds WHERE feed_id=$feed_id"; + $result = mysql_query($sql, $db); + + //delete feed title from lang + $sql = "DELETE FROM ".TABLE_PREFIX."language_text WHERE term='".$feed_id."_rss_title'"; + $result = mysql_query($sql, $db); + + //delete files + @unlink(AT_CONTENT_DIR.'/feeds/'.$feed_id.'_rss.cache'); + @unlink(AT_CONTENT_DIR.'/feeds/'.$feed_id.'_rss_title.cache'); + @unlink(AT_CONTENT_DIR.'/feeds/'.$feed_id.'_rss.inc.php'); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + $feed_id = intval($_GET['fid']); + $sql = "SELECT * FROM ".TABLE_PREFIX."feeds WHERE feed_id=".$feed_id; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + if (!$row) { + $msg->addError('FEED_NOT_FOUND'); + $msg->printErrors(); + } else { + $hidden_vars['delete_feed'] = TRUE; + $hidden_vars['fid'] = $feed_id; + + $title = file_get_contents(AT_CONTENT_DIR.'/feeds/'.$feed_id.'_rss_title.cache'); + $msg->addConfirm(array('DELETE_FEED', $title), $hidden_vars); + $msg->printConfirm(); + } + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/admin/rss_feeds/edit_feed.php b/admin/rss_feeds/edit_feed.php new file mode 100644 index 000000000..2cae6829e --- /dev/null +++ b/admin/rss_feeds/edit_feed.php @@ -0,0 +1,100 @@ +addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $_GET['url'] = $addslashes($_GET['url']); + + $sql = "REPLACE INTO ".TABLE_PREFIX."feeds VALUES(".$feed_id.", '".$_GET['url']."')"; + $result = mysql_query($sql, $db); + + //update language + if ($f = @fopen($title_file, 'w')) { + fwrite($f, $_GET['title'], strlen($_GET['title'])); + fclose($f); + } + + //delete old cache file + @unlink(AT_CONTENT_DIR.'/feeds/'.$feed_id.'_rss.cache'); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; + } + +} else if (isset($_GET['cancel'])) { + $msg->addFeedback('CANCELLED'); + header("Location:index.php"); + exit; +} + +if ($feed_id != '') { + + $sql = "SELECT * FROM ".TABLE_PREFIX."feeds WHERE feed_id=".$feed_id; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + if (file_exists($title_file)) { + $_GET['title'] = file_get_contents($title_file); + } + $_GET['url'] = $row['url']; +} + +$onload = 'document.form.title.focus();'; + +require (AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    + +
    +
    +
    *

    +
    +
    + +
    +
    *

    +
    +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/rss_feeds/index.php b/admin/rss_feeds/index.php new file mode 100644 index 000000000..3fde045b8 --- /dev/null +++ b/admin/rss_feeds/index.php @@ -0,0 +1,82 @@ +addError('NO_ITEM_SELECTED'); +} else if (isset($_GET['edit'])) { + header("Location:edit_feed.php?fid=".intval($_GET['fid'])); + exit; +} else if (isset($_GET['delete'])) { + header("Location:delete_feed.php?fid=".intval($_GET['fid'])); + exit; +} else if (isset($_GET['preview'])) { + header("Location:preview.php?fid=".intval($_GET['fid'])); + exit; +} + +require (AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + + + +
    +
    + + \ No newline at end of file diff --git a/admin/rss_feeds/preview.php b/admin/rss_feeds/preview.php new file mode 100644 index 000000000..cdd114b00 --- /dev/null +++ b/admin/rss_feeds/preview.php @@ -0,0 +1,58 @@ + 21600) ) { + make_cache_file($feed_id); +} +?> + +
    + +
    +
    +

    +
    + +
    + 0) { + readfile($cache_file); + echo '


    '._AT('new_window').'

    '; + } else { + echo _AT('no_content_avail'); + }?> +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/themes/delete.php b/admin/themes/delete.php new file mode 100644 index 000000000..a8acb4fe9 --- /dev/null +++ b/admin/themes/delete.php @@ -0,0 +1,40 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + require_once(AT_INCLUDE_PATH.'lib/themes.inc.php'); + delete_theme($_POST['tc']); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$hidden_vars['tc'] = $_GET['theme_code']; + +$msg->addConfirm(array('DELETE_THEME', $_GET['theme_code']), $hidden_vars); +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/admin/themes/import.php b/admin/themes/import.php new file mode 100644 index 000000000..dae4f635c --- /dev/null +++ b/admin/themes/import.php @@ -0,0 +1,203 @@ +addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} + +/** +* Imports a theme from a URL or Zip file to Atutor +* @access private +* @author Shozub Qureshi +*/ +function import_theme() { + global $db; + global $msg; + + if (isset($_POST['url']) && ($_POST['url'] != 'http://') ) { + if ($content = @file_get_contents($_POST['url'])) { + + // save file to /themes/ + $filename = pathinfo($_POST['url']); + $filename = $filename['basename']; + $full_filename = AT_CONTENT_DIR . '/' . $filename; + + if (!$fp = fopen($full_filename, 'w+b')) { + //Cannot open file ($filename)"; + $errors = array('CANNOT_OPEN_FILE', $filename); + $msg->addError($errors); + header('Location: index.php'); + exit; + } + + if (fwrite($fp, $content, strlen($content) ) === FALSE) { + //"Cannot write to file ($filename)"; + $errors = array('CANNOT_WRITE_FILE', $filename); + $msg->addError($errors); + header('Location: index.php'); + exit; + } + fclose($fp); + } + $_FILES['file']['name'] = $filename; + $_FILES['file']['tmp_name'] = $full_filename; + $_FILES['file']['size'] = strlen($content); + unset($content); + $url_parts = pathinfo($_POST['url']); + $package_base_name_url = $url_parts['basename']; + } + $ext = pathinfo($_FILES['file']['name']); + $ext = $ext['extension']; + + //error in the file + if ($_FILES['file']['error'] == 1) { + $errors = array('FILE_MAX_SIZE', ini_get('upload_max_filesize')); + $msg->addError($errors); + header('Location: index.php'); + exit; + } + + //If file has no name or no address or if the extension is not .zip + if (!$_FILES['file']['name'] + || (!is_uploaded_file($_FILES['file']['tmp_name']) && !$_POST['url'])) { + + $msg->addError('FILE_NOT_SELECTED'); + header('Location: index.php'); + exit; + } + + if (($ext != 'zip')) { + $msg->addError('IMPORT_NOT_PROPER_FORMAT'); + header('Location: index.php'); + exit; + } + + //check if file size is ZERO + if ($_FILES['file']['size'] == 0) { + $msg->addError('IMPORTFILE_EMPTY'); + header('Location: index.php'); + exit; + } + + // new directory name is the filename minus the extension + $fldrname = substr($_FILES['file']['name'], 0, -4); + $fldrname = str_replace(' ', '_', $fldrname); + $import_path = '../../themes/' . $fldrname; + + //check if Folder by that name already exists + if (is_dir($import_path)) { + $i = 1; + while (is_dir($import_path . '_' . $i)) { + $i++; + } + $fldrname = $fldrname . '_' . $i; + $import_path = $import_path . '_' . $i; + } + + //if folder does not exist previously + if (!@mkdir($import_path, 0700)) { + $msg->addError('IMPORTDIR_FAILED'); + header('Location: index.php'); + exit; + } + + // unzip file and save into directory in themes + $archive = new PclZip($_FILES['file']['tmp_name']); + + //extract contents to importpath/foldrname + if (!$archive->extract($import_path)) { + $errors = array('IMPORT_ERROR_IN_ZIP', $archive->errorInfo(true)); + clr_dir($import_path); + $msg->addError($errors); + header('Location: index.php'); + exit; + } + + $handle = opendir($import_path); + while ($file = readdir($handle)) { + if (is_dir($import_path.'/'.$file) && $file != '.' && $file != '..') { + $folder = $file; + } + } + + //copy contents from importpath/foldrname to importpath + copys($import_path.'/'.$folder, $import_path); + + //delete importpath/foldrname + clr_dir($import_path.'/'.$folder); + + $theme_xml = @file_get_contents($import_path . '/theme_info.xml'); + + //Check if XML file exists (if it doesnt send error and clear directory) + if ($theme_xml == false) { + /** Next version 1.4.4, require themes.xml + $msg->addError('MISSING_THEMEXML'); + + // clean up + clr_dir($import_path); + + header('Location: index.php'); + exit; + */ + $version = '1.4.x'; + $extra_info = 'unspecified'; + } else { + //parse information + $xml_parser =& new ThemeParser(); + $xml_parser->parse($theme_xml); + + $version = $xml_parser->theme_rows['version']; + $extra_info = $xml_parser->theme_rows['extra_info']; + } + + $title = str_replace('_', ' ', $fldrname); + $last_updated = date('Y-m-d'); + $status = '1'; + + //if version number is not compatible with current Atutor version, set theme as disabled + if ($version != VERSION) { + $status = '0'; + } + + //save information in database + $sql = "INSERT INTO ".TABLE_PREFIX."themes VALUES ('$title', '$version', '$fldrname', '$last_updated', '$extra_info', '$status')"; + $result = mysql_query($sql, $db); + + write_to_log(AT_ADMIN_LOG_INSERT, 'themes', mysql_affected_rows($db), $sql); + + if (!$result) { + $msg->addError('IMPORT_FAILED'); + header('Location: index.php'); + exit; + } + + if (isset($_POST['url'])) { + @unlink($full_filename); + } +} + +?> \ No newline at end of file diff --git a/admin/themes/index.php b/admin/themes/index.php new file mode 100644 index 000000000..ed118778e --- /dev/null +++ b/admin/themes/index.php @@ -0,0 +1,160 @@ +addWarning($warnings); + } + enable_theme($theme); + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} else if (isset($_GET['disable'], $_GET['theme_dir'])) { + disable_theme($theme); + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} else if (isset($_GET['preview'], $_GET['theme_dir'])) { + $_SESSION['prefs']['PREF_THEME'] = $_GET['theme_dir']; + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} else if (isset($_GET['disable']) || isset($_GET['enable']) || isset($_GET['default']) || isset($_GET['delete']) || isset($_GET['export'])) { + $msg->addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT * FROM " . TABLE_PREFIX . "themes ORDER BY title ASC"; +$result = mysql_query($sql, $db); +?> + + +
    +
    + +
    +
    + +
    +
    +
    +

    +
    + +
    +
    + +
    + +
    +
    + +
    + +
    + +
    +
    +
    + +

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + + + + + + +
    + + + '._AT('default').''; + } + ?> + / + <?php echo _AT('theme_screenshot'); ?> + + <?php echo _AT('theme_screenshot'); ?> + +
    +
    + \ No newline at end of file diff --git a/admin/translate.php b/admin/translate.php new file mode 100644 index 000000000..77606d34f --- /dev/null +++ b/admin/translate.php @@ -0,0 +1,44 @@ + + + + +
    + + + + + + + + + + + +

    : |

    +
    diff --git a/admin/translate_atutor.php b/admin/translate_atutor.php new file mode 100644 index 000000000..332455731 --- /dev/null +++ b/admin/translate_atutor.php @@ -0,0 +1,83 @@ + + + + + + ATutor Translator Site + + + + + + + +' . _AT('close_window') . ''; +echo '

    ATutor Translator Site

    '; + +$variables = array('_template','_msgs','_module'); + +$atutor_test = ''; + +$_SESSION['status'] = 2; +$_USER_ADMIN = $_SESSION['status']; + +$sql = "SELECT english_name, char_set FROM ".TABLE_PREFIX."languages WHERE language_code = '$_SESSION[language]'"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_assoc($result); + +?> +
      +

    1. + + + + + +
      Translate
      + From English - iso-8859-1 to +
      +
    2. +
      + + + + + \ No newline at end of file diff --git a/admin/translator.php b/admin/translator.php new file mode 100644 index 000000000..8f31897bd --- /dev/null +++ b/admin/translator.php @@ -0,0 +1,602 @@ +Choose the New and Updated filters to display only language that has not been translated, or language that needs to be modified
      '; + + echo '
      Filter
      '; + echo '
      + + ,

      '; + echo ''; +} +?> + + +
    3. Choose Template, Msgs, or Modules to display a list of language variables. Click on a variable name to display its associated language. + +
      +
    4. + +
    5. +
      + +
      +
    6. +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    New
    Variable:
    Term:
    Context:
    text:
    +
    +The source language was not found for that item (try using the English source).

    '; + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + if ($_SESSION['language'] == 'en') { + $row2 = $row; + } else { + $sql = "SELECT text FROM ".TABLE_PREFIX."language_text WHERE term='$_REQUEST[k]' AND variable='$_REQUEST[v]' AND `language_code`='$_SESSION[language]'"; + } + + $result = mysql_query($sql, $db); + $row2 = mysql_fetch_array($result); + +function trans_form($page) { + global $row0; + global $row; + global $row2; + global $langs; + global $success_error; + global $db; + global $_USER_ADMIN; + global $addslashes; + global $stripslashes; +?> +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Edit
    Context:'; + } else { + if ($row['context'] == '') { + echo 'None specified.'; + } else { + echo $row['context']; + } + } ?> 
    Pages: 10) { + echo 'Global (more than 10 pages)'; + } else { + while ($page_row = mysql_fetch_array($result)) { + echo $page_row['page'] . '
    '; + } + } + + ?> +
    text:
    text:
    + +      + +
    +
    + + '; + + echo '
  • View All Terms'; + + if ($_REQUEST['page'] == 'all') { + echo ''; + display_all_terms($_REQUEST['v'], $_REQUEST['k'], $_REQUEST['f'], $_REQUEST['n'], $_REQUEST['u']); + } + echo '
  • '; + + echo '
  • View Unused Terms'; + + if ($_REQUEST['page'] == 'none') { + echo ''; + display_unused_terms($_REQUEST['v'], $_REQUEST['k'], $_REQUEST['f'], $_REQUEST['n'], $_REQUEST['u']); + } + echo '
  • '; + + $sql0 = "SELECT DISTINCT page FROM ".TABLE_PREFIX."language_pages ORDER BY page"; + $result0 = mysql_query($sql0, $db); + + while ($row0 = mysql_fetch_assoc($result0)) { + + if ($_REQUEST['page'] == $row0['page']) { + display_page_terms($_REQUEST['v'], $_REQUEST['k'], $_REQUEST['f'], $_REQUEST['n'], $_REQUEST['u'], $row0['page']); + } + else { + echo '
  • '.$row0['page'].'
  • '; + } + } + echo ''; + } else if (!$_REQUEST['search_term'] && ($_REQUEST['v'] == $variables[1])){ + //displaying messages + display_all_terms($_REQUEST['v'], $_REQUEST['k'], $_REQUEST['f'], $_REQUEST['n'], $_REQUEST['u']); + } else if (!$_REQUEST['search_term'] && ($_REQUEST['v'] == $variables[2])){ + display_all_terms($_REQUEST['v'], $_REQUEST['k'], $_REQUEST['f'], $_REQUEST['n'], $_REQUEST['u']); + } else if ($_REQUEST['search_term']) { + display_search_terms($_REQUEST['v'], $_REQUEST['k'], $_REQUEST['f'], $_REQUEST['n'], $_REQUEST['u']); + } + + +function delete_term($variable, $term) { + global $db; + + $sql = "DELETE FROM ".TABLE_PREFIX."language_text WHERE variable='$variable' AND term='$term'"; + $result = mysql_query($sql, $db); + + $sql3 = "DELETE FROM ".TABLE_PREFIX."language_pages WHERE term='$term'"; + $result3 = mysql_query($sql3, $db); + + unset($_REQUEST['k']); + echo '
    Success: deleted.
    '; +} + +function update_term($text, $context, $variable, $term) { + global $addslashes, $db; + + $term = $addslashes(trim($term)); + $text = $addslashes(trim($text)); + $context = $addslashes(trim($context)); + + if ($_SESSION['language'] == 'en') { + $sql = "UPDATE ".TABLE_PREFIX."language_text SET `text`='$text', revised_date=NOW(), context='$context' WHERE variable='$variable' AND term='$term' AND language_code='en'"; + } + + else { + $sql = "REPLACE INTO ".TABLE_PREFIX."language_text VALUES ('$_SESSION[language]', '$variable', '$term', '$text', NOW(), '')"; + + $trans = get_html_translation_table(HTML_ENTITIES); + $trans = array_flip($trans); + $sql = strtr($sql, $trans); + } + + $result = mysql_query($sql, $db); + + if (!$result) { + echo mysql_error($db); + echo '
    Error: changes not saved!
    '; + $success_error = '
    Error: changes not saved!
    '; + return $success_error; + } + else { + echo '
    Success: changes saved.
    '; + $success_error = '
    Success: changes saved.
    '; + return $success_error; + } +} + +function add_term($text, $context, $variable, $term) { + global $addslashes, $db; + + $term = $addslashes(trim($term)); + $text = $addslashes(trim($text)); + $context = $addslashes(trim($context)); + + $sql = "INSERT INTO ".TABLE_PREFIX."language_text VALUES ('en', '$variable', '$term', '$text', NOW(), '$context')"; + $result = mysql_query($sql, $db); + + if (!$result) { + echo '
    Error: that term already exists!
    '; + $success_error = ''; + } else { + echo '
    Success: term added.
    '; + $success_error = '
    Success: term added.
    '; + return $success_error; + } +} + +function display_page_terms ($variable, $term1, $lang_code, $new, $updated, $page) { + global $db; + + echo '
  • '; + echo ''.$page.''; + + $sql1 = "SELECT term FROM ".TABLE_PREFIX."language_pages WHERE page='$page' ORDER BY term"; + $result1 = mysql_query($sql1, $db); + + $term_list = array(); + + while ($row1 = mysql_fetch_assoc($result1)) { + + if ($_SESSION['language'] != 'en') { + $sql = "SELECT term, revised_date+0 AS r_date FROM ".TABLE_PREFIX."language_text WHERE variable='$variable' AND `language_code`='$_SESSION[language]' AND term='$row1[term]' ORDER BY `term`"; + $result = mysql_query($sql, $db); + + while ($row = mysql_fetch_assoc($result)) { + $t_keys[$row['term']] = $row['r_date']; + } + } + $term_list[] = $row1['term']; + } + + echo '
      '; + + foreach ($term_list as $term) { + + if ($_REQUEST['f'] == 'en') { + $sql = "SELECT *, revised_date+0 AS r_date FROM ".TABLE_PREFIX."language_text WHERE variable='$_REQUEST[v]' AND language_code='en' AND term='$term'"; + } else { + $sql = "SELECT * FROM ".TABLE_PREFIX."language_text WHERE variable='$_REQUEST[v]' AND language_code='$_REQUEST[f]' AND term='$term'"; + } + + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + if ($_SESSION['language'] != 'en') { + if ($new && $updated) { + if ((!($t_keys[$row['term']] == '')) && (!(($t_keys[$row['term']] < $row['r_date']) && $t_keys[$row['term']]))) { + continue; + } + } else if ($new) { + if (!($t_keys[$row['term']] == '')) { + continue; + } + } else if ($updated) { + if (!(($t_keys[$row['term']] < $row['r_date']) && $t_keys[$row['term']])) { + continue; + } + } + } + + if ($term == $term1) { + trans_form($page); + echo '
    • '; + } else { + echo '
    • '; + } + echo ''; + + if ($_SESSION['language'] != 'en') { + if ($t_keys[$row['term']] == '') { + echo '*New* '; + } else if ($t_keys[$term] < $row['r_date']) { + echo '*Updated* '; + } + } + + if ($term != $term1) { + echo ''; + echo $term; + echo ''; + } else { + echo $term; + } + echo ''; + echo '
    • '; + } + echo '
    '; + echo '
  • '; +} + +function display_all_terms ($variable, $term1, $lang_code, $new, $updated) { + global $db; + + if ($_SESSION['language'] != 'en') { + $sql = "SELECT term, revised_date+0 AS r_date FROM ".TABLE_PREFIX."language_text WHERE variable='$variable' AND `language_code`='$_SESSION[language]' ORDER BY `term`"; + $result = mysql_query($sql, $db); + + $t_keys = array(); + while ($row = mysql_fetch_assoc($result)) { + $t_keys[$row['term']] = $row['r_date']; + } + } + + if ($lang_code == 'en') { + $sql = "SELECT *, revised_date+0 AS r_date FROM ".TABLE_PREFIX."language_text WHERE variable='$variable' AND language_code='en' ORDER BY term"; + } else { + $sql = "SELECT * FROM ".TABLE_PREFIX."language_text WHERE variable='$variable' AND language_code='$lang_code' ORDER BY term"; + } + $result = mysql_query($sql, $db); + + echo '
      '; + while ($row = mysql_fetch_assoc($result)) { + if ($_SESSION['language'] != 'en') { + if ($new && $updated) { + if ((!($t_keys[$row['term']] == '')) && (!(($t_keys[$row['term']] < $row['r_date']) && $t_keys[$row['term']]))) { + continue; + } + } else if ($new) { + if (!($t_keys[$row['term']] == '')) { + continue; + } + } else if ($updated) { + if (!(($t_keys[$row['term']] < $row['r_date']) && $t_keys[$row['term']])) { + continue; + } + } + } + + + if ($row['term'] == $term1) { + trans_form('all'); + echo '
    • '; + + } else { + echo '
    • '; + } + echo ''; + if ($_SESSION['language'] != 'en') { + if ($t_keys[$row['term']] == '') { + echo '*New* '; + } else if ($t_keys[$row['term']] < $row['r_date']) { + echo '*Updated* '; + } + } + + if ($row['term'] != $term1) { + echo ''; + echo $row['term']; + echo ''; + } else { + echo $row['term']; + } + echo ''; + echo '
    • '; + } + echo '
    '; +} + +function display_unused_terms ($variable, $term1, $lang_code, $new, $updated) { + global $db; + + if ($_SESSION['language'] != 'en') { + $sql = "SELECT term, revised_date+0 AS r_date FROM ".TABLE_PREFIX."language_text WHERE variable='$variable' AND `language_code`='$_SESSION[language]' ORDER BY `term`"; + $result = mysql_query($sql, $db); + + $t_keys = array(); + while ($row = mysql_fetch_assoc($result)) { + $t_keys[$row['term']] = $row['r_date']; + } + } + + if ($lang_code == 'en') { + $sql = "SELECT lt.*, lt.revised_date+0 AS r_date FROM ".TABLE_PREFIX."language_text lt LEFT JOIN ".TABLE_PREFIX."language_pages lp ON lt.term = lp.term WHERE lp.term IS NULL AND lt.variable='$variable' AND lt.language_code='en' ORDER BY lt.term"; + } else { + $sql = "SELECT lt.* FROM ".TABLE_PREFIX."language_text lt LEFT JOIN ".TABLE_PREFIX."language_pages lp ON lt.term = NULL WHERE lt.variable='$variable' AND lt.language_code='$lang_code' ORDER BY lt.term"; + } + $result = mysql_query($sql, $db); + + echo '
      '; + while ($row = mysql_fetch_assoc($result)) { + if ($_SESSION['language'] != 'en') { + if ($new && $updated) { + if ((!($t_keys[$row['term']] == '')) && (!(($t_keys[$row['term']] < $row['r_date']) && $t_keys[$row['term']]))) { + continue; + } + } else if ($new) { + if (!($t_keys[$row['term']] == '')) { + continue; + } + } else if ($updated) { + if (!(($t_keys[$row['term']] < $row['r_date']) && $t_keys[$row['term']])) { + continue; + } + } + } + + + if ($row['term'] == $term1) { + trans_form('none'); + echo '
    • '; + + } else { + echo '
    • '; + } + echo ''; + if ($_SESSION['language'] != 'en') { + if ($t_keys[$row['term']] == '') { + echo '*New* '; + } else if ($t_keys[$row['term']] < $row['r_date']) { + echo '*Updated* '; + } + } + + if ($row['term'] != $term1) { + echo ''; + echo $row['term']; + echo ''; + } else { + echo $row['term']; + } + echo ''; + echo '
    • '; + } + echo '
    '; +} + + +function display_search_terms ($variable, $term1, $lang_code, $new, $updated) { + global $db, $addslashes, $stripslashes; + + $_REQUEST['search_term'] = $addslashes($_REQUEST['search_term']); + + $sql = "SELECT term, revised_date+0 AS r_date FROM ".TABLE_PREFIX."language_text WHERE (variable LIKE '%$_REQUEST[search_term]%' OR text LIKE '%$_REQUEST[search_term]%') AND (`language_code`='$_SESSION[language]' OR `language_code`='en') GROUP BY `term` ORDER BY `term`"; + $result = mysql_query($sql, $db); + + $t_keys = array(); + while ($row = mysql_fetch_assoc($result)) { + $t_keys[$row['term']] = $row['r_date']; + } + + $sql = "SELECT *, revised_date+0 AS r_date FROM ".TABLE_PREFIX."language_text WHERE (variable LIKE '%$_REQUEST[search_term]%' OR text LIKE '%$_REQUEST[search_term]%') AND (language_code='en' OR language_code='$_SESSION[language]') GROUP BY `term` ORDER BY term"; + $result = mysql_query($sql, $db); + + if (mysql_num_rows($result) == 0) { + echo '
    • No results found.
    '; + } else { + echo '
      '; + while ($row = mysql_fetch_assoc($result)) { + if ($_SESSION['language'] != 'en') { + if ($new && $updated) { + if ((!($t_keys[$row['term']] == '')) && (!(($t_keys[$row['term']] < $row['r_date']) && $t_keys[$row['term']]))) { + continue; + } + } else if ($new) { + if (!($t_keys[$row['term']] == '')) { + continue; + } + } else if ($updated) { + if (!(($t_keys[$row['term']] < $row['r_date']) && $t_keys[$row['term']])) { + continue; + } + } + } + + + if ($row['term'] == $term1) { + trans_form('search'); + echo '
    • '; + + } else { + echo '
    • '; + } + echo ''; + if ($_SESSION['language'] != 'en') { + if ($t_keys[$row['term']] == '') { + echo '*New* '; + } else if ($t_keys[$row['term']] < $row['r_date']) { + echo '*Updated* '; + } + } + + if ($row['term'] != $term1) { + echo ''; + echo $row['term']; + echo ''; + } else { + echo $row['term']; + } + echo ''; + echo '
    • '; + } + echo '
    '; + } +} +?> \ No newline at end of file diff --git a/admin/user_status.php b/admin/user_status.php new file mode 100644 index 000000000..423d18cae --- /dev/null +++ b/admin/user_status.php @@ -0,0 +1,63 @@ +addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'admin/users.php'); + exit; + +} else if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'admin/users.php'); + exit; +} + + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$names = get_login($ids); +$names_html = '
      '.html_get_list($names).'
    '; +$status_name = get_status_name($status); + +$hidden_vars['ids'] = implode(',', array_keys($names)); +$hidden_vars['status'] = $status; + +$confirm = array('EDIT_STATUS', $status_name, $names_html); +$msg->addConfirm($confirm, $hidden_vars); +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/admin/users.php b/admin/users.php new file mode 100644 index 000000000..c7c4c6743 --- /dev/null +++ b/admin/users.php @@ -0,0 +1,396 @@ + 1) ) { + $msg->addError('SELECT_ONE_ITEM'); +} else if (isset($_GET['edit'], $_GET['id'])) { + header('Location: edit_user.php?id='.$_GET['id'][0]); + exit; +} else if (isset($_GET['password'], $_GET['id'])) { + header('Location: password_user.php?id='.$_GET['id'][0]); + exit; +} else if ( isset($_GET['apply']) && isset($_GET['id']) && $_GET['change_status'] >= -1) { + $ids = implode(',', $_GET['id']); + $status = intval($_GET['change_status']); + if ($status == -1) { + header('Location: admin_delete.php?id='.$ids); + exit; + } else { + header('Location: user_status.php?ids='.$ids.'&status='.$status); + exit; + } +} else if ( (isset($_GET['apply']) || isset($_GET['apply_all'])) && $_GET['change_status'] < -1) { + $msg->addError('NO_ACTION_SELECTED'); +} else if (isset($_GET['apply']) || isset($_GET['edit']) || isset($_GET['delete']) || isset($_GET['password'])) { + $msg->addError('NO_ITEM_SELECTED'); +} + +if ($_GET['reset_filter']) { + unset($_GET); +} + +$page_string = ''; +$orders = array('asc' => 'desc', 'desc' => 'asc'); +$cols = array('login' => 1, 'public_field' => 1, 'first_name' => 1, 'second_name' => 1, 'last_name' => 1, 'email' => 1, 'status' => 1, 'last_login' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'login'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'login'; +} else { + // no order set + $order = 'asc'; + $col = 'login'; +} +if (isset($_GET['status']) && ($_GET['status'] != '')) { + $_GET['status'] = intval($_GET['status']); + $status = '=' . intval($_GET['status']); + $page_string .= SEP.'status'.$status; +} else { + $status = '<>-1'; + $_GET['status'] = ''; +} + +if (isset($_GET['last_login_days'], $_GET['last_login_have']) && ($_GET['last_login_have'] >= 0) && $_GET['last_login_days']) { + $have = intval($_GET['last_login_have']); + $days = intval($_GET['last_login_days']); + $page_string .= SEP.'last_login_have='.$have; + $page_string .= SEP.'last_login_days='.$days; + + if ($have) { + $ll = " >= TO_DAYS(NOW())-$days)"; + } else { + $ll = " < TO_DAYS(NOW())-$days OR last_login+0=0)"; + } + $last_login_days = '(TO_DAYS(last_login)'.$ll; +} else { + $last_login_days = '1'; +} + +if (isset($_GET['include']) && $_GET['include'] == 'one') { + $checked_include_one = ' checked="checked"'; + $page_string .= SEP.'include=one'; +} else { + $_GET['include'] = 'all'; + $checked_include_all = ' checked="checked"'; + $page_string .= SEP.'include=all'; +} + +if ($_GET['search']) { + $page_string .= SEP.'search='.urlencode($_GET['search']); + $search = $addslashes($_GET['search']); + $search = explode(' ', $search); + + if ($_GET['include'] == 'all') { + $predicate = 'AND '; + } else { + $predicate = 'OR '; + } + + $sql = ''; + foreach ($search as $term) { + $term = trim($term); + $term = str_replace(array('%','_'), array('\%', '\_'), $term); + if ($term) { + $term = '%'.$term.'%'; + $sql .= "((M.first_name LIKE '$term') OR (M.second_name LIKE '$term') OR (M.last_name LIKE '$term') OR (M.email LIKE '$term') OR (M.login LIKE '$term')) $predicate"; + } + } + $sql = '('.substr($sql, 0, -strlen($predicate)).')'; + $search = $sql; +} else { + $search = '1'; +} + +if ($_GET['searchid']) { + $_GET['searchid'] = trim($_GET['searchid']); + $page_string .= SEP.'searchid='.urlencode($_GET['searchid']); + $searchid = $addslashes($_GET['searchid']); + + $searchid = explode(',', $searchid); + + $sql = ''; + foreach ($searchid as $term) { + $term = trim($term); + $term = str_replace(array('%','_'), array('\%', '\_'), $term); + if ($term) { + if (strpos($term, '-') === FALSE) { + $term = '%'.$term.'%'; + $sql .= "(L.public_field LIKE '$term') OR "; + } else { + // range search + $range = explode('-', $term, 2); + $range[0] = trim($range[0]); + $range[1] = trim($range[1]); + if (is_numeric($range[0]) && is_numeric($range[1])) { + $sql .= "(L.public_field >= $range[0] AND L.public_field <= $range[1]) OR "; + } else { + $sql .= "(L.public_field >= '$range[0]' AND L.public_field <= '$range[1]') OR "; + } + } + } + } + $sql = '('.substr($sql, 0, -3).')'; + $searchid = $sql; +} else { + $searchid = '1'; +} + +if (defined('AT_MASTER_LIST') && AT_MASTER_LIST) { + $sql = "SELECT COUNT(M.member_id) AS cnt FROM ".TABLE_PREFIX."members M LEFT JOIN ".TABLE_PREFIX."master_list L USING (member_id) WHERE M.status $status AND $search AND $searchid AND $last_login_days"; +} else { + $sql = "SELECT COUNT(member_id) AS cnt FROM ".TABLE_PREFIX."members M WHERE status $status AND $search AND $last_login_days"; +} +$result = mysql_query($sql, $db); +$row = mysql_fetch_assoc($result); +$num_results = $row['cnt']; + +$results_per_page = 50; +$num_pages = max(ceil($num_results / $results_per_page), 1); +$page = intval($_GET['p']); +if (!$page) { + $page = 1; +} +$count = (($page-1) * $results_per_page) + 1; +$offset = ($page-1)*$results_per_page; + +if ( isset($_GET['apply_all']) && $_GET['change_status'] >= -1) { + $offset = 0; + $results_per_page = 999999; +} + +if (defined('AT_MASTER_LIST') && AT_MASTER_LIST) { + $sql = "SELECT M.member_id, M.login, M.first_name, M.second_name, M.last_name, M.email, M.status, M.last_login+0 AS last_login, L.public_field FROM ".TABLE_PREFIX."members M LEFT JOIN ".TABLE_PREFIX."master_list L USING (member_id) WHERE M.status $status AND $search AND $searchid AND $last_login_days ORDER BY $col $order LIMIT $offset, $results_per_page"; +} else { + $sql = "SELECT M.member_id, M.login, M.first_name, M.second_name, M.last_name, M.email, M.status, M.last_login+0 AS last_login FROM ".TABLE_PREFIX."members M WHERE M.status $status AND $search AND $last_login_days ORDER BY $col $order LIMIT $offset, $results_per_page"; +} + +$result = mysql_query($sql, $db); + +if ( isset($_GET['apply_all']) && $_GET['change_status'] >= -1) { + $ids = ''; + while ($row = mysql_fetch_assoc($result)) { + $ids .= $row['member_id'].','; + } + $ids = substr($ids,0,-1); + $status = intval($_GET['change_status']); + + if ($status==-1) { + header('Location: admin_delete.php?id='.$ids); + exit; + } else { + header('Location: user_status.php?ids='.$ids.'&status='.$status); + exit; + } +} +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    +
    +
    +

    +
    + +
    +
    + /> + + /> + + /> + + /> + + /> +
    + +
    +
    + + +
    + : + /> + /> +
    + + +
    +
    + +
    + + +
    +
    + :
    + +
    + +
    + + +
    +
    +
    + + + +
    + + + + + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + | + + + + +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/assignments/add_assignment.php b/assignments/add_assignment.php new file mode 100644 index 000000000..a92e35cf2 --- /dev/null +++ b/assignments/add_assignment.php @@ -0,0 +1,370 @@ +addFeedback('ASSIGNMENT_NOT_FOUND'); + header('Location: index_instructor.php'); + exit; + } + + // get values of existing assignment from database + $title = $row['title']; + $assign_to = $row['assign_to']; + $multi_submit = $row['multi_submit']; + + $array1 = explode (' ', $row['date_due'], 2); + $array_date_due = explode ('-', $array1[0],3); + $array_time_due = explode (':', $array1[1]); + $dueyear = $array_date_due[0]; + $duemonth = $array_date_due[1]; + $dueday = $array_date_due[2]; + $duehour = $array_time_due[0]; + $dueminute = $array_time_due[1]; + + if ($dueyear == '0000'){ + $has_due_date = 'false'; + } else { + $has_due_date = 'true'; + } + + // use date from database + $array2 = explode (' ', $row['date_cutoff'], 2); + $array_date_cutoff = explode ('-', $array2[0],3); + $array_time_cutoff = explode (':', $array2[1]); + $cutoffyear = $array_date_cutoff[0]; + $cutoffmonth = $array_date_cutoff[1]; + $cutoffday = $array_date_cutoff[2]; + $cutoffhour = $array_time_cutoff[0]; + $cutoffminute = $array_time_cutoff[1]; + + if ($cutoffyear == '0000'){ + $late_submit = '0'; // allow late submissions always + } else if ($row['date_cutoff'] == $row['date_due']){ + $late_submit = '1'; // allow late submissions never + // use today's date as default + $cutoffday = $today['mday']; + $cutoffmonth = $today['mon']; + $cutoffyear = $today['year']; + $cutoffhour = $today['hours']; + $cutoffminute = $today['minutes']; + // round the minute to the next highest multiple of 5 + $cutoffminute = round($cutoffminute / '5' ) * '5' + '5'; + if ($cutoffminute > '55'){ $cutoffminute = '55'; } + } else { + $late_submit = '2'; // allow late submissions until (date) + } +} +else if (isset($_POST['cancel'])) { + // cancel, nothing happened + $msg->addFeedback('CANCELLED'); + header('Location: index_instructor.php'); + exit; +} +else if (isset($_POST['submit'])) { + // user has submitted form to update database + $id = intval ($_POST['id']); + + if ($_POST['multi_submit'] == 'on'){ + $multi_submit = '1'; + } + + // get values from form that was just submitted + $title = $addslashes($_POST['title']); + $assign_to = intval($_POST['assign_to']); + $has_due_date = $addslashes($_POST['has_due_date']); + $late_submit = intval($_POST['late_submit']); + + $dueday = intval($_POST['day_due']); + $duemonth = intval($_POST['month_due']); + $dueyear = intval($_POST['year_due']); + $duehour = intval($_POST['hour_due']); + $dueminute = intval($_POST['min_due']); + + $cutoffday = intval($_POST['day_cutoff']); + $cutoffmonth = intval($_POST['month_cutoff']); + $cutoffyear = intval($_POST['year_cutoff']); + $cutoffhour = intval($_POST['hour_cutoff']); + $cutoffminute = intval($_POST['min_cutoff']); + + // ensure title is not empty + if (trim($title) == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('title'))); + } + + // If due date is set and user has selected 'accept late submission until' + // then ensure cutoff date is greater or equal to due date. + if (($has_due_date == 'true') && ($late_submit == '2')){ + if ($cutoffyear < $dueyear){ + $msg->addError('CUTOFF_DATE_WRONG'); + } else if ($cutoffyear == $dueyear){ + if ($cutoffmonth < $duemonth){ + $msg->addError('CUTOFF_DATE_WRONG'); + } else if ($cutoffmonth == $duemonth){ + if ($cutoffday < $dueday){ + $msg->addError('CUTOFF_DATE_WRONG'); + } else if ($cutoffday == $dueday){ + if ($cutoffhour < $duehour){ + $msg->addError('CUTOFF_DATE_WRONG'); + } else if ($cutoffhour == $duehour) { + if ($cutoffminute < $dueminute){ + $msg->addError('CUTOFF_DATE_WRONG'); + } + } + } + } + } + } + + if (!$msg->containsErrors()) { + $multi_submit = 0; + + // create the date strings + $date_due = '0'; + $date_cutoff = '0'; + + // note: if due date is NOT set then ignore the late submission date + if ($has_due_date == 'true'){ + $date_due = $dueyear. '-' .str_pad ($duemonth, 2, "0", STR_PAD_LEFT). '-' .str_pad ($dueday, 2, "0", STR_PAD_LEFT). ' '.str_pad ($duehour, 2, "0", STR_PAD_LEFT). ':' .str_pad ($dueminute, 2, "0", STR_PAD_LEFT) . ':00'; + } + + if ($late_submit == '1'){ // never accept late submissions + $date_cutoff = $date_due; // cutoff date will be same as due date + } else if ($late_submit == '2'){ // accept late submissions until date + $date_cutoff = $cutoffyear. '-' .str_pad ($cutoffmonth, 2, "0", STR_PAD_LEFT). '-' .str_pad ($cutoffday, 2, "0", STR_PAD_LEFT). ' '.str_pad ($cutoffhour, 2, "0", STR_PAD_LEFT). ':' .str_pad ($cutoffminute, 2, "0", STR_PAD_LEFT) . ':00'; + } + + // Are we creating a new assignment or updating an existing assignment? + if ($id == '0'){ + // creating a new assignment + $sql = "INSERT INTO ".TABLE_PREFIX."assignments VALUES (NULL, $_SESSION[course_id], + '$title', + '$assign_to', + '$date_due', + '$date_cutoff', + '$multi_submit' + )"; + + $result = mysql_query($sql,$db); + $msg->addFeedback('ASSIGNMENT_ADDED'); + } else { // updating an existing assignment + $assign_to = 'assign_to'; + + $sql = "UPDATE ".TABLE_PREFIX."assignments SET title='$title', assign_to=$assign_to, date_due='$date_due', date_cutoff='$date_cutoff' WHERE assignment_id='$id' AND course_id=$_SESSION[course_id]"; + + $result = mysql_query($sql,$db); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } + header('Location: index_instructor.php'); + exit; + } +} else { // creating a new assignment + $title = ''; + $assign_to = '0'; + $multi_submit = '1'; + $has_due_date = 'false'; + $late_submit = '0'; // 0 == always, 1 == never, 2 = until (date) + + $dueday = $today['mday']; + $duemonth = $today['mon']; + $dueyear = $today['year']; + $duehour = '12'; + $dueminute = '0'; + + $cutoffday = $today['mday']; + $cutoffmonth = $today['mon']; + $cutoffyear = $today['year']; + $cutoffhour = '12'; + $cutoffminute = '0'; +} + +// ensure the dates are valid +if ($dueyear == '0'){ + // use today's date as default + $dueday = $today['mday']; + $duemonth = $today['mon']; + $dueyear = $today['year']; + $duehour = $today['hours']; + $dueminute = $today['minutes']; + // round the minute to the next highest multiple of 5 + $dueminute = round($dueminute / '5' ) * '5' + '5'; + if ($dueminute > '55'){ $dueminute = '55'; } +} +if ($cutoffyear == '0'){ + // use today's date as default + $cutoffday = $today['mday']; + $cutoffmonth = $today['mon']; + $cutoffyear = $today['year']; + $cutoffhour = $today['hours']; + $cutoffminute = $today['minutes']; + // round the minute to the next highest multiple of 5 + $cutoffminute = round($cutoffminute / '5' ) * '5' + '5'; + if ($cutoffminute > '55'){ $cutoffminute = '55'; } +} + +$onload = 'document.form.title.focus();'; + +// enable/disable date controls +if ($has_due_date == 'false'){ + $onload .= ' disable_dates (true, \'_due\');'; +} + +if ($late_submit != '2'){ + $onload .= ' disable_dates (true, \'_cutoff\');'; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    + +
    + +
    +
    *

    + +
    + +
    +
    + + + + + +
    + +
    +
    + + onfocus="disable_dates (true, '_due');" /> +
    + + + onfocus="disable_dates (false, '_due');" /> + + + +
    + +
    +
    + + onfocus="disable_dates (true, '_cutoff');" /> + +
    + + + onfocus="disable_dates (true, '_cutoff');" /> + +
    + + + onfocus="disable_dates (false, '_cutoff');" /> + + + + +
    + + + +
    + ***/ + ?> + +
    + + +
    + +
    + + + + \ No newline at end of file diff --git a/assignments/delete_assignment.php b/assignments/delete_assignment.php new file mode 100644 index 000000000..58dc8962f --- /dev/null +++ b/assignments/delete_assignment.php @@ -0,0 +1,58 @@ +addFeedback('CANCELLED'); + Header('Location: index_instructor.php'); + exit; +} +else if (isset($_POST['submit_yes'])) { + $_POST['assignment_id'] = intval($_POST['assignment_id']); + + // delete the assignment from the table + $sql = "DELETE FROM ".TABLE_PREFIX."assignments WHERE course_id=$_SESSION[course_id] AND assignment_id=$_POST[assignment_id]"; + $result = mysql_query($sql, $db); + + // delete all the files for this assignment + require(AT_INCLUDE_PATH.'lib/file_storage.inc.php'); + fs_delete_workspace(WORKSPACE_ASSIGNMENT, $_POST['assignment_id']); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index_instructor.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$_GET['id'] = intval($_GET['id']); + +$sql = "SELECT title FROM ".TABLE_PREFIX."assignments WHERE course_id=$_SESSION[course_id] AND assignment_id=$_GET[id]"; +$result = mysql_query($sql, $db); + +if ($row = mysql_fetch_assoc($result)){ + $hidden_vars['assignment_id'] = $_GET['id']; + $confirm = array('DELETE_ASSIGNMENT', $row['title']); + $msg->addConfirm($confirm, $hidden_vars); + $msg->printConfirm(); +} +else { + $msg->addError('ASSIGNMENT_NOT_FOUND'); +} + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/assignments/edit_assignment.php b/assignments/edit_assignment.php new file mode 100644 index 000000000..bf83b1403 --- /dev/null +++ b/assignments/edit_assignment.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/assignments/index.php b/assignments/index.php new file mode 100644 index 000000000..6e52d52ae --- /dev/null +++ b/assignments/index.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/assignments/index_instructor.php b/assignments/index_instructor.php new file mode 100644 index 000000000..d7e5a2ea0 --- /dev/null +++ b/assignments/index_instructor.php @@ -0,0 +1,134 @@ + 'DESC', 'DESC' => 'ASC'); +$cols = array('title' => 1, 'date' => 1); +$sort = 'title'; +$order = 'ASC'; +if (isset($_GET['sort'])){ + $sort = isset($cols[$_GET['sort']]) ? $_GET['sort'] : 'title'; +} +if (isset($_GET['order'])){ + $order = $addslashes($_GET['order']); + if (($order != 'ASC') && ($order != 'DESC')){ + $order = 'ASC'; + } +} +$sql = "SELECT * FROM ".TABLE_PREFIX."assignments WHERE course_id=$_SESSION[course_id] ORDER BY $sort $order"; +$result = mysql_query($sql, $db); +?> + +printInfos('ASSIGNMENT_FS_SUBMISSIONS'); ?> + +
    + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + + + + +
    />
    +
    + + + \ No newline at end of file diff --git a/blogs/add_post.php b/blogs/add_post.php new file mode 100644 index 000000000..98d4e27fc --- /dev/null +++ b/blogs/add_post.php @@ -0,0 +1,98 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_POST['oid']); + exit; +} else if (isset($_POST['submit'])) { + $_POST['title'] = $addslashes(trim($_POST['title'])); + $_POST['body'] = $addslashes(trim($_POST['body'])); + + if ($_POST['body'] == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('body'))); + } + + if (!$msg->containsErrors()) { + $_POST['title'] = htmlspecialchars($_POST['title']); + $_POST['body'] = htmlspecialchars($_POST['body']); + $_POST['private'] = abs($_POST['private']); + $sql = "INSERT INTO ".TABLE_PREFIX."blog_posts VALUES (NULL, $_SESSION[member_id], ".BLOGS_GROUP.", $_POST[oid], $_POST[private], NOW(), 0, '$_POST[title]', '$_POST[body]')"; + mysql_query($sql, $db); + + $msg->addFeedback('POST_ADDED_SUCCESSFULLY'); + + header('Location: view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_POST['oid']); + exit; + } +} + +// this will also be dynamic as the parent page changes +$_pages['blogs/add_post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['title_var'] = 'add'; +$_pages['blogs/add_post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['parent'] = 'blogs/view.php'; + +$_pages['blogs/add_post.php']['title_var'] = 'add'; +$_pages['blogs/add_post.php']['parent'] = 'blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']; + +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['title'] = blogs_get_blog_name(BLOGS_GROUP, $_REQUEST['oid']); +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['parent'] = 'blogs/index.php'; +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['children'] = array('blogs/add_post.php'); + + +$onload = 'document.form.title.focus();'; +require (AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    + + +
    +
    +
    + +
    +
    +
    *

    + +
    + +
    + <?php echo _AT('jump_codes'); ?> + + +
    + +
    + +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/blogs/delete_comment.php b/blogs/delete_comment.php new file mode 100644 index 000000000..dd645d3ea --- /dev/null +++ b/blogs/delete_comment.php @@ -0,0 +1,64 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +$id = abs($_REQUEST['id']); +$delete_id = abs($_REQUEST['delete_id']); + +$sql = "SELECT post_id FROM ".TABLE_PREFIX."blog_posts WHERE owner_type=$owner_type AND owner_id=$owner_id AND post_id=$id"; +$result = mysql_query($sql, $db); +if (!$row = mysql_fetch_assoc($result)) { + $msg->addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: post.php?ot='.$owner_type.SEP.'oid='.$owner_id.SEP.'id='.$id); + exit; +} else if (isset($_POST['submit_yes'])) { + + $sql = "DELETE FROM ".TABLE_PREFIX."blog_posts_comments WHERE comment_id=$delete_id AND post_id=$id"; + $result = mysql_query($sql, $db); + if (mysql_affected_rows($db) == 1) { + $sql = "UPDATE ".TABLE_PREFIX."blog_posts SET num_comments=num_comments-1, date=date WHERE owner_type=$owner_type AND owner_id=$owner_id AND post_id=$id"; + $result = mysql_query($sql, $db); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: post.php?ot='.$owner_type.SEP.'oid='.$owner_id.SEP.'id='.$id); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$hidden_vars = array('id' => $id, 'ot' => $owner_type, 'oid' => $owner_id, 'delete_id' => $delete_id); +$msg->addConfirm(array('DELETE'), $hidden_vars); +$msg->printConfirm(); + + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/blogs/delete_post.php b/blogs/delete_post.php new file mode 100644 index 000000000..402049708 --- /dev/null +++ b/blogs/delete_post.php @@ -0,0 +1,67 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + $id = abs($_POST['id']); + header('Location: post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_POST['oid'].SEP.'id='.$id); + exit; +} else if (isset($_POST['submit_yes'])) { + $id = abs($_POST['id']); + + $sql = "DELETE FROM ".TABLE_PREFIX."blog_posts WHERE owner_type=".BLOGS_GROUP." AND owner_id=$_REQUEST[oid] AND post_id=$id"; + mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_POST['oid']); + exit; +} + +$id = abs($_REQUEST['id']); +$sql = "SELECT title, body FROM ".TABLE_PREFIX."blog_posts WHERE owner_type=".BLOGS_GROUP." AND owner_id=$_REQUEST[oid] AND post_id=$id"; +$result = mysql_query($sql, $db); +$post_row = mysql_fetch_assoc($result); + +$_pages['blogs/delete_post.php']['parent'] = 'blogs/post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']; + + +$_pages['blogs/post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']]['children'] = array('blogs/edit_post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id'], 'blogs/delete_post.php'); +$_pages['blogs/post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']]['parent'] = 'blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']; +$_pages['blogs/post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']]['title'] = $post_row['title']; + + +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['title'] = blogs_get_blog_name(BLOGS_GROUP, $_REQUEST['oid']); +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['parent'] = 'blogs/index.php'; +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['children'] = array('blogs/add_post.php'); + +require (AT_INCLUDE_PATH.'header.inc.php'); + +$hidden_vars = array('id' => $id, 'ot' => $_REQUEST['ot'], 'oid' => $_REQUEST['oid']); +$msg->addConfirm('DELETE', $hidden_vars); +$msg->printConfirm(); +?> + + \ No newline at end of file diff --git a/blogs/edit_post.php b/blogs/edit_post.php new file mode 100644 index 000000000..6e57727ce --- /dev/null +++ b/blogs/edit_post.php @@ -0,0 +1,106 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_POST['oid']); + exit; +} else if (isset($_POST['submit'])) { + $_POST['title'] = $addslashes(trim($_POST['title'])); + $_POST['body'] = $addslashes(trim($_POST['body'])); + $id = abs($_POST['id']); + + if ($_POST['body'] == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('body'))); + } + + if (!$msg->containsErrors()) { + $_POST['title'] = htmlspecialchars($_POST['title']); + $_POST['body'] = htmlspecialchars($_POST['body']); + $_POST['private'] = abs($_POST['private']); + $sql = "UPDATE ".TABLE_PREFIX."blog_posts SET private=$_POST[private], title='$_POST[title]', body='$_POST[body]', date=date WHERE owner_type=".BLOGS_GROUP." AND owner_id=$_REQUEST[oid] AND post_id=$id"; + mysql_query($sql, $db); + + $msg->addFeedback('POST_ADDED_SUCCESSFULLY'); + + header('Location: post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_POST['oid'].SEP.'id='.$id); + exit; + } +} + +$id = abs($_REQUEST['id']); +$sql = "SELECT private, title, body FROM ".TABLE_PREFIX."blog_posts WHERE owner_type=".BLOGS_GROUP." AND owner_id=$_REQUEST[oid] AND post_id=$id"; +$result = mysql_query($sql, $db); +$post_row = mysql_fetch_assoc($result); + +$_pages['blogs/edit_post.php']['parent'] = 'blogs/post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']; +$_pages['blogs/post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']] = $_pages['blogs/post.php']; +$_pages['blogs/post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']]['children'] = array('blogs/edit_post.php', 'blogs/delete_post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']); + +$_pages['blogs/post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']]['parent'] = 'blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']; +$_pages['blogs/post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']]['title'] = $post_row['title']; +$_pages['blogs/post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']]['children'] = array('blogs/edit_post.php', 'blogs/delete_post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']); + +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['title'] = blogs_get_blog_name(BLOGS_GROUP, $_REQUEST['oid']); +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['parent'] = 'blogs/index.php'; +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['children'] = array('blogs/add_post.php'); + + +$onload = 'document.form.title.focus();'; +require (AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    + + + +
    +
    +
    + +
    +
    +
    *

    + +
    + +
    + <?php echo _AT('jump_codes'); ?> + + +
    + +
    + /> +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/blogs/index.php b/blogs/index.php new file mode 100644 index 000000000..2d96e3148 --- /dev/null +++ b/blogs/index.php @@ -0,0 +1,46 @@ +'; + +$blogs = false; +while ($row = mysql_fetch_assoc($result)) { + if (strpos($row['modules'], '_standard/blogs') !== FALSE) { + // retrieve the last posted date/time from this blog + $sql = "SELECT MAX(date) AS date FROM ".TABLE_PREFIX."blog_posts WHERE owner_type=".BLOGS_GROUP." AND owner_id={$row['group_id']}"; + $date_result = mysql_query($sql, $db); + if (($date_row = mysql_fetch_assoc($date_result)) && $date_row['date']) { + $last_updated = ' - ' . _AT('last_updated', AT_date(_AT('forum_date_format'), $date_row['date'], AT_DATE_MYSQL_DATETIME)); + } else { + $last_updated = ''; + } + + echo '
  • '.$row['title'].$last_updated.'
  • '; + $blogs = true; + } +} +echo ''; + +if (!$blogs) { + echo _AT('none_found'); +} +?> + + \ No newline at end of file diff --git a/blogs/post.php b/blogs/post.php new file mode 100644 index 000000000..fc92c60d8 --- /dev/null +++ b/blogs/post.php @@ -0,0 +1,135 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +$id = abs($_REQUEST['id']); +$auth = ''; +if (!query_bit($owner_status, BLOGS_AUTH_WRITE)) { + $auth = 'private=0 AND '; +} +$sql = "SELECT member_id, private, date, title, body FROM ".TABLE_PREFIX."blog_posts WHERE $auth owner_type=".BLOGS_GROUP." AND owner_id=$_REQUEST[oid] AND post_id=$id ORDER BY date DESC"; +$result = mysql_query($sql, $db); + + +if (isset($_POST['submit']) && $_SESSION['member_id']) { + // post a comment + $_POST['body'] = $addslashes(trim($_POST['body'])); + $_POST['private'] = abs($_POST['private']); + + if ($_POST['body'] == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('comments'))); + } + + if (!$msg->containsErrors()) { + $sql = "INSERT INTO ".TABLE_PREFIX."blog_posts_comments VALUES (NULL, $id, $_SESSION[member_id], NOW(), $_POST[private], '$_POST[body]')"; + mysql_query($sql, $db); + if (mysql_affected_rows($db) == 1) { + $sql = "UPDATE ".TABLE_PREFIX."blog_posts SET num_comments=num_comments+1, date=date WHERE post_id=$id"; + mysql_query($sql, $db); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: post.php?ot='.$owner_type.SEP.'oid='.$owner_id.SEP.'id='.$id); + exit; + } +} + +if (!$post_row = mysql_fetch_assoc($result)) { + header('Location: view.php?ot='.$owner_type.SEP.'oid='.$owner_id); + exit; +} + +$_pages['blogs/post.php']['title'] = AT_PRINT($post_row['title'], 'blog_posts.title') . ($post_row['private'] ? ' - '._AT('private') : ''); +$_pages['blogs/post.php']['parent'] = 'blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']; +if (query_bit($owner_status, BLOGS_AUTH_WRITE)) { + $_pages['blogs/post.php']['children'] = array('blogs/edit_post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id'], 'blogs/delete_post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid'].SEP.'id='.$_REQUEST['id']); +} else { + $_pages['blogs/post.php']['children'] = array(); +} + +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['title'] = blogs_get_blog_name(BLOGS_GROUP, $_REQUEST['oid']); +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['parent'] = 'blogs/index.php'; + +if (query_bit($owner_status, BLOGS_AUTH_WRITE)) { + $_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['children'] = array('blogs/add_post.php'); +} else { + $_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['children'] = array(); +} + + +require (AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    +

    -

    + +

    +
    + +

    + + +
    +
    +

    -

    + +

    + + +
    + +
    + +
    +
    + + + + +
    + +
    +
    +
    *

    + +
    + +
    + <?php echo _AT('jump_codes'); ?> + + +
    + +
    + +
    +
    +
    + + + \ No newline at end of file diff --git a/blogs/view.php b/blogs/view.php new file mode 100644 index 000000000..b008fc0a6 --- /dev/null +++ b/blogs/view.php @@ -0,0 +1,94 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +// these will all by dynamically defined on the view page +$_pages['blogs/view.php']['title'] = blogs_get_blog_name(BLOGS_GROUP, $_REQUEST['oid']); +$_pages['blogs/view.php']['parent'] = 'blogs/index.php'; + +if (query_bit($owner_status, BLOGS_AUTH_WRITE)) { + $_pages['blogs/view.php']['children'] = array('blogs/add_post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']); +} else { + $_pages['blogs/view.php']['children'] = array(); +} + +$_pages['blogs/add_post.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['title_var'] = 'add'; + +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['title'] = blogs_get_blog_name(BLOGS_GROUP, $_REQUEST['oid']); +$_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['parent'] = 'blogs/index.php'; +if (query_bit($owner_status, BLOGS_AUTH_WRITE)) { + $_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['children'] = array('blogs/add_post.php'); +} else { + $_pages['blogs/view.php?ot='.BLOGS_GROUP.SEP.'oid='.$_REQUEST['oid']]['children'] = array(); +} + +require (AT_INCLUDE_PATH.'header.inc.php'); + +$auth = ''; +if (!query_bit($owner_status, BLOGS_AUTH_WRITE)) { + $auth = 'private=0 AND '; +} + + +if (isset($_GET['p'])) { + $page = abs($_GET['p']); +} else { + $page = 1; +} + +$num_posts_per_page = 20; +$start = ($page - 1) * $num_posts_per_page; + +$count = 0; + +$sql = "SELECT post_id, member_id, private, num_comments, date, title, body FROM ".TABLE_PREFIX."blog_posts WHERE $auth owner_type=".BLOGS_GROUP." AND owner_id=$_REQUEST[oid] ORDER BY date DESC LIMIT $start, " . ($num_posts_per_page+1); +$result = mysql_query($sql, $db); +?> + + +
    +

    + + - +

    +

    -

    + +

    + +

    +
    +
    + + $num_posts_per_page) { + + echo ''._AT('previous_posts').''; + } + ?> + +

    + + + \ No newline at end of file diff --git a/bounce.php b/bounce.php new file mode 100644 index 000000000..a6cf9f4b5 --- /dev/null +++ b/bounce.php @@ -0,0 +1,430 @@ +getModule(AT_MODULE_DIR_STANDARD.'/statistics'); + if (!$module->isEnabled()) { + return; + } + if ($_SESSION['is_guest']) { + $sql = "INSERT INTO ".TABLE_PREFIX."course_stats VALUES ($_SESSION[course_id], NOW(), 1, 0)"; + } else { + $sql = "INSERT INTO ".TABLE_PREFIX."course_stats VALUES ($_SESSION[course_id], NOW(), 0, 1)"; + } + + $result = @mysql_query($sql, $db); + + if (!$result) { + /* that entry already exists, then update it. */ + if ($_SESSION['is_guest']) { + $sql = "UPDATE ".TABLE_PREFIX."course_stats SET guests=guests+1 WHERE course_id=$_SESSION[course_id] AND login_date=NOW()"; + } else { + $sql = "UPDATE ".TABLE_PREFIX."course_stats SET members=members+1 WHERE course_id=$_SESSION[course_id] AND login_date=NOW()"; + } + $result = @mysql_query($sql, $db); + } +} + +function get_groups($course_id) { + global $db; + + $groups = array(); + + if (authenticate(AT_PRIV_GROUPS, true)) { + $sql = "SELECT G.group_id FROM ".TABLE_PREFIX."groups G INNER JOIN ".TABLE_PREFIX."groups_types T USING (type_id) WHERE T.course_id=$course_id"; + } else { + $sql = "SELECT G.group_id FROM ".TABLE_PREFIX."groups G INNER JOIN (".TABLE_PREFIX."groups_types T, ".TABLE_PREFIX."groups_members M) ON (G.type_id=T.type_id AND G.group_id=M.group_id) WHERE T.course_id=$course_id AND M.member_id=$_SESSION[member_id]"; + } + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $groups[$row['group_id']] = $row['group_id']; + } + + return $groups; +} + +$_user_location = 'public'; +define('AT_INCLUDE_PATH', 'include/'); +require(AT_INCLUDE_PATH.'vitals.inc.php'); + +$set_to_public = false; +if ($_SERVER['PHP_SELF'] == $_base_path."acl.php") { + //search through the auth table and find password that matches get password + $key = $addslashes(key($_GET)); + $sql = "SELECT * FROM ".TABLE_PREFIX."course_access WHERE password='$key' AND (expiry_date > NOW() OR expiry_date+0 = 0) AND enabled=1"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $set_to_public = true; + $_GET['course'] = $row['course_id']; + $_SESSION['member_id'] = 0; + $_SESSION['valid_user'] = false; + $_SESSION['login'] = 'guest'; + } +} + + +if (isset($_GET['admin']) && isset($_SESSION['is_super_admin'])) { + $sql = "SELECT login, `privileges`, language FROM ".TABLE_PREFIX."admins WHERE login='$_SESSION[is_super_admin]' AND `privileges`>0"; + $result = mysql_query($sql, $db); + + if ($row = mysql_fetch_assoc($result)) { + $sql = "UPDATE ".TABLE_PREFIX."admins SET last_login=NOW() WHERE login='$_SESSION[is_super_admin]'"; + mysql_query($sql, $db); + + $_SESSION['login'] = $row['login']; + $_SESSION['valid_user'] = true; + $_SESSION['course_id'] = -1; + $_SESSION['privileges'] = intval($row['privileges']); + $_SESSION['lang'] = $row['language']; + unset($_SESSION['member_id']); + unset($_SESSION['is_super_admin']); + + write_to_log(AT_ADMIN_LOG_UPDATE, 'admins', mysql_affected_rows($db), $sql); + + $msg->addFeedback('LOGIN_SUCCESS'); + + header('Location: admin/index.php'); + exit; + } +} + +if($_REQUEST['p']) { + $page = urldecode($_REQUEST['p']); + if (substr($page, 0, 1) == '/') { + $page = substr($page, 1); + } +} else { + $page = 'index.php'; +} + +$_SESSION['enroll'] = AT_ENROLL_NO; +$_SESSION['s_cid'] = 0; +$_SESSION['privileges'] = 0; +$_SESSION['is_admin'] = false; + +if ($_SESSION['course_id'] == -1) { + unset($_SESSION['valid_user']); + unset($_SESSION['is_guest']); + unset($_SESSION['login']); + unset($_SESSION['is_admin']); + unset($_SESSION['course_id']); +} + +if (isset($_GET['course'])) { + $course = abs($_GET['course']); +} else if (isset($_POST['course'])) { + $course = abs($_POST['course']); +} else { + $course = 0; +} + +if (($course === 0) && $_SESSION['valid_user']) { + $_SESSION['course_id'] = 0; + $_SESSION['last_updated'] = time()/60 - ONLINE_UPDATE - 1; + + if (defined('AT_ENABLE_CATEGORY_THEMES') && AT_ENABLE_CATEGORY_THEMES) { + $th = get_default_theme(); + $_SESSION['prefs']['PREF_THEME'] = $th['dir_name']; + } + + header('Location: users/index.php'); + exit; +} else if (($course === 0) && ($_SESSION['login'] == 'guest')) { + + if (defined('AT_ENABLE_CATEGORY_THEMES') && AT_ENABLE_CATEGORY_THEMES) { + $th = get_default_theme(); + $_SESSION['prefs']['PREF_THEME'] = $th['dir_name']; + } + + header('Location: users/index.php'); + exit; +} else if ($course == -1) { + $_SESSION['course_id'] = 0; + $_SESSION['last_updated'] = time()/60 - ONLINE_UPDATE - 1; + + if (defined('AT_ENABLE_CATEGORY_THEMES') && AT_ENABLE_CATEGORY_THEMES) { + $th = get_default_theme(); + $_SESSION['prefs']['PREF_THEME'] = $th['dir_name']; + } + + header('Location: users/index.php'); + exit; +} + +$sql = "SELECT member_id, content_packaging, cat_id, access, title, UNIX_TIMESTAMP(release_date) AS u_release_date FROM ".TABLE_PREFIX."courses WHERE course_id=$course"; +$result = mysql_query($sql,$db); +if (!$row = mysql_fetch_assoc($result)) { + $msg->addError('ITEM_NOT_FOUND'); + if ($_SESSION['member_id']) { + header('Location: '.AT_BASE_HREF.'users/index.php'); + } else { + header('Location: login.php'); + } + exit; +} + +$owner_id = $row['member_id']; +$_SESSION['packaging'] = $row['content_packaging']; + +$_SESSION['groups'] = array(); +unset($_SESSION['fs_owner_type']); +unset($_SESSION['fs_owner_id']); +unset($_SESSION['fs_folder_id']); + +//check for acl var +if ($set_to_public) { + $row['access'] = "public"; +} + +switch ($row['access']){ + case 'public': + apply_category_theme($row['cat_id']); + + if (!$_SESSION['valid_user'] && ($row['u_release_date'] < time())) { + $_SESSION['course_id'] = $course; + /* guest login */ + $_SESSION['login'] = 'guest'; + $_SESSION['valid_user'] = false; + $_SESSION['member_id'] = 0; + $_SESSION['is_admin'] = false; + $_SESSION['is_guest'] = true; + + /* add guest login to counter: */ + count_login(); + } else if (!$_SESSION['valid_user']) { + $msg->addError(array('COURSE_NOT_RELEASED', AT_Date(_AT('announcement_date_format'), $row['u_release_date'], AT_DATE_UNIX_TIMESTAMP))); + header('Location: '.AT_BASE_HREF.'browse.php'); + exit; + + } else { + $_SESSION['course_id'] = $course; + /* check if we're an admin here */ + if ($owner_id == $_SESSION['member_id']) { + $_SESSION['is_admin'] = true; + $_SESSION['enroll'] = AT_ENROLL_YES; + } else { + $_SESSION['is_admin'] = false; + } + } + + /* title wont be needed. comes from the cache. */ + $_SESSION['course_title'] = $row['title']; + + $sql = "SELECT * FROM ".TABLE_PREFIX."course_enrollment WHERE member_id=$_SESSION[member_id] AND course_id=$course"; + $result = mysql_query($sql, $db); + if ($row2 = mysql_fetch_assoc($result)) { + /* we have requested or are enrolled in this course */ + $_SESSION['enroll'] = AT_ENROLL_YES; + $_SESSION['s_cid'] = $row2['last_cid']; + $_SESSION['privileges'] = $row2['privileges']; + } + + if (($row['u_release_date'] > time()) && !($_SESSION['is_admin'] || $_SESSION['privileges'])) { + $msg->addError(array('COURSE_NOT_RELEASED', AT_Date(_AT('announcement_date_format'), $row['u_release_date'], AT_DATE_UNIX_TIMESTAMP))); + header('Location: '.AT_BASE_HREF.'bounce.php?course=0'); + exit; + } else if ($row['u_release_date'] > time()) { + $msg->addInfo(array('COURSE_RELEASE', AT_Date(_AT('announcement_date_format'), $row['u_release_date'], AT_DATE_UNIX_TIMESTAMP))); + } + + /* add member login to counter: */ + if (!$_SESSION['is_admin']) { + count_login(); + } + + /* update users_online */ + add_user_online(); + + $_SESSION['groups'] = get_groups($course); + + if ($_GET['f']) { + header('Location: ./'.$page.'?f='.$addslashes($_GET['f'])); + exit; + } /* else */ + header('Location: ./'.$page); + exit; + + break; + + case 'protected': + if (!$_SESSION['valid_user']) { + header('Location: ./login.php?course='.intval($course)); + exit; + } /* else */ + /* we're already logged in */ + $_SESSION['course_id'] = $course; + + apply_category_theme($row['cat_id']); + + /* check if we're an admin here */ + if ($owner_id == $_SESSION['member_id']) { + $_SESSION['is_admin'] = true; + $_SESSION['enroll'] = AT_ENROLL_YES; + } else { + $_SESSION['is_admin'] = false; + /* add member login to counter: */ + count_login(); + } + + $sql = "SELECT * FROM ".TABLE_PREFIX."course_enrollment WHERE member_id=$_SESSION[member_id] AND course_id=$course"; + $result = mysql_query($sql, $db); + if ($row2 = mysql_fetch_assoc($result)) { + /* we have requested or are enrolled in this course */ + $_SESSION['enroll'] = AT_ENROLL_YES; + $_SESSION['s_cid'] = $row2['last_cid']; + $_SESSION['privileges'] = $row2['privileges']; + } + + if (($row['u_release_date'] > time()) && !($_SESSION['is_admin'] || $_SESSION['privileges'])) { + $msg->addError(array('COURSE_NOT_RELEASED', AT_Date(_AT('announcement_date_format'), $row['u_release_date'], AT_DATE_UNIX_TIMESTAMP))); + header('Location: '.AT_BASE_HREF.'bounce.php?course=0'); + exit; + } else if ($row['u_release_date'] > time()) { + $msg->addInfo(array('COURSE_RELEASE', AT_Date(_AT('announcement_date_format'), $row['u_release_date'], AT_DATE_UNIX_TIMESTAMP))); + } + $_SESSION['course_title'] = $row['title']; + + /* update users_online */ + add_user_online(); + + $_SESSION['groups'] = get_groups($course); + + if ($_GET['f']) { + header('Location: ./'.$page.'?f='.$addslashes($_GET['f'])); + exit; + } /* else */ + header('Location: ./'.$addslashes($page)); + exit; + + break; + + case 'private': + if (!$_SESSION['valid_user']) { + /* user not logged in: */ + header('Location: ./login.php?course='.intval($course)); + exit; + } /* else */ + + if ($owner_id == $_SESSION['member_id']) { + /* we own this course. so we dont have to enroll or get the groups */ + + $_SESSION['is_admin'] = true; + $_SESSION['course_id'] = $course; + $_SESSION['course_title'] = $row['title']; + $_SESSION['enroll'] = AT_ENROLL_YES; + + /* update users_online */ + add_user_online(); + + apply_category_theme($row['cat_id']); + + $_SESSION['groups'] = get_groups($course); + + if ($_GET['f']) { + header('Location: ./'.$page.'?f='.$addslashes($_GET['f'])); + exit; + } /* else */ + if ($row['u_release_date'] > time()) { + $msg->addInfo(array('COURSE_RELEASE', AT_Date(_AT('announcement_date_format'), $row['u_release_date'], AT_DATE_UNIX_TIMESTAMP))); + } + header('Location: ./'.$addslashes($page)); + exit; + } + + /* check if we're enrolled */ + $sql = "SELECT * FROM ".TABLE_PREFIX."course_enrollment WHERE member_id=$_SESSION[member_id] AND course_id=$course"; + $result = mysql_query($sql, $db); + + if (!$row2 = mysql_fetch_assoc($result)) { + /* we have not requested enrollment in this course */ + $_SESSION['course_id'] = 0; + header('Location: users/private_enroll.php?course='.intval($course)); + exit; + } /* else */ + + if (($row['u_release_date'] > time()) && !$row2['privileges']) { + $msg->addError(array('COURSE_NOT_RELEASED', AT_Date(_AT('announcement_date_format'), $row['u_release_date'], AT_DATE_UNIX_TIMESTAMP))); + header('Location: '.$_AT_BASE_HREF.'bounce.php?course=0'); + exit; + } else if ($row['u_release_date'] > time()) { + // only instructor and TAs may view a course before it is released. + $msg->addInfo(array('COURSE_RELEASE', AT_Date(_AT('announcement_date_format'), $row['u_release_date'], AT_DATE_UNIX_TIMESTAMP))); + } + /* we have requested or are enrolled in this course */ + + apply_category_theme($row['cat_id']); + + $_SESSION['enroll'] = AT_ENROLL_YES; + $_SESSION['s_cid'] = $row2['last_cid']; + + if ($row2['approved'] == 'n') { + /* we have not been approved to enroll in this course */ + $_SESSION['course_id'] = 0; + header('Location: users/private_enroll.php?course='.$course); + exit; + } /* else */ + + /* enrollment has been approved or student is alumni */ + if ($row2['approved'] == 'a') { + $_SESSION['enroll'] = AT_ENROLL_ALUMNUS; + } + /* we're already logged in */ + $_SESSION['course_id'] = $course; + + /* check if we're an admin here */ + $_SESSION['privileges'] = $row2['privileges']; + $_SESSION['course_title'] = $row['title']; + + /* update users_online */ + add_user_online(); + + $_SESSION['groups'] = get_groups($course); + + /* add member login to counter: */ + count_login(); + + if($_GET['f']){ + header('Location: '.$page.'?f='.$addslashes($_GET['f'])); + exit; + } /* else */ + header('Location: '.$addslashes($page)); + exit; + break; +} // end switch + + +?> \ No newline at end of file diff --git a/browse.php b/browse.php new file mode 100644 index 000000000..9eac4da59 --- /dev/null +++ b/browse.php @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/chat/MachineThatGoesBing.class b/chat/MachineThatGoesBing.class new file mode 100644 index 0000000000000000000000000000000000000000..11a07eed87544fbb9cd08304a74ce9633448acb7 GIT binary patch literal 2452 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 PY+6xjDaQa3q2 literal 0 HcmV?d00001 diff --git a/chat/bing.php b/chat/bing.php new file mode 100644 index 000000000..a6f03f063 --- /dev/null +++ b/chat/bing.php @@ -0,0 +1,30 @@ + \ No newline at end of file diff --git a/chat/bings/.html b/chat/bings/.html new file mode 100644 index 000000000..c7fd82271 --- /dev/null +++ b/chat/bings/.html @@ -0,0 +1,37 @@ + + +
    + + + \ No newline at end of file diff --git a/chat/bings/chime.au b/chat/bings/chime.au new file mode 100644 index 0000000000000000000000000000000000000000..91c63fb457b3d600093e98ab6cc7c3b57e2d0aa8 GIT binary patch literal 23846 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 literal 0 HcmV?d00001 diff --git a/chat/bings/chime.wav b/chat/bings/chime.wav new file mode 100644 index 0000000000000000000000000000000000000000..9502298b4ac21b96c43125b96c1e1d9f3d9fc2da GIT binary patch literal 47672 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 BkHr80 literal 0 HcmV?d00001 diff --git a/chat/bings/taras.html b/chat/bings/taras.html new file mode 100644 index 000000000..e51049445 --- /dev/null +++ b/chat/bings/taras.html @@ -0,0 +1,39 @@ + + + +

    bing on

    +
    + + + diff --git a/chat/bings/taras.php b/chat/bings/taras.php new file mode 100644 index 000000000..dfb1161a8 --- /dev/null +++ b/chat/bings/taras.php @@ -0,0 +1,37 @@ + + +
    sss
    + + + diff --git a/chat/chat.php b/chat/chat.php new file mode 100644 index 000000000..1ceb63f74 --- /dev/null +++ b/chat/chat.php @@ -0,0 +1,83 @@ + + + + + + + ATutor AChat + + + 0 && $myPrefs['refresh'] == 'manual') { + //makeBingFile($chatID); +?> + + + + + + + + <p><?php echo _AT('frame_contains'); ?><br /> + * <a href="display.php?firstLoginFlag=<?php echo $_GET['firstLoginFlag']; ?>"><?php echo _AT('chat_messages') ?></a> + * <a href="options.php"><?php echo _AT('chat_options'); ?></a> + * <a href="poster.php"><?php echo _AT('chat_compose_message'); ?></a> + </p> + + + + + + + + <p><?php echo _AT('frame_contains'); ?><br /> + * <a href="display.php?firstLoginFlag=<?php echo $_GET['firstLoginFlag']; ?>"><?php echo _AT('chat_messages') ?></a> + * <a href="options.php"><?php echo _AT('chat_options'); ?></a> + * <a href="poster.php"><?php echo _AT('chat_compose_message'); ?></a> + </p> + + + + + + + + + + + <p><?php echo _AT('frame_contains'); ?><br /> + * <a href="display.php?firstLoginFlag=<?php echo $_GET['firstLoginFlag']; ?>"><?php echo _AT('chat_messages') ?></a> + * <a href="options.php"><?php echo _AT('chat_options'); ?></a> + * <a href="poster.php"><?php echo _AT('chat_compose_message'); ?></a> + </p> + + + + diff --git a/chat/display.php b/chat/display.php new file mode 100644 index 000000000..1a798a207 --- /dev/null +++ b/chat/display.php @@ -0,0 +1,130 @@ + 0) { + postMessage(_AT('chat_system'), _AT('chat_user_logged_in', $_SESSION['login']), $topMsgNum, $bottomMsgNum); + } + +require('include/html/chat_header.inc.php'); + if ($myPrefs['refresh'] != 'manual') { +?> + + + + + + + +
    + + 1) { + $min = $topMsgNum - 10; + } + if ($myPrefs['onlyNewFlag'] > 0) { + $min = $myPrefs['lastRead'] +1; + } + if ($min <= $topMsgNum) { + echo ''; + } else { + echo '

    '._AT('chat_no_new_messages').'

    '; + } + + if ($myPrefs['newestFirstFlag'] > 0) { + for ($i = $topMsgNum; $i >= $min; $i--) { + showMessage($i, $myPrefs); + } + } else { + for ($i = $min; $i <= $topMsgNum ; $i++) { + showMessage($i, $myPrefs); + } + } + + if ($min <= $topMsgNum) { + echo '
    '; + } + + echo ''; + echo ''; + echo ''; + echo '
    '; + if ($myPrefs['navigationAidFlag'] > 0) { + echo ''._AT('chat_jump_to_message').' | '; + } + + echo ''._AT('chat_refresh_message').''; + echo '
    '; + + echo '

    '; + if ($myPrefs['refresh'] == 'manual') { + echo ' +
    '._AT('chat_compose_message').'
    '; + echo '

    '; + + echo '

    + + + '; + + echo '

    '; + echo ''; + } else { + if ($myPrefs['bingFlag'] > 0 && $topMsgNum > $myPrefs['lastRead']) { + echo ''; + } + } + + $myPrefs['lastRead'] = $topMsgNum; + $myPrefs['lastChecked'] = $topMsgNum; + writePrefs($myPrefs, $_SESSION['login']); + require('include/html/chat_footer.inc.php'); +?> \ No newline at end of file diff --git a/chat/filterHistory.php b/chat/filterHistory.php new file mode 100644 index 000000000..b03e64789 --- /dev/null +++ b/chat/filterHistory.php @@ -0,0 +1,61 @@ + + + + + +
    + + + + + +
    +

    + 0) { + for ($i = $topMsgNum; $i >= 1; $i--) { + showMessageFiltered($i, $myPrefs, $filterChatID); + } + } else { + for ($i = 1; $i <= $topMsgNum ; $i++) { + showMessageFiltered($i, $myPrefs, $filterChatID); + } + } +?> +

    +
    + + + + + +
    + \ No newline at end of file diff --git a/chat/help.php b/chat/help.php new file mode 100644 index 000000000..96df783f7 --- /dev/null +++ b/chat/help.php @@ -0,0 +1,76 @@ + + + + + +
    + + + + + +
    +

    +
    +
    +

    + + + + + +
    + + +

    +

    + + + + + +
    + + +

    + + + + + + +
    + + +


    + + + + + +
    + + + \ No newline at end of file diff --git a/chat/history.php b/chat/history.php new file mode 100644 index 000000000..b5b252401 --- /dev/null +++ b/chat/history.php @@ -0,0 +1,128 @@ + $topMsgNum) { + $hisTopNum = $topMsgNum; + } + if (!$hisTopNum) { + $hisTopNum = $topMsgNum; + } + + $hisBottomNum = getLower20Bound($hisTopNum, $bottomMsgNum); + + if ($hisBottomNum == 0) { + $hisBottomNum = 1; + } + $totalNum = $topMsgNum - $bottomMsgNum + 1; + + $hisTopNumUserPerspective = $hisTopNum - $bottomMsgNum + 1; + $hisBottomNumUserPerspective = $hisBottomNum - $bottomMsgNum + 1; + + if ($hisBottomNumUserPerspective < 1) { + $hisBottomNumUserPerspective = 1; + } + + $prevNumT = $hisBottomNum - 1; + $nextNumT = $hisTopNum + 20; + +require('include/html/chat_header.inc.php'); + + + if ($hisTopNum < $topMsgNum && $hisBottomNum > $bottomMsgNum) { +?> + + + + +
    | |
    + $bottomMsgNum) { +?> + + + + +
    |
    + + + + + +
    |
    + + + + + +
    +'; + + if ($myPrefs['newestFirstFlag'] > 0) { + for ($i = $hisTopNum; $i >= $hisBottomNum; $i--) { + showMessage($i, $myPrefs); + } + } else { + for ($i = $hisBottomNum; $i <= $hisTopNum ; $i++) { + showMessage($i, $myPrefs); + } + } + echo '

    '; + + if ($hisTopNum < $topMsgNum && $hisBottomNum > $bottomMsgNum) { +?> + + + + +
    Previous | Next | Return to Chat
    + $bottomMsgNum) { +?> + + + + +
    Previous | Return to Chat
    + + + + + +
    Next | Return to Chat
    + \ No newline at end of file diff --git a/chat/include/html/chat_footer.inc.php b/chat/include/html/chat_footer.inc.php new file mode 100644 index 000000000..691287b6e --- /dev/null +++ b/chat/include/html/chat_footer.inc.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/chat/include/html/chat_header.inc.php b/chat/include/html/chat_header.inc.php new file mode 100644 index 000000000..ec4c54d30 --- /dev/null +++ b/chat/include/html/chat_header.inc.php @@ -0,0 +1,16 @@ + + + + ATutor AChat + + + + + + + + class="chat"> diff --git a/chat/include/html/login_footer.inc.php b/chat/include/html/login_footer.inc.php new file mode 100644 index 000000000..50df04c85 --- /dev/null +++ b/chat/include/html/login_footer.inc.php @@ -0,0 +1,5 @@ +

    +Developed by Joel Kronenberg at the
    +© Copyright ATRC, 2003
    + + \ No newline at end of file diff --git a/chat/include/html/login_header.inc.php b/chat/include/html/login_header.inc.php new file mode 100644 index 000000000..488c7aa40 --- /dev/null +++ b/chat/include/html/login_header.inc.php @@ -0,0 +1,11 @@ + + + ATRC A-Chat-PHP: Login + + + + + + + +

    ATRC A-Chat-PHP

    \ No newline at end of file diff --git a/chat/index.php b/chat/index.php new file mode 100644 index 000000000..3e21c0717 --- /dev/null +++ b/chat/index.php @@ -0,0 +1,130 @@ + +


    + 'desc', 'desc' => 'asc'); +$cols = array('name' => 1, 'date' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'date'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'date'; +} else { + // no order set + $order = 'desc'; + $col = 'date'; +} + +$tran_files = array(); +if (!@opendir(AT_CONTENT_DIR . 'chat/')){ + mkdir(AT_CONTENT_DIR . 'chat/', 0777); +} + +if(!file_exists(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/admin.settings')){ + @mkdir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'], 0777); + @mkdir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/', 0776); + @mkdir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/msgs/', 0776); + @mkdir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/users/', 0776); + @copy('admin.settings.default', AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/admin.settings'); + @chmod (AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/admin.settings', 0777); + +} + +if ($dir = @opendir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/')) { + while (($file = readdir($dir)) !== false) { + if (substr($file, -strlen('.html')) == '.html') { + $la = stat(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/'.$file); + + $file = str_replace('.html', '', $file); + $tran_files[$file] = $la['ctime']; + } + } +} + +if (count($tran_files) == 0) { + echo '

    '._AT('chat_none_found').'

    '; +} else {?> + +
    + + + + + + + + + + + + + + + + + + + + + + $date) { ?> + + + + + + + + + +
    + +
    +
    + diff --git a/chat/logout.php b/chat/logout.php new file mode 100644 index 000000000..f1624cb8b --- /dev/null +++ b/chat/logout.php @@ -0,0 +1,57 @@ + + + + + +

    : Logout

    + +

    The will automatically save an account for you so that the next time you login with your Chat ID and Password your Preference Settings will be reloaded.

    + +

    Thank you for using the .
    +

    + + + + + + +
    Re-enter Chat
    + diff --git a/chat/options.php b/chat/options.php new file mode 100644 index 000000000..4b4c03b5a --- /dev/null +++ b/chat/options.php @@ -0,0 +1,88 @@ + + + + + +
    + + + +
    |
    +

    + +
    '; + if ($dir = opendir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/users/')) { + while (($file = readdir($dir)) !== false) { + if (($file == '..') || ($file == '.')) { + continue; + } + + $chatName = substr($file, 0, -strlen('.prefs')); + $la = getLastAccessed($chatName); + $now = time(); + + if (($la == 0) || (!$la)) { + $la = 0; + } else if ($now - $la < $admin['chatSessionLifeSpan']) { + $colour = getChatIDColour($chatName, $myPrefs['colours']); + if ($chatName == $_SESSION['login']) { + echo '
  • '.$chatName.' ('._AT('chat_you').')
  • '; + } else if($chatName != '') { + echo '
  • '.$chatName.'
  • '; + } + } else { + resetLastAccessed($chatName); + $topMsgNum = $bottomMsgNum = 0; + howManyMessages($topMsgNum, $bottomMsgNum); + postMessage(_AT('chat_system'), + _AT('chat_user_logged_out', $chatName), + $topMsgNum, + $bottomMsgNum); + } + } + } + closedir($dir); + echo ''; + + echo ' +
    '._AT('chat_full_history').' | '._AT('chat_refresh_user_list').'
    '; + + //if ($myPrefs['navigationAidFlag'] > 0) { + echo '

    '; + echo ' +

    '._AT('chat_quick_keys').'

    '; + + echo '
    • '._AT('chat_altc').'
    • +
    • '._AT('chat_post').'
    • +
    • '._AT('chat_altr').'
    • +
    • '._AT('chat_altm').'
    • +
    • '._AT('chat_altq').'
    '; + //} +?> + diff --git a/chat/poster.php b/chat/poster.php new file mode 100644 index 000000000..7c84f7a32 --- /dev/null +++ b/chat/poster.php @@ -0,0 +1,46 @@ + + + + + + + + +
    +
    + +
    +
    + + \ No newline at end of file diff --git a/chat/prefs.php b/chat/prefs.php new file mode 100644 index 000000000..b6c8b8831 --- /dev/null +++ b/chat/prefs.php @@ -0,0 +1,89 @@ + + + + + +

    +
    +
    + + 100) { + $mC180SelT = 'selected'; + } else if ($myPrefs['refresh'] > 30) { + $mC60SelT = 'selected'; + } else if ($myPrefs['refresh'] > 10) { + $mC20SelT = 'selected'; + } else { + $mc5SelT = 'selected'; + } + +?> +

    +

    +

    + + 0) { + $bFSelT = 'selected'; + } +?> + +

    +

    +

    + + + + + +
    +
    +
    + \ No newline at end of file diff --git a/chat/prefs2.php b/chat/prefs2.php new file mode 100644 index 000000000..79635304e --- /dev/null +++ b/chat/prefs2.php @@ -0,0 +1,79 @@ + + + + + +

    +
    +
    + + + 0) { + $nFFSelT = 'selected'; + } +?> + +

    +

    +

    + + 0) { + $oNFSelT = 'selected'; + } +?> + +

    +

    +

    + + + + + +
    + +
    + \ No newline at end of file diff --git a/chat/view_transcript.php b/chat/view_transcript.php new file mode 100644 index 000000000..7ab7c9c61 --- /dev/null +++ b/chat/view_transcript.php @@ -0,0 +1,34 @@ + + + +
    + +
    + +
    + + \ No newline at end of file diff --git a/confirm.php b/confirm.php new file mode 100644 index 000000000..e45aaec0a --- /dev/null +++ b/confirm.php @@ -0,0 +1,133 @@ +addFeedback('CANCELLED'); + header('Location: '.$_base_href.'login.php'); + exit; +} + +if (isset($_GET['e'], $_GET['id'], $_GET['m'])) { + $id = intval($_GET['id']); + $m = $_GET['m']; + $e = $addslashes($_GET['e']); + + $sql = "SELECT creation_date FROM ".TABLE_PREFIX."members WHERE member_id=$id"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $code = substr(md5($_GET['e'] . $row['creation_date'] . $id), 0, 10); + + if ($code == $m) { + $sql = "UPDATE ".TABLE_PREFIX."members SET email='$_GET[e]', last_login=last_login WHERE member_id=$id"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('CONFIRM_GOOD'); + + header('Location: '.$_base_href.'users/index.php'); + exit; + } else { + $msg->addError('CONFIRM_BAD'); + } + } else { + $msg->addError('CONFIRM_BAD'); + } + +} else if (isset($_GET['id'], $_GET['m'])) { + $id = intval($_GET['id']); + $m = $_GET['m']; + + $sql = "SELECT email, creation_date FROM ".TABLE_PREFIX."members WHERE member_id=$id AND status=".AT_STATUS_UNCONFIRMED; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $code = substr(md5($row['email'] . $row['creation_date'] . $id), 0, 10); + + if ($code == $m) { + if (defined('AUTO_APPROVE_INSTRUCTORS') && AUTO_APPROVE_INSTRUCTORS) { + $sql = "UPDATE ".TABLE_PREFIX."members SET status=".AT_STATUS_INSTRUCTOR.", creation_date=creation_date, last_login=last_login WHERE member_id=$id"; + } else { + $sql = "UPDATE ".TABLE_PREFIX."members SET status=".AT_STATUS_STUDENT.", creation_date=creation_date, last_login=last_login WHERE member_id=$id"; + } + $result = mysql_query($sql, $db); + + $msg->addFeedback('CONFIRM_GOOD'); + + header('Location: '.$_base_href.'login.php'); + exit; + } else { + $msg->addError('CONFIRM_BAD'); + } + } else { + $msg->addError('CONFIRM_BAD'); + } +} else if (isset($_POST['submit'])) { + $_POST['email'] = $addslashes($_POST['email']); + + $sql = "SELECT member_id, email, creation_date, status FROM ".TABLE_PREFIX."members WHERE email='$_POST[email]'"; + $result = mysql_query($sql, $db); + + if ($row = mysql_fetch_assoc($result)) { + + if ($row['status'] == AT_STATUS_UNCONFIRMED) { + $code = substr(md5($row['email'] . $row['creation_date']. $row['member_id']), 0, 10); + $confirmation_link = $_base_href . 'confirm.php?id='.$row['member_id'].SEP.'m='.$code; + + /* send the email confirmation message: */ + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + $mail = new ATutorMailer(); + + $mail->From = $_config['contact_email']; + $mail->AddAddress($row['email']); + $mail->Subject = SITE_NAME . ': ' . _AT('email_confirmation_subject'); + $mail->Body = _AT('email_confirmation_message', $_base_href, $confirmation_link)."\n\n"; + $mail->Send(); + + $msg->addFeedback('CONFIRMATION_SENT'); + } else { + $msg->addFeedback('ACCOUNT_CONFIRMED'); + } + + header('Location: '.$_base_href.'login.php'); + exit; + } else { + $msg->addError('EMAIL_NOT_FOUND'); + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); ?> + +
    + +
    +
    +

    +
    + +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/contact_instructor.php b/contact_instructor.php new file mode 100644 index 000000000..66635ccfc --- /dev/null +++ b/contact_instructor.php @@ -0,0 +1,142 @@ +addFeedback('CANCELLED'); + header('Location: ' . $to); + exit; +} + +$row = array(); + +$id = intval($_REQUEST['id']); +if (isset($system_courses[$id], $system_courses[$id]['member_id'])) { + $sql = "SELECT M.login, M.first_name, M.last_name, M.email FROM ".TABLE_PREFIX."members M WHERE M.member_id={$system_courses[$id][member_id]}"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); +} + +if ($row) { + $instructor_name = AT_print($row['login'], 'members.login'); + $instructor_email = AT_print($row['email'], 'members.email'); +} else { + $msg->addError('INST_INFO_NOT_FOUND'); + header('Location: ' . $to); + exit; +} + +if (isset($_POST['submit'])) { + $missing_fields = array(); + + $to_email = $_POST['email']; + $_POST['subject'] = trim($_POST['subject']); + $_POST['body'] = trim($_POST['body']); + + if ($_POST['subject'] == '') { + $missing_fields[] = _AT('subject'); + } + + if ($_POST['body'] == '') { + $missing_fields[] = _AT('body'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + + if (empty($_POST['from_email'])) { + $_POST['from_email'] = $instructor_email; + } + if (empty($_POST['from'])) { + $_POST['from'] = ''; + } + + $mail = new ATutorMailer; + + $mail->From = $_POST['from_email']; + $mail->FromName = $_POST['from']; + $mail->AddAddress($instructor_email, $instructor_name); + $mail->Subject = stripslashes($addslashes($_POST['subject'])); + $mail->Body = stripslashes($addslashes($_POST['body'])); + + if(!$mail->Send()) { + $msg->addError('SENDING_ERROR'); + header('Location: ' . $to); + exit; + } + unset($mail); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: ' . $to); + exit; + } + +} + +require (AT_INCLUDE_PATH.'header.inc.php'); +?> +
    + + +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/content.php b/content.php new file mode 100644 index 000000000..c5fe403f5 --- /dev/null +++ b/content.php @@ -0,0 +1,169 @@ +getContentPage($cid); + +if (!($content_row = mysql_fetch_assoc($result))) { + $_pages['content.php']['title_var'] = 'missing_content'; + $_pages['content.php']['parent'] = 'index.php'; + $_pages['content.php']['ignore'] = true; + + + require(AT_INCLUDE_PATH.'header.inc.php'); + + $msg->addError('PAGE_NOT_FOUND'); + $msg->printAll(); + + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} /* else: */ + +if (defined('AT_FORCE_GET_FILE') && AT_FORCE_GET_FILE) { + $course_base_href = 'get.php/'; +} else { + $course_base_href = 'content/' . $_SESSION['course_id'] . '/'; +} + +/* the "heading navigation": */ +$path = $contentManager->getContentPath($cid); + +if ($content_row['content_path']) { + $content_base_href .= $content_row['content_path'].'/'; +} + +$parent_headings = ''; +$num_in_path = count($path)-1; + +/* the page title: */ +$page_title = ''; +$page_title .= $content_row['title']; + +$num_in_path = count($path)-1; +for ($i=0; $i<$num_in_path; $i++) { + $content_info = $path[$i]; + if ($_SESSION['prefs'][PREF_NUMBERING]) { + if ($contentManager->_menu_info[$content_info['content_id']]['content_parent_id'] == 0) { + $top_num = $contentManager->_menu_info[$content_info['content_id']]['ordering']; + $parent_headings .= $top_num; + } else { + $top_num = $top_num.'.'.$contentManager->_menu_info[$content_info['content_id']]['ordering']; + $parent_headings .= $top_num; + } + $parent_headings .= ' '; + } +} + +if ($_SESSION['prefs'][PREF_NUMBERING]) { + if ($top_num != '') { + $top_num = $top_num.'.'.$content_row['ordering']; + $page_title .= $top_num.' '; + } else { + $top_num = $content_row['ordering']; + $page_title .= $top_num.' '; + } +} + +$parent = 0; +foreach ($path as $page) { + if (!$parent) { + $_pages['content.php?cid='.$page['content_id']]['title'] = $page['title']; + $_pages['content.php?cid='.$page['content_id']]['parent'] = 'index.php'; + } else { + $_pages['content.php?cid='.$page['content_id']]['title'] = $page['title']; + $_pages['content.php?cid='.$page['content_id']]['parent'] = 'content.php?cid='.$parent; + } + + $_pages['content.php?cid='.$page['content_id']]['ignore'] = true; + $parent = $page['content_id']; +} + +$last_page = array_pop($_pages); +$_pages['content.php'] = $last_page; + +reset($path); +$first_page = current($path); + +// use any styles that were part of the imported document +// $_custom_css = $_base_href.'headstuff.php?cid='.$cid.SEP.'path='.urlEncode($_base_href.$course_base_href.$content_base_href); + +require(AT_INCLUDE_PATH.'header.inc.php'); + +save_last_cid($cid); +if ($top_num != (int) $top_num) { + $top_num = substr($top_num, 0, strpos($top_num, '.')); +} + +$shortcuts = array(); +if (( ($content_row['r_date'] <= $content_row['n_date']) + && ((!$content_row['content_parent_id'] && ($_SESSION['packaging'] == 'top')) + || ($_SESSION['packaging'] == 'all')) + ) || authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN)) { + + $shortcuts[] = array('title' => _AT('export_content'), 'url' => $_base_href . 'tools/ims/ims_export.php?cid='.$cid); +} + +if (authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN)) { + $shortcuts[] = array('title' => _AT('edit_this_page'), 'url' => $_base_href . 'editor/edit_content.php?cid='.$cid); + $shortcuts[] = array('title' => _AT('add_top_page'), 'url' => $_base_href . 'editor/edit_content.php'); + if ($contentManager->_menu_info[$cid]['content_parent_id']) { + $shortcuts[] = array('title' => _AT('add_sibling_page'), 'url' => $_base_href . + 'editor/edit_content.php?pid='.$contentManager->_menu_info[$cid]['content_parent_id']); + } + $shortcuts[] = array('title' => _AT('add_sub_page'), 'url' => $_base_href . 'editor/edit_content.php?pid='.$cid); + $shortcuts[] = array('title' => _AT('delete_this_page'), 'url' => $_base_href . 'editor/delete_content.php?cid='.$cid); +} +$savant->assign('shortcuts', $shortcuts); + +/* if i'm an admin then let me see content, otherwise only if released */ +$released_status = $contentManager->isReleased($cid); +if ($released_status === TRUE || authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN)) { + if ($content_row['text'] == '') { + $msg->addInfo('NO_PAGE_CONTENT'); + $msg->printAll(); + $savant->assign('body', ''); + } else { + if ($released_status !== TRUE) { + /* show the instructor that this content hasn't been released yet */ + $infos = array('NOT_RELEASED', AT_date(_AT('announcement_date_format'), $released_status, AT_DATE_MYSQL_TIMESTAMP)); + $msg->addInfo($infos); + $msg->printAll(); + unset($infos); + } + + /* @See: include/lib/output.inc.php */ + $savant->assign('body', format_content($content_row['text'], $content_row['formatting'], $glossary)); + } +} else { + $infos = array('NOT_RELEASED', AT_date(_AT('announcement_date_format'), $released_status, AT_DATE_MYSQL_TIMESTAMP)); + $msg->addInfo($infos); + $msg->printAll(); + unset($infos); +} + +$savant->assign('content_info', _AT('page_info', AT_date(_AT('inbox_date_format'), $content_row['last_modified'], AT_DATE_MYSQL_DATETIME), $content_row['revision'], AT_date(_AT('inbox_date_format'), $content_row['release_date'], AT_DATE_MYSQL_DATETIME))); + +$savant->display('content.tmpl.php'); + +require (AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/directory.php b/directory.php new file mode 100644 index 000000000..1d6ca86dc --- /dev/null +++ b/directory.php @@ -0,0 +1,185 @@ +addInfo('NOT_ENROLLED'); + $msg->printAll(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +if ($_GET['reset_filter']) { + unset($_GET); +} + +if (isset($_GET['online_status']) && ($_GET['online_status'] != '')) { + if ($_GET['online_status'] == 1) { + $on = 'checked="checked"'; + } else if ($_GET['online_status'] == 2) { + $all = 'checked="checked"'; + } else if ($_GET['online_status'] == 0) { + $off = 'checked="checked"'; + } +} else { + $all = 'checked="checked"'; +} + +$group = abs($_GET['group']); + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    +
    +
    +
    + /> + /> + /> +
    + +
    + +
    + + + +
    + +
    + + +
    +
    +
    + +".time(); +$result_online = mysql_query($sql_online, $db); + +while ($row_online = mysql_fetch_assoc($result_online)) { + if ($all_[$row_online['member_id']] != '') { + $all_[$row_online['member_id']]['online'] = TRUE; + $online[$row_online['member_id']] = $all_[$row_online['member_id']]; + } +} + +if ($all) { + $final = $all_; +} else if ($on) { + $final = $online; +} else { + foreach ($all_ as $id=>$attrs) { + if ($attrs['online'] == FALSE) { + $final[$id] = $attrs; + } + } +} + +?> + + + + + + + + + + +$attrs) { + echo ''; + $type = 'class="user"'; + if ($system_courses[$_SESSION['course_id']]['member_id'] == $user_id) { + $type = 'class="user instructor" title="'._AT('instructor').'"'; + } + echo ''; + + echo ''; + + + if ($attrs['privileges'] != 0) { + echo ''; + } else if ($attrs['approved'] == 'a') { + /* if alumni display alumni */ + echo ''; + } else if ($attrs['approved'] == 'y') { + if ($user_id == $system_courses[$_SESSION['course_id']]['member_id']) { + echo ''; + } else { + echo ''; + } + } else { + echo ''; + } + + if ($attrs['online'] == TRUE) { + echo ''; + } else { + echo ''; + } + + echo ''; + } +} else { + echo ''; +} +?> + +
    '.AT_print($attrs['login'], 'members.login') . ''.AT_print($attrs['first_name'] .' '. $attrs['second_name'] .' '. $attrs['last_name'],'members.first_name').''._AT('assistant').''._AT('alumni').''._AT('instructor').''._AT('enrolled').''._AT('user_online').''._AT('user_offline').'
    ' . _AT('none_found') . '
    + + \ No newline at end of file diff --git a/documentation/add_note.php b/documentation/add_note.php new file mode 100644 index 000000000..3f210d720 --- /dev/null +++ b/documentation/add_note.php @@ -0,0 +1,105 @@ + + + + + <?php get_text('add_note'); ?> + + + + +
    + + + +
    +
    +

    +
    + +
    +
    + +
    + +
    +
    + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/documentation/admin/administrators.php b/documentation/admin/administrators.php new file mode 100644 index 000000000..dd0a3dd2a --- /dev/null +++ b/documentation/admin/administrators.php @@ -0,0 +1,23 @@ + + +

    Administrators

    +

    An ATutor installation can be maintained by multiple administrators, each with their own privileges. The three kinds of administrator accounts are described below.

    + +
    +
    Super Administrator
    +
    This administrator has no restrictions and has access to all of the administrator options. This is the only administrator type that can create and delete other administrator accounts. There must always be at least one Super Administrator account.
    + +
    Active Administrator
    +
    An administrator account whose access is limited. This administrator only has privileged access to sections that they were assigned to when their account was created by the Super Administrator.
    + +
    Inactive Administrator
    +
    An administrator account that has not been assigned any access privileges. As a result, this administrator cannot login.
    +
    + +

    Create Administrator Account

    +

    To make a new administrator, follow the Create Administrator Account link, enter the login name, password, real name and email and select the appropriate administrative privileges to be assigned to this account.

    + +

    Administrator Activity Log

    +

    The Administrator Activity Log lists all actions made to the ATutor database tables. Viewing a log entry will give detailed information about the selected activity. The log can be reset by using the Reset Log feature.

    + + diff --git a/documentation/admin/backups.php b/documentation/admin/backups.php new file mode 100644 index 000000000..3bf21f9d0 --- /dev/null +++ b/documentation/admin/backups.php @@ -0,0 +1,20 @@ + + +

    Backups

    +

    A course backup includes all available course material as an archive in a format specific to ATutor. Backups are forwards compatible with future versions of ATutor but may not be backwards compatible with previous versions of ATutor. Once a backup is created, it can be downloaded for safe-keeping, imported into another ATutor installation, used as the basis for a newly created course, and available in the originating course's Backup Manager. Instructor can also create their own course backups from within a course.

    + +

    Creating Backups

    +

    To create a backup, use the Create Backup link in the sub-navigation. The number of backups a single course can keep on the server is defined by the System Preferences Course Backups option.

    + +

    Administrators can create backups for any course, while instructors can only create backups of courses they own.

    + +

    Restoring Backups

    + +

    Restoring a backup as an administrator is similar to restoring a backup as an instructor, with the added option of being able to select which course the backup should be restored into.

    + +

    For details on restoring a backup into a course, see the Backup Manager's Restoring Backups section in the Instructor Documentation.

    + +

    Managing Backups

    +

    Backups can be downloaded to the administrator's hard-drive for safe-keeping by using the Download button. Backups can also be edited or deleted.

    + + diff --git a/documentation/admin/categories.php b/documentation/admin/categories.php new file mode 100644 index 000000000..68dc9690c --- /dev/null +++ b/documentation/admin/categories.php @@ -0,0 +1,6 @@ + + +

    Course Categories

    +

    Categories are used for grouping related courses. This is helpful when viewing courses in the course browser. Courses can be associated with categories when they are created, or at a later time by editing their properties. Course categories can also be associated with Themes if the System Preferences Theme Specific Categories option is enabled.

    + + \ No newline at end of file diff --git a/documentation/admin/configuration.php b/documentation/admin/configuration.php new file mode 100644 index 000000000..e695b8986 --- /dev/null +++ b/documentation/admin/configuration.php @@ -0,0 +1,6 @@ + + +

    Administrator Home

    +

    The Administrator Home page is the first screen after logging in. It displays a linked list of the administrative tools, shows new and pending Instructor Requests, provides the ability to check for the latest version of ATutor by connecting to the atutor.ca website, and a link to fix any content ordering troubles.

    + + \ No newline at end of file diff --git a/documentation/admin/courses.php b/documentation/admin/courses.php new file mode 100644 index 000000000..3e7502794 --- /dev/null +++ b/documentation/admin/courses.php @@ -0,0 +1,6 @@ + + +

    Courses

    +

    An administrator can create and manage courses, shared forums, and course categories without having to login as a course instructor.

    + + diff --git a/documentation/admin/creating_courses.php b/documentation/admin/creating_courses.php new file mode 100644 index 000000000..23353bdf3 --- /dev/null +++ b/documentation/admin/creating_courses.php @@ -0,0 +1,17 @@ + + +

    Creating Courses

    + +

    See Creating Courses documentation for Instructors.

    + +

    In addition, administrators have access to the following properties:

    + +
    +
    Course Quota
    +
    Defines the maximum size of a course. That is, the amount of space each course's file manager can have.
    + +
    Max File Size
    +
    Defines the maximum size allowed for a file being uploaded to a course's file manager.
    +
    +

    Note that Max File Size limitations can not be set higher than that allowed in the PHP settings for the system. The maximum allowable upload size can be increased by editing the values of upload_max_filesize and post_max_size in the system's php.ini configuration file.

    + \ No newline at end of file diff --git a/documentation/admin/creating_themes.php b/documentation/admin/creating_themes.php new file mode 100644 index 000000000..aedc396b5 --- /dev/null +++ b/documentation/admin/creating_themes.php @@ -0,0 +1,6 @@ + + +

    Creating Themes

    +

    The process for creating a theme is basically to export an existing theme from ATutor, import it back into ATutor, then modify the files of the copied theme. Details about creating themes can be found in the themes_readme.txt file found in the /themes directory of your ATutor installation. Also see the comments included in the files of the Default ATutor theme for additional details.

    + + diff --git a/documentation/admin/cron_setup.php b/documentation/admin/cron_setup.php new file mode 100644 index 000000000..0a47346d7 --- /dev/null +++ b/documentation/admin/cron_setup.php @@ -0,0 +1,32 @@ + + +

    Cron Set-Up

    + +

    ATutor operates best with the help of an automated event scheduler, commonly known as a cron job. The cron interval should be set at between 5-30 minutes, depending on server resources. Setting the cron to 10-15 minutes is recommended.

    + +

    The cron is run by requesting a specific ATutor page, and can be initiated by any machine that has an Internet connection and access to the ATutor installation.

    + +

    Notice that the URL being used will be unique for each installation and that for security reasons the requested URL includes a secret six-character alpha-numerica authentication key. The cron will not run if the key is incorrect or missing.

    + +

    The Mail Queue feature requires the cron to be set-up and running correctly before it can be enabled.

    + +

    Unix Setup

    +
      +
    1. Enter your hosts cron utility, either using an existing web interface or from the shell with the command crontab -e.
    2. +
    3. To run the cron every 10 minutes enter one of the following lines into the crontab editor:
      + */10 * * * * wget -q -O /dev/null http://your-server.com/atutor/admin/cron.php?k=SECRET-KEY
      + Or
      + */10 * * * * lynx -dump http://your-server.com/atutor/admin/cron.php?k=SECRET-KEY > /dev/null +

      Replace your-server.com/atutor/ with the full server and path to your ATutor installation.

      +

      Replace SECRET-KEY with the key provided on the Cron Configuration page in your ATutor Administration section.

      +

      Replace 10 with the desired interval.

      +
    4. +
    + +

    Note: If your site uses SSL then replace http with https and you may also need to add --no-check-certificate to wget.

    + +

    Windows et al Setup

    +

    webcron.org offers free web-based cron services and is available in multiple languages.

    + + + \ No newline at end of file diff --git a/documentation/admin/default_preferences.php b/documentation/admin/default_preferences.php new file mode 100644 index 000000000..cc43a653c --- /dev/null +++ b/documentation/admin/default_preferences.php @@ -0,0 +1,7 @@ + + +

    Default Preferences

    + +

    Administrators are able to set the preferences for newly created members by specifying default preferences. Note that the default theme is set in the Themes area, and default language is set in the System Preferences area. Also, Auto-Login is not decided by administrators. Members can alter their settings once they have logged in by going to the Preferences area in the main navigation. For more information, see Preferences in the general help area.

    + + \ No newline at end of file diff --git a/documentation/admin/default_side_menu.php b/documentation/admin/default_side_menu.php new file mode 100644 index 000000000..d4b4a0783 --- /dev/null +++ b/documentation/admin/default_side_menu.php @@ -0,0 +1,7 @@ + + +

    Default Side Menu

    + +

    Administrators are able to set the side menu dropdowns for newly created courses by specifying side menu defaults. Instructors can alter these settings after a course is created by going to Properties under the Manage area. For more information, see Side Menu in the instructor help area.

    + + \ No newline at end of file diff --git a/documentation/admin/default_student_tools.php b/documentation/admin/default_student_tools.php new file mode 100644 index 000000000..bac5995cf --- /dev/null +++ b/documentation/admin/default_student_tools.php @@ -0,0 +1,7 @@ + + +

    Default Student Tools

    + +

    Administrators are able to set the tools that will appear in the main navigation and the home page for newly created courses by specifying student tool defaults. Instructors can alter these settings after a course is created by going to Student Tools area under the Manage tab.

    + + \ No newline at end of file diff --git a/documentation/admin/email_users.php b/documentation/admin/email_users.php new file mode 100644 index 000000000..bd96b9b6d --- /dev/null +++ b/documentation/admin/email_users.php @@ -0,0 +1,6 @@ + + +

    Email Users

    +

    The Email Users feature allows an administrator to send an email to all students, instructors, or both. Unconfirmed and Disabled accounts are not included in the mailing. The email address specified in the System Preferences is used as the reply-to address for the email(s).

    + + \ No newline at end of file diff --git a/documentation/admin/en/index.php b/documentation/admin/en/index.php new file mode 100644 index 000000000..ca04c93f9 --- /dev/null +++ b/documentation/admin/en/index.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/documentation/admin/enrollment.php b/documentation/admin/enrollment.php new file mode 100644 index 000000000..e2be8c66a --- /dev/null +++ b/documentation/admin/enrollment.php @@ -0,0 +1,8 @@ + + +

    Enrollment

    +

    The Enrollment list for a particular course determines which of your students have access to the course content and course management tools. Instructors can create, import and export student lists.

    + +

    To administer members of a course, select the Enrollment tab, then select a course and press the Filter button.

    + + diff --git a/documentation/admin/enrollment_privileges.php b/documentation/admin/enrollment_privileges.php new file mode 100644 index 000000000..c9f30bfbd --- /dev/null +++ b/documentation/admin/enrollment_privileges.php @@ -0,0 +1,8 @@ + + +

    Privileges

    + +

    Students who are enrolled in a course can be assigned course administrative privileges. This allows students to perform actions like managing content, creating and marking tests, managing groups, or moderating forums or the chat. This tool is useful for creating teaching assistants, or for creating multiple instructors for a course. Select the users you wish to give privileges to, and use the Privileges button. Then choose which tools you want each user to have access to and use the Save button.

    + + + diff --git a/documentation/admin/error_logging.php b/documentation/admin/error_logging.php new file mode 100644 index 000000000..e92beecf1 --- /dev/null +++ b/documentation/admin/error_logging.php @@ -0,0 +1,6 @@ + + +

    Error Logging

    +

    Error logging is available to administrators as a trouble shooting tool. Should the system be giving error messages, a daily list of these errors are collected and available for review or to be bundled up and sent to the ATutor team for investigation. When using the atutor.ca support forums, attaching any error logs may be helpful in finding solutions to problems on your system.

    + + diff --git a/documentation/admin/feeds.php b/documentation/admin/feeds.php new file mode 100644 index 000000000..c25e1964f --- /dev/null +++ b/documentation/admin/feeds.php @@ -0,0 +1,6 @@ + + +

    Syndicated Feeds

    +

    Instructors may display syndicated feeds in the side menu of their courses. The choice of feeds available to them is controlled by the administrator. Feeds may be managed by going to the Syndicated Feeds link under the System Preferences tab.

    + + diff --git a/documentation/admin/forums.php b/documentation/admin/forums.php new file mode 100644 index 000000000..ec45b1073 --- /dev/null +++ b/documentation/admin/forums.php @@ -0,0 +1,6 @@ + + +

    Forums

    +

    This section allows administrators to create regular course-specific forums as well as shared cross-course forums. A shared forum is available to all courses specified to use it, allowing users from different courses to communicate with eachother in one forum. Only administrators can create shared forums, though instructors or privileged users in any of the courses sharing a forum can manage its messages.

    + + \ No newline at end of file diff --git a/documentation/admin/fr/index.php b/documentation/admin/fr/index.php new file mode 100644 index 000000000..2656b1faa --- /dev/null +++ b/documentation/admin/fr/index.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/documentation/admin/google_key.php b/documentation/admin/google_key.php new file mode 100644 index 000000000..f892c1005 --- /dev/null +++ b/documentation/admin/google_key.php @@ -0,0 +1,7 @@ + + +

    Google Key

    + +

    For the Web Search module to function, an administrator must first create an account and obtain a license key at google.com/apis and enter it on this page. The google web search can then be used by students as an external embedded service within ATutor.

    + + \ No newline at end of file diff --git a/documentation/admin/importing_themes.php b/documentation/admin/importing_themes.php new file mode 100644 index 000000000..b92096cd1 --- /dev/null +++ b/documentation/admin/importing_themes.php @@ -0,0 +1,8 @@ + + +

    Importing/Exporting Themes

    +

    Themes can be imported into, or exported from, ATutor using the Themes manager in the ATutor administrators' configuration tools. An existing theme can be exported, then imported back into an ATutor installation to create a copy, after which the copy can be modified to create a new theme. Themes can be exported and shared with others. See the Themes page on atutor.ca for a list of available themes, and for a place to share your themes.

    + +

    To import a theme the ./themes/ directory must be writable. On Windows machines using multiple user accounts, that directory will have to be shared to provide write access to it. On Unix machines the command chmod a+rw themes should be used to make the directory writable.

    + + \ No newline at end of file diff --git a/documentation/admin/index.php b/documentation/admin/index.php new file mode 100644 index 000000000..04121b3aa --- /dev/null +++ b/documentation/admin/index.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/documentation/admin/installation.php b/documentation/admin/installation.php new file mode 100644 index 000000000..f69f56d5e --- /dev/null +++ b/documentation/admin/installation.php @@ -0,0 +1,6 @@ + + +

    Installation

    +

    This section describes the requirements and important considerations needed for running ATutor. It also details the steps involved in installing and upgrading an installation.

    + + diff --git a/documentation/admin/instructor_requests.php b/documentation/admin/instructor_requests.php new file mode 100644 index 000000000..33f3d6645 --- /dev/null +++ b/documentation/admin/instructor_requests.php @@ -0,0 +1,10 @@ + + +

    Instructor Requests

    +

    If the System Preferences Allow Instructor Requests option is enabled and the Auto Approve Instructor Requests option is disabled, then pending instructor account requests will be listed on this page.

    + +

    Using the Deny or Approve buttons after selecting an entry will remove it from the list and take the appropriate action. An email message will be sent to the account holder notifying them of the change.

    + +

    Note that the number of pending Instructor Requests is always listed on the Administrator Home page.

    + + \ No newline at end of file diff --git a/documentation/admin/introduction.php b/documentation/admin/introduction.php new file mode 100644 index 000000000..977b8ee41 --- /dev/null +++ b/documentation/admin/introduction.php @@ -0,0 +1,6 @@ + + +

    Introduction

    +

    Welcome to the ATutor Administrator Documentation! This documentation is intended for those who manage ATutor systems. Also see the Instructor Documentation for more about creating and managing courses.

    + + \ No newline at end of file diff --git a/documentation/admin/languages.php b/documentation/admin/languages.php new file mode 100644 index 000000000..8661a5e2d --- /dev/null +++ b/documentation/admin/languages.php @@ -0,0 +1,58 @@ + + +

    Languages

    +

    ATutor can be displayed in many different languages! Through the Langauge Manager completed languages packs can be selected and imported directly from the atutor.ca website.

    + +

    Managing Existing Languages

    +

    Installed languages can be edited, deleted or exported as an ATutor language pack for redistribution. When exporting a language, a download prompt will appear asking to download a zip file of the language pack.

    + +

    Editing the language properties allows you to change the following: +

      +
    • Language Code
    • +
    • Locale
    • +
    • Character Set
    • +
    • Direction
    • +
    • Left to Right, Right to Left
    • +
    • Regular Expression
    • +
    • Language name translated
    • +
    • Language name in English
    • +
    +

    + +

    Note that the default language (as specified in the System Preferences Default Language) cannot be disabled or deleted unless another language has been installed.

    + + +

    Importing Languages

    +

    Language packs can be imported either manually by retreiving the package and then importing it into ATutor, or automatically by having ATutor connect to the atutor.ca language repository directly.

    + +

    To manually import a new language pack:

    +
      +
    1. Visit atutor.ca/atutor/translate/ to download one of the available language packs for your version.
    2. +
    3. Use the Browse... button to find the downloaded language pack.
    4. +
    5. Use the Import button to import the language.
    6. +
    + +

    If your ATutor installation is connected to the Internet and can contact the atutor.ca website, then it will try to retrieve the list remotely. To automatically import a new language pack from within ATutor:

    + +
      +
    1. Select the language you want to import from the drop down.
    2. +
    3. Use the Import button to import the selected language.
    4. +
    + +

    If your installation cannot retrieve the language list from atutor.ca, a message indicating so will be presented rather than a drop down list. In this case you will have to use the manual method described above.

    + + +

    Translating ATutor

    + +

    Administrators have the ability to customize an installation's language. In order to translate a language, +

      +
    1. Set the AT_DEVEL_TRANSLATE constant in /include/vitals.inc.php to '1'
    2. +
    3. Set the session language to the language you wish to translate by using the language selector at the bottom of the screen.
    4. +
    5. Use the Translate button to pop up a translation window.
    6. +
    +

    + +

    You can contribute to the ATutor community by exporting a language pack from your ATutor installation, and attaching it to a message in the atutor.ca Translation Forum. Also see the Translator Documentation for further details about translating ATutor.

    + + + diff --git a/documentation/admin/link-out.gif b/documentation/admin/link-out.gif new file mode 100644 index 0000000000000000000000000000000000000000..ecef0947aa06e62f442a1aa33b6830322fb78c64 GIT binary patch literal 52 zcmZ?wbhEHbWM^PwXkcLY|Nnn;bF<=47Dfgj&;b!383rb9mZrpM)jO^vu3N{%U=09c Cehr@h literal 0 HcmV?d00001 diff --git a/documentation/admin/managing_existing_themes.php b/documentation/admin/managing_existing_themes.php new file mode 100644 index 000000000..0965c0cea --- /dev/null +++ b/documentation/admin/managing_existing_themes.php @@ -0,0 +1,28 @@ + + +

    Managing Existing Themes

    +

    All available themes on an ATutor system are listed in the Administrator's Themes section.

    + +
    +
    Preview
    +
    Use the Preview button to test the theme to make sure it doesn't break. If a previewed theme breaks, simply log-out and login again to restore the default theme. The Preview button can also be used to preview disabled themes. This feature is available in ATutor 1.5.1+.
    + +
    Enable/Disable
    +
    Enabled themes are available to users in their Preferences. Themes can be disabled, helpful if you are modifying a theme. If a student's preferred theme is disabled, the system default theme will be used in its place.
    + +
    Set as Default
    +
    If a theme is set as the Default Theme, it will display for students who have not selected a prefered theme, and it will be displayed on public pages, such as the Login screen or Registration screen.
    + +
    Export
    +
    Any theme can be exported from an ATutor installation to share with others. It can also be imported back into an ATutor installation as a copy, available to be modified for creating a new theme.
    + +
    Delete
    +
    A theme is removed from the system if the Delete button is used. The Default theme can not be deleted.
    +
    + +

    Category Themes

    +

    If there are Course Categories defined and the System Preferences Theme Specific Categories has been enabled, themes can be assigned to categories of courses so they are all displayed with the same look and feel. When defining course categories while Category Themes is enabled, a list of available themes will appear to select from, and assign to each category.

    + +

    Note that when Category Themes has been enabled, users will no longer be able to select themes from their personal preference settings.

    + + \ No newline at end of file diff --git a/documentation/admin/master_student_list.php b/documentation/admin/master_student_list.php new file mode 100644 index 000000000..5f1b61600 --- /dev/null +++ b/documentation/admin/master_student_list.php @@ -0,0 +1,20 @@ + + +

    Master Student List

    +

    If the System Preferences Authenticate Against A Master Student List option is enabled, this page will allow an administrator to manage that list. If enabled, only new registrations that validate against the master list will be successful. The master list is flexible and can be used to validate any two fields, one of which is publicly viewable to Administrators, while the other is hidden. A common use of this feature would be to authenticate students using a previously assigned Student ID & Birth Date combination. Two extra fields will appear on the Registration screen when master list authentication is enabled.

    + +

    Subsequently, when a student registers for an ATutor account on the system, he/she must provide this authenticating information (such as their student ID and Birth Date). Once an account is authenticated and created, the user will then be associated with the appropriate entry in the Master Student List. If Require Email Confirmation Upon Registration is enabled in System Preferences, the user must confirm his/her account using that email before the account is activated.

    + +

    Viewing the Master Student List shows Student ID-Username pairs. Student IDs in the Master Student List that are not associated with any student account are considered to not have been created.

    + +

    Importing Student IDs

    +

    Importing Student IDs into the Master Student List requires a specifically formatted file. This file can be uploaded under the "Upload List" heading.

    + +

    The master list must be imported from a plain text file, where each row in the file contains two fields seperated by a single comma. The first field will be used as the Student ID. The second field will be the PIN or Password which will be encrypted by the ATutor system, once the list is uploaded, so that it cannot be viewed and read by anyone. Those two fields together will be used to authenticate students when creating new accounts. The fields may optionally be enclosed by double quotes. Such a file is known as a CSV file and can be generated manually using a text editor, or by any spreadsheet application (such as MS Excel).

    + +

    In the example below, a student number and a birth date are used to construct a master list:

    +
    "12345", "10/07/54"
    +"12346", "23/04/76"
    +"12347", "30/05/68"
    + + \ No newline at end of file diff --git a/documentation/admin/modules.php b/documentation/admin/modules.php new file mode 100644 index 000000000..32a7f2c60 --- /dev/null +++ b/documentation/admin/modules.php @@ -0,0 +1,12 @@ + + +

    Modules

    +

    Since version 1.5.2, ATutor provides the facility to install, enable, or disable student, instructor, and administrator tools as modules.

    + +

    To install a module it must first be extracted into a unique subdirectory within the ./mods directory of your ATutor installation. It will then be listed on the Install Modules page where more details can be retrieved and the module installed.

    + +

    After extracting a module, be sure to see the readme file in the module's top directory for any additional installation instructions or requirements. See the ATutor Module Development Documentation for information about creating ATutor modules, and review the module files in the Hello World demo module (and other modules) as a model that can be duplicated and modified to quickly add new addon features to an ATutor installation.

    + +

    Visit the ATutor Modules Site for a list of add-on modules for ATutor.

    + + \ No newline at end of file diff --git a/documentation/admin/my_account.php b/documentation/admin/my_account.php new file mode 100644 index 000000000..bd9eec1f2 --- /dev/null +++ b/documentation/admin/my_account.php @@ -0,0 +1,6 @@ + + +

    My Account

    +

    My Account allows the Administrator to change his/her account password, name, or email address.

    + + \ No newline at end of file diff --git a/documentation/admin/new_installation.php b/documentation/admin/new_installation.php new file mode 100644 index 000000000..4901b7b54 --- /dev/null +++ b/documentation/admin/new_installation.php @@ -0,0 +1,46 @@ + + +

    New Installation

    +

    Please review the requirements section before attempting to install ATutor. The latest version of ATutor can always be found on the atutor.ca downloads page.

    + +

    Windows Considerations

    +

    To extract the ATutor .tar.gz archive you will need an application like WinZip or WinRar.

    + +

    Unix Considerations

    +

    To extract the ATutor .tar.gz archive, use the command tar -zxvf ATutor-version_number.tar.gz, which will create a directory called ATutor in your current working directory.

    + +

    Extracting the files on a Windows machine and then uploading them via FTP is not recommended, as it may not preserve the case-sensitive file names.

    + +

    Installing on a Unix machine requires some knowledge of file and directory permissions. You will be required to create a content directory and set permissions for that directory and for the include/config.inc.php file, so that the web server can write to them. The installation will not be successful if the permissions are not correctly set on that file and directory.

    + +

    Changing Unix file permissions from the shell prompt: chmod a+rw filename or chmod a+rwx directoryname.

    + +

    Changing Unix file permissions from an FTP client: Many FTP clients allow you to change a file's permissions. The option may be labled as "Unix Permissions", "CHMOD", or simply as "Properties" or "Attributes" and will display a window with Read, Write, and Execute checkboxes for Owner, Group, and World; checking the appropriate boxes will change that file's permissions. In our case we need the include/config.inc.php to be Readable and Writeable by World, and the content directory to be Readable, Writeable, and Executable by World.

    + +

    Installation Procedure

    +

    Extract the downloaded archive using the method specified for your system (either Windows or Unix). Open a web browser and enter the address to your new ATutor installation, http://your_server.com/path_to_atutor/ATutor/, then follow the step-by-step instructions:

    + +
      +
    1. Terms of Use
      + The usage of ATutor is restricted by the GNU General Public License (GPL). Your agreement with the GPL is required if you wish to use ATutor. See the Licensing section for more details.
    2. + +
    3. Database
      + Enter the required details needed to connect to your MySQL database. The optional Table Prefix (e.g. "AT_") allows ATutor to share an existing database with other applications and tables. The ATutor installation script will attempt to create the database specified, if it does not already exist. This requires that your MySQL user account has permission to create databases and permission to create tables. If this step fails, contact your system administrator to have your MySQL account upgraded to allow creation of new databases, or ask your administrator to create the database for you.
    4. + +
    5. Accounts & Preferences
      + The Super Administrator account is used for managing your ATutor installation. The Super Administrator can also create additional Administrators each with their own privileges and roles once ATutor is installed. The personal account can be used to enroll in or create courses.
    6. + +
    7. Content Directory
      + Create a content directory, preferably outside your web server's document directory for added security, and set permissions as described above. On a Unix machine you will need to manually change the permissions on the listed files and directories in this step. No action is usually required on a Windows server, though in some circumstances Windows users may need to adjust the properties of the specified files and directories to make them writable. Copy the path of the created directory into the text box provided. Ensure that there are no shortcuts or symbolic links in the path.
    8. + +
    9. Save configuration
      + Before reaching the final step the include/config.inc.php file needs to be writable, otherwise an error will appear. Follow the instructions on the screen if the file permissions need to be changed. If the file does not exist in the include/ directory, then you will need to create an empty text file with the filename config.inc.php.
    10. + +
    11. Anonymous Usage Collection
      + To assist the development team in serving the ATutor community, you can anonymously submit basic system information to the atutor.ca server.
    12. + +
    13. Done!
      + ATutor installation has been successful and you may now log-in with your personal account or the administrator account created in Step 3.
    14. +
    + + \ No newline at end of file diff --git a/documentation/admin/pages.inc.php b/documentation/admin/pages.inc.php new file mode 100644 index 000000000..c9f43cff9 --- /dev/null +++ b/documentation/admin/pages.inc.php @@ -0,0 +1,38 @@ + \ No newline at end of file diff --git a/documentation/admin/requirements_recommendations.php b/documentation/admin/requirements_recommendations.php new file mode 100644 index 000000000..fcd6a72d8 --- /dev/null +++ b/documentation/admin/requirements_recommendations.php @@ -0,0 +1,75 @@ + + +

    Requirements & Recommendations

    +

    The first step when installing or upgrading ATutor is to check if the minimum requirements are met. The following describes those checks.

    + +

    File Integrity

    +

    The Case Sensitivity check verifies that file names were not converted to lower-case during the extraction process. This is not an issue on case-insensitive operating systems like MS Windows, but is an issue on case-sensative ones like Linux.

    + +

    Web Server

    +

    The ATutor development and testing processes are done primarily on Apache 1.3 and Apache 2 (using pre-forking), and as such we strongly recommend them for production environments. ATutor has been successfully installed on other web servers, including, Zeus, lighttpd, Abyss, Zazou Mini Web Server, Microsoft IIS, and Jana-Server.

    + +

    The web server can be configured with SSL for added security or to use a non-standard port and ATutor will function without modification.

    + + +

    PHP

    +

    ATutor is written in the PHP language. The PHP configuration file contains many configuration settings that can be changed. The following are the minimum requirements needed to install and use ATutor.

    + +
    +
    PHP 4.3.0+
    +
    PHP 4.3.0 or higher is required. Version 5.2.0 or higher is recommended.
    + +
    zlib
    +
    Zlib support must be enabled in PHP; It is used for compressing and uncompressing ZIP files.
    + +
    mysql
    +
    MySQL support must be enabled in PHP.
    + +
    safe_mode = Off
    +
    safe_mode must be disabled in PHP. ATutor cannot function with the restrictions enforced when safe_mode is enabled.
    + +
    file_uploads = On
    +
    File uploads support must be enabled in PHP.
    + +
    upload_max_filesize >= 2 MB
    +
    This option specifies the maximum size of files that can be uploaded to ATutor.
    + +
    post_max_size >= 8 MB
    +
    This value must be larger than the upload_max_filesize.
    + +
    sessions
    +
    Sessions support must be enabled in PHP.
    + +
    session.auto_start = 0
    +
    session.auto_start must be disabled in PHP.
    + +
    session.save_path
    +
    session.save_path must be set to a real path that can store session data.
    + +
    . in include_path
    +
    . must be in the list of paths in the include_path option.
    +
    + + +

    Additionally, the following php.ini configuration settings are recommended:

    +
    display_errors          = Off
    +arg_separator.input     = ";&"
    +register_globals        = Off
    +magic_quotes_gpc        = Off
    +magic_quotes_runtime    = Off
    +allow_url_fopen         = On
    +allow_url_include       = Off
    +register_argc_argv      = Off
    +zlib.output_compression = On
    +session.use_trans_sid   = 0
    +
    + +

    MySQL

    +

    Currently ATutor only supports the MySQL database. MySQL 4.0.2 or higher, or 4.1.10 or higher is required. MySQL 4.0.20 and higher or 4.1.10 and higher is recommended, especially if you are using languages that would benefit from being represented in the UTF-8 character set. As ATutor moves towards utilizing UTF-8 throughout, support for older version of MySQL will be removed.

    + +

    A database user account with database creation privileges is required if your database does not already exist. That same user will then need table creation privileges for the chosen database. See the MySQL chapter How the Privilege System Works for additional information.

    + +

    Web Browser

    +

    ATutor makes use of many new HTML features that are only supported in recent web browsers. Though ATutor is designed to function effectively in older browsers we strongly recommend using the latest version of your favorite browser. We recommend FireFox for either Windows, *nix or Mac OS X.

    + + \ No newline at end of file diff --git a/documentation/admin/styles.css b/documentation/admin/styles.css new file mode 100644 index 000000000..b6bae62be --- /dev/null +++ b/documentation/admin/styles.css @@ -0,0 +1,131 @@ +pre { + font-family: trebuchet ms, Arial, sans-serif; +} + +body{ + background-color: #fafafa; + font-family: Arial,sans-serif; + font-size: small; +} +h1,h2,h3,p, table, ul { + font-family: "Trebuchet MS",Verdana,Arial,sans-serif; +} +h1 { + border-bottom: 1px dashed #cfcfcf; + margin-left: -5px; + padding-left: 15px; + margin-right: -5px; + padding-right: 15px; +} +h2{ + color: #666; + border-bottom: 1px dashed #cfcfcf; + margin-left: -5px; + padding-left: 15px; + margin-right: -5px; + padding-right: 15px; +} +p{padding-bottom:1em} + +a { + text-decoration: none; + border-bottom: 1px solid; + font-weight: bold; +} +a:hover { + border-bottom: 0px; +} +td,th { + font-size: 85%; +} + +kbd { + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; + border-color: #edd #baa #baa #eed; + white-space: pre; +} + +code { + font-family: "Trebuchet MS",Verdana,Arial,sans-serif; + background-color: #efefef; + padding: 0px 4px 0px 4px; + border-width: 1px 1px 1px 1px; + border-style: solid; + border-color: #edd #baa #baa #eed; +} + + +div#toc { + color: #f0f0f0; + padding-bottom: 15px; +} + +div#toc ul { + list-style: none; +} +div#toc li { + padding-top: 2px; + padding-bottom: 0px; +} + +ol { + margin-top: 0px; +} + +ol li { + padding-bottom: 3px; +} + +dl { + margin: 0 10px +} +dl dd { + padding-top: 0px; + padding-left: 5px; + margin-left: 5%; + border-left: 1px solid #d0d0d0; + margin-bottom: 10px; +} + +acronym { + cursor: help; +} + +a[href*="http"] { + padding-right: 8px; + background-image: url('link-out.gif'); + background-repeat: no-repeat; + background-position: right 4px; + margin-right: 2px; +} + +div#nav-links { + margin-left: 20px; + margin-right: 20px; + margin-bottom: 20px; +} + +div#nav-links a { + color: black; + text-decoration: none; + border-bottom: 1px solid; +} + +pre { + font-family: Courier, monospace; + background-color: #EEEEFF; + padding: 5px; + margin-left: 20px; + color:#761596; + margin-top: 0px; + width: 50%; + font-size: smaller; +} + +div.seq { + font-size: smaller; + padding: 5px; + border: 1px dashed #cfcfcf; +} \ No newline at end of file diff --git a/documentation/admin/system_preferences.php b/documentation/admin/system_preferences.php new file mode 100644 index 000000000..54eb8b0e2 --- /dev/null +++ b/documentation/admin/system_preferences.php @@ -0,0 +1,78 @@ + + +

    System Preferences

    +
    +
    Site Name
    +
    The name of the course server's website. This name will appear at the top of all the public pages, in the web browser's title bar, and as the From name when sending non-personal emails.
    + +
    Home URL
    +
    This will be the web address for the 'Home' link in the public area. Leave empty to remove this link.
    + +
    Default Language
    +
    The default language to use if the client's browser settings cannot be detected. Must be one of the languages already installed. See the Languages section on installing and managing existing languages.
    + +
    Contact Email
    +
    The reply address used for emails sent for instructor requests and other system emails.
    + +
    Time Zone
    +
    Changing ATutor's time zone to one other than that specific by the server requires MySQL 4.1.3+. Additionally, MySQL's time zone tables must be loaded; see MySQL Server Time Zone Support for additional details. This option is available in ATutor 1.5.3.3+.
    + +
    Maximum File Size
    +
    Maximum allowable file size in Bytes that can be uploaded to the course's File Manager. This does not override the value set for upload_max_filesize in php.ini.
    + +
    Maximum Course Size
    +
    Total maximum allowable course size in Bytes. This is the total amount of space a course's File Manager can use.
    + +
    Maximum Course Float
    +
    How much a course can be over its Maximum Course Size limit while still allowing a file to upload or import. Makes the course limit actually be Max Course Size + Max Course Float. When Max Course Float is reached, no more uploads will be allowed for that course until files are deleted and the course's space usage falls under the Maximum Course Size.
    + +
    Display Name Format
    +
    The Display Name Format option controls how non-administrator users' names appear. This option is available in ATutor 1.5.4+.
    + +
    Authenticate Against A Master Student List
    +
    Whether or not to enable Master Student List authentication. If enabled, only new accounts that validate against the master list will be created. See the Master Student List section for additional details on using this feature.
    + +
    Require Email Confirmation Upon Registration
    +
    If email confirmation is enabled, before they can login, registrants must confirm their registration by replying to a message sent to the email address they registered with.
    + +
    Allow Instructor Requests
    +
    If enabled, students will be allowed to request that their account be upgraded to an instructor account. Instructor account requests must be approved by administrators using the Instructor Requests section. If disabled then the Create Course link used for requesting an instructor account will be removed and only the administrators will be able to create instructor accounts.
    + +
    Instructor Request Email Notification
    +
    If enabled, and if Allow Instructor Requests is enabled, then an email notification message will be sent to the Contact Email each time a new instructor account request is made. This does not affect whether or not instructor requests can be made, only whether or not a notification message is sent out each time.
    + +
    Auto Approve Instructor Requests
    +
    If Allow Instructor Requests is enabled, then existing students requesting instructor accounts will be upgraded automatically, bypassing the approval process. Additionally, any newly created accounts will be created as instructors rather than as students. Useful for setting up a demo version of ATutor.
    + +
    Theme Specific Categories
    +
    Theme specific categories allows for the association between themes and categories. Courses belonging to a specific category will always be presented using that category's associated theme. This option disables the personalised theme preference. Use the Categories section to create and manage course categories, and the Themes section to install and manage themes.
    + +
    User Contributed Handbook Notes
    +
    If enabled will allow anyone viewing the Handbook to contribute notes. User contributed notes must then be approved by an administrator by logging in on the main Handbook page. This option is available in ATutor 1.5.1+.
    + +
    Illegal File Extensions
    +
    A list of all the file types, by extension, that are not allowed to be stored on the server. Any file that is being imported or uploaded with an extension in the specified list will be ignored and not saved. The list must contain only the file extensions seperated by commas without the leading dot.
    + +
    Cache Directory
    +
    Where cached data is stored. On a Windows machine the path should look like C:\Windows\temp\, while on Unix it should look like /tmp/cache/. On some Linux/Unix based systems, a shared memory device can also be used /dev/shm/ if it is available. Leave empty to disable caching.
    + +
    Course Backups
    +
    The maximum number of backups that can be stored per course. The stored backups do not count towards the course's Max Course Size.
    + +
    Number of Days to Keep Copied Sent Messages for
    +
    All sent messages are copied to the sender's Sent Messages area. This option specifies the number of days old a copied message has to be before it is automatically deleted. The recipient's message is not affected.
    + +
    Check for ATutor Updates Automatically
    +
    If enabled, ATutor will check the atutor.ca web site for updates whenever the administrator logs in. This option is available since ATutor 1.5.2.
    + +
    Maintain File Storage Version Control
    +
    If enabled, every file revision in the File Storage area will be saved. If space is a concern, the administrator may wish to disable this feature.
    + +
    Enable Mail Queue
    +
    The administrator may wish to set up a cron job (automated event scheduler) for email. If enabled, and if the cron has been set up, system email will be sent out at a certain time instead of immediately. This can help speed up email capable features where a slower mail server is being used.
    + +
    Automatically Install New Language Packs
    +
    If enabled, and if the cron job (automated event scheduler) has been set up, new language packs published on atutor.ca will be imported automatically This option is available in ATutor 1.5.3.2+.
    +
    + + \ No newline at end of file diff --git a/documentation/admin/themes.php b/documentation/admin/themes.php new file mode 100644 index 000000000..e2a23b1f0 --- /dev/null +++ b/documentation/admin/themes.php @@ -0,0 +1,8 @@ + + +

    Themes

    +

    Themes are used for changing the look and feel of an ATutor installation. Themes can be set as a personal preference or forced to display by default using the System Preferences Theme Specific Categories option.

    + +

    ATutor's architecture allows for the separation of presentation elements from code or logic elements. As a result, it is easy for any XHTML and CSS proficient person to create customized themes and layouts without having to know anything about PHP or the inner workings of ATutor itself.

    + + \ No newline at end of file diff --git a/documentation/admin/troubleshooting.php b/documentation/admin/troubleshooting.php new file mode 100644 index 000000000..2ee6a39b0 --- /dev/null +++ b/documentation/admin/troubleshooting.php @@ -0,0 +1,30 @@ + + +

    Troubleshooting

    +

    A variety of strategies are available for troubleshooting an ATutor installation that may not be functioning properly.

    +
    +
    AT_DEVEL
    +
    Near the top of the include/vitals.inc.php file, set the value of AT_DEVEL to true. This will display your session variables at the bottom of the screen. It will also display the variable names associated with all feedback messages, so they are easier to find through the language manager if you wish to modify their language. The debug() function will also become available, allowing testers to print out any type of variable in an easily readable format.
    + +
    debug(mixed variable [, string title])
    +
    It is possible to display the value of variables using debug(). variable is the PHP variable to output. title is an optional title that can be printed inside the debugging box to easily identify which variable is being outputted. +
    debug($_SESSION); // print current session variables
    +debug($_REQUEST); // print all GET, POST, and COOKIE variables
    +
    + +
    +
    Error Logging
    +
    View the error log through the System Preferences section. There may be information in the error reports that can help you identify where or how an error occured. The output from the error log can be sent to the ATutor team to aid them in finding a solution to your problem.
    + +
    phpinfo()
    +
    Often, system problems can be fixed by reviewing the phpinfo page. This will show all of the configuration options for your system. Review the Requirement & Recommendations for different values that should be set and displayed in the phpinfo output. Below is the contents of a phpinfo file. Viewing this page in a browser will show the system variables.

    +
    +<?php
    +phpinfo();
    +?>
    +
    +
    +

    Also see the Developer Documentation for details about modifying the source code.

    + +
    + \ No newline at end of file diff --git a/documentation/admin/upgrading.php b/documentation/admin/upgrading.php new file mode 100644 index 000000000..410250ea1 --- /dev/null +++ b/documentation/admin/upgrading.php @@ -0,0 +1,48 @@ + + +

    Upgrading an Existing ATutor Installation

    +

    Considerations Before Upgrading

    + +

    Note that Release Candidates (RC) and nightly build upgrades are not supported using this method and that depending on the size of the old courses, some steps of the upgrade may require considerable time to complete (in particular steps 2 and 6).

    + +

    Be sure that Language Packs you have installed on your old version of ATutor are available for the new version, or be prepared to translate the missing language. The old language will be removed during upgrade. If they are not available, you might volunteer to help finish any remaining language that needs to be translated for these languages. See the Translator Documentation for more details. If you have made custom changes the the language, you may wish to export the customized language using the language manager. +

    If you have Custom Themes created, export those before upgrading, then import them back into the new version of ATutor after the upgrade is complete (you may need to make a few adjustment after reimporting the custom themes if there have been changes in the ATutor)

    +

    If you have Extra Modules installed, be sure the modules are either compatible, or are available for the new version. Modules must be reinstalled after an upgrade.

    +

    Also be sure the System Requirements are still met.

    + + +

    Before upgrading, rename your old ATutor directory. Download the latest version of ATutor and extract the new version into the same directory that the old one was in. Example: If the old ATutor installation was in /htdocs/ATutor and renamed to /htdocs/ATutor_old, then the new ATutor installation should be in /htdocs/ATutor, such that both the old and new installations are at the same directory level. On Windows you may use WinZip or WinRar, while on Unix use the command tar -zxvf ATutor-version_number.tar.gz. Once extracted, an ATutor directory will be created alongside your old ATutor directory. Open a web browser and enter the address to your new installation, http://your_server.com/path_to_atutor/ATutor/, then follow the step-by-step instructions.

    + +

    Steps for Upgrading ATutor

    +

    Important: It is highly recommended that you backup your old ATutor database before attempting an upgrade.

    + + +

    The following eight steps describe the upgrade process as they are presented by the ATutor installer:

    +
      +
    1. Locate Old Version
      + Specify the directory name of the old ATutor installation you wish to upgrade (e.g. ATutor_old). The new and old ATutor directories must be at the same directory level.
    2. + +
    3. Database
      + The upgrade will use the old version's settings to connect to the database and then update the old database tables with any changes to bring them up to date with the new version.
    4. + +
    5. Preferences
      + In some cases, the newer version will introduce new configuration options and preferences that have to be set or confirmed. Review the Preferences and modify them if necessary.
    6. + +
    7. Directories
      + Create a content directory , preferably outside your web server's document directory for added security, and set permissions to make the content directory writable (chmod a+rwx content). On a Unix machine you will need to manually change the permissions on the content directory during this step, if you are using a directory other than the one used in the version of ATutor being upgraded. No action is usually required on a Windows server, though in some circumstances Windows users may need to adjust the properties of the specified files and directories to make them writable. Copy the path of the directory into the text box provided. Ensure there are no shortcuts (Windows), or symbolic links (Unix) are contained in the path. The path can be the same as that to the content directory use in the version being upgraded from if the directory is outside the old ATutor installation.
    8. + +
    9. Save configuration
      + Before reaching the final step the include/config.inc.php file needs to be writable, otherwise an error will appear. Follow the instructions on the screen if the file permissions need to be changed (chmod a+rwx include/config.inc.php). Once your upgrade is complete and you have confirmed it was successfuly, you should set the configuration file back to read only to secure it (chmod a-w include/config.inc.php)
    10. + +
    11. Content Files
      + All the old course content files and chat messages will be copied over to the new installation. Depending on the size of your old installation, this process may take a few seconds to several minutes or more to complete.
    12. + +
    13. Submit Usage Information
      + To assist the development team in serving the ATutor community, submit some basic information collected about the system you are running. All information is private. Though you are encouraged to list the location of your ATutor installation, you may remain anonymous by choosing not to submit the URL to your ATutor server along with the system information during this step.
    14. + +
    15. Done!
      + ATutor upgrade has been successful and you may now log-in with your personal account or your administrator account.
    16. + +
    + + \ No newline at end of file diff --git a/documentation/admin/users.php b/documentation/admin/users.php new file mode 100644 index 000000000..0ae0ddf71 --- /dev/null +++ b/documentation/admin/users.php @@ -0,0 +1,28 @@ + + +

    Users

    + +

    The Users section allows managment of students, instructors, and administrators. Note that administrators are not +considered regular users of the system; an administrator account can not normally be used to login to a course. They can however login temporarily as the course instructor, using the View button in the administrator's Courses listing. For the +purposes of documentation the term "users" will be reserved for any account type that is not an administrator.

    + +

    There are four types of user accounts that can exist in an ATutor installation, as defined by their Status: +

    +
    Disabled
    +
    Only administrators may disable an account. Disabled accounts cannot login to the ATutor installation, and will not appear in a course's Enrollment Manager.
    +
    Unconfirmed
    +
    Unconfirmed accounts are created only when the System Preferences Require Email Confirmation Upon Registration option is enabled.
    +
    Student
    +
    A regular account which can enroll, but not create courses.
    + +
    Instructor
    +
    A regular account which can enroll as well as create courses.
    +
    +

    + +

    Creating User Accounts

    + +

    Administrators can manually add users to the system by using Create User Account. Manually created accounts are automatically confirmed and the account status is set to Student, Instructor, or disabled as choosen in the Account Status field of the user account creation form.

    +

    User accounts can also be created by individuals using the Registration form available through the public pages of ATutor. Instructors can also generate user accounts by importing a course list in the Enrollment Manager.

    + + diff --git a/documentation/approve_note.php b/documentation/approve_note.php new file mode 100644 index 000000000..46b833e50 --- /dev/null +++ b/documentation/approve_note.php @@ -0,0 +1,59 @@ + \ No newline at end of file diff --git a/documentation/common/body_footer.inc.php b/documentation/common/body_footer.inc.php new file mode 100644 index 000000000..2c63d8dc2 --- /dev/null +++ b/documentation/common/body_footer.inc.php @@ -0,0 +1,86 @@ + + + + +
    + + + +

    +
    + + 0): ?> + +
    +
    + + + +
    +

    +

    +
    + + +
    + + + +
    + + :
    + + + + : + +
    + +
    +
    + All text is available under the terms of the GNU Free Documentation License. +
    + + \ No newline at end of file diff --git a/documentation/common/body_header.inc.php b/documentation/common/body_header.inc.php new file mode 100644 index 000000000..6b4050695 --- /dev/null +++ b/documentation/common/body_header.inc.php @@ -0,0 +1,90 @@ + + + + + <?php get_text('atutor_documentation'); ?> + + + + + + +
    + + :
    + + + + : + +
    + + +
    + +
    + + + +
    + +
    + \ No newline at end of file diff --git a/documentation/common/folder.gif b/documentation/common/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4802fb356f11484f75bdbd54e7ca7eee3b99008 GIT binary patch literal 65 zcmZ?wbhEHbR1O)v5|6lPZ3nNHC2SkA68JL7x_%ekRwPskmZ_A9{ MYxT*qm6gF703$yT_y7O^ literal 0 HcmV?d00001 diff --git a/documentation/common/fr/text.php b/documentation/common/fr/text.php new file mode 100644 index 000000000..5bb89305e --- /dev/null +++ b/documentation/common/fr/text.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/documentation/common/frame_header.php b/documentation/common/frame_header.php new file mode 100644 index 000000000..70fe61f01 --- /dev/null +++ b/documentation/common/frame_header.php @@ -0,0 +1,77 @@ + + + + + + <?php get_text('atutor_documentation'); ?> + + + +
    + + + + + | + + | + + +
    + + \ No newline at end of file diff --git a/documentation/common/frame_toc.php b/documentation/common/frame_toc.php new file mode 100644 index 000000000..170e89a02 --- /dev/null +++ b/documentation/common/frame_toc.php @@ -0,0 +1,203 @@ +'; + foreach ($pages as $page_key => $page_value) { + echo '
  • '; + if (is_array($page_value)) { + echo ''.$_pages[$page_key].''; + hb_print_toc($page_value, $section); + } else { + echo ''.$_pages[$page_value].''; + } + echo '
  • '; + } + echo ''; +} +?> + + + + + <?php get_text('handbook_toc'); ?> + + + + + + array( + 'requirements_recommendations.php', + 'new_installation.php', + 'upgrading.php' + ), + 'configuration.php' => array('my_account.php'), + 'system_preferences.php' => array( + 'default_preferences.php', + 'languages.php', + 'themes.php' => array( + 'importing_themes.php', + 'managing_existing_themes.php', + 'creating_themes.php' + ), + 'error_logging.php', + 'feeds.php', + 'google_key.php', + 'cron_setup.php' + ), + 'enrollment.php' => array( + 'enrollment_privileges.php', + ), + 'users.php' => array( + 'instructor_requests.php', + 'master_student_list.php', + 'email_users.php', + 'administrators.php' + ), + 'courses.php' => array( + 'forums.php', + 'creating_courses.php', + 'default_student_tools.php', + 'default_side_menu.php', + 'backups.php', + 'categories.php' + ), + 'modules.php', + 'troubleshooting.php', + ); + + hb_print_toc($pages, 'admin'); + +} else if ($section == 'instructor'){ + $pages = array( + 'introduction.php' => array('creating_courses.php'), + 'announcements.php', + 'assignments.php', + 'backups.php' => array( + 'creating_restoring.php', + 'downloading_uploading.php', + 'editing_deleting.php' + ), + 'chat.php', + 'content.php' => array( + 'creating_editing_content.php' => array( + 'content_edit.php', + 'content_properties.php', + 'glossary_terms.php', + 'content_preview.php', + 'accessibility.php' + ), + 'content_packages.php', + 'content_usage.php', + 'tile_repository.php', + 'scorm_packages.php' + ), + 'course_email.php', + 'enrollment.php' => array( + 'enrollment_privileges.php', + 'enrollment_alumni.php', + 'enrollment_course_list.php' + ), + 'file_manager.php' => array( + 'managing_files_folders.php', + 'extracting_zip_archives.php' + ), + 'forums.php' => array( + 'managing_threads.php' => array('managing_posts.php') + ), + 'faq.php', + 'glossary.php', + 'groups.php', + 'links.php', + 'polls.php', + 'properties.php' => array('authenticated_access.php', 'delete_course.php'), + 'reading_list.php', + 'statistics.php', + 'student_tools.php' => array('side_menu.php'), + 'tests_surveys.php' => array( + 'creating_tests_surveys.php', + 'question_database.php' => array('creating_questions.php'), + 'question_categories.php', + 'edit_delete_tests.php', + 'preview.php', + 'add_questions.php', + 'student_submissions.php', + 'test_statistics.php' + ), + 'feeds.php', + 'web_search.php', + ); + hb_print_toc($pages, 'instructor'); +} else { + + $pages = array( + 'introduction.php', + 'login.php', + 'register.php', + 'browse_courses.php', + 'password_reminder.php', + 'my_start_page.php' => array( + 'my_courses.php' => array('create_course.php'), + 'profile.php', + 'preferences.php', + 'inbox.php' + ), + 'inside_course.php' => array( + 'export_content.php', + 'packages.php', + 'tile.php', + 'file_storage.php' + ) + ); + hb_print_toc($pages, 'general'); +} ?> + + + \ No newline at end of file diff --git a/documentation/common/link-out.gif b/documentation/common/link-out.gif new file mode 100644 index 0000000000000000000000000000000000000000..ecef0947aa06e62f442a1aa33b6830322fb78c64 GIT binary patch literal 52 zcmZ?wbhEHbWM^PwXkcLY|Nnn;bF<=47Dfgj&;b!383rb9mZrpM)jO^vu3N{%U=09c Cehr@h literal 0 HcmV?d00001 diff --git a/documentation/common/paper.gif b/documentation/common/paper.gif new file mode 100644 index 0000000000000000000000000000000000000000..3e8a06df55e5c167ede6fd7c7967468a5d0c2562 GIT binary patch literal 65 zcmZ?wbhEHb + + + + + <?php get_text('doc_title'); ?> + + + +'; +get_text('back_to_chapters'); +echo ''; + +foreach ($_pages as $file => $title) { + if (($req_lang != 'en') && (file_exists('../'.$section.'/'.$req_lang.'/'.$file))) { + $string = file_get_contents('../'.$section.'/'.$req_lang.'/'.$file); + } else if ($req_lang != 'en') { + ?> +
    + +
    + ]*)>([^<]+)#is', + '#]*)>([^<]+)#i'); + + $replacements = array('$3', + '$3 [$1]'); + + echo preg_replace($patterns, $replacements, $string); +} +?> + + \ No newline at end of file diff --git a/documentation/common/search.php b/documentation/common/search.php new file mode 100644 index 000000000..66c25b82e --- /dev/null +++ b/documentation/common/search.php @@ -0,0 +1,83 @@ + + + + + + <?php get_text('atutor_documentation'); ?> + + + + +'; +get_text('back_to_contents'); +echo ''; + +if ($_GET['query']) { + $_GET['query'] = str_replace(',', ' ', $_GET['query']); + $_GET['query'] = str_replace('"', '', $_GET['query']); + + if (strlen($_GET['query']) > 3) { + $_GET['query'] = strtolower($_GET['query']); + + $search_terms = explode(' ', $_GET['query']); + + $results = array(); + if ($req_lang == 'en') { + $files = glob('../'.$section . '/*.php'); + } else { + $files = glob('../'.$section . '/'.$req_lang.'/*.php'); + } + if (is_array($files)) { + foreach ($files as $filename) { + + $count = 0; + $filename = basename($filename); + $contents = strtolower(file_get_contents('../'.$section.'/'.$filename)); + foreach ($search_terms as $term) { + $term = trim($term); + if ($term) { + $count += substr_count($contents, $term); + } + } + if ($count) { + $results[$filename] = $count; + } + } + } + + if ($results) { + arsort($results); + echo '
      '; + foreach ($results as $file => $count) { + echo '
    1. '.$_pages[$file].'
    2. '; + } + echo '
    '; + } else { + echo '

    '; + get_text('no_results_found'); + echo '

    '; + } + } else { + echo '

    '; + get_text('search_term_longer_3_chars'); + echo '

    '; + } +} +?> + + \ No newline at end of file diff --git a/documentation/common/styles.css b/documentation/common/styles.css new file mode 100644 index 000000000..49b48ae6a --- /dev/null +++ b/documentation/common/styles.css @@ -0,0 +1,161 @@ +pre { + font-family: Verdana, Arial, sans-serif; +} +body{ + background-color: #fafafa; + font-family: Verdana, Arial,sans-serif; + font-size: small; + line-height:150%; +} +h1,h2,h3,p, table, ul { + font-family: Verdana,Arial,sans-serif; +} +h1 { + border-bottom: 1px dashed #cfcfcf; + margin-left: -5px; + padding-left: 15px; + margin-right: -5px; + padding-right: 15px; +} +h2{ + color: #666; + border-bottom: 1px dashed #cfcfcf; + margin-left: -5px; + padding-left: 15px; + margin-right: -5px; + padding-right: 15px; +} +a { + text-decoration: none; + border-bottom: 1px solid; + font-weight: bold; +} +a:hover { + border-bottom: 0px; +} +td,th { + font-size: 85%; +} + +kbd { + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; + border-color: #edd #baa #baa #eed; + white-space: pre; +} + +code { + font-family: Verdana,Arial,sans-serif; + background-color: #efefef; + padding: 0px 4px 0px 4px; + border-width: 1px 1px 1px 1px; + border-style: solid; + border-color: #edd #baa #baa #eed; +} + + +div#toc { + color: #f0f0f0; + padding-bottom: 15px; +} + +div#toc ul { + list-style: none; +} +div#toc li { + padding-top: 2px; + padding-bottom: 0px; +} + +ol { + margin-top: 0px; +} + +ol li { + padding-bottom: 3px; +} + +dl { + margin: 0 10px +} +dl dd { + padding-top: 0px; + padding-left: 5px; + margin-left: 5%; + border-left: 1px solid #d0d0d0; + margin-bottom: 10px; +} + +dd p { + margin-top: 0px; + margin-bottom: 0px; +} +dd p:last-child { + padding-bottom: 0px; +} +acronym { + cursor: help; +} +a[href*="http"] { + padding-right: 8px; + background-image: url('link-out.gif'); + background-repeat: no-repeat; + background-position: right 4px; + margin-right: 2px; +} +div#nav-links { + margin-left: 20px; + margin-right: 20px; + margin-bottom: 20px; +} +div#nav-links a { + color: black; + text-decoration: none; + border-bottom: 1px solid; +} +pre { + font-family: Courier, monospace; + background-color: #eef; + padding: 5px; + margin-left: 20px; + color:#761596; + margin-top: 0px; + width: 50%; + font-size: smaller; +} +div.seq { + font-size: smaller; + padding: 5px; + border: 1px dashed #cfcfcf; +} +div.tag { + margin: 10px; + font-size: smaller; + padding: 5px; + line-height: 110%; + color: #cfcfcf; +} +div.add-note { + background-color: #f0f0f0; + padding: 5px; +} +div.add-note h3 { + margin-top: 0px; + margin-bottom: 0px; +} +div.note { + background-color: #fefefe; + padding: 5px; + margin-bottom: 5px; +} +div.note h4 { + margin-top: 0px; + margin-bottom: 0px; +} +div.note h5 { + margin-top: 0px; + margin-bottom: 0px; + float: right; + font-weight: normal; +} \ No newline at end of file diff --git a/documentation/common/text.php b/documentation/common/text.php new file mode 100644 index 000000000..8db03550b --- /dev/null +++ b/documentation/common/text.php @@ -0,0 +1,43 @@ +enabled. Administrator Login.'; +$text['doc_title'] = 'ATutor Handbook'; +$text['doc_welcome'] = 'Welcome to the official ATutor Handbook!'; +$text['doc_unapproved_notes'] = 'Un-Approved User Contributed Notes'; +$text['doc_approved_confirm'] = 'Are you sure you want to approve this note?'; +$text['doc_approve'] = 'Approve'; +$text['doc_delete'] = 'Delete'; +$text['doc_delete_confirm'] = 'Are you sure you want to delete this note?'; +$text['doc_no_notes'] = 'There are no un-approved user contributed notes.'; +$text['doc_logged_in'] = 'Logged in as notes moderator. Log-out.'; +$text['user_contributed_notes'] = 'User Contributed Notes'; +$text['no_notes_on_page'] = 'There are no user contributed notes for this page.'; +$text['delete'] = 'Delete'; +$text['are_you_sure_delete_note'] = 'Are you sure you want to delete this note?'; +$text['add_note'] = 'Add Note'; +$text['add_note_blurb'] = 'If you ask a question, report a bug, or request a feature, your note will not be posted. Notes must be approved by an administrator before they are posted.'; +$text['email_name'] = 'Your email address (or name)'; +$text['your_note'] = 'Your note'; +$text['note_added'] = 'Your note has been saved. It will appear only after it has been approved by an administrator.'; +$text['back_to_chapters'] = 'Back to Chapters'; +?> \ No newline at end of file diff --git a/documentation/common/vitals.inc.php b/documentation/common/vitals.inc.php new file mode 100644 index 000000000..f306d3f2a --- /dev/null +++ b/documentation/common/vitals.inc.php @@ -0,0 +1,167 @@ + $v) { + if (!in_array($k, $noUnset) && isset($GLOBALS[$k])) { unset($GLOBALS[$k]); } + } +} + +unregister_GLOBALS(); + +function debug($var, $title='') { + + echo '
    ';
    +	if ($title) {
    +		echo '

    '.$title.'

    '; + } + + ob_start(); + print_r($var); + $str = ob_get_contents(); + ob_end_clean(); + + $str = str_replace('<', '<', $str); + + $str = str_replace('[', '[', $str); + $str = str_replace(']', ']', $str); + $str = str_replace('=>', '=>', $str); + $str = str_replace('Array', 'Array', $str); + echo $str; + echo '
    '; +} + +function get_text($var, $return = FALSE) { + global $req_lang, $lang, $section; + + static $req_lang_text, $lang_text; + + if (!isset($req_lang_text) && ($req_lang != 'en')) { + $text = array(); + if (file_exists(dirname(__FILE__) . '/'.$req_lang.'/text.php')) { + require(dirname(__FILE__) . '/'.$req_lang.'/text.php'); + } + + $req_lang_text = $text; + } else if (!isset($lang_text)) { + $text = array(); + require(dirname(__FILE__) . '/text.php'); + $lang_text = $text; + } + + if (isset($req_lang_text[$var])) { + if ($return) { + return $req_lang_text[$var]; + } + echo $req_lang_text[$var]; + } else if (isset($lang_text[$var])) { + if ($return) { + return $lang_text[$var]; + } + echo $lang_text[$var]; + } else { + if ($return) { + return $var; + } + echo $var; + } +} + +function get_available_languages($section) { + global $available_languages; + + $path = dirname(__FILE__); + if (is_dir($path)) { + $files = glob($path . '/??'); + if (is_array($files)) { + foreach ($files as $filename) { + $filename = basename($filename); + $available_languages[$filename] = $filename; + } + } + } +} + +define('AT_HANDBOOK', true); +session_name('ATutorID'); +session_start(); +// $lang is the language we've found to display +// $req_lang is the language we're requesting + + +$_available_sections = array('admin' => 'admin', 'instructor' => 'instructor', 'general' => 'general', 'index' => 'index'); +$available_languages = array('en' => 'en', 'fr'=>'fr'); + +$parts = pathinfo($_SERVER['PHP_SELF']); +$this_page = $parts['basename']; + +$dir_parts = explode('/', $parts['dirname']); +$last_dir_name = end($dir_parts); +$second_last_dir_name = prev($dir_parts); + +if (isset($_available_sections[$second_last_dir_name])) { + $lang = $req_lang = $last_dir_name; + $section = $second_last_dir_name; + $rel_path = '../../'; + get_available_languages($section); +} else if (isset($_available_sections[$last_dir_name])) { + $section = $last_dir_name; + $rel_path = '../'; + get_available_languages($section); + + foreach ($_GET as $lang_name => $garbage) { + if (isset($available_languages[$lang_name])) { + $lang = $req_lang = $lang_name; + break; + } + } + if (!$lang && !$req_lang && isset($_SESSION['lang']) && isset($available_languages[$_SESSION['lang']])) { + $lang = $req_lang = $_SESSION['lang']; + } else if (!$lang && !$req_lang) { + $lang = $req_lang = 'en'; + } + +} else { + foreach ($_available_sections as $section_name) { + if (isset($_GET[$section_name])) { + $section = $section_name; + unset($_GET[$section]); + break; + } + } + if ($section) { + get_available_languages($section); + foreach ($available_languages as $lang_name) { + if (isset($_GET[$lang_name])) { + $lang = $req_lang = $lang_name; + break; + } + } + if ((!isset($lang) || !$lang) && isset($_SESSION['lang']) && isset($available_languages[$_SESSION['lang']])) { + $lang = $req_lang = $_SESSION['lang']; + } else if (!$lang) { + $lang = $req_lang = 'en'; + } + $rel_path = '../'; + } else { + $lang = $req_lang = 'en'; + $section = 'general'; + $rel_path = '../'; + get_available_languages($section); + } +} + +$lang = htmlspecialchars($lang); +$req_lang = htmlspecialchars($req_lang); + +?> \ No newline at end of file diff --git a/documentation/config.inc.php b/documentation/config.inc.php new file mode 100644 index 000000000..ad8b3b3cd --- /dev/null +++ b/documentation/config.inc.php @@ -0,0 +1,43 @@ + \ No newline at end of file diff --git a/documentation/delete_note.php b/documentation/delete_note.php new file mode 100644 index 000000000..0e271fe72 --- /dev/null +++ b/documentation/delete_note.php @@ -0,0 +1,63 @@ + \ No newline at end of file diff --git a/documentation/developer/database.gif b/documentation/developer/database.gif new file mode 100644 index 0000000000000000000000000000000000000000..270dbdc4ffbc265cc9ec7b92313f2f6247812330 GIT binary patch literal 195789 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 z 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

    c%-2N2gq$IC-?)2 zawLV29*s@1DlvufSSwX4@J6pMsCI2KvWFMK#C2(&=~37|N7 znv5%e2Fh>#)+Wk3AkfE9WxryQv?Y_>nRs~F<#VfaYU{1Ie(`1yd90WM6r$*Gf`JNYT7)Tv`~k^G zE(FT#mQFC@Y$7iR!k{O+%4#eOnTQGAvWb{yZMcR_QAo3Yf+t9Yd>}FdyWpOe>%8>V zYwx}I(ugVk483Ns4M6+gL{Y%)OaqWL+8j(U!X7jrEGuoAl`a^EqOn$JqULFT{lp}b4Ltp(sIwBx@_qO z8tcNb5K9}84^&Bu0kWM<|7uric3DIbcL-ef!gvf7n-=?=vxkuTGPh6e`|rR9FFb3N zLwx@EA$2vNq2`?(tyW*k_hIRtq-UoV=Z#d*gbPc!?)>F|3$yzQwU<`>jN>zNHCMe4 z@BaJn$1lG*?W@qQ2B>?Ozw{zp2W;FVNQa0x(s@e(aNR~gauK!z+)1nDax3$#`TEYfI+<>P@IIYB)-*wKoB45T0j3I4ex zBF%~BFr+8m=(ej-gMsvrhCASK0X=ZTl97~4#t=!h2@;`V3uBliFYt(=h?10}yciS- z$;wu`@|BbO;|MwVftA#SXSPV$MLgMsOyqjn}7i;H49lPk(W%9 z#4kY=5)2JfKv4NiQF`*90{x|qunea-$4Sn5DH42CIcFUh*#dDn1!KE`R6ZmnnPYDn>qj_Sw9k~b%O<-jzlAxl~RR;B} zXickH8wZA=?i7Lm{ZX`nxto17%A^Aw&o@Uph+rD&ts#4`}%ooY%)2E@>#_{D{?u#jI> zH4DQa5p}J4Ts0nI}-H%j*(njM4jEdTZZ>8 z_rCxR@I>#|FuH7&Xg?GfBn@VT(Lv)Mb3-Clb75Kx>d}-8v2A-^+TN@9SHK_+v52iG zkv{6s!PnrdHfA<7$OLV3CN@d)bhcf%VvWB7>o8mMg2ZDE zYfxa*du=V9RxJ}elxMdMM_6PRoWhQ`yyq<|iM-nysO1z2I$K^ezK|b(>Rhv^9Sa*@ z4>8YmKmwsO-6vq#qv1Y57cZ9!U$3WIZ!w(0k>d>vw}9N->R2s#?FEa|`{XE3d4>s| zW{1#v4c7j^!?1Bnf0}||-*^NNa!!vb{6hn|c)4;gE_22}X(j0v*Bx-q4oZgd!R?Uq z8%(b9s$2c)zj$xdU}(!*$AId~;ndLvXelXgO8#^%<4K0-A{~z0z+bO1_0J+6rCd*A z>^RVxsU`?h&HSvdw`4MhT$bt3@58^xcgW-Y7)@W#*zmx&u6!q21dFG%Wc z5Pt91&;IuF3iyXCYLyEO4WH~0%`t#!c4h#S1o~_~{J?0gkavqxdgFF?MQ0T5#&;kG zbp9uPc_%YwvvJgt9PW347?^=_@OxB2{%5oyb}}amrsjW{7cJ_bb|mVRhWf+(Sm4Z@H(3nLh!dp zAXtCLgK9?P0iba}0OT`Hb~zFEKQATdRPRchH!=kGpOZ(Bxo`5R|aG_7zWbkSt1|F3;syd$@|M*ovu^K!gE?2Zn60un&JAMyK>y zpY;tBlrZ==28U<{mxg})5{0w=W{eNQWhg*_3n7HA_>9o_Wu#V1B!FVSh)Rtj{sI=Om$>- zNQ;mLT@KKBX|p*T01EzdL<;vXt7eGE*j;Hrj4SYv({_Mpfr$`tkNUWg90^%t=7%5= zY2yHpg9tYoq7ORZe9$L@ARsIwSdIpVh&mTZJEaTOSeEtfgtI9|&F2wk*%?BVf;h4i9mzY_bwmCdQRas5e1CqIKtoa7!G7tZPaLy&1!-*KhnViIloWW_F z&gonZ6P?HDoXd%v2zQ;=shrliozn@O-07X&`JIR%h`7?6+KHXgDV*RboLr=y;c1-b ziJkAcp3hmG(@CB3nVH7BW4dp&t67AR3|~>YW zSem6;Dx?Yop6eN(``HBdIi}+2p75!k@tLOf`K4uQoaDKsa2ls_YL}^FStEL + + + + ATutor Developer Documentation + + + + + + +

    + +

    Table of Contents

    + + + +top +

    0. Version Considerations

    +

    This document is found in ATutor's documentation/ directory and is maintained along with the rest of the code in the code repository. The latest version of this document will always be available in the repository. Versions bundled with ATutor releases are specific to that release. If you are modifying a previous version of ATutor then you should refer to the version of these guidlines as they are available with that specific version.

    + +top +

    1. Introduction

    +

    ATutor, as an open source project, encourages PHP developers to contribute new features. To ensure that newly contributed code is easy to accept and maintain, we must urge you to follow the guidelines we outline below. These rules and recommendations were created to ease the distributed development process.

    + +

    The latest version of this document can always be found at ATutor.ca.

    + +top +

    2. Conventions Used in This Document

    +

    This section covers the typographical conventions used in this document.

    + +

    2.1 Typographic Conventions

    +
    +
    Constant width
    +

    Used for commands and code examples. Example: Use the debug() function to view a variable.

    + +
    `Constant width surrounded by quotes`
    +

    Constant-width font with surrounding quotes is used for filenames and path names. Example: The `vitals.php` file is important.

    + +
    Square brackets (`[` and `]`)
    +

    In syntax descriptions, square brackets (`[` and `]`) are used to indicate optional words or clauses. Not to be confused with the use of square brackets in array definitions. For example, in the following statement, version is optional: ./bundle.sh [version].

    + +
    Pipe (`|`)
    +

    When a syntax element consists of a number of alternatives, the alternatives are separated by pipes (`|`).

    +
    + +

    Example code is to be used as examples only and not as tested production code. In most cases its usefulness in the context of the example outweighs its correctness as workable code. In other cases the syntax and style used in the example itself are irrelevant and do not follow the coding guidelines outlined below. For example, arrays may be documented using string keys without quoting their value, $_SESSION[prefs], while in practice it is always best to escape the key with quotes: $_SESSION['prefs'].

    + +

    2.2 Links

    +

    All the links in this document open in the current browser. Links that are not obviously to external sites are supplemented with title text. All other links are assumed to be anchors within this document.

    + +

    2.3 Function Definitions (Prototypes)

    +

    The usage of the square brackets (`[` and `]`) around parameters imply that they are optional, in which case the function documentation will then state what the default value for that variable is. Please pay close attention to the return types of functions: If a function is described to return boolean then it will return either TRUE or FALSE and not an integer such as 0 or 1. Optional arguments to functions must always be listed as the last parameters in the list.

    + +

    returned_type function_name( param_type $param_name [, opt_param_type $opt_param_name])

    +
    +
    returned_type
    +

    Type of value this function returns. See Types and PHP type comparison tables.

    + +
    function_name
    +

    The function name.

    + +
    param_type and opt_param_type
    +

    The type of the parameter that the function expects. See Types and PHP type comparison tables.

    + +
    $param_name and $opt_param_name
    +

    The names of the parameters as they are used in the function. The $opt_param_name is optional.

    +
    +

    + +top +

    3. Setup

    +

    Please review the ATutor requirements and ensure that your development environment meets the minimum requirements.

    + + + +

    3.1 PHP Configuration

    +

    If you have a dedicated development environment that doesn't share a web server with other production code, then it is best to use the bundled php.ini-dist configuration file as the default--simply rename it to php.ini. Listed below are the essential configuration options and their recommended value:

    +
    +safe_mode            = Off
    +error_reporting      = E_ALL
    +display_errors       = On
    +arg_separator.input  = ";&"
    +register_globals     = Off
    +magic_quotes_gpc     = Off
    +magic_quotes_runtime = Off
    +allow_url_fopen      = On
    +register_argc_argv   = Off

    + +top +

    4. Subversion (SVN)

    +

    We have adopted Subversion (SVN) in place of the aging CVS, allowing us to open up the development repository while still maintaining control over the core project. Additional information can be found on the Subversion homepage.

    + +

    4.1 Installing an SVN Client & Checking-Out

    +

    To obtain a working copy of ATutor, you need to install an SVN client and do a checkout from our repository of the latest ATutor source code. Checking out the repository creates a copy of it on your local machine with the necessary version control information. The location of the copied files should be web accessible, i.e. a directory under your web server's path.

    + +

    For windows users, we recommend using TortoiseSVN, which is a feature-rich SVN extension for Windows that supports many of the options of other SVN clients (file browser and filters not being one of them). Once TortoiseSVN has been successfully installed and you've rebooted your computer, go to a working directory where you wish to checkout the ATutor source code. Right-click to pop-up the context menu and select the command "Checkout...".

    + +

    For repository URL, enter http://atutorsvn.atrc.utoronto.ca/repos/atutor/trunk. If you enter a folder name that does not yet exist, a directory with that name will be created. Press "OK", and the source will be downloaded to your computer.

    + +

    For non-Windows users, download an appropriate SVN package from the Subversion homepage and follow the installation instructions. These packages use the command-line client. Checking out the most recent ATutor source code can be done with the following command: svn checkout http://atutorsvn.atrc.utoronto.ca/repos/atutor/trunk.

    +

    The checkout includes:

    +
      +
    • bundle.sh - Execute this shell script to generate an installable bundle of the ATutor.
    • +
    • docs/ - The ATutor source code
    • +
    • mods/ - Extra module source code
    • +
    +

    Extra modules can also be checked out into the ATutor mods/ directory, from where they can be easily installed using the ATutor administor's Install Modules tool. See the ATutor Module Documentation for more about creating and modifying modules. From within the docs/mods/ directory of your development version of ATutor, use svn checkout http://atutorsvn.atrc.utoronto.ca/repos/atutor/trunk/mods/[module_name].

    +

    4.2 Installing ATutor From SVN

    +

    Before starting the installation process you should create an empty `config.inc.php` file in the `include/` directory: use touch config.inc.php on UNIX. Browse to the location of your checked out files in a web browser and proceed with the ATutor installation instructions. This will set up the database and user accounts for your ATutor system. The resulting ATutor installation will be your development environment.

    + +

    4.3 Updating ATutor From SVN

    +

    You should periodically perform updates from the repository to make sure you are working with the developers' latest files. To do this with TortoiseSVN, right click on the working folder and select "Update" from the context menu. For command-line svn clients, use: svn update.

    + +

    Always review the latest SVN SQL upgrade file to ensure your database structure is up-to-date. The file will contain schema changes of the current pre-released source. Example: If the current working source will be version 1.9, then the upgrade file to keep track of will be named atutor_upgrade_x.y.z_to_1.9.sql, where x.y.z is the version of the currently available stable release.

    + +

    4.4 Keywords

    +

    Until Subversion supports server wide configuration options, the svn:keyword="Id" option will have to be set on a file-by-file basis via the client. After the keyword property has been set for the given file, add the line // $ I d (without the spaces) at the top of the file directly below the main comment block to identify the author, date and time of the last commit.

    + +

    After the file has been added and committed to the repository the keyword will be expanded into // $Id: guidelines.html 3071 2005-01-12 21:53:13Z joel $. It is helpful to read that line when first opening a file as it lets you know if you were the last person to edit that file and if not, to look out for possible changes.

    + +

    To set svn:keyword="Id" on a file using TortoiseSVN, right-click on a file, select "Properties" then select the "TortoiseSVN" tab, enter svn:keywords in the drop-down and Id in the text box then use the "Set" button.

    + +top +

    5. Communication

    +

    All communication between developers should occur in the Development Forum. Please try to keep discussions public including any feature proposals.

    + +top +

    6. Patches

    +

    Patches should be applied using the UNIX patch command. Make sure your `.patch` or `.diff` files will be compatible or send explicit instructions on how to apply your changes. Always specify what release or source date you are patching against. We prefer unified diffs. Diffs can be posted as attachment to the atutor.ca Development Forum .

    + +top +

    7. Editor Tips

    +

    We use EditPlus, but you can use whichever editor and settings you feel comfortable with. The most important part when editing is to ensure that tabs meet the coding guidelines on indentation.

    + +

    A few desirable features for a good text editor are listed below: +

      +
    • Column and row numbering.
    • +
    • Jump to line number.
    • +
    • Word wrap toggle.
    • +
    • Being able to specify soft or hard tabs.
    • +
    • Syntax highlighting.
    • +
    • Trim trailing whitespace.
    • +
    • DOS to UNIX CR/LF conversions. Your editor must be able to save files with UNIX style line breaks. This means the \n character instead of the \r (Mac style) or \r\n (Windows style).
    • +

    + + +top +

    8. Proposed Features

    +

    The Proposed Features page lists features which have been requested by the ATutor community. ATutor.ca members can vote on features to establish a priority, while potential developers may then assign themselves to tasks. New feature requests should be posted to the ATutor Feature Requests forum.

    + +top +

    9. Bug Tracking

    +

    Please report bugs to the ATutor Bug Reports forum. Be sure to indicate the code version being used, such as a release candidate, stable release, nightly build, or SVN checkout, etc. Also be sure to describe the details of the system that ATutor is being developed or tested on, such as the operating system, web server and version, PHP version, etc. Browse the Current Bug Summary for a list of active big fixing.

    + +top +

    10. Creating Bundles

    +

    The file `bundle.sh` is located in a directory above `docs` and is used for creating bundles from the working `docs` directory. The Shell script must be run on UNIX and will retrieve the latest version of the language from the database, remove the `cvs_development.inc.php` file, disable debugging, and lastly create a .tar.gz file. Usage: + +

    +
    ./bundle.sh [version_number]
    +

    Note that you will need execute permissions on the script to use it, and if it isn't in your PATH then you will have to prefix it with a ./. The optional version_number argument will be used for suffixing onto the file name. For example, a version number of 1.8RC1 will generate a file named ATutor-1.8RC1.tar.gz.

    +
    +

    + +top +

    11. Writing Portable Code

    +

    When writing your PHP code please try to use functions that exist since (the minimum requirement) PHP version 4.3.0. If you have to use a function that only exists in later versions of PHP, provide an alternative for older versions. To check if the function is available use either version_compare(phpversion(), $min_version) or function_exists($function_name). + +

    Code has to work on both Windows and UNIX. You should never use exec() or system(). In most cases we prefer to write code that works on both systems as is, without the need for if-statements that check for the operating system, since duplicating the functionality twice (once for each operating system) can be a source of bugs. Review the PHP Configuration section for details on how best to set-up your development environment.

    + +top +

    12. Coding Style

    +

    This section should help those who would like to modify or add code. Anyone who wishes to contribute code must adhere to these guidelines or the code may not be accepted. Please try to write code that is easy to read and maintain with appropriate comments as needed. Correctness and efficiency are easier to certify if code is simple to read and understand.

    + +

    12.1 Indentation

    +

    The importance of indentation for code organization cannot be exaggerated enough. Although indentation is not mandatory in PHP, it is a powerful visual organization tool that should consistently be applied to code.

    +
      +
    • Indent using 4 spaces for each level.
    • +
    • Think carefully about when too many nested levels has been reached. (Usually 4-5 is a good limit).
    • +
    • Use Hard tabs, as described below.
    • +
    + +

    Internally, we have used hard tabs as we all use the same editor, but we may decide to move to soft tabs in the future. Hard tabs are regular tabs while soft tabs are not really tabs at all; each soft tab is actually represented by a certain number of regular spaces. The benefit of using soft tabs is that they always appear the same, regardless of the editor's tab-spacing. With soft tabs set and enforced, it is easy to maintain consistent indentation and whitespace treatment throughout code. When hard tabs are used, especially if there are multiple developers using different editors, it is easy for mixed levels of indentation to be introduced, confusing the code's layout.

    + +

    12.2 Line Length

    +

    Split the long lines into multiple lines: +

    +if (($month = 'jan') || ($month = 'feb') || ($month = 'mar') || ($month = 'apr')) {
    +    return 1;
    +}
    +

    + +

    You can indent the second line to signify the association with the upper. For particularly long lines, you can indent and align every condition: +

    +if (($month = 'jan') || 
    +    ($month = 'feb') || 
    +    ($month = 'mar') || 
    +    ($month = 'apr')) {
    +
    +    return 1;
    +}
    +

    + +

    This methodology works equally well for function parameters: +

    +echo format_content($content_row['text'], 
    +                    $content_row['formatting'], 
    +                    $glossary,
    +                    $indent);
    +

    + +

    12.3 Using Whitespace

    +

    Whitespace can be used to provide and reinforce logical structure in the code. For example, it can be effectively used to group assignments and show associations. The following example is poorly formatted and difficult to read: + +

    +$password = 'mypassword';
    +$website_url = 'http://atutor.ca';
    +$first_name = 'Joel';
    +$last_name = 'Kronenberg';
    +

    + +

    But this code block can be improved by using whitespace to logically group related assignments together and align them on the equal sign (=): +

    +$pet_type    = 'mypassword';
    +$website_url = 'http://atutor.ca';
    +$first_name  = 'Joel';
    +$last_name   = 'Kronenberg';
    +

    + +

    12.4 SQL Guidelines

    +

    Similar formatting and layout rules applied to PHP can be applied to SQL queries as well. SQL queries, especially in database systems that support complex subqueries, can become convoluted. As with PHP code, whitespace and line breaks should be used in SQL code as needed. Consider the following: + +

    +select employees.first_name, employees.last_name from 
    +               employees where employees.vacation_time > 0 order by employees.last_name";
    +
    +

    + +

    This is a simple query, but it is poorly organized. Its organization can be improved in a number of ways, including the following: +

      +
    • Capitalize SQL keywords.
    • +
    • Break lines on SQL keywords.
    • +
    • Use table aliases to keep code clean.
    • +
    + +
    +SELECT   S.first_name, S.last_name 
    +FROM     students S
    +WHERE    S.email = '' 
    +ORDER BY S.last_name";
    +

    + +

    12.5 SQL/99 Joins

    +

    ANSI SQL/99 features ANSI compliant joins. There are several advantages in using this new syntax, one of which is the separation of the JOIN condition from the WHERE clause. +

    +SELECT	M.email, M.login 
    +FROM	members M, forums_subscriptions S 
    +WHERE	S.member_id=M.member_id 
    +AND     M.email <> ''
    +
    +SQL/99 makes a clear distinction between the fields in the JOIN condition and the WHERE clause: +
    +SELECT	M.email, M.login
    +FROM	members M
    +JOIN	forums_subscriptions S USING (member_id)
    +WHERE	M.email <> ''
    +

    + +

    12.6 Control Flow Constructs

    +

    +

      +
    • Always use <?php ?> instead of the short form <? ?>. This implies that you must not use the <?=$var;?> short form either.
    • +
    • Always include the optional semicolon in single line PHP blocks: <?php echo $something; ?> +
    • Use ' instead of " if there are no variables or special characters.
    • +
    • Use spaces around string concatenating. echo 'str' . $value . 'str2';
    • +
    • Parenthesis `( )` should come right after a function name. function() not function ()
    • +
    • Parenthesis `( )` should have a space right after a language construct (if, while, for). Examples: for (...), while (condition)
    • +
    • Avoid using continue and break as it makes debugging more difficult.
    • +
    • Braces formatting is illustrating below. We use K&R style where the initial brace is placed on the same line as the keyword and the trailing brace inline on its own line with the keyword: +
      +if (condition) {
      +    ...
      +} else if (condition) {
      +    ...
      +} else {
      +    ...
      +}
      +
    • +
    • Arrays should be referenced with no spaces. $arr['index'] not $arr[ 'index' ]
    • +
    • Avoid using short if-statement construct ($var = ($query ? $val1 : $val2)) except in very rare cases. It is confusing and has a lot of bug potential.
    • +
    +

    + +

    12.7 Commenting

    +

    Avoid using Shell/Perl-style (## this is a comment) comments entirely. Use C-style comments (/* ... */) for large comment blocks and C++-style comments (// ...) for single-line comments only: +

    +/* This is a comment block
    + * it is used for describing
    + * the code below.
    + */
    +...
    +// this is a single line comment
    +

    +

    Please, document while you code. See phpdoc, like javadoc, for how to document functions, classes, methods, and variables. Coding is often hurried, but it will save a lot of time in the end to do this type of documenting! It looks like this: +

    +   /**
    +   * what the function does in one line.
    +   * more detailed description on 0-n lines, if needed.
    +   * @access  [public|static|pseudostatic]
    +   * @param   [string|int|double|bool|array|object|mixed] $paramName1 desc
    +   * @param   [string|int|double|bool|array|object|mixed] $paramName2 desc
    +   *  ...
    +   * @param   [string|int|double|bool|array|object|mixed] $paramNameN desc
    +   * @return  datatype  description
    +   * @throws  not until PHP 5
    +   * @see     some_function()
    +   * @todo    description
    +   * @since   ATutor version, PHP version   (comma separated list)
    +   * @status  stable|experimental           (if not set then considered stable)
    +   * @pattern singleton|factory|mvc|observer|facade|...
    +   * @author  description                   (comma separated list)
    +   */
    +   function something() {
    +   }
    +   
    + Note that the description should be given as plain text not HTML. The @pattern singleton means that the constructor returns a reference to an already existing instance, if there is one.

    + +

    12.8 Naming Conventions

    +
      +
    • 12.8.1 Naming Variables: +
        +
      • Use capital letters for constants. E.g. define('CONSTANT', 1) and use the capital form of TRUE, FALSE and NULL
      • +
      • Otherwise, use all lower case
      • +
      • Use _ to separate words. E.g. $green_colour_value
      • +
      • Loop variables can be of the usual variety: $i, $j, $k, etc.
      • +
      • Count variables should follow the format $*_count. E.g. $bug_count, and always initialised to 0
      • +
      • Temporary variables should be prefixed with temp_
      • +
      • $sql, $result, and $row should be used for SQL query, results, and rows respectively
      • +
      +
    • + +
    • 12.8.2 Naming Functions: +
        +
      • Use all lower case
      • +
      • Use _ to separate words. E.g. setup_page_breaks()
      • +
      • Keep functions to 5 words or less
      • +
      • Functions that print should be prefixed with print_.
      • +
      • Try to use prefixes to group functions (E.g., email_, news_, etc.)
      • +
      +
    • + +
    • 12.8.3 Naming Files: +
        +
      • Use all lower case
      • +
      • Use _ to separate words. E.g. view_new_bugs_page.php
      • +
      • Use .php file extensions (not .html or .php3)
      • +
      • Filenames must be less than 32 characters in length as this works with older file systems like MacOS
      • +
      • Included files should be suffixed by .inc.php
      • +
      • Files containing classes should be suffixed by .class.php
      • +
      • Exception: Files being included as part of an external library should not be renamed
      • +
      +
    • +
    + +top +

    13. Directory Structure

    + The following is a short explanation of the important components of the ATutor directory structure. + +

    13.1 Directories

    +
    +
    `acollab/`
    +
    This directory contains files related to ACollab connectivity. These files are necessary to allow ATutor to link into the ACollab system.
    + +
    `admin/`
    +
    This directory contains files used for the administration area (when a user logs in as an administrator). This includes files for system statistics, instructor requests, management of users, courses, categories and languages, and server configuration.
    + +
    `editor/`
    +
    This directory contains files used by a course instructor (or privileged user) to edit course content such as the glossary, course content, forums, announcements, and polls.
    + +
    `include/`
    +
    This directory contains files that are required or included into other files.
    + +
    `include/classes/`
    +
    This directory contains classes, essential to certain ATutor functions, such as the phpMailer, XML, Savant templating, and content management classes.
    + +
    `include/html/`
    +
    This directory contains files that output HTML, usually displayed on (included into) multiple pages.
    + +
    `include/lib/`
    +
    This directory contains library files that hold functions and constants used throughout ATutor code.
    + +
    `install/include/`
    +
    This directory contains files used during the installation process, including each step of the fresh install and upgrade processes.
    + +
    `install/db/`
    +
    This directory contains the SQL files necessary to set up or upgrade the ATutor database.
    + +
    `jscripts/`
    +
    This directory contains all JavaScript files.
    + +
    `themes/`
    +
    This directory contains the different themes installed on an ATutor system, each with its own subdirectory.
    +
    + +

    13.2 Files

    +
    +
    `include/config.inc.php`
    +
    This file is created during installation and contains specific configuration information for an ATutor system.
    + +
    `include/vitals.inc.php`
    +
    This file is included by every directly accessible page. It connects to the database, initiates the user session, includes common libraries and constants, and defines frequently used functions.
    + +
    `include/cvs_development.inc.php`
    +
    This file is used to connect to the development language database. Renaming the file will force your system to use the languages available locally.
    + +
    `themes/themes_readme.txt`
    +
    This file contains detailed information on how to create and install a theme.
    + +
    `include/header.inc.php`
    +
    This file outputs the page's header using the correct template and theme.
    + +
    `include/html/feedback.inc.php`
    +
    This file outputs a feedback, error, help, or informative message from the given set variables. See Error and Feedback Messages.
    + +
    `include/html/footer.inc.php`
    +
    This file outputs the page's footer using the correct template and theme.
    +
    + + +top +

    14. Database Structure

    +

    A database model diagram (153 KB GIF) created from the ATutor 1.4.1 database schema is available.

    + +top +

    15. Localisation

    +

    All language terms and phrases are stored in the ATutor database. See the _AT() function for details on displaying text. There are three tables that are used for managing languages, their roles are as follows: +

    +
    `language_pages`
    +
    This table is used to cross reference language terms with pages. It allows selecting, via a JOIN, only the terms needed for a particular page. The JOIN may be slow at first but once the result is cached, subsequent calls are many times faster such that only the language needed for a particular page is restored from cache.
    + +
    `language_text`
    +
    This table holds all of the text for an ATutor installation.
    + +
    `languages`
    +
    This table holds the list of all available languages on the system and their attributes.
    + +

    + +

    15.1 Adding & Editing Language

    +

    Please see the HowTo Course for more details on translating a language within ATutor.

    + +top +

    16. Error and Feedback Messages

    +

    All messages are handled using the Message class. The main purpose of the Message class is to encapsulate the functionality of tracking + and managing various message types during a session by providing a nice layer of abstraction between you and the interface to $_SESSION, where the messages are stored.

    + +

    At the moment six types of messages are supported: +

    +
    Error
    +
    Messages reflecting negative feedback to the user, indicating issues that need resolving or addressing.
    + +
    Feedback
    +
    Messages reflecting positive feedback, aknowledging a users action was successfull.
    + +
    Warning
    +
    Messages warning the user of a possible action with undesireable effects.
    + +
    Help
    +
    Messages with helpful information about the current page.
    + +
    Info
    +
    Messages with useful information.
    + +
    Confirmation
    +
    Messages requiring a confirmation in order to execute an action.
    + +

    + + +

    Please note that using the old method of passing messages is not supported anymore.

    + +

    Messages can be passed between pages and can be accessed at any time, without any time restriction other than a session timeout.

    + +

    16.1 Internals

    +

    Essentially the internals of the class are divided into two segments, a section responsible for printing graphics via Savant templates and another that manages the storage of Messages.

    + +

    Tracking messages is accomplished by storing message codes and their optional arguments associatively in $_SESSION. Printing messages is accomplished via Savant and built in templates which can be found in `templates/`.

    + +

    The relational tracking structure is organized in the following manner inside $_SESSION in no particular order. +

      +
    • message +
        +
      • error +
          +
        • AT_ERROR_{*} +
            +
          • AT_ERROR_{*}
          • +
          • [argument_1]
          • +
          • [argument_2]
          • +
          +
        • +
        +
      • + +
      • warning +
          +
        • AT_WARNING_{*} +
            +
          • AT_WARNING_{*}
          • +
          • [argument_1]
          • +
          +
        • +
        +
      • + +
      • info +
          +
        • AT_INFOS_{*} +
            +
          • AT_INFOS_{*}
          • +
          • [argument_1]
          • +
          +
        • +
        +
      • + +
      • help +
          +
        • AT_HELP_{*} +
            +
          • AT_HELP_{*}
          • +
          • [argument_1
          • +
          +
        • +
        +
      • + +
      • feedback +
          +
        • AT_FEEDBACK_{*} +
            +
          • AT_FEEDBACK_{*}
          • +
          • [argument_1]
          • +
          +
        • +
        +
      • + +
      • confirm +
          +
        • AT_CONFIRM_{*} +
            +
          • AT_CONFIRM_{*}
          • +
          • [argument_1]
          • +
          +
        • +
        +
      • +
      +
    • +
    +

    + +

    Messages are automaticaaly purged from $_SESSION following an appropriate print command.

    + +

    16.2 Adding Messages

    + $msg->add{Error|Warning|Info|Feedback|Help}($code);

    + +

    $code is a String of a language _msgs code or an array with element 0 being the language _msgs code followed by optional arguments. Refer to the language_text table in the database.

    + +

    Important: One important thing to note is that $code must be stripped of the prefix for that type of message. By prefix it is meant AT_[code_type]_. For example: + +

      +
    • `AT_ERROR_FORUM_NOT_FOUND` should be specified as `FORUM_NOT_FOUND`, by stripping off the `AT_ERROR_` prefix.
    • +
    • `AT_WARNING_DELETE_MESSAGE` as `DELETE_MESSAGE` by stripping off `AT_WARNING_`.
    • +
    • `AT_FEEDBACK_LOGOUT` as `LOGOUT` by stripping off `AT_FEEDBACK_`.
    • +
    • `AT_INFOS_MSG_SEND_LOGIN` as `MSG_SEND_LOGIN` by stripping off `AT_INFOS_`.
    • +
    • `AT_HELP_FILE_EXPORTABLE` as `FILE_EXPORTABLE` by stripping off `AT_HELP_`.
    • +
    +

    + +

    There are two ways of adding messages: a single code or a code with an array fo arguments. You can mix-and-match, a combination of both is supported even for the same code. Below is description of the formats:

    + +

    +

    Adding single code
    +
    $msg->addHelp('FILE_EXPORTABLE');
    +
    +
    OR
    +
    +
    Adding array with arguments
    +
    $f = array('FILE_EXPORTABLE', 'arg', 'arg2', ...);
    +
    $msg->addHelp($f);
    +

    + +

    A nice feature implemented is that you do not have to provide all + the arguments for a particular code at one time. Subsequent adding of + the same code will just append the argument. This allows for greater + manipulative flexibility in your source, without writing redundant code. Also note + that encoding Feedback codes is no longer necessary for redirection.

    + +

    Example 1: +

    $feedback=array('FORUM_ADDED', 'ac_access_groups');
    +
    $msg->addFeedback($feedback);

    + +
    // Before we print lets another another one to the same code
    +
    $feedback2=array('FORUM_ADDED', 'about_atutor_help_text');
    +
    $msg->addFeedback($feedback2);

    + +
    // No need to url_encode the code
    +
    $filename = 'archive.zip';
    +
    $f = array('FILE_UPLOADED_ZIP', $file_name);
    +
    $msg->addFeedback($f);
    + +

    + +

    Snapshot of a portion of $_SESSION as a result:

    +
    +	[feedback] => Array
    +                (
    +                    [AT_FEEDBACK_FORUM_ADDED] => Array
    +                        (
    +                            [0] => AT_FEEDBACK_FORUM_ADDED
    +                            [1] => ac_access_groups
    +                            [2] => about_atutor_help_text
    +                        )
    +                        
    +                    [AT_FEEDBACK_FILE_UPLOADED_ZIP] => Array
    +                        (
    +                            [0] => AT_FEEDBACK_FILE_UPLOADED_ZIP
    +                            [1] => archive.zip
    +                        )
    +
    +
    +                )
    +	...
    +
    + +

    +

    header('Location: file_manager.php');
    +
    exit;
    +

    + +

    16.3 Printing Messages

    +$msg->print{Errors|Warnings|Infos|Feedbacks|Helps|All}($optional);

    + +

    Each will dump all the corresponding tracked messages of that type onto +the page at that given line with appropriate graphics defined by its templates file.

    + +

    printAll() allows all Messages of all types to be dumped immediatley.

    + +

    One thing to remember is that once a type of Message is printed +all tracked data relating to that type is gone. There is no need to worry +about purging messages from $_SESSION. The class manages this.

    + +

    Notice $optional as the argument to this function. This allows you +to shortcut the process of adding and printing Message's in one go. For example, +suppose you want to add a Message and print it right away. Thus, you pass as an +argument ANY argument that you would pass when adding a Message of that type. +Essentially, two lines of code are accomplished in one.

    +
    Example:
    +
    +	$msg->addError('MAX_ATTEMPTS');
    +	$msg->printErrors();
    +	
    +	can also be accomplished as:
    +	
    +	$msg->printErrors('MAX_ATTEMPTS');
    +
    + +

    Printing String inside Feedback style box

    + +printNoLookup($str);

    + +

    Print $str inside a Feedback Message type style box. Performs +no dialog with $_SESSION or any language mappings in the language_text DB table. +Strictly used in /resources/links/index.php for compatibility. +

    + +

    Checking for existance of specific Message type

    + +contains{Errors|Warnings|Feedbacks|Helps|Infos}();

    + +

    Returns true if the type of Message is being tracked and contains +some kind of data. Useful for branching conditions in knowning +when to print a Message or not. Otherwise returns false.

    + +

    Manually Deleting a specific Message from storage

    + +delete{Error|Warning|Feedback|Help|Info}($code);

    + +

    Will delete anything related to $code from $_SESSION

    +
    Example:
    +
    +	$msg->deleteFeedback('CANCELLED');
    +
    + +

    Example Code

    + +
    +
    +...
    +
    +require_once(AT_INCLUDE_PATH . '/classes/Message/Message.class.php');
    +
    +global $savant;
    +
    +$msg =& new Message($savant); 
    +
    +$msg->addError('FORUM_NOT_FOUND');
    +$msg->addWarning('SAVE_YOUR_WORK');
    +$msg->addInfo('NO_SEARCH_RESULTS');
    +$msg->addFeedback('FORUM_ADDED');
    +
    +/* State of relevant section of $_SESSION at this point 
    +[message] => Array
    +        (
    +            [error] => Array
    +                (
    +                    [AT_ERROR_FORUM_NOT_FOUND] => AT_ERROR_FORUM_NOT_FOUND
    +                )
    +
    +            [warning] => Array
    +                (
    +                    [AT_WARNING_SAVE_YOUR_WORK] => AT_WARNING_SAVE_YOUR_WORK
    +                )
    +
    +            [info] => Array
    +                (
    +                    [AT_INFOS_NO_SEARCH_RESULTS] => AT_INFOS_NO_SEARCH_RESULTS
    +                )
    +
    +            [feedback] => Array
    +                (
    +                    [AT_FEEDBACK_FORUM_ADDED] => AT_FEEDBACK_FORUM_ADDED
    +                )
    +
    +        )
    +*/
    +
    +// Now print them
    +$msg->printErrors();
    +$msg->printWarnings();
    +$msg->printInfos();
    +$msg->printFeedbacks();
    +
    +/* State of relevant section of $_SESSION at this point
    + [message] => Array
    +        (
    +        )
    + */
    +
    +// Let's add an array of arguments
    +$feedback=array('FORUM_ADDED', 'ac_access_groups');
    +$msg->addFeedback($feedback);
    +
    +// Before we print lets another another one to the same code
    +$feedback2=array('FORUM_ADDED', 'about_atutor_help_text');
    +$msg->addFeedback($feedback2);
    +
    +$msg->addHelp('DEMO_HELP2');
    +
    +$help=array('DEMO_HELP2', $_my_uri);
    +$msg->addHelp($help);
    +
    +$help2=array('ADD_TEST', $_my_uri);
    +$msg->addHelp($help2);
    +
    +// No need to url_encode the code
    +$filename = 'archive.zip';
    +$f = array('FILE_UPLOADED_ZIP', $file_name);
    +$msg->addFeedback($f);
    +
    +/* State of relevant section of $_SESSION at this point. Notice the second addFeddback call above
    + * had its arguments appended
    +
    + [message] => Array
    +        (
    +            [feedback] => Array
    +                (
    +                    [AT_FEEDBACK_FORUM_ADDED] => Array
    +                        (
    +                            [0] => AT_FEEDBACK_FORUM_ADDED
    +                            [1] => ac_access_groups
    +                            [2] => about_atutor_help_text
    +                        )
    +                        
    +                    [AT_FEEDBACK_FILE_UPLOADED_ZIP] => Array
    +                        (
    +                            [0] => AT_FEEDBACK_FILE_UPLOADED_ZIP
    +                            [1] => archive.zip
    +                        )
    +
    +                )
    +
    +            [help] => Array
    +                (
    +                    [AT_HELP_DEMO_HELP2] => Array
    +                        (
    +                            [0] => AT_HELP_DEMO_HELP2
    +                            [1] => /~Jay/docs/index.php?
    +                        )
    +
    +                    [AT_HELP_ADD_TEST] => Array
    +                        (
    +                            [0] => AT_HELP_ADD_TEST
    +                            [1] => /~Jay/docs/index.php?
    +                        )
    +
    +                )
    +
    +        }
    +*/
    +
    +$msg->printAll();
    +
    +/* State of relevant section of $_SESSION at this point
    + [message] => Array
    +        (
    +        )
    + */
    + 
    + ...
    +
    + + +top +

    17. Useful Variables

    +

    Most of the variables documented here are required for most pages to function correctly. constant variables, although not explicitly declared as constants, should be considered as such, and not altered.

    + +

    17.1 $db

    +

    Description

    +

    constant resource $db

    + +

    $db is the main database handler. Use it to connect to the ATutor database.

    + +

    Location

    +

    `include/vitals.inc.php`

    + +

    17.2 $addslashes

    +

    See $addslashes().

    + +

    17.3 $_base_href

    +

    Description

    +

    constant string $_base_href

    +

    The full URL to ATutor's base installation. Supports both regular and SSL protocols. Example: http://myserver.org/files/ATutor/.

    + +

    Location

    +

    `include/lib/constants.inc.php`

    + +

    17.4 $_base_path

    +

    Description

    +

    constant string $_base_path

    +

    The full absolute path to ATutor's base installation. Example: /files/ATutor/.

    + +

    Location

    +

    `include/lib/constants.inc.php`

    + +

    17.5 $_user_location

    +

    Description

    +

    constant $_user_location

    +

    $_user_location can be one of five values: `public`, `admin`, `users`, `prog` or empty. This variable must be set before requiring `vitals.inc.php`, and specifies what kind of general user authentication the page declaring it needs.

    + +

    `public` pages can be viewed by any user, signed-in as a member or not. `admin` pages (those in the `admin/` directory) can only be viewed by the administrator. `users` pages (those in the `users/` directory) can only be viewed by logged in members. If $_user_location is empty, it is assumed the page can only be accessed when a user is signed-in and viewing a course. `prog` is reserved for the pop-up window displaying the progress bar.

    + +

    This variable was added as a way of specifying which template to use (public, admin, or member). Its role as a way of authenticating is not thoroughly established.

    + +

    Location

    +

    Declared on every page that is directly accessible.

    + + +

    17.6 $_rel_url

    +

    Description

    +

    constant string $_rel_url

    +

    The absolute path and file name relative to ATutor's base installation. If ATutor was installed in http://myserver.org/files/ATutor/, the $_rel_url of the Site-Map page, for example, would evaluate to /tools/sitemap/index.php.

    + +

    This URL will always be the same for a given page, regardless of the location or path of an installation. This variable was added as a way of standardising the `page` value in the `lang_base_pages` table.

    + +

    Location

    +

    `include/lib/constants.inc.php`

    + +

    17.7 $_my_uri

    +

    Description

    +

    constant string $_my_uri

    +

    The full path and file name to the current page in a format that is ready to accept additional URL arguments. The argument separator will be defined as SEP. For example, if the current URL is http://myserver.org/index.php?cid=806;disable=PREF_MENU;menu_jump=2, then $_my_uri would be /index.php?cid=806;.

    + +

    So, $_my_uri is the URL to the current page without the temporary switch arguments. The following URL arguments are removed: + + enable, disable, expand, menu_jump, g, collapse, f, e, save, and lang.

    + +

    Location

    +

    `include/lib/vitals.inc.php`

    + +

    17.8 $contentManager

    +

    Description

    +

    constant ContentManager $contentManager

    +

    The $contentManager object provides access to methods for operating on content. All access to the `content` table should be done through this object.

    + +

    Locations

    +

    `include/vitals.inc.php`
    + `include/classes/ContentManager.class.php`

    + +

    17.9 $_section

    +

    Description

    +

    array $_section

    + +

    This variable is a two-dimensional array used to display a page's breadcrumbs. The first index identifies the page starting from 0 such that $_section[0] defines the first page in the hierarchy, $_section[1] the second, and so on. The second index is used to assign that page's properties, defined as follows: index 0 is the page title, and index 1 is the URL. This variable must be defined before the `header.inc.php file is required.

    + +

    The URL for the last page (i.e.. the current page) is optional.

    + +

    Example 1

    +

    To assign the path to the site-map: +

    +// the Site-Map is a sub-page of the Tools page, hence we define the path:
    +
    +$_section[0][0] = _AT('tools');              // the Tools' page title
    +$_section[0][1] = 'tools/';                  // the Tools' page URL
    +$_section[1][0] = _AT('sitemap');            // the Site-Map's page title
    +$_section[1][1] = 'tools/sitemap/index.php'; // the Site-Map's page URL
    +

    + +

    Location

    +

    Declared on every page that is directly accessible.

    + + +top +

    18. Useful Functions

    +

    The functions listed below provide vital functionality for ATutor pages. Developers will most likely end up using most, if not all, of the functions below. Please review the Function Definitions (Prototypes) section for an explanation of the syntax being used. Additional javadoc comments can be found with each function's definition.

    + +

    18.1 authenticate()

    +

    authenticate() -- Authenticates the current user against a specified privilege.

    + +

    Description

    +

    mixed authenticate( integer $privilege [, boolean $check] )

    + +

    Authenticates the current user against $privilege. If $check is AT_PRIV_RETURN then the function will return the status of the authentication with TRUE meaning the user has been successfully authenticated or FALSE otherwise. With $check set to FALSE (default), the function will call exit to abort the script if the user cannot be authenticated and return TRUE otherwise.

    + +

    The instructor user will always return TRUE.

    + +

    $privilege is set to one of the constants defined in `include/lib/constants.inc.php`.

    + +

    Please use only AT_PRIV_RETURN or FALSE as possible values for $check as additional options may be added and the value of the constant changed.

    + +

    Location

    +

    `include/vitals.inc.php`

    + +

    Example 1

    +

    To authenticate an entire page using the announcements management privilege: +

    +define('AT_INCLUDE_PATH', '../include/');
    +require (AT_INCLUDE_PATH . 'vitals.inc.php');
    +/**
    +/* exit if the user cannot be authenticated
    + * otherwise continue loading the page.
    + */
    +authenticate(AT_PRIV_ANNOUNCEMENTS);
    +

    +

    Example 2

    +

    To authenticate a block of code using the forums management privilege: +

    +if (authenticate(AT_PRIV_FORUMS, AT_PRIV_RETURN)) {
    +    // ... this user has been authenticated
    +}
    +

    + +

    18.2 _AT()

    +

    _AT() -- Returns translated terms.

    + +

    Description

    +

    string _AT( string $term [, string $argument1 [, string $argument2 ...]] )

    + +

    This function returns a translated version of $term based on the user's current language preference as defined in $_SESSION[lang]. If $term cannot be found in the language database, it will return `[ $term ]` to signify that it was not found.

    + +

    Terms may require supplements in the form of additional arguments (see example 2). A term may require zero or more arguments. If a term requires arguments, then they must all be provided; no argument can be left out.

    + +

    Location

    +

    `include/lib/output.inc.php`

    + +

    Example 1

    +

    Printing a single term: +

    +/* echo a translated version of the 'tools' string.
    + * i.e. 'Tools' in English, 'Outils' in French, etc..
    + */
    + $_SESSION['lang'] = 'en';
    +echo '<h2>' . _AT('tools') . '</h2>';
    +
    + $_SESSION['lang'] = 'fr';
    +echo '<h2>' . _AT('tools') . '</h2>';
    +

    + +

    Result: +

    <h2>Tools</h2>
    +<h2>Outils</h2>
    +

    + +

    Example 2

    +

    Printing a phrase with arguments: +

    +$username = 'Jon';
    +echo _AT('welcome_message', $username);
    +

    +

    Result: +

    Hello, Jon. Welcome back.

    + + +

    18.3 AT_print()

    +

    AT_print() -- Transforms and formats user data for printing.

    + +

    Description

    +

    string AT_print( string $input, string $field_name [, boolean $runtime_html] )

    + +

    This function returns a transformed version of $input based on the rules specified by $field_name. $input is assumed to originate from the database, but it may be generalised in the future.

    + +

    $field_name is the unique name of the $input field in the form of table_name.field_name. The formatting options for the given field are defined in `include/lib/constants.inc.php`. If $field_name is not a valid option as defined in the constants file then the function will return $input unchanged.

    + +

    The boolean $runtime_html is used by fields which have an optional HTML formatting field. $runtime_html should be the associated HTML formatting field for that data. If set to FALSE then HTML elements will be escaped from $input and new line characters converted to <br />s.

    + +

    No data from the database should be printed without passing it through this function first.

    + +

    Location

    +

    `include/lib/output.inc.php`

    + +

    Example 1

    +

    Printing a field where HTML is not allowed: +

    +$username = 'my_name<b>_is';
    +$value    = AT_print($username, 'members.login'); // escape the '<b>' tag
    +echo $value

    + +

    Result: +

    my_name<b>_is

    + + +

    18.4 AT_date()

    +

    AT_date() -- Returns a localised version of a date.

    + +

    Description

    +

    string AT_date( [string $format [, integer $timestamp [, integer $format_type]]] )

    + +

    This function returns the string representation of the given $timestamp as transformed by $format. Uses the same options as PHP's date() function, but requires a % in front of each argument. If $timestamp is not specified, then the current time will be used.

    + +

    $format_type specifies the type of time stamp being provided. Available types are defined in `include/lib/constants.inc.php`. Possible options are: +

    +
    AT_DATE_MYSQL_DATETIME
    +
    The default. Format YYYY-MM-DD HH:MM:SS.
    + +
    AT_DATE_MYSQL_TIMESTAMP_14
    +
    Format YYYYMMDDHHMMSS.
    + +
    AT_DATE_UNIX_TIMESTAMP
    +
    A regular UNIX time stamp; seconds since epoch.
    + +
    AT_DATE_INDEX_VALUE
    +
    A special case specifying that only the single value of $format should be returned. The index into a specified date array. Only available for the following date options: %D, %l, %F, %M.
    +
    +

    + +

    The following arguments are language dependent: +

    +
    %D
    +
    A three-letter textual representation of a day, Mon through Sun
    + +
    %F
    +
    A full textual representation of a month, January through December
    + +
    %l (lowercase 'L')
    +
    A full textual representation of the day of the week, Monday through Sunday
    + +
    %M
    +
    A three-letter textual representation of a month, Jan through Dec
    +

    + +

    The following arguments are not yet supported to be language dependent, but may be in the future: +

    +
    %S
    +
    English ordinal suffix for the day of the month, 2 characters st, nd, rd or th. Works well with %j
    + +
    %a
    +
    Lowercase Ante meridiem and Post meridiem am or pm
    + +
    %A
    +
    Uppercase Ante meridiem and Post meridiem AM or PM
    +

    + +

    In most (soon to be all) cases, $format will be specified using a call to _AT() to retrieve the correct date format for that language. See Example 2 below.

    + +

    Location

    +

    `include/lib/output.inc.php`

    + +

    Example 1

    +

    Returning a specified date using a UNIX time stamp: +

    +$time = mktime(0, 0, 0, 7, 14, 2004);
    +echo AT_Date('%l %F %j, %Y', $time, AT_DATE_UNIX_TIMESTAMP);
    +

    + +

    Result: +

    Wednesday July 14, 2004

    + +

    Example 2

    +

    Returning a specified date using a UNIX time stamp that is also language dependent: +

    +$time = mktime(0, 0, 0, 7, 14, 2004);
    +
    +$_SESSION['lang'] = 'en';
    +echo AT_Date(_AT('announcement_date_format'), $time, AT_DATE_UNIX_TIMESTAMP);
    +
    +echo '<br />';
    +$_SESSION['lang'] = 'fr';
    +echo AT_Date(_AT('announcement_date_format'), $time, AT_DATE_UNIX_TIMESTAMP);
    +

    + +

    Result: +

    Wednesday July 14, 2004
    +mercredi, 14 juillet 2004

    + +

    Example 3

    +

    Returning a single month name: +

    +$_SESSION['lang'] = 'fr';
    +The second month in French is: <?php echo AT_date('%F', 2, AT_DATE_INDEX_VALUE) ?>
    +

    + +

    Result: +

    +The second month in French is: février
    +

    + +

    18.5 $addslashes()

    +

    $addslashes() -- Quotes a string with slashes.

    + +

    Description

    +

    string $addslashes( string $str )

    + +

    If get_magic_quotes_gpc is disabled, then this variable function maps onto addslashes(), otherwise it maps onto my_add_null_slashes() which simply returns the input $str unchanged.

    + +

    Location

    +

    `include/vitals.inc.php`

    + +

    Example 1

    +

    With magic_quotes_gpc enabled: +

    +$str = "What's going on?";
    +
    +// prints magic_quotes_gpc: 1
    +echo 'magic_quotes_gpc: ' . get_magic_quotes_gpc();
    +
    +// maps to my_add_null_slashes(). prints What\'s going on? [correct]
    +echo $addslashes($str);
    +
    +// prints What\\\'s going on? [wrong]
    +echo addslashes($str);
    +

    + +

    Example 2

    +

    With magic_quotes_gpc disabled: +

    +$str = "What's going on?";
    +
    +// prints magic_quotes_gpc: 0
    +echo 'magic_quotes_gpc: ' . get_magic_quotes_gpc();
    +
    +// maps to addslashes(). prints What\'s going on? [correct]
    +echo $addslashes($str);
    +
    +// prints What\'s going on? [correct]
    +echo addslashes($str);
    +

    + + +

    18.6 debug()

    +

    debug() -- Outputs a variable.

    + +

    Description

    +

    void debug( mixed $var [, string $title] )

    + +

    This function is used for printing variables for debugging. $var can be of any type. The output is nicely formatted and easy to read. debug() will not output anything if the constant AT_DEVEL evaluates to FALSE.

    + +

    $title is available to label the debugging box for distinguishing it from other debugging boxes on the same page.

    + +

    Location

    +

    `include/vitals.inc.php`

    + +

    Example 1

    +

    Viewing the contents of an array: +

    +$my_array = array('apple' => 'green', 4 => 'something');
    +debug($my_array, 'my_array');
    +

    + +

    Result: +

    +    my_array
    +Array
    +(
    +    [apple] => green
    +    [4] => something
    +)
    +

    + +

    18.7 get_login()

    +

    get_login() -- Returns the login name of a member.

    + +

    Description

    +

    string get_login( integer $id )

    + +

    Returns the login name of the member whose ID is $id. There is no error handling.

    + +

    Location

    +

    `include/vitals.inc.php`

    + + +

    18.8 urlencode_feedback()

    +

    urlencode_feedback() -- Encodes a feedback code.

    + +

    Description

    +

    mixed urlencode_feedback( mixed $f )

    + +

    This function returns a URL safe encoding of a feedback code. Its purpose is to encode the feedback into the URL so that the page being redirected to will then output the feedback. $f may be an array of feedback codes, where additionally, each feedback code may be an array consisting of supplementary arguments. If $f is an array then the return value will be its string representation, otherwise the function will return $f unchanged.

    + +

    The way feedback is implemented may change in the future, so it is best to use this function even if the feedback code is not an array.

    + +

    Location

    +

    `include/vitals.inc.php`

    + +

    Example 1

    +

    To encode a feedback array: +

    +$f[] = array(AT_FEEDBACK_FILE_UPLOADED_ZIP, $file_name);
    +
    +header('Location: file_manager.php?f='.urlencode_feedback($f));
    +exit;
    +

    + +top +

    19. Useful Constants

    +

    These constants are part of the vital functionality of ATutor.

    + +

    19.1 AT_INCLUDE_PATH

    +

    Description

    +

    The AT_INCLUDE_PATH must be defined before you require or include any files. The constant defines the relative path to the `include/` directory. For security reasons no file should ever be called-in without using this constant!

    + +

    Example 1

    +

    Requiring the vitals file from the tools page: +

    define('AT_INCLUDE_PATH', '../include/');
    +require (AT_INCLUDE_PATH . 'vitals.inc.php');

    + +

    Location

    +

    Declared on every page that is directly accessible.

    + +

    19.2 SEP

    +

    Description

    +

    For XHTML compliance, we have created this constant to use when applying variables to URL arguments. The constant is one of the values defined by PHP's arg_separator.input, with a preference for the semi-colon (`;`), if available, over the ampersand (`&`).

    + +

    Example 1

    +

    Printing a dynamic link: +

    +$arg1 = 'one';
    +$arg2 = 'two';
    +
    +echo "SEP is ".SEP."\n";
    +echo '<a href="index.php?arg1=' . $arg1 . SEP . 'arg2=' . $arg2 . '">link</a>';

    + +

    Result: +

    +SEP is ;
    +<a href="index.php?arg1=one;arg2=two">link</a>
    +

    + +

    Location

    +

    `include/lib/constants.inc.php`

    + + +

    19.3 AT_DEVEL

    +

    Description

    +

    Enables or disables usage of the debug() function.

    + +

    Location

    +

    `include/vitals.inc.php`

    + + +

    19.4 TABLE_PREFIX

    +

    Description

    +

    The TABLE_PREFIX constant holds the prefix to the ATutor database tables. It is needed when creating SQL queries.

    + +

    Location

    +

    `include/config.inc.php`

    + + +

    19.5 VERSION

    +

    Description

    +

    The version number of this ATutor installation.

    + +

    Location

    +

    `include/lib/constants.inc.php`

    + + + +top +

    20. Install & Upgrade Scripts

    +

    Installing or upgrading ATutor is done with the scripts found in the `install/` directory. Two files in particular control the installation or upgrading flow and are appropriately named `install.php` and `upgrade.php`. For actual documentation on installing or upgrading please see ATutor's official documentation.

    + +

    The `install/` directory contains two other subdirectories that are used during the installation or upgrade process. The `install/db/` directory contains database schema files and are clearly labeled. The `install/include/` directory contains scripts that are common to both processes and labeled according to their order in either process.

    + +

    20.1 Install Script

    +

    The `install.php` script requires each step as it's needed as the $step counter variable is incremented. To add or edit a step, edit the `install.php` file.

    + +

    20.2 Upgrade Script

    +

    The `upgrade.php` script works exactly the same as the install script does, but requires different files (step prefixed with a 'u'). To upgrade the database schema an SQL file named `atutor_upgrade_from_to_to.sql` must be created, where from is the exact version of the previous ATutor version, and to is the next stable version.

    + + +
    top +

    21. Accessibility

    +

    Part of ATutor's philosophy is to be "designed with accessibility and adaptability in mind", we advise you to consider carefully the practices outlined on the following sites:

    + + +top +

    22. Validation

    +

    Please use the W3C Markup Validation Service, a free service, to check your pages for XHTML conformance, W3C Recommendations and other standards.

    + +top +

    23. Sample Script

    +

    The following is sample code that shows the general flow of an ATutor script. The example shows how you may use some of the variables and functions available to you. Some scripts may not need all the variables and functions used below. +

    <?php
    +// 0. insert the SVN keywords
    +// $Id: guidelines.html 1275 2004-07-28 16:02:49Z joel $
    +
    +// 1. define relative path to `include` directory:
    +define('AT_INCLUDE_PATH', '../include/');
    +
    +// 2. require the `vitals` file before any others:
    +require (AT_INCLUDE_PATH . 'vitals.inc.php');
    +
    +// 3. authenticate this user:
    +authenticate(AT_PRIV_SPECIAL_PRIV);
    +
    +// 4. define the breadcrumbs path:
    +$_section[0][0] =  _AT('tools');
    +$_section[0][1] = 'tools/';
    +$_section[1][0] =  _AT('my_page');
    +$_section[1][1] =  'tools/page.php;
    +
    +// 5. handle any post request:
    +if (isset($_POST['submit'])) {
    +  // 5.1 check for errors:
    +  if ($_POST['some_field'] == '') {
    +      $msg->addError('SOME_ERROR_CODE');
    +  }
    +
    +  if (!$msg->containsErrors()) {
    +      //5.2 complete the desired action here. (example: insert into DB)
    +
    +      //5.3 set the feedback message and add it to the URL:
    +      $msg->addFeedback('MESSAGE');
    +      $url = $_base_href . 'tools/index.php?arg1=yes';
    +
    +      //5.4 redirect after successful operation:
    +      header('Location: ' . $url);
    +      exit;
    +  }
    +}
    +
    +// 6. start the page display by calling the header
    +require (AT_INCLUDE_PATH . 'header.inc.php');
    +
    +// 7. display any feedback or error messages that my occur:
    +require (AT_INCLUDE_PATH . 'html/feedback.inc.php');
    +
    +/*
    + * 8. display the page contents here.
    + */
    +
    +// 9. finish the page by calling the footer
    +require (AT_INCLUDE_PATH . 'footer.inc.php');
    +?>

    + +top +

    24. Credits & Additional Sources

    + + + + \ No newline at end of file diff --git a/documentation/developer/modules.html b/documentation/developer/modules.html new file mode 100644 index 000000000..7888a23fe --- /dev/null +++ b/documentation/developer/modules.html @@ -0,0 +1,772 @@ + + + + ATutor Module Documentation + + + + + + + +

    Module Development Documentation

    + + + +

    Introduction

    +

    ATutor 1.5.2 introduced the concept of modules, providing developers with a framework to implement additional functionality in a coherent and loosely coupled way.

    + +

    The framework defines methods for assigning privileges, backing-up and restoring content, deleting course specific content, and adding side menu blocks, student tools, course management and administrative tools, as well as public tools and other types of added functionality .

    + +

    The intent is to allow for the development and distribution of modules independent of the ongoing development and release of ATutor. The module structure does allow for the creation of modules that run software that is not distributed under the GNU General Public License, but distributed separately under their own, perhaps commercial licenses.

    + +

    The Hello World example module is included with each ATutor distribution for developers who want to investigate how modules work. The module is found in the mods/hello_world directory. A copy of the Hello World module works well as a starting point for creating a new module, since it implements (in a simple way) just about all the features found in modules. Also see the files from other modules that operate like you expect your module to operate.

    + + +

    Structure

    +

    Modules are stored under ATutor's mods directory. Core modules are stored in the mods/_core subdirectory and are made available with every release of ATutor. These modules cannot be disabled by the administrator as they are vital to ATutor's functionality. Standard modules are stored in the mods/_standard subdirectory and are also made available with every release of ATutor. Standard modules can be disabled by the administrator. Extra modules are stored in the mods directory and are installed and distributed independently of ATutor. Although the process of developing modules is the same for each type of module, only extra modules can be distributed separately, while core and standard modules are added to the ATutor code repository (i.e. SVN trunk).

    + +

    Whenever a module identifier is needed within code, it should appear in lowercase with spaces converted to underscores.

    + +

    The module name, and hence the directory and function names (see below for additional details), must be unique across all possible modules. A module should not be made available if an existing module is already being distributed under that same name. It is up to the module developer to ensure that their module name is unique.

    + +

    Directory Name

    +

    The name given to the directory must be chosen carefully. The name is used to namespace the module's function by prefixing required functions with that directory name. For example, a module named Example Maker should be placed in a directory named example_maker and the delete function would be named example_maker_delete().

    + +

    Files

    +

    The following files should exist under the module's top level directory: mods/module_name.

    + +
    +
    module.php
    +
    This is the main module file which gets included whenever a page is loaded. Required.
    + +
    module.xml
    +
    This file is used only for identifying the module for distribution and is only used when viewing a module's details. Required.
    + +
    module_install.php
    +
    This file is used when installing the module. Required.
    + +
    module_backup.php
    +
    This file is used when backing-up and restoring course content. Optional.
    + +
    module_delete.php
    +
    This file is used when deleting course specific content. Optional.
    + + +
    module_cron.php
    +
    This file is used to run module related commands at specified intervals. Optional.
    + +
    module.sql
    +
    This file is used to add tables and/or modify data in the ATutor database. Also used to insert language into the language_text table. Optional.
    +
    + +

    The module.xml File

    +

    The module.xml file is used for displaying information about the module before it is installed and is useful when distributing the module.

    +
    +<?xml version="1.0" encoding="ISO-8859-1"?> 
    +<module version="0.1"> 
    +    <name lang="en">Example Maker</name> 
    +    <description lang="en">This is an example module that makes examples.</description> 
    +    <maintainers>
    +        <maintainer> 
    +            <name>ATutor Team</name> 
    +            <email>info@atutor.ca</email> 
    +        </maintainer>
    +        <maintainer> 
    +            <name>John Doe</name> 
    +            <email>jd@example.com</email> 
    +        </maintainer>
    +    </maintainers> 
    +    <url>http://www.example.com</url> 
    +    <license>BSD</license> 
    +    <release> 
    +        <version>0.2</version> 
    +        <date>2005-08-22</date> 
    +        <state>stable</state> 
    +        <notes>Fixes several bugs in previous version.</notes> 
    +    </release> 
    +</module>
    +
    + + +

    The module.php File

    +

    The module.php file is typically used to set permissions, and to link module components into the ATutor navigation elements, as tool icons, navigation tabs, sub navigation menus, or side menu blocks, as administrator, course management, and student tools. It is also used to link tools to My Start Page, or to various public pages that appear where a user is browsing the system without being logged in. The module.php file can also be used to run module specific functionality. It runs everytime a module screen is viewed, loading whatever settings it may contain, or running any scripts that may be required by the module.

    +
    +<?php
    +/*******
    + * doesn't allow this file to be loaded with a browser.
    + */
    +if (!defined('AT_INCLUDE_PATH')) { exit; }
    +
    +/******
    + * this file must only be included within a Module obj
    + */
    +if (!isset($this) || (isset($this) && (strtolower(get_class($this)) != 'module'))) { exit(__FILE__ . ' is not a Module'); }
    +
    +/*******
    + * assign the instructor and admin privileges to the constants.
    + */
    +define('AT_PRIV_EXAMPLE_MAKER',       $this->getPrivilege());
    +define('AT_ADMIN_PRIV_EXAMPLE_MAKER', $this->getAdminPrivilege());
    +
    +/*******
    + * create a side menu box/stack.
    + */
    +$this->_stacks['example_maker'] = array('title_var'=>'example_maker', 'file'=>'mods/example_maker/side_menu.inc.php');
    +// ** possible alternative: **
    +// $this->addStack('example_maker', array('title_var' => 'example_maker', 'file' => './side_menu.inc.php');
    +
    +/*******
    + * if this module is to be made available to students on the Home or Main Navigation.
    + */
    +$_student_tool = 'mods/example_maker/index.php';
    +// ** possible alternative: **
    +// $this->addTool('./index.php');
    +
    +/*******
    + * add the admin pages when needed.
    + */
    +if (admin_authenticate(AT_ADMIN_PRIV_EXAMPLE_MAKER, TRUE) || admin_authenticate(AT_ADMIN_PRIV_ADMIN, TRUE)) {
    +	$this->_pages[AT_NAV_ADMIN] = array('mods/example_maker/index_admin.php');
    +	$this->_pages['mods/example_maker/index_admin.php']['title_var'] = 'example_maker';
    +	$this->_pages['mods/example_maker/index_admin.php']['parent']    = AT_NAV_ADMIN;
    +}
    +
    +/*******
    + * instructor Manage section:
    + */
    +$this->_pages['mods/example_maker/index_instructor.php']['title_var'] = 'example_maker';
    +$this->_pages['mods/example_maker/index_instructor.php']['parent']   = 'tools/index.php';
    +// ** possible alternative: **
    +// $this->pages['./index_instructor.php']['title_var'] = 'example_maker';
    +// $this->pages['./index_instructor.php']['parent']    = 'tools/index.php';
    +
    +/*******
    + * student page.
    + */
    +$this->_pages['mods/example_maker/index.php']['title_var'] = 'example_maker';
    +$this->_pages['mods/example_maker/index.php']['img']       = 'mods/example_maker/example_maker.jpg';
    +
    +
    +/* public pages */
    +$this->_pages[AT_NAV_PUBLIC] = array('mods/example_maker/index_public.php');
    +$this->_pages['mods/example_maker/index_public.php']['title_var'] = 'example_maker';
    +$this->_pages['mods/example_maker/index_public.php']['parent'] = 'login.php';
    +$this->_pages['login.php']['children'] = array('mods/example_maker/index_public.php');
    +
    +/* my start page pages */
    +$this->_pages[AT_NAV_START]  = array('mods/example_maker/index_mystart.php');
    +$this->_pages['mods/example_maker/index_mystart.php']['title_var'] = 'example_maker';
    +$this->_pages['mods/example_maker/index_mystart.php']['parent'] = 'users/index.php';
    +$this->_pages['users/index.php']['children'] = array('mods/example_maker/index_mystart.php');
    +?>
    +
    + +

    The module.sql File

    +

    A very simple module.sql file such as the following, creates a table for the module, and inserts it's language into the ATutor language_text table. Module language can then be managed from the ATutor Language Manager. The module.sql file can contain any number of SQL statements used to add tables or insert data into the ATutor database.

    + +
    +# sql file for example maker module
    +
    +CREATE TABLE example_maker (
    +   `course_id` mediumint(8) unsigned NOT NULL,
    +   `value` VARCHAR( 30 ) NOT NULL ,
    +   PRIMARY KEY ( `course_id` )
    +);
    +
    +INSERT INTO `language_text` VALUES ('en', '_module','example_maker','Example Maker',NOW(),'');
    +INSERT INTO `language_text` VALUES ('en', '_module','AT_ERROR_GOES_HERE','Example Maker Error Message',NOW(),'');
    +
    +
    + +

    Installation

    +

    The module_install.php script gets executed during the installation process, using the administrator's Install Module feature. If the script's execution results in $msg->containsErrors() evaluating to TRUE, then the errors are displayed and the user is prompted to correct them. The process is then repeated until errors are no longer being generated and the module is installed successfully. Ultimately, it is up to the module to determine the logical steps involved in its installation. For example, it might be better to create the data directories before trying to create any database tables since creating the directory may require several attempts. Typically the flow we describe here should be suitable in most cases.

    + +

    Theoretically, the install script's execution is wide-open and does not have to adhere to the process outlined below or make use of any special privileges, provided it generates errors as appropriate.

    + +
    # pseudo-code for installing a module:
    +while (there are errors)
    +    print the error message
    +
    +    # inside module_install.php:
    +    define the privileges used
    +
    +    if (create database tables is unsuccessful) then
    +        generate an error message
    +
    +    if (there are no errors AND there is an SQL file) then
    +        execute the SQL file
    +end while
    +
    +add the module to the system using the defined privileges
    +
    + + +

    The module_install.php File

    +

    The module_install.php file is typically used to run any installation related files, such as an sql file that sets up a database table, or installs the language for the module. The following is an example module_install.php file

    +
    +<?php
    +/*******
    + * the line below safe-guards this file from being accessed directly from
    + * a web browser. It will only execute if required from within an ATutor script,
    + * in our case the Module::install() method.
    + */
    +if (!defined('AT_INCLUDE_PATH')) { exit; }
    +
    +/*******
    + * Note: the many options for these variables are used to decrease confusion.
    + *       TRUE | FALSE | 1 will be the convention.
    + *
    + * $_course_privilege
    + *     specifies the type of instructor privilege this module uses.
    + *     set to empty | FALSE | 0   to disable any privileges.
    + *     set to 1 | AT_PRIV_ADMIN   to use the instructor only privilege.
    + *     set to TRUE | 'new'        to create a privilege specifically for this module:
    + *                                will make this module available as a student privilege.
    + *
    + * $_admin_privilege
    + *    specifies the type of ATutor administrator privilege this module uses.
    + *    set to FALSE | AT_ADMIN_PRIV_ADMIN   to use the super administrator only privilege.
    + *    set to TRUE | 'new'                  to create a privilege specifically for this module:
    + *                                         will make this module available as an administrator privilege.
    + *
    + *
    + * $_cron_interval
    + *    if non-zero specifies in minutes how often the module's cron job should be run.
    + *    set to 0 or not set to disable.
    + */
    +$_course_privilege = TRUE; // possible values: FALSE | AT_PRIV_ADMIN | TRUE
    +$_admin_privilege  = TRUE; // possible values: FALSE | TRUE
    +$_cron_interval    = 35; // run every 30 minutes
    +
    +
    +/********
    + * the following code is used for creating a module-specific directory.
    + * it generates appropriate error messages to aid in its creation.
    + */
    +$directory = AT_CONTENT_DIR .'example_maker';
    +
    +// check if the directory is writeable
    +if (!is_dir($directory) && !@mkdir($directory)) {
    +	$msg->addError(array('MODULE_INSTALL', '<li>'.$directory.' does not exist. Please create it.</li>'));
    +} else if (!is_writable($directory) && @chmod($directory, 0666)) {
    +	$msg->addError(array('MODULE_INSTALL', '<li>'.$directory.' is not writeable. On Unix issue the command <kbd>chmod a+rw</kbd>.</li>'));
    +}
    +
    +
    +/******
    + * the following code checks if there are any errors (generated previously)
    + * then uses the SqlUtility to run any database queries it needs, ie. to create
    + * its own tables.
    + */
    +if (!$msg->containsErrors() && file_exists(dirname(__FILE__) . '/module.sql')) {
    +	// deal with the SQL file:
    +	require(AT_INCLUDE_PATH . 'classes/sqlutility.class.php');
    +	$sqlUtility =& new SqlUtility();
    +
    +	/*
    +	 * the SQL file could be stored anywhere, and named anything, "module.sql" is simply
    +	 * a convention we're using.
    +	 */
    +	$sqlUtility->queryFromFile(dirname(__FILE__) . '/module.sql', TABLE_PREFIX);
    +}
    +
    +?>
    +
    + + + +

    Specifying Privileges

    +

    Privileges control who has access to the course management and administrative sections.

    + +

    See the Authentication & Privileges section for additional details using the privileges.

    + +
    +
    $_course_privilege
    +

    This variable controls access to a course's management section and can take one of the following values:

    +
      +
    • TRUE: To use a custom assignable privilege level. If a custom privilege is created, the module will appear as an option when assigning privileges to enrolled students.
    • +
    • AT_PRIV_ADMIN: To use the instructor privilege. Only the instructor will be given access to the module's management section.
    • +
    • FALSE: To disable the privilege if there is no management section for the module.
    • +
    +
    + +
    $_admin_privilege
    +

    This variable can take one of the following values:

    +
      +
    • TRUE: To use a custom assignable privilege level. If a custom privilege is created then the module will appear as an option when assigning privileges to administrators
    • +
    • AT_ADMIN_PRIV_ADMIN: To use the super administrator privilege. Only the super administrator will be given access to the module's administration section.
    • +
    +
    +
    + +

    Note that creating a privilege is not in itself enough to make the module appear in the Manage section! The hierarchy and navigation path to the management page must be set correctly. See the Navigation & Hierarchy section for additional details.

    + +

    Creating a Data Directory

    +

    It is best to keep the directory within the AT_CONTENT_DIR directory as it should already allow the creation of files and directories by the web server. It is then up to the module to create individual course directories as needed.

    +
    +$directory = AT_CONTENT_DIR .'example_maker';
    +
    +// check if the directory is writable
    +if (!is_dir($directory) && !@mkdir($directory)) {
    +    $msg->addError(array('MODULE_INSTALL', '<li>'
    +                         .$directory
    +                         .' does not exist. Please create it.</li>'));
    +} else if (!is_writable($directory) && @chmod($directory, 0666)) {
    +    $msg->addError(array('MODULE_INSTALL', '<li>'
    +                         . $directory
    +                         .' is not writable.</li>'));
    +} // else: it was created successfully.
    +
    + +

    Executing an SQL File

    +

    If the module requires its own database tables or custom language, then it will have to create them itself. The SQL can either be executed inline using PHP database execution directly, or using the SQLUtility class to execute an external SQL file. Also see module.sql for more about creating an SQL file.

    +
    +if (!$msg->containsErrors() && file_exists(dirname(__FILE__) . '/module.sql')) {
    +    // deal with the SQL file:
    +    require(AT_INCLUDE_PATH . 'classes/sqlutility.class.php');
    +    $sqlUtility =& new SqlUtility();
    +    $sqlUtility->queryFromFile(dirname(__FILE__) . '/module.sql', TABLE_PREFIX);
    +}
    +
    + +

    Generating Errors Messages

    +

    It is up to the module to generate and check for any errors that occur during the installation. An error message can be generated using $msg->addError(array('MODULE_INSTALL', '<li>your error msg goes here</li>'));. Note that the text supplied to the error message is not translated in this case. If the language should be localised, then the appropriate language vairable should replace the text. Something like $msg->addError(array('MODULE_INSTALL', 'AT_ERROR_GOES_HERE')); . The corresponding SQL INSERT statement should then be found in the module.sql file, so the language gets added to the language_text table in ATutor.

    + +

    To check if any errors have been generated, use $msg->containsErrors() which evaluates to TRUE if a previous error has been generated.

    + +

    See the Error and Feedback section of the Developer Documentation for more details about displaying messages.

    + +

    Authentication & Privileges

    +

    See the Installation: Specifying Privileges section on creating privileges during the installation process.

    + +

    Authentication uses constants for the privilege levels. The privileges should be declared in the module.php file using the $this->getPrivilege() and $this->getAdminPrivilege() methods, respectively.

    + +
    +define('AT_PRIV_FORUMS',       $this->getPrivilege()      );
    +define('AT_ADMIN_PRIV_FORUMS', $this->getAdminPrivilege() );
    +
    + +

    Once declared, a page can then authenticate against those privileges using either the authentication() or the admin_authenticate() functions.

    + +
    +define('AT_INCLUDE_PATH', '../include/');
    +require(AT_INCLUDE_PATH.'vitals.inc.php');
    +// authenticate the administrator forums section:
    +admin_authenticate(AT_ADMIN_PRIV_FORUMS);
    +
    + +

    Localisation

    +

    Although a module can be created with all hard-coded language, we recommended you use ATutor's localisation functions. All of ATutor's language is stored in the database, which is then retrieved using the _AT() function for simple terms and the $msg object for feedback and error messages.

    + +

    Additional details on localising ATutor can be found on the Thing You Should Know Before Translating and in the ATutor Developer Documentation.

    + +

    Module-specific language should be inserted into the language_text table during the installation process. The fields in the table are as follows:

    + +
    +
    language_code
    +
    The ISO-639-1 language code plus locale.
    + +
    variable
    +
    Set to _module for modules.
    + +
    term
    +
    The variable used for retrieving the language.
    + +
    text
    +
    The language text.
    + +
    revised_date
    +
    Set to NOW() for modules.
    + +
    context
    +
    Short description of the language text.
    +
    + +

    Each language item should have a corresponding SQL INSERT line in the module.sql file, that gets inserted into the ATutor language_text table during installation. Do not include a prefix (e.g. "AT_") on the language_text table name. The installer will detect the right prefix, and automatically prepend it to tables names. Also see the section module.sql for information about creating a file to install the module's language.

    +
    +# Insert module specific language:
    +INSERT INTO `language_text` VALUES ('en',
    +                                    '_module',
    +                                    'example_maker',
    +                                    'Example Maker',
    +                                     NOW(),
    +                                    'the module title');
    +
    + +

    Configuration Options

    +

    Module configuration options can be stored in the ATutor config table, and retrieved using a $_config[] array variable. All module configuration key/value pairs are automatically loaded from the table into global memory while ATutor is running, and can be accessed from any of the module scripts (or from anywhere is ATutor for that matter). The value for a particular configuration option is retrieved by entering its key into the array. To retrieve a URL for the Example Maker module for example, you might use $_config['example_maker'].

    +

    In the following example of an index_admin.php file, the form below accepts a URL to an external application used by the Example Maker module (though it could be any value). In this case imagine a third party application has been installed, and the URL to the application is being stored as a configuration option for the example_maker module. When the form is submitted, $_POST['uri'] is inserted into the config table as the value for the example_maker key. The following is an example module administrator script used to add/edit a config option for the example_maker module.

    + +

    The index_admin.php File

    +
    +
    +<?php
    +// make sure user is allowed to see this page (admins only)
    +
    +admin_authenticate(AT_ADMIN_PRIV_EXAMPLE_MAKER);
    +	
    +if (isset($_POST['submit'])) {
    +	// trim whitespace from the value submitted
    +	$_POST['uri'] = trim($_POST['uri']);
    +
    +	// display an error message if the value is empty
    +	if (!$_POST['uri']){
    +		$msg->addError('EXAMPLE_MAKER_ADD_EMPTY');
    +	}
    +	
    +	// if no errors, insert the key "example_maker" and value "$_POST['uri']" into the config table	
    +	if (!$msg->containsErrors()) {
    +		$_POST['uri'] = $addslashes($_POST['uri']);
    +		$sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES ('example_maker', '$_POST[uri]')";
    +		mysql_query($sql, $db);
    +		$msg->addFeedback('EXAMPLE_MAKER_URL_SAVED');
    +
    +		header('Location: '.$_SERVER['PHP_SELF']);
    +		exit;
    +	}
    +}
    +
    +require (AT_INCLUDE_PATH.'header.inc.php');
    +
    +/*******
    + *  First check to see if there is a value for the example_maker key $_config['example_maker']
    + *  If there isn't a value then a missing value message is displayed
    + *  The form below that has a single field for submitting a value, in this case a URL
    + *  If the value exists in the config table, then display it in the text field using  $_config['example_maker']
    + */
    +	
    +?>
    +
    +<?php if ($_config['example_maker']): ?>
    +	<div class="input-form">
    +		<div class="row">
    +			<p><?php echo _AT('example_maker_text'); ?></p>
    +		</div>
    +	</div>
    +<?php else: ?>
    +	<div class="input-form">
    +		<div class="row">
    +			<p><?php echo _AT('example_maker_missing_url');  ?></p>
    +		</div>
    +	</div>
    +<?php endif; ?>
    +
    +<form action="<?php  $_SERVER['PHP_SELF']; ?>" method="post">
    +	<div class="input-form">
    +		<div class="row">
    +			<p><label for="uri"><?php echo _AT('example_maker_url'); ?></label></p>
    +	
    +			<input type="text" name="uri" value="<?php echo $_config['example_maker']; ?>" id="uri" size="60" style="min-width: 65%;" />
    +		</div>
    +		<div class="row buttons">
    +			<input type="submit" name="submit" value="<?php echo _AT('save'); ?>"  />
    +		</div>
    +	</div>
    +</form>
    +
    + + +

    Custom Style Sheets

    +

    A custom style sheet can be linked into pages by setting $_custom_css to be the absolute path to the style sheet. This variable must be set on every page that requires that style sheet.

    + +
    +define('AT_INCLUDE_PATH', '../../include/');
    +require(AT_INCLUDE_PATH.'vitals.inc.php');
    +// using a custom style sheet:
    +$_custom_css = $_base_path . 'mods/example_maker/module.css';
    +
    + + +

    Side Menu Boxes

    +

    Side menu boxes generally appear in a column at the side of a course (though this layout can be altered by a theme). A module may implement one or more side menu boxes.

    + +

    Side menus are specified using the $_module_stacks array in module.php. $_module_stacks have the attributes title_var (or title) and file. The title_var value is the language key used for that box; the title will be generated by executing _AT($title_var). If title is set instead, a hard-coded title will be used. The file attribute specifies the absolute path to the side menu's include file.

    + +

    The key to the $_module_stacks should be the name of the module.

    + +
    +$_module_stacks['example_maker'] = array('title_var' => 'example_maker', 
    +                                         'file' => dirname(__FILE__).'\side_menu.inc.php');
    +
    + +

    Creating a side menu box involves using the $savant template object and assigning the output of the box to the dropdown_contents variable.

    + +
    +<?php global $savant;
    +
    +$box_content = 'This is my side menu box';
    +
    +$savant->assign('dropdown_contents', $box_content);
    +
    +$savant->assign('title', _AT('example_maker'));
    +$savant->display('include/box.tmpl.php');
    +?>
    +
    + + +

    Student Tools

    +

    Student tools are pages linked from the home page or the main navigation of courses. A module can only implement one student tool. An instructor controls which student tools are available to a course using the Student Tools section found under Manage.

    + +

    The tool main page must be specified using the $_student_tool variable in the module.php file. The value of that variable must be the relative path to the file from the ATutor base directory (not the module directory). Example: $_student_tool = 'mods/example_maker/index.php';.

    + +

    For the tool to correctly appear its Navigation & Hierarchy must be defined correctly. If the tool is to have an instructor management section then the parent must be specified as being tools/index.php and the module must have a non-zero privilege level.

    + +

    Navigation & Hierarchy

    +

    Every page in ATutor must have an entry in the global $_pages array where the key to the array is the relative path to the file from ATutor's base directory. Module pages are specified using the $_module_pages array, which are then merged into the $_pages array when the module.php file is loaded. The array supports the following attributes:

    + +
    +
    title_var
    +
    The language variable to be used with _AT().
    + +
    title
    +
    The hard-coded version of the language title. If set, overrides the usage of _AT(title_var). This version is not language independent.
    + +
    parent
    +
    The relative ATutor path to the parent page. Omit for Student Tools.
    + +
    img
    +
    The relative ATutor path to the icon to use. Only for Student Tools.
    + +
    children
    +
    An array whose values are relative ATutor paths to sub pages.
    + +
    guide
    +
    The the section of the handbook that the module page should link to. Not used for modules at this time.
    +
    + +

    For pages to appear in the instructor Manage section, their parent field must be set to tools/index.php.

    + +
    +$path = 'mods/example_maker/';
    +
    +// the student tool:
    +$_module_pages[$path.'index.php']['title_var'] = 'example_maker';
    +$_module_pages[$path.'index.php']['img']       = $path.'icon.gif';
    +$_module_pages[$path.'index.php']['children']  = array($path.'sub.php', $path.'more.php');
    +
    +    $_module_pages[$path.'sub.php']['title_var'] = 'sub_page';
    +    $_module_pages[$path.'sub.php']['parent']    = $path.'index.php';
    +
    +    $_module_pages[$path.'more.php']['title_var'] = 'more_page';
    +    $_module_pages[$path.'more.php']['parent']    = $path.'index.php';
    +
    +// the instructor page:
    +$_module_pages[$path . 'inst_index.php']['title_var'] = 'example_maker';
    +$_module_pages[$path . 'inst_index.php']['parent']    = 'tools/index.php';
    +
    + +

    Course Deletion

    +

    When a course is being deleted, or when a back-up is being restored by overriding (i.e. deleting) existing content, a module has to ensure that the content for that course is also deleted. If the module maintains course data directories, then those directories have to either be emptied or deleted. If the module uses database tables for course content, then it has to delete the appropriate entries for that course.

    + +

    The function used to delete the course content for that module must be stored in the module_delete.php file and named module_name_delete(). The delete function takes a single argument which is the ID of the course to delete.

    + +
    +<?php
    +function example_maker_delete($course) {
    +    global $db;
    +
    +    // delete directory
    +    $path = AT_CONTENT_DIR . 'example_maker/' . $course . '/';
    +    clr_dir($path);
    +
    +    // delete from database
    +    $sql = "DELETE 
    +            FROM ".TABLE_PREFIX."example_content 
    +            WHERE course_id=$course";
    +    mysql_query($sql, $db);
    +}
    +?>
    +
    + +

    Backing-Up and Restoring

    +

    It is possible for a module to include its content when a course backup is being created or restored. Backups support database tables with foreign-key constraints as well as course specific directories.

    + +

    Directories

    +

    A module can backup as many directories as it requires, all specified using the $dirs array variable.

    + +

    The example below uses the special ? token as the place holder for the course ID. When the course is backed-up, the question mark will be replaced with the correct course ID. The key to the array is the unique name of the directory to be used inside the backup archive file. The same information to create the backup is also used to restore it, so no additional details are required.

    +
    +$dirs = array();
    +$dirs['example_maker/'] = AT_CONTENT_DIR . 'example_maker/?/';
    +
    + + +

    Database Tables

    +

    There are two parts to backing-up and restoring a module's database tables. First, the SQL queries must be specified using the $sql array variable and then the restore functions must convert the rows so that they can be inserted into the database tables.

    + +

    The example below uses the special ? token as the place holder for the course ID. When the course is backed-up the question-mark will be replaced with the correct course ID. The key to the array is the unique name of the CSV file to save in the backup archive, without the extension. The SQL query itself must only select the fields that will be backed up. If there are foreign key constraints to preserve then the key will have to be retrieved as well so that it can be used when restoring the tables.

    + +
    +$sql = array();
    +$sql['example']  = 'SELECT title FROM '.TABLE_PREFIX.'example WHERE course_id=?';
    +
    + +

    For each key in the $sql array there must be a function with the same name, but suffixed with _convert. The tbl_name_convert() function must return the newly transformed row with respect to the version of ATutor that was used to generate the CSV file. The function accepts the following arguments:

    + +
    +
    $row
    +
    An array which represents a single row in the CSV file.
    + +
    $course_id
    +
    The course ID which this content should be associated with.
    + +
    $table_id_map
    +
    An associative array representing previously restored tables and their new keys. Used to preserve foreign key constraints.
    + +
    $version
    +
    The version of ATutor that was used to generate this file.
    +
    + +
    +function example_convert($row, $course_id, $table_id_map, $version) {
    +    $new_row = array();
    +    $new_row[0]  = 0; // auto-increment field
    +    $new_row[1]  = $course_id;
    +    $new_row[2]  = $row[1]; // the title
    +    if (version_compare($version, '1.5.2', '<')) {
    +        // this field did not exist prior to 1.5.2
    +        $new_row[3] = '';
    +    } else {
    +        $new_row[3] = $row[2];
    +    }
    +
    +    return $new_row;
    +}
    +
    + +

    Running Cron/Scheduling

    +

    The module_cron.php file can be used to run module related functions at specified intervals. The following example doesn't do much of anything..., but you get the idea. If cron has been enabled in ATutor, all the module_cron.php files from each module are run at the interval specified when the Cron is setup. See the Cron Setup sections in the Administrator Handbook, and in ATutor in the Administrator's System Preferences.

    + +
    +<?php
    +/*******
    + * this function named [module_name]_cron is run by the global cron script at the module's specified
    + * interval.
    + */
    +
    +function hello_world_cron() {
    +	global $db;
    +	debug('yay i am running!');
    +}
    +
    +?>
    +
    + + \ No newline at end of file diff --git a/documentation/developer/styles.css b/documentation/developer/styles.css new file mode 100644 index 000000000..146dd46b8 --- /dev/null +++ b/documentation/developer/styles.css @@ -0,0 +1,137 @@ +pre { + font-family: trebuchet ms, Arial, sans-serif; +} + +body{ + background-color: #FFF; + font-family: "Trebuchet MS",Verdana,Arial,sans-serif; +} +h1,h2,h3,p, table, ul { + margin: 0 10px +} +h1 { + color: #FFF; + border-bottom: 1px dashed #FFF; + margin-left: -5px; + padding-left: 15px; + margin-right: -5px; + padding-right: 15px; +} +h2{color: #FFF; + border-bottom: 1px dashed #FFF; + margin-left: -5px; + padding-left: 15px; + margin-right: -5px; + padding-right: 15px; +} +h3{color: #f0f0f0} +p{padding-bottom:1em} +h2{padding-top: 0.3em} + +/* for the curves */ +div.nifty { margin: 10px 2%; background: #9BD1FA; } +b.rtop, b.rbottom{display:block;background: #FFF} +b.rtop b, b.rbottom b{display:block;height: 1px; overflow: hidden; background: #9BD1FA} +b.r1{margin: 0 5px} +b.r2{margin: 0 3px} +b.r3{margin: 0 2px} +b.rtop b.r4, b.rbottom b.r4{margin: 0 1px;height: 2px} + + +a { + text-decoration: none; + border-bottom: 1px solid white; + color: white; + font-weight: bold; +} +a:hover { + border-bottom: 0px; +} +td,th { + font-size: 85%; +} + +kbd { + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; + border-color: #edd #baa #baa #eed; + white-space: pre; +} + +code { + font-family: "Trebuchet MS",Verdana,Arial,sans-serif; + background-color: #efefef; + padding: 0px 4px 0px 4px; + border-width: 1px 1px 1px 1px; + border-style: solid; + border-color: #edd #baa #baa #eed; +} + + +div#toc { + color: #f0f0f0; + padding-bottom: 15px; +} + +div#toc ul { + list-style: none; +} +div#toc li { + padding-top: 2px; + padding-bottom: 0px; +} + +ol { + margin-top: 0px; +} + +ol li { + padding-bottom: 3px; +} + +dl { + margin: 0 10px +} +dl dd { + padding-top: 0px; + padding-left: 5px; + margin-left: 5%; + border-left: 1px solid #f0f0f0; + margin-bottom: 10px; +} + +acronym { + cursor: help; +} + +a[href*="http"] { + padding-right: 8px; + background-image: url('link-out.gif'); + background-repeat: no-repeat; + background-position: right 4px; + margin-right: 2px; +} + +div#nav-links { + margin-left: 20px; + margin-right: 20px; + margin-bottom: 20px; +} + +div#nav-links a { + color: black; + text-decoration: none; + border-bottom: 1px solid; +} + +pre { + font-family: Courier, monospace; + background-color: #EEEEFF; + padding: 5px; + margin-left: 20px; + color:#761596; + margin-top: 0px; + width: 50%; + font-size: smaller; +} \ No newline at end of file diff --git a/documentation/general/browse_courses.php b/documentation/general/browse_courses.php new file mode 100644 index 000000000..569df39d9 --- /dev/null +++ b/documentation/general/browse_courses.php @@ -0,0 +1,9 @@ + + +

    Browse Courses

    + +

    The Browse Courses page lists all courses presently available on the ATutor system. The first column of the Browse Courses screen provides a list of course categories, the second displays a list of courses within a selected category, and the third column shows details about the selected course (or 'All' courses), with a link to enter into the course.

    + +

    If a course is Public, it may be accessed without logging in first. Protected and Private courses require that you be logged in. Private courses are available only to those who have been approved and enrolled in the course.

    + + diff --git a/documentation/general/create_course.php b/documentation/general/create_course.php new file mode 100644 index 000000000..1f5e87f08 --- /dev/null +++ b/documentation/general/create_course.php @@ -0,0 +1,7 @@ + + +

    Create Course

    + +

    Only Instructors may create courses, though if enabled, students can request instructor accounts by selecting the Create Course link. View the Instructor Documentation on creating courses.

    + + \ No newline at end of file diff --git a/documentation/general/en/index.php b/documentation/general/en/index.php new file mode 100644 index 000000000..ca04c93f9 --- /dev/null +++ b/documentation/general/en/index.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/documentation/general/export_content.php b/documentation/general/export_content.php new file mode 100644 index 000000000..4cba32284 --- /dev/null +++ b/documentation/general/export_content.php @@ -0,0 +1,9 @@ + + +

    Export Content

    + +

    The Export Content feature creates a "Content Package" that can be downloaded and viewed offline in the viewer included with each package. If this feature is turned on for a course, it may be accessed through a Student Tool icon on the home page, and/or a link in the main navigation. Choose which section you wish to download as a content package the use the Export button. Export Content is also linked from top level content pages or all content pages (depending on what the instructor has set) in the Shortcuts box. Using this link will package the current page and all of its sub pages into a single "zip" file, and prompt the user to download the file.

    + +

    The downloaded file can be unpacked with a common archiving application (e.g. WinZip, PKZip, Unzip). Unzip the file into an empty directory then open the index.html file into a Web browser.

    + + diff --git a/documentation/general/file_storage.php b/documentation/general/file_storage.php new file mode 100644 index 000000000..3cf7f086a --- /dev/null +++ b/documentation/general/file_storage.php @@ -0,0 +1,28 @@ + + +

    File Storage

    + +

    Students, assistants, and instructors can access a personal file management tool using the File Storage area, if enabled for a course. Workspaces can be selected for storing files, their presence depending on one's access rights: +

      +
    • Course Files - The default workspace. Managed by the instructor, or assistants with file storage privileges, course resource files are made available for download by course members.
    • +
    • My Files - Private files only the user can access and manage.
    • +
    • Groups - Shared files managed by group members, and accessible to instructors and assistants with group privileges.
    • +
    • Assignments - Students can submit assignments to these workspaces, and instructors or assistants with assignment privileges can manage submissions.
    • + +
    + +To move between workspaces, select them from the dropdown menu and use the Go! button. To view a file in the File Storage area, download and open it locally on your own computer. +

    +

    Create Folders and Adding Files

    +

    To organize files, folders can be created using the Create Folder feature at the top right of the file area. To upload a new file, with an optional description of its contents, use the New File feature at the top left. The file will be uploaded to the currently opened directory.

    + +

    Managing Files

    +

    It is also possible to Download files to your hard drive, Hand In a file for an assignment, Edit file details and rename folders, Move files around within a workspace, as well as Delete files and folders. Depending on the type of workspace, the buttons that appear will vary.

    + +

    File Revisions

    + +

    If enabled, file revisions can be kept, so a history of the document or file is available. Uploading a file of the same name as one that exists, will create a second version of the file, and so on. With each revision comments can be added, to summarize the changes from authors, and to perhaps collect feedback from reviewers.

    + + + + \ No newline at end of file diff --git a/documentation/general/fr/index.php b/documentation/general/fr/index.php new file mode 100644 index 000000000..2656b1faa --- /dev/null +++ b/documentation/general/fr/index.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/documentation/general/inbox.php b/documentation/general/inbox.php new file mode 100644 index 000000000..9b14d94cd --- /dev/null +++ b/documentation/general/inbox.php @@ -0,0 +1,10 @@ + + +

    Inbox

    +

    The Inbox is used for privately messaging other users in your courses. Inbox messages appear in a table, with new messages flagged. Selecting a message will display its contents at the top of the screen.

    + +

    In the sub-navigation there is a link to send a message. Choose the recipient, enter a subject and a message, and use the Send button.

    + +

    Note: use the Inbox Notification preference to receive emails when a new Inbox message is received.

    + + \ No newline at end of file diff --git a/documentation/general/index.php b/documentation/general/index.php new file mode 100644 index 000000000..04121b3aa --- /dev/null +++ b/documentation/general/index.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/documentation/general/inside_course.php b/documentation/general/inside_course.php new file mode 100644 index 000000000..bd092c82b --- /dev/null +++ b/documentation/general/inside_course.php @@ -0,0 +1,9 @@ + + +

    Course Features

    + +

    After a student has entered into a course, he/she is presented with the course Home page. The Home page may contain a course banner, links to Student Tool, and course announcements.

    + +

    A few of the course features are explained here, as they may be a little tricky for new users. Other features are fairly straight forward and should be intuitive to use. Look for the handbook link while using a tool, to open its help page directly.

    + + \ No newline at end of file diff --git a/documentation/general/introduction.php b/documentation/general/introduction.php new file mode 100644 index 000000000..243f1f5d9 --- /dev/null +++ b/documentation/general/introduction.php @@ -0,0 +1,7 @@ + + +

    Introduction

    +

    Welcome to the ATutor General User documentation. The information found here is applicable to both instructors and students. Also see the the Instructor Documentation for details of other tools that might be used to author content while in a group environment.

    + + + \ No newline at end of file diff --git a/documentation/general/login.php b/documentation/general/login.php new file mode 100644 index 000000000..a92dcb25c --- /dev/null +++ b/documentation/general/login.php @@ -0,0 +1,7 @@ + + +

    Login

    + +

    A user may login to the system with the Login Name or Email address, and the Password entered during registration. Logging in gives users access to Protected courses, lets them enroll, and lets them participate in courses.

    + + diff --git a/documentation/general/my_courses.php b/documentation/general/my_courses.php new file mode 100644 index 000000000..539d70796 --- /dev/null +++ b/documentation/general/my_courses.php @@ -0,0 +1,8 @@ + + +

    My Courses

    +

    Courses that the user is in enrolled in, or courses that are pending enrollment, are listed on the My Courses page.

    + +

    To enroll into a public or protected course, follow the Browse Courses link and locate it, then enter the course and use the Enroll Me link located beside the course title. If the course is private, enrollment must be requested first. Admission into the course will be allowed once the instructor has approved the request.

    + + \ No newline at end of file diff --git a/documentation/general/my_start_page.php b/documentation/general/my_start_page.php new file mode 100644 index 000000000..40251bbb9 --- /dev/null +++ b/documentation/general/my_start_page.php @@ -0,0 +1,7 @@ + + +

    My Start Page

    + +

    My Start Page is a personal area displayed after logging in. The My Courses section lists the courses that the user either teaches, or is enrolled in. From here one can also create a new course, or browse through courses. There is also a Profile section for editing personal details (including changing a password or an email address), and a Preferences section for editing some system preferences such as the way information is displayed and the preferred theme.

    + + \ No newline at end of file diff --git a/documentation/general/packages.php b/documentation/general/packages.php new file mode 100644 index 000000000..511add85a --- /dev/null +++ b/documentation/general/packages.php @@ -0,0 +1,7 @@ + + +

    Packages

    + +

    If instructors have included SCORM compliant Sharable Content Objects (SCOs), they will be avilable for viewing using the Packages tool. Note that the SCORM Run Time Environment (RTE) requires the Java JRE 1.5 to function properly, as well as LiveConnect, which is enabled by default in the JRE 1.5. Download an install with latest Java JRE from the SUN site, if you need to upgrade your browser's java support.

    + + \ No newline at end of file diff --git a/documentation/general/pages.inc.php b/documentation/general/pages.inc.php new file mode 100644 index 000000000..22c406154 --- /dev/null +++ b/documentation/general/pages.inc.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/documentation/general/password_reminder.php b/documentation/general/password_reminder.php new file mode 100644 index 000000000..c44aaea8f --- /dev/null +++ b/documentation/general/password_reminder.php @@ -0,0 +1,7 @@ + + +

    Forgot Your Password

    + +

    If you have forgotten your password, select the 'Forgot your password?' link on the Login screen. Enter the email address associated with your account and use the Submit button. The login name will be mailed to you, along with a link you must follow to change your password.

    + + diff --git a/documentation/general/preferences.php b/documentation/general/preferences.php new file mode 100644 index 000000000..5acb47f84 --- /dev/null +++ b/documentation/general/preferences.php @@ -0,0 +1,30 @@ + + +

    Preferences

    +

    The following preferences allow a user to control how some features function, and how information is displayed.

    + +
    +
    Theme
    +
    Themes are used for changing the look and feel.
    + +
    Inbox Notification
    +
    If enabled, an email notification message will be sent each time an Inbox message is received.
    + +
    Topic Numbering
    +
    If enabled, content topics will be numbered.
    + +
    Direct Jump
    +
    If enabled, using the Jump feature will redirect to the selected course and load the same section that was being viewed in the previous course (instead of the usual course Home page).
    + +
    Auto-Login
    +
    If enabled, users are automatically logged in when they open ATutor. You should only enable this if you are accessing ATutor from a private computer, otherwise others will be able to login with your account information.
    + +
    Form Focus On Page Load
    +
    If enabled, the cursor will be placed at the first field of the form when a page loads.
    + +
    Content Editor
    +
    This preference controls how content is entered. Choose between Plain Text for entering content text that will escape any HTML markup and will be formatted as entered; HTML for entering HTML content manually; and HTML - Visual Editor for entering HTML content using the visual (also known as a WYSIWYG) editor which represents the content as it will be displayed. It is also possible to change the editor manually for each item.
    +
    + + + \ No newline at end of file diff --git a/documentation/general/profile.php b/documentation/general/profile.php new file mode 100644 index 000000000..a879e2d25 --- /dev/null +++ b/documentation/general/profile.php @@ -0,0 +1,8 @@ + + +

    Profile

    +

    This section allows a user to change elements of his/her personal profile.

    + +

    Although the login name cannot be altered, password, email address, and other personal information may be edited. There is also an option to keep the email address hidden.

    + + \ No newline at end of file diff --git a/documentation/general/register.php b/documentation/general/register.php new file mode 100644 index 000000000..a22e2768f --- /dev/null +++ b/documentation/general/register.php @@ -0,0 +1,9 @@ + + +

    Register

    + +

    In order for a user to login to the ATutor system, a unique system account needs to be created. Use the Register link in the main navigation to access the registration form. Enter all the required fields, and optional data if desired (including the option to keep your email private or not), then use the Submit button. If email-confirmation has been enabled by the system administrator, a message will be sent to the email address registered, containing a link that must be followed to confirm the new account. Once this has been done, the login name or email address, and the password entered during registration can now be used on the Login screen.

    + +

    Note that if a system administrator has specified users to be checked against a Master List of allowed Student IDs and PINs (for example), this information must also be entered during registration.

    + + \ No newline at end of file diff --git a/documentation/general/tile.php b/documentation/general/tile.php new file mode 100644 index 000000000..f4b1416ce --- /dev/null +++ b/documentation/general/tile.php @@ -0,0 +1,9 @@ + + +

    TILE Repository Search

    + +

    External content packages can be downloaded from the TILE repository by entering a search term and using the Search button. Use the Preview link next to a search result to open the TILE content browser, or use Download to retrieve the content package from the TILE repository. Once downloaded, the file can be unpacked with a common archiving application (e.g. WinZip, PKZip, Unzip). Unzip the file into an empty directory and browse the package's content.

    + +

    Visit the TILE web site for more information about using the repository.

    + + \ No newline at end of file diff --git a/documentation/index.php b/documentation/index.php new file mode 100644 index 000000000..bcceb999e --- /dev/null +++ b/documentation/index.php @@ -0,0 +1,106 @@ + + + + + ATutor Handbook + + + + + + + + + + + + + <h1>Administrator Documentation</h1> + <p><a href="frame_toc.html">Table of Contents</a></p> + + + + diff --git a/documentation/index/en/index.php b/documentation/index/en/index.php new file mode 100644 index 000000000..ca04c93f9 --- /dev/null +++ b/documentation/index/en/index.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/documentation/index/fr/index.php b/documentation/index/fr/index.php new file mode 100644 index 000000000..2656b1faa --- /dev/null +++ b/documentation/index/fr/index.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/documentation/index/index.php b/documentation/index/index.php new file mode 100644 index 000000000..b7ef5b404 --- /dev/null +++ b/documentation/index/index.php @@ -0,0 +1,163 @@ +0"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $_SESSION['handbook_admin'] = true; + header('Location: '.$_SERVER['PHP_SELF']); + exit; + } + } else if (isset($_GET['logout'])) { + header('WWW-Authenticate: Basic realm="Administrator Login"'); + header('HTTP/1.0 401 Unauthorized'); + + unset($_SERVER['PHP_AUTH_USER']); + unset($_SERVER['PHP_AUTH_PW']); + unset($_SESSION['handbook_admin']); + session_write_close(); + header('Location: '.$_SERVER['PHP_SELF']); + exit; + } +} + +if (!defined('AT_HANDBOOK_ENABLE')) { + // use local config file + require('../config.inc.php'); + + if (isset($_POST['submit'])) { + // try to validate $_POST + if (($_POST['username'] == AT_HANDBOOK_ADMIN_USERNAME) && ($_POST['password'] == AT_HANDBOOK_ADMIN_PASSWORD)) { + $_SESSION['handbook_admin'] = true; + header('Location: '.$_SERVER['PHP_SELF']); + exit; + } + } else if (key($_GET) == 'logout') { + header('WWW-Authenticate: Basic realm="Administrator Login"'); + header('HTTP/1.0 401 Unauthorized'); + + unset($_SERVER['PHP_AUTH_USER']); + unset($_SERVER['PHP_AUTH_PW']); + unset($_SESSION['handbook_admin']); + session_write_close(); + header('Location: '.$_SERVER['PHP_SELF']); + exit; + } +} + +if (!$db && defined('AT_HANDBOOK_ENABLE') && AT_HANDBOOK_ENABLE) { + $db = @mysql_connect(AT_HANDBOOK_DB_HOST . ':' . AT_HANDBOOK_DB_PORT, AT_HANDBOOK_DB_USER, AT_HANDBOOK_DB_PASSWORD); + @mysql_select_db(AT_HANDBOOK_DB_DATABASE, $db); + $enable_user_notes = true; +} +?> + + + + <?php get_text('doc_title'); ?> + + + + +
    + +
    + + +

    +

    + +
      +
    1. +
    2. +
    3. +
    4. +
    5. +
    + +
      +
    1. atutor.ca
    2. +
    3. atutor.ca/forums/
    4. +
    5. atutor.ca/atutor/docs/
    6. +
    + + +
    +

    +
    + + +

    + + +
    +

    +
    + + 0)): ?> + +
    +
    + | + +
    +

    +

    +
    + + +
    + + + + + + \ No newline at end of file diff --git a/documentation/index_list.php b/documentation/index_list.php new file mode 100644 index 000000000..37c544d96 --- /dev/null +++ b/documentation/index_list.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/documentation/instructor/accessibility.php b/documentation/instructor/accessibility.php new file mode 100644 index 000000000..e55442e72 --- /dev/null +++ b/documentation/instructor/accessibility.php @@ -0,0 +1,30 @@ + + +

    Accessibility

    +

    The Accessibility tab performs an analysis of the content for accessibility problems. Recommendations are given and you are given the option to implement or reverse corrections.

    + +

    After opening the Accessibility tab, review the report, and notice the number of known and potential problems

    + +

    Correct the known problems by reviewing the report, then returning to the Content tab to modify the HTML. Return to the Accessibility tab again when the known problems are corrected to see a Conditional Pass. Select from the choices available in the potential problems listed, then press Make Decisions to update the report. When all known problems are corrected, and decisions have been made on all potential problems, a Full Pass will be displayed, after which you can be sure the content will be accessible to all your students.

    + +

    Content Editor Accessiblity

    +

    The Content Editor includes a number of added features to help make it accessible to assistive technology users, The accesskeys listed below allow navigation through the editor by keyboard. In addition to the Accessibility tab, the visual editor includes its own accessibility checker, as well as prompts while authoring, that prevent making accessibility mistakes.

    +

    Content Editor AccessKeys

    +
      +
    • [Alt-n] Content Tab
    • +
    • [Alt-p] Properties Tab
    • +
    • [Alt-g] Glossary Tab
    • +
    • [Alt-r] Preview Tab
    • +
    • [Alt-a] Accessibility Tab
    • +
    • [Alt-s] Save
    • +
    + +

    Visual Editor AccessKeys

    +
      +
    • [Alt-q] jump to button bar
    • +
    • [Alt-z] jump to content area of editor/li> +
    • [Alt-x] jump to element path (bottom)/li> +
    + + + \ No newline at end of file diff --git a/documentation/instructor/add_questions.php b/documentation/instructor/add_questions.php new file mode 100644 index 000000000..9d00585e8 --- /dev/null +++ b/documentation/instructor/add_questions.php @@ -0,0 +1,9 @@ + + +

    Test Questions

    + +

    To manage the questions in a test, choose the test from the Test/Surveys Manager and then use the Questions button. Questions in the Question Database can be added to your test by using the Add Questions link. Check the questions and/or categories of questions to be added to the test and use the Add to Test/Survey button. After confirming this action, the added questions will appear in the Question Manager. Beside each question is a box in which to enter a weight or mark for that question. If this is for a survey, leave the weight box empty. Note that Likert questions do not get marked and therefore do not require a weight. Reorder questions by changing the numbers in the Order column.

    + +

    It is also possible to Edit or Remove questions by using the links beside each question. Editing a question will alter it in the Question Database, and thus affect all tests and surveys using that question. Removing the question only removes it from the test and will not delete the question from the Question Database.

    + + \ No newline at end of file diff --git a/documentation/instructor/announcements.php b/documentation/instructor/announcements.php new file mode 100644 index 000000000..0c6b7d6c0 --- /dev/null +++ b/documentation/instructor/announcements.php @@ -0,0 +1,8 @@ + + +

    Announcements

    +

    Announcements added through the Manage section will appear on the course Home page, sorted by date in descending order.

    + +

    If the Syndicate Announcements options is enabled in course Properties, it is possible to subscribe to the feed using a RSS reader.

    + + diff --git a/documentation/instructor/assignments.php b/documentation/instructor/assignments.php new file mode 100644 index 000000000..7cf7ffd58 --- /dev/null +++ b/documentation/instructor/assignments.php @@ -0,0 +1,14 @@ + + +

    Assignments

    +

    The assignment manager works alongside the File Storage area by letting instructors create virtual assignment drop-boxes within it. A student can submit files to the assignment workspace, and the instructor can view and download the submissions through the assignment manager or the file storage area directly.

    + +

    Add & Manage Assignments

    +

    To add a new assignment submission area, follow the Add Assignment link and specify the assignment title, who to assign it to (everyone or a specific Group Type), the due date if there is one, and how to handle late submissions. Be sure to enable File Storage for groups assignments are assigned to. Using the Save button will create a special folder named with the assignment title within the Assignment Submissions area of the File Storage area. Within each assignment folder, additional folders will be created for each student or group (depending on the "Assign to" setting). These folders are read-only and cannot be changed.

    + +

    It is possible to Edit an assignment's properties after it has been created, though not the "Assign to" element. Also note that if you Delete an assignment, all of its submissions will be deleted. Therefore, it is advised that the instructor first download the submissions to her/his harddrive for safe keeping before deleting an assignment entry.

    + +

    Downloading Submissions

    +

    Only instructors and assistants with Assignment privileges may access assignment folders. Students and groups will not be able to access any submitted files. To download submitted assignments, select an assignment and use the Submissions button. This will redirect to the File Storage area where an instructor can download submissions. Alternatively, this area can be accessed directly by going to the File Storage area, and selecting the name of the assignment from the Workspace dropdown.

    + + diff --git a/documentation/instructor/authenticated_access.php b/documentation/instructor/authenticated_access.php new file mode 100644 index 000000000..c9058ea8f --- /dev/null +++ b/documentation/instructor/authenticated_access.php @@ -0,0 +1,6 @@ + + +

    Authenticated Access

    +

    Since version 1.5.4, instructors may enable this feature to generate a unique URI that may be distributed to authenticate guest access to the protected or private course.

    + + \ No newline at end of file diff --git a/documentation/instructor/backups.php b/documentation/instructor/backups.php new file mode 100644 index 000000000..37d039400 --- /dev/null +++ b/documentation/instructor/backups.php @@ -0,0 +1,10 @@ + + +

    Backups

    +

    ATutor offers the facility to create backups of your course and restore the contents of those backups at any time. This is useful for duplicating a course or saving the entire course content for safe keeping in the case of accidental loss.

    + +

    The Backups utility is found under the Manage section and is available to Instructors and System Administrators.

    + +

    Each course can store only a finite number of backups (default 5). That limit can be altered by the Administrator using the System Preferences option.

    + + diff --git a/documentation/instructor/chat.php b/documentation/instructor/chat.php new file mode 100644 index 000000000..53c85b530 --- /dev/null +++ b/documentation/instructor/chat.php @@ -0,0 +1,8 @@ + + +

    Chat

    +

    The chat section is used for managing chat transcripts. An active transcript will record all of the chat messages as they are posted. There can be only one active transcript at a time.

    + +

    A transcript is started by using the Start Transcript link. A unique name must be given to a new transcript when it is started.

    + + diff --git a/documentation/instructor/content.html b/documentation/instructor/content.html new file mode 100644 index 000000000..fb017cf99 --- /dev/null +++ b/documentation/instructor/content.html @@ -0,0 +1,140 @@ + + + + + ATutor 1.5 Instructor Documentation + + + + + +
    +

    2. Content

    +

    In order to add and manage content for a course, you must first be logged in as an instructor. By selecting a course, you can manage your content from the Manage tab, or by the Content Navigation tree.

    + +

    Table of Contents

    + + +
    + + +
    +

    2.1 Creating and Editing Content

    + +

    Once you have selected a course, you can create or edit course content by selecting the Manage tab, then selecting the Content option.

    + +

    You should now see a table of all the content in your current course. If you have no content, this list will be empty. If you already have content in your course, you can select an item and click the Edit button to begin editing. If you want to create new content, select the Create Content link along the top.

    + +

    Whether editing or creating new content, the interface is the same for both actions.

    + +

    2.1.1 Content

    +

    Content can be created in either 'plain text' or 'HTML' modes. Plain text mode is useful for quickly writing up text content. Conversely, HTML mode allows for extra features like text formatting and layout, but is a little more complex to use.

    + +
    +
    Formatting: Plain Text
    +
    If using plain text mode, just type the content in the Body window. Note that any extra spaces between characters will be removed (i.e. two or more spaces), but any blank lines will be saved with the text.
    + +
    Formatting: HTML
    +
    If using HTML mode, you can type HTML tags in the Body window along with your text. If you are unfamiliar with HTML, you can use the visual editor by clicking the Switch to visual editor button.
    + +
    File Manager
    +
    +

    The File Manager is a tool that allows you to upload files from your local system to be used in your course.

    + +

    Create Folder creates a folder on the ATutor system so you can better organize your uploaded files. You can create folders and/or move files into that folder at any time you like.

    + +

    Browse... opens a local file browser window so you can select the file you want to upload.

    + +

    Upload will upload the specified file to the ATutor system. You can specify a file by either typing the path and filename in the text field or by using the Browse button.

    + +

    Create a New File link will display a new interface where you can quickly create a new text or HTML file. If using Text mode, any blank lines will be saved with the file. If using HTML, you should be familiar with using HTML tags as no visual editor is provided. Clicking Save will save a new file with your specified information (filename and content) into the ATutor system and bring you back to the File Manager. Cancel will discard the file and bring you back to the File Manager browser.

    + +

    Rename button renames a single, selected file.

    + +

    Delete and Move buttons deletes or moves the selected files and folders (and its contents) from the ATutor system. You can select multiple files and folders for deletion or moving.

    + +

    Insert appears under the Action column for files that can be inserted into the content. Clicking the Insert button will add appropriate HTML code into the body of the content. If you are formatting in plain text you will need to switch to HTML formatting in order for it to display properly.

    +
    + +
    Terms
    +

    In either plain text, or HTML formatting modes, you can insert terms which are used to tell the ATutor system the words you want to define in the glossary.

    + +

    Clicking the Add Term link will add [?][/?] into your content, and any text you put after [?] and before [/?] will specify the term you want to define. Alternatively, you can manually type [?][/?] into your text without having to click the Add Term.

    + +

    Once you have specified the terms you would like to define, you can go to the Glossary Terms tab to write the definitions. Once done, the terms and their definitions will appear in the glossary and in the content.

    + +
    Code
    +

    In either plain text, or HTML formatting modes, you can insert code which is useful for differentiating blocks of text (like math equations, program code, or quotations)from the rest of the text content.

    + +

    Clicking the Add Code link will add [code][/code] into your content, and whatever text you put after [code] and before [/code] will specify the text you want to differentiate. Alternatively, you can manually type [code][/code] into your text without having to click the Add Code link.

    +
    + +
    Colours
    +
    Like code and terms you can add colour to your text content in the same way. You can either click the appropriate colour icon to insert colour tags into the content. Valid colour options are blue, red, green, orange, purple, and gray. You can also type the colour codes manually by using the following tags: [blue][/blue], [red][/red], [green][/green], [orange][/orange], [purple][/purple], and [gray][/gray]
    . + +
    Upload from File
    +
    Instead of typing your content, you can upload it from a text or HTML file on your local file system. Once uploaded, the content of that file will be displayed in the Body window. Keep in mind that uploading in this manner will replace any content in the Body window.
    + +
    Save and Close
    +
    At any point of editing or creating content, you can chose to Save your content, or Cancel your changes. +
    +
    + +

    2.1.2 Properties

    +

    In the properties tab, you can specify a Release Date, keywords for easier searching, and specify related topics.

    + +
    +
    Release Date
    +
    The release date is the date in which the content will be visible to the course. You can schedule a release in the future by specifying a later date. Also, if you specify a release date that has past, it will be released immediately.
    + +
    Keywords
    +
    Words in the Keywords are given greater emphasis during searching. Therefore they will be placed higher in a list of search results than if there were no keywords. Keywords are also used to as Learning Object Metadata.
    + +
    Related Topics
    +

    For each piece of content you have in the course, you can specify what other content in the course is related. Moving content up the related topics list places that content closer to the top of the Content Navigation window. The opposite is true if you move content down the Related Topics list.

    +

    You can also make content a child of another piece of content. In this case, the child content will appear as sub-content on the Content Navigation window. All sub-content children and their parent will appear in the Related Topics window.

    +
    +
    + +

    2.1.3 Glossary Terms

    +

    If you specified Terms in the Content tab, you have the opportunity to define those terms here. For each term specified in the Content tab, there is a Definition window where you provide your explanation. If there are no glossary terms listed, you can add glossary terms by going to the Content tab and adding Term tags.

    + +

    In order to set a Related Term, you must have at least two defined terms in the glossary.

    + +

    2.1.4 Preview

    +

    Under the Preview tab, you can see how your content will appear to a user, including Terms, Code, and Colors you added to the content.

    + +

    2.1.5 Accessibility

    +

    +
    + +
    +

    2.2 Content Packages

    +

    ATutor provides importing and exporting course content using IMS 1.1.3/SCORM 1.2 content package specification. This allows ATutor content to be viewed offline, and transferred to other systems.

    + +

    2.2.1 Exporting Content

    +

    An entire course or a single chapter can be exported as an IMS 1.1.3/SCORM 1.2 content package. Exported packages are archived into a single file using ZIP compression. All content is exported including the terms and glossary, colours, and code.

    + +

    To export content, select the scope by choosing an option from the What to export menu. Then, clicking Export will generate a download through your browser. Optionally, you can choose to export the content directly to TILE if you have a TILE authoring account.

    + +

    2.2.2 Viewing Exported Content

    +

    To view a content package exported from ATutor, you will either need a IMS 1.1.3/SCORM 1.2 viewer, or a web browser. To view the content in a web browser, first extract the contents of the ZIP file and then open the file index.html in the browser.

    + +

    2.2.3 Importing Content

    +

    To import a content package into ATutor, it must conform to IMS 1.1.3/SCORM 1.2 content package specifications.

    + +

    Before importing, you must specify where in the course structure the new content is to be placed by using the Import into menu.

    + +

    Select the content package to upload by supplying the file from your local filesystem by typing in the path into the textfield or by using the Browse button. You can also import a content package over the Web by providing an URL.

    + +

    Clicking Import will upload the content into the course and at the hierarchy location specified.

    + +
    + + + \ No newline at end of file diff --git a/documentation/instructor/content.php b/documentation/instructor/content.php new file mode 100644 index 000000000..a0520a62b --- /dev/null +++ b/documentation/instructor/content.php @@ -0,0 +1,8 @@ + + +

    Content

    +

    Content in ATutor can be managed in many ways and can be imported and created from many different sources. Content can be entered manually, created from HTML files, standards compliant content packages, or from a learning objects content repository. Content that already exists in ATutor can also be exported into any of the mentioned formats. Only instructors, and assistants who are given content privileges, can manage course content.

    + +

    Existing content pages can be managed using the Shortcuts links available when viewing a content page, or through the Content section under the Manage tab.

    + + diff --git a/documentation/instructor/content_edit.php b/documentation/instructor/content_edit.php new file mode 100644 index 000000000..c73a553a1 --- /dev/null +++ b/documentation/instructor/content_edit.php @@ -0,0 +1,51 @@ + + +

    Entering Content

    +

    Content can be created in either 'plain text' or 'HTML' mode. Plain text mode is useful for quickly writing up text content. HTML mode allows for extra features like text formatting and layout, but is a little more complex to use.

    + +
    +
    Formatting: Plain Text
    +

    If using plain text mode, just type the content in the Body window. Note that any extra spaces between characters will be removed (i.e. two or more spaces), but any blank lines will be saved with the text.

    + +
    Formatting: HTML
    +

    If using HTML mode, you can type HTML tags in the Body window along with your text. If you are unfamiliar with HTML, you can use the visual editor by clicking the Switch to visual editor button.

    + +
    File Manager
    +
    +

    The File Manager is a tool that allows you to upload files from your local system to be used in your course. The popup File Manager can be open alongside the Content Editor by selecting Open File Manager.

    + +

    See the File Manager section for details.

    +
    + +
    Terms
    +
    +

    In either plain text or HTML formatting mode, you can insert terms to tell the ATutor system which words you wish to mark as glossary terms.

    + +

    Using the Add Term link will add [?][/?] into your content, and any text you put after [?] and before [/?] will specify the term you want to define. Alternatively, you can manually type [?][/?] into your text without having to use the Add Term link.

    + +

    Once you have specified the terms you would like to define, you can go to the Glossary Terms tab to write the definitions. Once this is done, the terms and their definitions will appear in the glossary and in the content.

    +
    + +
    Code
    +
    +

    In either plain text or HTML formatting mode, you can insert code which is useful for differentiating blocks of text (like math equations, program code, or quotations) from the rest of the text content.

    + +

    Using the Add Code link will add [code][/code] into your content, and any text you put after [code] and before [/code] will specify the text you want to differentiate. Alternatively, you can manually type [code][/code] into your text without having to use the Add Code link.

    +
    + +
    Previous/Next
    +

    Links can be generated by inserting the [PID] and the [NID] codes in your ATutor content. When the page is displayed these codes get converted to the URL/Link for the previous or next pages in the sequence of content pages.

    + +
    Colours
    +

    Like code and terms, colour may be added to text content in the same way. Use the appropriate colour icon to insert colour tags into the content. Valid colour options are blue, red, green, orange, purple, and gray. Also, colour codes can be typed in manually by using the following tags: [blue][/blue], [red][/red], [green][/green], [orange][/orange], [purple][/purple], and [gray][/gray].

    + +
    Upload from File
    +

    Rather than typing out content, it can be uploaded from a text or HTML file on your local file system. Once uploaded, the content of that file will be displayed in the Body window. Keep in mind that uploading in this manner will replace any existing content in the Body window.

    + +
    Save and Close
    +

    While editing or creating content, it is wise to frequently Save your content. When you are finished, use Close to close the content editor. Note that this does not save your content first so any unsaved content will be lost.

    + + +
    + + diff --git a/documentation/instructor/content_packages.php b/documentation/instructor/content_packages.php new file mode 100644 index 000000000..161d3a2af --- /dev/null +++ b/documentation/instructor/content_packages.php @@ -0,0 +1,24 @@ + + +

    Import/Export Content

    + +

    ATutor provides importing and exporting of course content using IMS 1.1.3 or SCORM 1.2 content package specifications. Exported content can be viewed offline, and transferred to other systems. If enabled, students can also export content for offline viewing. See course Properties to learn how to enable content exporting for students.

    + +

    Exporting Content

    +

    An entire course, a chapter, or a single page of content can be exported as an IMS 1.1.3 or SCORM 1.2 content package. Exported packages are archived into a single file using ZIP compression. All content is exported including the terms and glossary, colours, and code.

    + +

    To export content, select the scope by choosing an option from the What to export menu. Then, using Export will generate a download through your browser. Optionally, you can choose to export the content directly to the TILE content repository if you have a TILE authoring account.

    + +

    Viewing Exported Content

    +

    To view a content package offline that has been exported from ATutor, you will need a IMS 1.1.3 or SCORM 1.2 viewer, or a web browser, and an application to unzip the package. To view the content in a web browser, first extract the contents of the ZIP file into an empty folder on your computer, and then open the file index.html in your browser.

    + +

    Importing Content

    +

    To import a content package into ATutor, it must conform to IMS 1.1.3 or SCORM 1.2 content package specifications.

    + +

    Before importing, specify where in the course structure the new content is to be placed by using the Import into menu.

    + +

    Select the content package to upload by choosing the file from your local file system, either by typing the path into the Upload a Content Package text field, or by using the Browse button. You can also import a content package over the Web by entering the URL of the package.

    + +

    Using Import will upload the content into the course at the specified location on the Internet.

    + + \ No newline at end of file diff --git a/documentation/instructor/content_preview.php b/documentation/instructor/content_preview.php new file mode 100644 index 000000000..d4bf891a0 --- /dev/null +++ b/documentation/instructor/content_preview.php @@ -0,0 +1,7 @@ + + +

    Previewing Content

    +

    The Preview tab displays the content page as it looks with the formatting given. This is how the content page will appear to a user, with custom HTML, Glossary Terms, Code, and colours.

    + + + diff --git a/documentation/instructor/content_properties.php b/documentation/instructor/content_properties.php new file mode 100644 index 000000000..369407765 --- /dev/null +++ b/documentation/instructor/content_properties.php @@ -0,0 +1,21 @@ + + +

    Properties

    +

    In the properties tab, you can move the content page, select a Release Date, enter keywords for easier searching, and specify its related topics.

    + +
    +
    Move
    +
    In the left column of the Properties screen in the Content Editor choose the 'up arrow' to move the current content Before another item. Choose the 'down arrow' to move the content After that item. Choose the 'plus sign' to make the current content a Child of, or sub-topic, for that item.
    + +
    Release Date
    +
    The release date specifies when the content page will be visible to students. Content can be scheduled for release by specifying date in the future. Specifying a release date that has past will release the content immediately. The release date of a page affects all of its sub-pages as well, such that a sub-page is released only when the most distant release date of all its parent pages has passed. By default, the Release Date is set as the current date and time.
    + +
    Keywords
    +
    Words entered into the Keywords area are given greater emphasis during searching. Therefore they will be placed higher in a list of search results than if there were no keywords. Keywords are also used as Learning Object Metadata when a content package is generated.
    + +
    Related Topics
    +

    For each content page in the course, it is possible to specify other content pages as being related. Related topics can appear in the side menu, allowing students to quickly jump to a topic. Related topics are cross-refrenced meaning the content page chosen to be related will also be related to the current page.

    +
    +
    + + \ No newline at end of file diff --git a/documentation/instructor/content_usage.php b/documentation/instructor/content_usage.php new file mode 100644 index 000000000..a9ccc60b6 --- /dev/null +++ b/documentation/instructor/content_usage.php @@ -0,0 +1,9 @@ + + +

    Content Usage

    +

    Instructors can view Content Usage statistics, or Student Specific Usage data. Content Usage will list the overall number of Visits to each content page, the number of Unique Visits, the Average Duration of each visit, the Total Duration of all visits to each page, as well as the Details of all visits to each page. If enabled, students can also view their own content usage using My Tracker.

    + +

    Use the Reset link to empty the Content Usage data.

    + + + diff --git a/documentation/instructor/course_email.php b/documentation/instructor/course_email.php new file mode 100644 index 000000000..9d2c38bab --- /dev/null +++ b/documentation/instructor/course_email.php @@ -0,0 +1,6 @@ + + +

    Course Email

    +

    Using the Course Email option, you can send an email to all assistants (students with privileges), enrolled, un-enrolled, and /or alumni students in your current course. A copy of the email is also sent to your registered email address.

    + + \ No newline at end of file diff --git a/documentation/instructor/creating_courses.php b/documentation/instructor/creating_courses.php new file mode 100644 index 000000000..84a4df37a --- /dev/null +++ b/documentation/instructor/creating_courses.php @@ -0,0 +1,35 @@ + + +

    Creating Courses

    + +

    After logging in, use the Create Course link from My Start Page. Properties set here can be modified through Manage > Properties

    + +

    Some course properties include:

    + +
    +
    Description
    +
    Enter a meaningful but brief paragraph describing the course, to be displayed under the course name in Browse Courses.
    + +
    Export Content
    +
    Choose the availability of the "Export Content" link on course content pages.
    + +
    Syndicate Announcements
    +
    Enable this setting if you wish to make an RSS feed of the course announcements available for display on another website.
    + +
    Access
    +
    Determines who can have access to the course content - any user, only logged in users, or logged in and enrolled users.
    + +
    Release Date
    +
    The date when the course can be accessed by students. Or, available immediately.
    + +
    Banner
    +
    HTML that forms a custom banner or splash screen for the course home page. Appears above the course announcements, if there are any.
    + +
    Initial Content
    +
    Initialise the course content to be either empty, basic place-holder content, or a restored backup from other courses you teach.
    +
    + +

    Enter the necessary information and use the Save button to proceed into the newly created course.

    + + + \ No newline at end of file diff --git a/documentation/instructor/creating_editing_content.php b/documentation/instructor/creating_editing_content.php new file mode 100644 index 000000000..4a451fff0 --- /dev/null +++ b/documentation/instructor/creating_editing_content.php @@ -0,0 +1,7 @@ + + +

    Creating and Editing Content

    + +

    Using the Tabs in the Content Manager, content can be created, its location, keywords, and date properties set, and glossary terms defined. It can also be previewed and have its accessibility checked. While creating content, save often. Unsaved information is indicated by a red bullet in the corresponding Content Manager tab. When content editing is complete, choose the Close after saving option, then press Save.

    + + \ No newline at end of file diff --git a/documentation/instructor/creating_questions.php b/documentation/instructor/creating_questions.php new file mode 100644 index 000000000..e777fed83 --- /dev/null +++ b/documentation/instructor/creating_questions.php @@ -0,0 +1,32 @@ + + +

    Creating Test Questions

    +

    Test questions are created in the Question Database. Options differ depending on the type of question being created. All questions are saved to the Question Database where they can then be added to Tests or Surveys. The following questions are supported:

    + +
    +
    Likert
    +
    Likert questions require the respondent to specify their choice based on the scale provided.
    + +
    Matching (Graphical)
    +
    Matching questions require the respondent to match value pairs. The graphical version creates coloured lines when pairs are created and allows for drag-and-drop interaction.
    + +
    Matching (Simple)
    +
    Matching questions require the respondent to match value paris. The simple version does not create coloured lines and does not support drag-and-drop interaction.
    + +
    Multiple Answer
    +
    Multiple answer questions require the respondent to answer a question by selecting two or more correct answers.
    + +
    Multiple Choice
    +
    Multiple choice questions require the respondent to answer a question by selecting only one correct answer.
    + +
    Open Ended
    +
    Open ended questions require the respondent to enter text in the specified text area.
    + +
    Ordering
    +
    Ordering questions require the respondent to correctly assign given items in a particular logical order or rank.
    + +
    True or False
    +
    True or false questions require the respondent to specify whether or not a given statement is true or false.
    +
    + + \ No newline at end of file diff --git a/documentation/instructor/creating_restoring.php b/documentation/instructor/creating_restoring.php new file mode 100644 index 000000000..f4775cc1c --- /dev/null +++ b/documentation/instructor/creating_restoring.php @@ -0,0 +1,8 @@ + + +

    Creating & Restoring Backups

    +

    To create a backup of the current course, use the Create link found on the Backups page. All created backups are stored securely on the ATutor server. The space required for the backups does not affect the course's size quota. Once a backup is created, it will be listed on the main Backups page where it can be managed.

    + +

    Backups can be restored by selecting a backup and using the Restore button. The restoration process will present details on what is stored in the backup and allow instructors to select which course material they wish to restore.

    + + diff --git a/documentation/instructor/creating_tests_surveys.php b/documentation/instructor/creating_tests_surveys.php new file mode 100644 index 000000000..140e150ae --- /dev/null +++ b/documentation/instructor/creating_tests_surveys.php @@ -0,0 +1,44 @@ + + +

    Creating Tests & Surveys

    +

    To begin creating a test, use the Create Test/Survey link. Filling out the information on the Create Test/Survey page will address all the administrative options for a test. Actual questions are added to the test in a separate step.

    + +

    Test properties include:

    + +
    +
    Attempts Allowed
    +
    Tests used for evaluation could be set to 1 attempt, while self=tests may be set to Unlimited attempts
    + +
    Link from My Courses
    +
    Will display a link to the test on the My Courses page, in the course listing. Students will be made aware that the current test is available before they enter the course. This may be useful for creating a pretest to determine students' level of knowledge before taking a course.
    + +
    Anonymous
    +
    Set this to No in most cases, or set it to Yes if you are creating a survey or poll.
    + +
    Allow Guest
    +
    Set this if you wish to allow users who are not logged into a course to take the test. In Release Results, set to "Once quiz has been submitted" to allow guest users to see the results of the test after they have completed it. Also see Authenticated Access for information about guest access to protected and private courses.
    + +
    Release Results
    +
    Defines the availability of test results to students, either once the test has been submitted, once submitted and completely marked, or not at all. In the latter case, the Release Results property can later be changed to Once quiz has been submitted to make results available to students once all submissions have been marked.
    + +
    Randomized Questions
    +
    Will display the number of questions specified, chosen randomly from the pool of available questions for that test.
    + +
    Start & End Dates
    +
    Define the window of time in which the test will be available to students. It is possible to define the start date to be in the future, meaning the test will not be available until that date is reached.
    + +
    Assign to Groups
    +
    Specifies the groups (Created in the Group Manager) permitted to take this test. By default, tests are available to Everyone in the course if no group is selected..
    + +
    Instructions
    +
    Notes that will appear at the top of the test, which might include instructions for taking the test, or include other information relevant to the test.
    + +
    Specifies the groups (created using the Group Manager) permitted to take this test. By default, tests are available to Everyone in the course.
    + +
    + +

    Surveys are created in the same way as regular tests, with the exception that no marks are assigned to questions and no results are released, and in some cases it might be preferable to treat submissions as Anonymous. This can be done by choosing Yes from the Anonymous property setting.

    + +

    Once the initial properties have been saved, the test or survey will be listed in the Test/Survey Manager. From here, one can Edit the test properties, add Questions to a test, Preview the test questions, view the Submissions received so far, view the test Statistics, or Delete the test.

    + + \ No newline at end of file diff --git a/documentation/instructor/delete_course.php b/documentation/instructor/delete_course.php new file mode 100644 index 000000000..6923832cb --- /dev/null +++ b/documentation/instructor/delete_course.php @@ -0,0 +1,6 @@ + + +

    Delete Course

    +

    An instructor can delete a course using the Properties manager. Once a course has been deleted from the system, it can not be restored (unless there is a backup). There will be prompts to confirm the action before actual deletion occurs.

    + + \ No newline at end of file diff --git a/documentation/instructor/downloading_uploading.php b/documentation/instructor/downloading_uploading.php new file mode 100644 index 000000000..f5e5ff41f --- /dev/null +++ b/documentation/instructor/downloading_uploading.php @@ -0,0 +1,10 @@ + + +

    Downloading & Uploading Backups

    +

    Backups can be downloaded and stored locally by selecting from the list of backups created and using the Download button. Locally stored backups can be uploaded back into the original course, into a new course, or into another installation of ATutor.

    + +

    The backup file itself is a compressed archive in a format specific to ATutor. Backups cannot be used by any other system other than ATutor (see Import/Export Content for information about reuseable content). Extracting the backup archive to view and change its contents is strongly discouraged as it may currupt the backup, making it impossible to restore.

    + +

    Backups are forwards compatible, but not backwards compatible with older versions of ATutor. That is, backups can be used with all future versions of ATutor, but cannot be used with versions of ATutor older than the version originally used in the backup's creation.

    + + diff --git a/documentation/instructor/edit_delete_tests.php b/documentation/instructor/edit_delete_tests.php new file mode 100644 index 000000000..055bbbec0 --- /dev/null +++ b/documentation/instructor/edit_delete_tests.php @@ -0,0 +1,9 @@ + + +

    Editing & Deleting Tests

    + +

    In the Test/Survey Manager, choose the test who's properties you wish to change and use the Edit button. This will display a screen like the one for Creating Tests & Surveys, where the test's properties can be altered and saved.

    + +

    To delete a Test or Survey, choose it from the Test/Survey Manager and use the Delete button. Aftering confirming the delete action, the test will be removed. Note that the questions within the test will not be deleted as they are stored in the Question Database.

    + + \ No newline at end of file diff --git a/documentation/instructor/editing_deleting.php b/documentation/instructor/editing_deleting.php new file mode 100644 index 000000000..b324f8f95 --- /dev/null +++ b/documentation/instructor/editing_deleting.php @@ -0,0 +1,8 @@ + + +

    Editing & Deleting Backups

    +

    Selecting a backup and using the Delete button will delete that backup.

    + +

    Use the Edit button to edit the description of a selected backup. This will not change the backup's contents.

    + + diff --git a/documentation/instructor/en/index.php b/documentation/instructor/en/index.php new file mode 100644 index 000000000..ca04c93f9 --- /dev/null +++ b/documentation/instructor/en/index.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/documentation/instructor/enrollment.php b/documentation/instructor/enrollment.php new file mode 100644 index 000000000..810f0f31d --- /dev/null +++ b/documentation/instructor/enrollment.php @@ -0,0 +1,8 @@ + + +

    Enrollment

    +

    The Enrollment list for a particular course determines which of your students have access to the course content and course management tools. Instructors can create, import and export student lists.

    + +

    To administer members of a course, log in as the instructor and select the Enrollment option from the Manage screen.

    + + diff --git a/documentation/instructor/enrollment_alumni.php b/documentation/instructor/enrollment_alumni.php new file mode 100644 index 000000000..d9806cce9 --- /dev/null +++ b/documentation/instructor/enrollment_alumni.php @@ -0,0 +1,7 @@ + + +

    Alumni

    + +

    Instructors can mark students who have completed the course as alumni. Alumni have access to all course content with the exception of tests and surveys. They can particpate in activities to help new students master the content of the course, such as contributing to the forums. Select students from the Enrolled list, then use Mark Alumni to add the students to the Alumni list. Re-enrolling or removing alumni can be done from the Alumni tab.

    + + \ No newline at end of file diff --git a/documentation/instructor/enrollment_course_list.php b/documentation/instructor/enrollment_course_list.php new file mode 100644 index 000000000..3ca47e560 --- /dev/null +++ b/documentation/instructor/enrollment_course_list.php @@ -0,0 +1,20 @@ + + +

    Course Lists

    +

    It is possible to enter or import a course enrollment list into your ATutor course. Those on the list can be added to the Enrolled list immediately, or added to the Not Enrolled list and later moved to the Enrolled list when the time comes to give students access to the course. When users are added or moved to the Enrolled list, they are sent an email with instructions on how to access the course.

    + +

    Creating a Course List

    +

    You have the option of manually generating the student list by selecting the Create Course List option. This option is useful if there is only a small number of users to be added to the course. With many students, the Import feature may be a more efficient option.

    + +

    Creating a Course Enrollment List for Import

    +

    To import a class list from your local system into ATutor, create a plain text file with the format "firstname", "lastname", "email", with one student per line. This file can be generated from a spreadsheet application, a database, or created manually in a plain text editor.

    + +

    Importing Course Enrollment Lists

    +

    To import a course list (in the file format mentioned above), use the Import Course List link. Choose the course list file on your system by using the Browse button, and then use the Import Course List button.

    + +

    When importing an enrollment list, ATutor will automatically generate login names for each new user based on their first and last names. There is an option to choose a format for this - either separating the username with an underscore or a period. (i.e. J_Smith, or J.Smith).

    + +

    Exporting Course Enrollment Lists

    +

    A course enrollment list can easily be exported from ATutor and is useful for creating a backup or for importing the list into other courses. Choose which subsets of users to export (enrolled students, not enrolled students, and alumni) and use Export to download the list. The exported list is in the same comma-separated format as that described in Creating a Course Enrollment List for Import above.

    + + diff --git a/documentation/instructor/enrollment_privileges.php b/documentation/instructor/enrollment_privileges.php new file mode 100644 index 000000000..3ba81a393 --- /dev/null +++ b/documentation/instructor/enrollment_privileges.php @@ -0,0 +1,8 @@ + + +

    Privileges

    + +

    Students who are enrolled in a course can be assigned course administrative privileges. This allows your students to perform actions like managing content, creating and marking tests, managing groups, or moderating forums or the chat. This tool is useful for creating teaching assistants, or for creating multiple instructors for a course. Select the users you wish to give privileges to, and use the Privileges button. Then choose which tools you want each student to have access to and use the Save button.

    + + + diff --git a/documentation/instructor/extracting_zip_archives.php b/documentation/instructor/extracting_zip_archives.php new file mode 100644 index 000000000..464f8c55e --- /dev/null +++ b/documentation/instructor/extracting_zip_archives.php @@ -0,0 +1,9 @@ + + +

    Extracting Zip Archives

    +

    After uploading a ZIP file to the File Manager, select the Extract Archive icon next to the file name. This will display the contents of the zip file and suggest a directory name in which to unzip the archive. Use the Extract button in the ZIP file viewer to unzip the file into the specified directory.

    + +

    Illegal file types will not be extracted, and file names containing illegal characters will be renamed. The viewer will show illegal file types crossed out, and files with illegal characters pointing ( => ) to the renamed file that will be extracted.

    + + + diff --git a/documentation/instructor/faq.php b/documentation/instructor/faq.php new file mode 100644 index 000000000..e8999e52f --- /dev/null +++ b/documentation/instructor/faq.php @@ -0,0 +1,8 @@ + + +

    Frequently Asked Questions (FAQs)

    +

    If an instructor would like to compile a list of frequently asked questions (and answers) for course members, they may do so by going to the FAQ section of the Manage area. Topics must first be created, and then questions can be created and associated with a particular topic.

    + +

    Since version 1.5.2., the FAQ is a Student Tool and can therefore be enabled or disabled, and linked from the main menu or from the home page.

    + + diff --git a/documentation/instructor/feeds.php b/documentation/instructor/feeds.php new file mode 100644 index 000000000..fefd93efd --- /dev/null +++ b/documentation/instructor/feeds.php @@ -0,0 +1,6 @@ + + +

    Syndicated Feeds

    +

    Since version 1.5.2, System Administrators are able to add syndicated news feeds to the system, making them available to instructors to use in their courses. When available, instructors can display the news feeds in the side menu of their courses by using the Side Menu editor of Student Tools, under Manage section, and selecting a feed from the dropdowns.

    + + diff --git a/documentation/instructor/file_manager.php b/documentation/instructor/file_manager.php new file mode 100644 index 000000000..ee5389a10 --- /dev/null +++ b/documentation/instructor/file_manager.php @@ -0,0 +1,28 @@ + + +

    File Manager

    +

    ATutor has a file system used for storing course content resource files, and it is managed with the File Manager. The File Manager allows instructors to include files associated with course content into content pages. The File Manager also allows you to create, edit, move, and delete files. The File Manager should not be confuse with the File Storage area.

    + +

    The File Manager can be found in the Manage area, linked from the Content Editor so it can be opened while authoring content pages, or linked throughout the Test Question authoring screens so files can be managed while assembling tests.

    + + +

    Creating Folders

    +

    Using the Create Folder button creates a folder for better organizing uploaded files. It is possible to create folders and move files into folders at any time.

    + +

    Uploading Files

    +

    Uploading files using the File Manager is one way of adding content to your course. After uploading a file, it can be added to a course by using the popup File Manager linked form the Content Editor and the Insert button that appears next to each file. This will either create a link to a file, or insert an image into a content page.

    + +

    Browse... opens a local file browser window in which to choose the file for upload.

    + +

    Upload will upload the specified file to the ATutor system. Specify a file by either typing the path and filename in the text field or by using the Browse... button.

    + +

    Creating New Files

    +

    The Create a New File area allows for quick creation of a new text or HTML file. If using Text mode, any blank lines will be saved with the file. If using HTML mode, HTML tags will be permitted. Selecting Save will save a new file with the entered information (filename and content) into the ATutor system and return to the File Manager. Cancel will discard the file and return to the File Manager.

    + +

    Editing Files

    +

    Text or HTML files created using the File Manager, or uploaded from another source, can be edited by selecting the Edit icon next to the file name listed in the File Manager.

    + +

    Previewing Files

    +

    Use the link on the filename in the File Manager to preview that file. Files that can be viewed online, such as images, text, or html files, will open in a preview window. Files that can not be displayed online, or require a plugin, will prompt you with a download confirmation message.

    + + \ No newline at end of file diff --git a/documentation/instructor/forums.php b/documentation/instructor/forums.php new file mode 100644 index 000000000..2fee3e9d9 --- /dev/null +++ b/documentation/instructor/forums.php @@ -0,0 +1,19 @@ + + +

    Forums

    +

    A Forum is an area that allows course members to communicate in a structured manner through messages. The forums can be enabled or disabled and linked from the main navigation, the course home page, or displayed as a menu module. These preferences can be specified in the Student Tools section of the Manage area.

    + +

    Course instructors and students with forum privileges can manage and mediate the forums by deleting, locking, and sticking threads and messages.

    + +

    Creating Forums

    +

    To create a new forum, use the Create Forum link in the Forums section of the Manage area and enter a title and optional description. New forums will be accessible to all course students, instructors, and alumni. Forums can also be created for access by Groups only.

    + +

    Editing & Deleting Forums

    +

    To edit an existing forum, select the forum in the Forums manager and use the Edit button. Make the necessary changes and then use Save to return to the Forum Manager, or Cancel to return to the Forum Manager without saving any changes.

    + +

    To delete an existing forum, select the forum in the Forums manager and use the Delete button. The forum and all threads and messages within it will be deleted.

    + +

    Shared Forums

    +

    Shared forums are special forums where members of different courses can engage in discussions with one another. The instructors, and students with forum privileges, of each participating course can manage and moderate the shared forum. Shared forums can only be created by an administrator.

    + + \ No newline at end of file diff --git a/documentation/instructor/fr/index.php b/documentation/instructor/fr/index.php new file mode 100644 index 000000000..2656b1faa --- /dev/null +++ b/documentation/instructor/fr/index.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/documentation/instructor/glossary.php b/documentation/instructor/glossary.php new file mode 100644 index 000000000..7501fe55a --- /dev/null +++ b/documentation/instructor/glossary.php @@ -0,0 +1,8 @@ + + +

    Glossary

    +

    The Glossary lists all course terms, their definitions and related terms. Terms can be added to the glossary by using the Add Glossary Term link in the Glossary Manager, or by adding terms directly into content while it is being created using the Content Editor.

    + +

    The Glossary is a Student Tool and can therefore be enabled or disabled, linked from the main menu, linked from the home page, or displayed as a module in the side menu.

    + + diff --git a/documentation/instructor/glossary_terms.php b/documentation/instructor/glossary_terms.php new file mode 100644 index 000000000..feee3bb6f --- /dev/null +++ b/documentation/instructor/glossary_terms.php @@ -0,0 +1,8 @@ + + +

    Glossary Terms

    +

    If Terms were specified in the Content tab, they may be defined under the Glossary tab. Enter the definition or explanation for each term specified in the Content. See the Terms section in Entering Content for details on how to add glossary terms to your content.

    + +

    It is also possible to relate terms to one another within the glossary by specifying a related term. This will add a link to the related term beside the glossary item.

    + + \ No newline at end of file diff --git a/documentation/instructor/groups.php b/documentation/instructor/groups.php new file mode 100644 index 000000000..e54c3381a --- /dev/null +++ b/documentation/instructor/groups.php @@ -0,0 +1,25 @@ + + +

    Groups

    +

    The group area allows an instructor or assistant with Group privileges to create and manage groups of enrolled students within various projects. This may be useful for assigning group-specific tests or assignments, brainstorming, collaborative projects, online discussions and case studies, peer editing or responses, and so on.

    + +

    There are two ways to create groups: manually or by using automated tools to generate the groups. To facilitate the creation of multiple sets of groups, groups are collected together by type. An example of a group type may be "Tutorials" or "Project A". This feature lets students belong to different groups across multiple projects.

    + +

    Create multiple groups automatically

    +

    Creating groups automatically allows an instructor to specify the number of groups to create, or the number of students per group, and populate groups accordingly.

    + +

    Enter the group type, group prefix (such as "Tutorial" - the groups will then be named "Tutorial 1", "Tutorial 2",...), and a default description that will be applied to each group. To determine the number of groups that will be created, enter the number of students per group, or the number of groups. Groups will automatically be created accordingly. Check the box beside "Fill groups randomly upon creation" to populate groups evenly at random. Uncheck this box to create the groups, but populate them manually at a later time. Finally, choose which tools will be made avialable to this groups (File Storage, Forum, Blog, Links, etc.) then use the Create button.

    + + +

    Create a single group manually

    +

    It is also possible to create groups manually, one by one. This is a good way of creating groups if you have particular needs in terms of which students work together, and a relatively small class. This method is also good for adding groups to existing projects or types of groups. For example, if groups were created and populated automatically, and then several new students enroll, it's possible to manually add the new students to a new group within an existing project or type. A single group might be created to which students who missed a quiz could be assigned, so they could take a makeup test. A single group might be created with the blog tool enabled, so all students in the class can post to the same blog.

    + +

    Enter the type of project, title, and description. Also choose which tools will be made avialable to this groups (File Storage, Forums, Blog, etc.) and use the Create button.

    + +

    Managing Groups

    + +

    From the groups page, it is possible to Edit a group's title, description and tools, or Delete a group entirely.

    + +

    To manage the members of a group, select the group and use the Members button. The group members screen displays the course list. All unassigned students can automatically be added to the group by using the Assign Unassigned button, or picked manually and saved using the drop down menus, and then the using Save button.

    + + diff --git a/documentation/instructor/index.php b/documentation/instructor/index.php new file mode 100644 index 000000000..e781201dd --- /dev/null +++ b/documentation/instructor/index.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/documentation/instructor/introduction.php b/documentation/instructor/introduction.php new file mode 100644 index 000000000..7fa0b5df3 --- /dev/null +++ b/documentation/instructor/introduction.php @@ -0,0 +1,9 @@ + + +

    Introduction

    +

    Welcome to the ATutor Instructor Documentation!

    + +

    Most of the course management tools are found in the Manage section and are available to instructors and students with assigned privileges (assistants).

    + + + diff --git a/documentation/instructor/links.php b/documentation/instructor/links.php new file mode 100644 index 000000000..6e2563c7d --- /dev/null +++ b/documentation/instructor/links.php @@ -0,0 +1,14 @@ + + +

    Links

    + +

    Links to external websites can be added to the course Links area, allowing course members to visit course related information elsewhere on the Web. Both students and instructors can add links by using Suggest Link. Student-submitted links must be approved by the instructor in the Links Manager. Instructors can also add links by using Add Link in the Links Manager.

    + +

    The Links section is a Student Tool and can therefore be enabled or disabled, linked from the main menu or linked from the home page, and assigned as student privilege.

    + +

    The Links section can be selected for Groups. Groups members can add links, without them having to be approved by the Instructor, and either keep them private to the group, and only its members, or make them public, so others not in the group can browse through them.

    + +

    Link Categories

    +

    It is necessary to create at least one category before adding any links. Use Create Category in the Links Manager to create categories for organising course links. To edit or delete existing categories use the Categories link in the Links Manager. Note that categories that have links associated with them may not be deleted until those links are removed from the category.

    + + \ No newline at end of file diff --git a/documentation/instructor/managing_files_folders.php b/documentation/instructor/managing_files_folders.php new file mode 100644 index 000000000..e75443ed6 --- /dev/null +++ b/documentation/instructor/managing_files_folders.php @@ -0,0 +1,13 @@ + + +

    Managing Files & Folders

    + +

    It is possible to Rename, Delete, and Move files and folders within the File Manager. Choose a file (or files if mass-deleting or moving to one location) from the File Manager list, then use the appropriate button for the action.

    + +

    Renaming a file will change the name of the file.

    + +

    Deleting a file deletes all selected files and folders from the ATutor system. If a folder is being deleted, the files within it will also be deleted. Once the deletion is confirmed, the files can not be undeleted.

    + +

    To Move files to a different location, choose a new location from the File Manager tree and use the Move button. Once the move is confirmed, all selected files will be found in the new directory.

    + + \ No newline at end of file diff --git a/documentation/instructor/managing_posts.php b/documentation/instructor/managing_posts.php new file mode 100644 index 000000000..54bf95687 --- /dev/null +++ b/documentation/instructor/managing_posts.php @@ -0,0 +1,29 @@ + + +

    8.4.1 Managing Posts

    +

    The course instructor and assistants with forum privileges can edit and delete posts. Access to these tools are available when viewing a thread message.

    + +
    +
    Edit
    +
    Use the Edit link to edit the title and the body of a post.
    + +
    Delete
    +
    Use the Delete link to delete a post. Deleting the first post from a thread will delete the entire thread including all replies. A confirmation will be asked prior to each deletion.
    +
    + + + diff --git a/documentation/instructor/managing_threads.php b/documentation/instructor/managing_threads.php new file mode 100644 index 000000000..0392ef071 --- /dev/null +++ b/documentation/instructor/managing_threads.php @@ -0,0 +1,42 @@ + + +

    8.4 Managing Threads

    + +

    As an instructor, it is wise to become familiar with the forum management tools. To access these tools, browse a forum while logged in as an instructor or as an assistant with forum management privileges.

    + +

    For each thread in a forum, the following actions are available:

    +
    +
    Stick Thread
    +

    Use the exclamation point icon next to a thread to stick it. This keeps the specified thread at the top of the forum's thread list and is useful for keeping important information visible to forum users.

    +

    To unstick a thread, just use the Sticky Thread icon again.

    +

    Some possible uses of a sticky thread include: course dates, forum rules, contact information, or important course material.

    +
    + +
    Lock Thread
    +

    Use the Lock icon next to the thread title to lock a thread. There are two options for locking a thread - lock posting and reading, and lock posting only. Lock posting and reading closes the thread so that no one can read the contents or post replies. But note that the title of the thread will remain listed in the forum. Lock posting only will let users read the entire thread but not post any replies to it.

    + +

    To change the lock preferences or unlock a thread, use the Unlock Thread icon.

    +
    + +
    Move Thread
    +
    To move a thread, use the Move Thread icon next to the thread title. This will move all posts within the thread to the target forum.
    + +
    Delete Thread
    +
    To delete a thread, use the Delete Thread icon next to the thread title. This will delete all posts within the thread and cannot be undeleted.
    +
    + + diff --git a/documentation/instructor/pages.inc.php b/documentation/instructor/pages.inc.php new file mode 100644 index 000000000..a6111dd7a --- /dev/null +++ b/documentation/instructor/pages.inc.php @@ -0,0 +1,58 @@ + \ No newline at end of file diff --git a/documentation/instructor/polls.php b/documentation/instructor/polls.php new file mode 100644 index 000000000..dfe6831cf --- /dev/null +++ b/documentation/instructor/polls.php @@ -0,0 +1,6 @@ + + +

    Polls

    +

    Polls are useful for quickly gathering course member opinions. Instructors and students with poll privileges can post a question with up to seven choices for answers. Unlike Tests and Surveys, Polls are not graded. Because Polls is a Student Tool, it can be enabled, disabled, and positioned according to the Student Tools preferences.

    + + \ No newline at end of file diff --git a/documentation/instructor/preview.php b/documentation/instructor/preview.php new file mode 100644 index 000000000..d8151de21 --- /dev/null +++ b/documentation/instructor/preview.php @@ -0,0 +1,7 @@ + + +

    Previewing Tests

    + +

    To preview the questions of a test or survey, choose the test from the Tests/Survey Manager and use the Preview button. The screen displayed shows what the student will see when he/she takes a test. Though the exception is previewing randomized tests, which displays all of the questions assigned to that test rather than showing a random number of them (what the student will see).

    + + diff --git a/documentation/instructor/properties.php b/documentation/instructor/properties.php new file mode 100644 index 000000000..311f7742d --- /dev/null +++ b/documentation/instructor/properties.php @@ -0,0 +1,41 @@ + + +

    Properties

    +

    The Properties Manager allows instructors to adjust the visual, functional, and technical details of a course. Properties set during installation can be changed with the Properties Manager. The Properties Manager is also where you delete a course. Additional properties are managed by the ATutor system administrator, including upload file size limitations and space limitations for a course. Contact an ATutor administrator if these properties need to be changed.

    + +
    +
    Title
    +
    The course name.
    + +
    Primary Language
    +
    If a user has not yet chosen a preferred language, ATutor will display in the language selected here.
    + +
    Description
    +
    An short text description of the course, to display in the Browse Course listing for the course.
    + +
    Export Content
    +
    If enabled, students can export course materials as content packages that can be viewed offline. If set to be available only for top level pages, exporting a top level page also exports all its sub-pages.
    + +
    Syndicated Announcements
    +
    If enabled, the course's announcements become available as an RSS feed.
    + +
    Access
    +
    Whether students need to login, and/or enroll, to gain access to a course .
    + +
    Release Date
    +
    The date the course can be accessed by students.
    + +
    Banner
    +
    HTML formatted content that appears at the top of the course home page. Create splash screen, or a customized course front page.
    + +
    Copyright Notice
    +
    Appears in addition to the ATutor copyright notice, to signify the copyright of the content being displayed. Use & copy; (without the space) to create a copyright symbol
    + +
    Icon
    +
    An 80 pixel by 80 pixel icon displayed with the course listing in MyCourses.
    + + +
    + + + diff --git a/documentation/instructor/question_categories.php b/documentation/instructor/question_categories.php new file mode 100644 index 000000000..36f2419ce --- /dev/null +++ b/documentation/instructor/question_categories.php @@ -0,0 +1,6 @@ + + +

    Question Categories

    +

    Question categories are useful for organizing questions by topic, but also to make it easier to add questions into tests. When adding questions, it is possible to simply check the box beside the category name which will add all of the questions within it, instead of having to check each question separately. Use the Create Category link to create a category. It will then appear in the Question Categories manager where it can be Edited and Deleted.

    + + diff --git a/documentation/instructor/question_database.php b/documentation/instructor/question_database.php new file mode 100644 index 000000000..3e85afdb3 --- /dev/null +++ b/documentation/instructor/question_database.php @@ -0,0 +1,6 @@ + + +

    Question Database

    +

    The Question Database is where course test and survey questions are stored. Questions are created separately so that they may be reused in different tests and surveys.

    + + diff --git a/documentation/instructor/reading_list.php b/documentation/instructor/reading_list.php new file mode 100644 index 000000000..8e745fa72 --- /dev/null +++ b/documentation/instructor/reading_list.php @@ -0,0 +1,12 @@ + + +

    Reading List

    +

    The reading list area allows instructors and assistants with Reading List privileges to list course resources and schedule when they should be read.

    + +

    Managing Reading List

    +

    A new reading list entry can be added by selecting book, URL, handout, AV, or file from the "Type of Reading" dropdown at the top and using the Create button. If a resource of that type does not already exist, the instructor is prompted to add one. After this is complete, or if resources of that type do exist, the add reading list entry page is displayed. Choose the name of the resource from the dropdown, or follow the Create New link to add a new one. Specify if it is required or optional reading, and add a comment if necessary. It is also possible to specify a "read by" date by entering the start and end reading dates. Use the Save button to create the entry.

    + +

    Managing Resources

    +

    To manage resources, follow the Resources link. Create a new resource by selecting its type from the dropdown at the top and using the Create button. Enter the title, author, year, publisher, ISBN, and comment and use the Save button. To Edit or Delete an entry, choose it from the list and use the appropriate button.

    + + \ No newline at end of file diff --git a/documentation/instructor/scorm_packages.php b/documentation/instructor/scorm_packages.php new file mode 100644 index 000000000..6d76e3d98 --- /dev/null +++ b/documentation/instructor/scorm_packages.php @@ -0,0 +1,24 @@ + + +

    SCORM Packages

    +

    The Packages tool, when enabled, allows instructors to include SCORM 1.2 Sharable Content Objects (SCOs) as part of their courses. SCOs remain separated from the course content as complete learning units. SCOs should not be confused with content packages which are loaded into ATutor using the Import/Export tool in the Content Manager.

    +

    Note: The ATutor SCORM Run-Time Environment (RTE) that plays SCOs requires users to have Java 1.5 (i.e. JRE 1.5) installed on their computer.

    + +

    Use the Packages link from the Manage area to access the following:

    + +
    +
    Import Package
    +

    Upload a SCO from your computer, or enter the URL to a SCO located on the Web to import it into your course.

    + +
    Delete Package
    +

    Removes a SCO from a course, and deletes all associated files.

    + +
    Package Setting
    +
    +

    Credit Mode sets the package to credit or no credit.

    + +

    Lesson Mode is set to browse if the package is to be available for evaluation, or set to normal as a lesson..

    +
    +
    + + \ No newline at end of file diff --git a/documentation/instructor/side_menu.php b/documentation/instructor/side_menu.php new file mode 100644 index 000000000..21c2def5c --- /dev/null +++ b/documentation/instructor/side_menu.php @@ -0,0 +1,6 @@ + + +

    Side Menu

    +

    Some of the student tools can be accessed through the side menu. Which side menu boxes, and the order in which they will appear, can be controlled by selecting the tool name from the dropdowns, and arrange them in order of preference. Those more likely to be used can be placed at the top of the menu. To remove a menu box, choose the blank option from the selection menus in the side menu editor

    + + \ No newline at end of file diff --git a/documentation/instructor/statistics.php b/documentation/instructor/statistics.php new file mode 100644 index 000000000..85238c195 --- /dev/null +++ b/documentation/instructor/statistics.php @@ -0,0 +1,6 @@ + + +

    Statistics

    +

    The statistics page displays the number of Members (registered users) and Guests (unregistered users) who have logged into the course. Use the Properties manager to control guest access to the course.

    + + \ No newline at end of file diff --git a/documentation/instructor/student_submissions.php b/documentation/instructor/student_submissions.php new file mode 100644 index 000000000..e18ef8035 --- /dev/null +++ b/documentation/instructor/student_submissions.php @@ -0,0 +1,10 @@ + + +

    Test Submissions

    +

    To view the submissions of a test, choose a test from the Test/Survey Manager and use the Submissions button. The list of student submissions will be listed, and can be filtered to show all, marked or unmarked tests.

    + +

    Unmarked tests are those requiring instructor input, or those with open-ended questions. Multiple-choice and true-false questions are automatically marked by the Atutor system and Likert questions do not require marking.

    + +

    To view and/or mark test submissions, choose a submission from the list and use the View & Mark Test button. The test will be displayed with a box beside each question for entering or editing the mark. Multiple-choice and true-false answers show a red "X" icon beside an answer if the student answered incorrectly, or a green checkmark if he/she was right. If an answer is incorrect, the correct answer will be shown with a green checkmark after it in brackets. Use Save to enter the marks into the system and return to the submission manager.

    + + \ No newline at end of file diff --git a/documentation/instructor/student_tools.php b/documentation/instructor/student_tools.php new file mode 100644 index 000000000..8509c8866 --- /dev/null +++ b/documentation/instructor/student_tools.php @@ -0,0 +1,20 @@ + + +

    Student Tools

    +

    Student Tools is a collection of course features that may be useful for various types of learning activities. Tools include: Forums, Glossary, Site-map, Links, Polls, TILE Repository Search, Tests & Surveys, My Tracker, Export Content, Chat, Directory, Inbox, and Packages. Instructors can decide where these tools will be accessed from - the Main Navigation, and/or Course Home.

    + +
    +
    Main Navigation
    +
    In the default Atutor theme, the Main Navigation appears as tabs below the title of the course. Student Tools specified to appear here will each have their own tab. Note that other themes may choose to display the Main Navigation differently.
    + +
    Course Home
    +
    Course Home is the first page viewed when a student enters a course. Student Tools that are selected to appear on the Home page will be displayed with an icon and a label above the course announcements.
    +
    + +

    If neither Main Navigation or Course Home options are selected, then that Student Tool be "turned off", or not accessible to students. An instructor might choose to turn on Student Tools as they are needed, for example turning on the Tests & Surveys tool when a test is available, or turning on the Chat when an online meeting is going to take place.

    + +

    Using the arrows in the Order column will change the ordering of the student tool as it appears in the Main Navigation and on the Course Home page.

    + +

    It is also possible to install the Student Tools Module, and use it as a place to locate links to the various ATutor tools, leaving the course home page as a splash screen, or as a place to display course announcments.

    + + \ No newline at end of file diff --git a/documentation/instructor/test_statistics.php b/documentation/instructor/test_statistics.php new file mode 100644 index 000000000..2f81dff84 --- /dev/null +++ b/documentation/instructor/test_statistics.php @@ -0,0 +1,7 @@ + + +

    Test Statistics

    + +

    To view a test's statistics, choose the test from the Test/Survey Manager and use the Statistics button. There are two sets of statistics available for tests. The first is Question Statistics which shows each question of the test and the number/percentage of students who chose each of the answers. Submission Statistics shows each submission's overall mark and marks given for each test question. The overall test average is also calculated.

    + + diff --git a/documentation/instructor/tests_surveys.php b/documentation/instructor/tests_surveys.php new file mode 100644 index 000000000..b6924a0a4 --- /dev/null +++ b/documentation/instructor/tests_surveys.php @@ -0,0 +1,6 @@ + + +

    Tests and Surveys

    +

    The instructor, and assistants with test privileges, can create tests and surveys to be administered to enrolled students. There are a variety of options for defining tests like setting the release date, and using randomized questions or group-specific tests. Once a test or survey has been created, add questions to the Question Database, and then add these questions to the new test.

    + + diff --git a/documentation/instructor/tile_repository.php b/documentation/instructor/tile_repository.php new file mode 100644 index 000000000..c0d1445b9 --- /dev/null +++ b/documentation/instructor/tile_repository.php @@ -0,0 +1,8 @@ + + +

    TILE Repository

    +

    Content created in ATutor can be exported to The Inclusive Learning Exchange (TILE) using the Export tool on the Import/Export Content screen. Content can also be imported from the TILE repository by entering a search term into the TILE Repository Search, then using Import next to a listing in the search results. Use the Preview link next to a search result to open the TILE content browser, or use Download to retrieve the content package from TILE repository. Once downloaded, the retrieved package can be imported into ATutor using the Import/Export Content import tool.

    + +

    Visit the TILE web site for more information about using the repository, and to set up an account on the system.

    + + \ No newline at end of file diff --git a/documentation/instructor/web_search.php b/documentation/instructor/web_search.php new file mode 100644 index 000000000..688f39f4f --- /dev/null +++ b/documentation/instructor/web_search.php @@ -0,0 +1,8 @@ + + +

    Web Search

    +

    Since version 1.5.2, course members can use Google to search the web from within an ATutor course.

    + +

    The Web Search is a Student Tool and can therefore be enabled or disabled, linked from the main menu, linked from the home page, or displayed as a side menu box.

    + + diff --git a/documentation/link-out.gif b/documentation/link-out.gif new file mode 100644 index 0000000000000000000000000000000000000000..ecef0947aa06e62f442a1aa33b6830322fb78c64 GIT binary patch literal 52 zcmZ?wbhEHbWM^PwXkcLY|Nnn;bF<=47Dfgj&;b!383rb9mZrpM)jO^vu3N{%U=09c Cehr@h literal 0 HcmV?d00001 diff --git a/documentation/styles.css b/documentation/styles.css new file mode 100644 index 000000000..3322dcf71 --- /dev/null +++ b/documentation/styles.css @@ -0,0 +1,137 @@ +pre { + font-family: Arial, sans-serif; +} + +body{ + background-color: #FFF; + font-family: Verdana,Arial,sans-serif; +} +h1,h2,h3,p, table, ul { + margin: 0 10px +} +h1 { + color: #FFF; + border-bottom: 1px dashed #FFF; + margin-left: -5px; + padding-left: 15px; + margin-right: -5px; + padding-right: 15px; +} +h2{color: #FFF; + border-bottom: 1px dashed #FFF; + margin-left: -5px; + padding-left: 15px; + margin-right: -5px; + padding-right: 15px; +} +h3{color: #f0f0f0} +p{padding-bottom:1em} +h2{padding-top: 0.3em} + +/* for the curves */ +div.nifty { margin: 10px 2%; background: #9BD1FA; } +b.rtop, b.rbottom{display:block;background: #FFF} +b.rtop b, b.rbottom b{display:block;height: 1px; overflow: hidden; background: #9BD1FA} +b.r1{margin: 0 5px} +b.r2{margin: 0 3px} +b.r3{margin: 0 2px} +b.rtop b.r4, b.rbottom b.r4{margin: 0 1px;height: 2px} + + +a { + text-decoration: none; + border-bottom: 1px solid white; + color: white; + font-weight: bold; +} +a:hover { + border-bottom: 0px; +} +td,th { + font-size: 85%; +} + +kbd { + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; + border-color: #edd #baa #baa #eed; + white-space: pre; +} + +code { + font-family: Verdana,Arial,sans-serif; + background-color: #efefef; + padding: 0px 4px 0px 4px; + border-width: 1px 1px 1px 1px; + border-style: solid; + border-color: #edd #baa #baa #eed; +} + + +div#toc { + color: #f0f0f0; + padding-bottom: 15px; +} + +div#toc ul { + list-style: none; +} +div#toc li { + padding-top: 2px; + padding-bottom: 0px; +} + +ol { + margin-top: 0px; +} + +ol li { + padding-bottom: 3px; +} + +dl { + margin: 0 10px +} +dl dd { + padding-top: 0px; + padding-left: 5px; + margin-left: 5%; + border-left: 1px solid #f0f0f0; + margin-bottom: 10px; +} + +acronym { + cursor: help; +} + +a[href*="http"] { + padding-right: 8px; + background-image: url('link-out.gif'); + background-repeat: no-repeat; + background-position: right 4px; + margin-right: 2px; +} + +div#nav-links { + margin-left: 20px; + margin-right: 20px; + margin-bottom: 20px; +} + +div#nav-links a { + color: black; + text-decoration: none; + border-bottom: 1px solid; +} + +pre { + font-family: Courier, monospace; + background-color: #EEEEFF; + padding: 5px; + margin-left: 20px; + color:#761596; + margin-top: 0px; + width: 50%; + font-size: smaller; +} \ No newline at end of file diff --git a/editor/add_content.php b/editor/add_content.php new file mode 100644 index 000000000..6bea0a414 --- /dev/null +++ b/editor/add_content.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/editor/add_forum.php b/editor/add_forum.php new file mode 100644 index 000000000..0ae6c16d2 --- /dev/null +++ b/editor/add_forum.php @@ -0,0 +1,69 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/forums/index.php'); + exit; +} + +if ($_POST['add_forum'] && (authenticate(AT_PRIV_FORUMS, AT_PRIV_RETURN))) { + if ($_POST['title'] == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('title'))); + } + + if (!$msg->containsErrors()) { + require (AT_INCLUDE_PATH.'lib/forums.inc.php'); + add_forum($_POST); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'tools/forums/index.php'); + exit; + } +} + +$onload = 'document.form.title.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    + + +
    +
    +
    *

    + +
    +
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/editor/add_news.php b/editor/add_news.php new file mode 100644 index 000000000..4470249d7 --- /dev/null +++ b/editor/add_news.php @@ -0,0 +1,143 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/news/index.php'); + exit; +} + +if (!isset($_REQUEST['setvisual']) && !isset($_REQUEST['settext'])) { + if ($_SESSION['prefs']['PREF_CONTENT_EDITOR'] == 1) { + $_POST['formatting'] = 1; + $_REQUEST['settext'] = 0; + $_REQUEST['setvisual'] = 0; + + } else if ($_SESSION['prefs']['PREF_CONTENT_EDITOR'] == 2) { + $_POST['formatting'] = 1; + $_POST['settext'] = 0; + $_POST['setvisual'] = 1; + + } else { // else if == 0 + $_POST['formatting'] = 0; + $_REQUEST['settext'] = 0; + $_REQUEST['setvisual'] = 0; + } +} + +if ((!$_POST['setvisual'] && $_POST['settext']) || !$_GET['setvisual']){ + $onload = 'document.form.title.focus();'; +} + +if (isset($_POST['add_news'])&& isset($_POST['submit'])) { + $_POST['formatting'] = intval($_POST['formatting']); + $_POST['title'] = trim($_POST['title']); + $_POST['body_text'] = trim($_POST['body_text']); + + $missing_fields = array(); + + if (!$_POST['body_text']) { + $missing_fields[] = _AT('body'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors() && (!isset($_POST['setvisual']) || isset($_POST['submit']))) { + + $_POST['formatting'] = $addslashes($_POST['formatting']); + $_POST['title'] = $addslashes($_POST['title']); + $_POST['body_text'] = $addslashes($_POST['body_text']); + + $sql = "INSERT INTO ".TABLE_PREFIX."news VALUES (NULL, $_SESSION[course_id], $_SESSION[member_id], NOW(), $_POST[formatting], '$_POST[title]', '$_POST[body_text]')"; + mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + /* update announcement RSS: */ + if (file_exists(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS1.0.xml')) { + @unlink(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS1.0.xml'); + } + if (file_exists(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS2.0.xml')) { + @unlink(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS2.0.xml'); + } + + header('Location: '.AT_BASE_HREF.'tools/news/index.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (($_POST['setvisual'] && !$_POST['settext']) || $_GET['setvisual']) { + load_editor(); +} +$msg->printErrors(); + +?> +
    + + +
    +
    +
    + +
    + +
    +
    + onclick="javascript: document.form.setvisual.disabled=true;" /> + + + onclick="javascript: document.form.setvisual.disabled=false;"/> + + + '; + echo ''; + } else { + echo ''; + } + ?> +
    + +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/editor/delete_content.php b/editor/delete_content.php new file mode 100644 index 000000000..5875b168b --- /dev/null +++ b/editor/delete_content.php @@ -0,0 +1,62 @@ +deleteContent($_POST['cid']); + + unset($_SESSION['s_cid']); + unset($_SESSION['from_cid']); + + $msg->addFeedback('CONTENT_DELETED'); + header('Location: '.AT_BASE_HREF.'tools/content/index.php'); + exit; +} else if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/content/index.php'); + exit; +} + +$_GET['cid'] = intval($_REQUEST['cid']); + +$path = $contentManager->getContentPath($cid); +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($_GET['cid'] == 0) { + $msg->printErrors('ID_ZERO'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$children = $contentManager->getContent($_GET['cid']); + +$hidden_vars['cid'] = $_GET['cid']; + +if (is_array($children) && (count($children)>0) ) { + $msg->addConfirm('SUB_CONTENT_DELETE', $hidden_vars); + $msg->addConfirm('GLOSSARY_REMAINS', $hidden_vars); +} else { + $msg->addConfirm('GLOSSARY_REMAINS', $hidden_vars); +} + +$msg->addConfirm('DELETE', $hidden_vars); +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/editor/delete_forum.php b/editor/delete_forum.php new file mode 100644 index 000000000..bb89dc025 --- /dev/null +++ b/editor/delete_forum.php @@ -0,0 +1,73 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/forums/index.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $_POST['fid'] = intval($_POST['fid']); + + // check if this forum is shared: + // (if this forum is shared, then we do not want to delete it.) + if (!is_shared_forum($_POST['fid']) && valid_forum_user($_POST['fid'])) { + delete_forum($_POST['fid']); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } else { + $msg->addError('FORUM_NO_DEL_SHARE'); + } + + header('Location: '.AT_BASE_HREF.'tools/forums/index.php'); + exit; +} + +$_section[0][0] = _AT('discussions'); +$_section[0][1] = 'discussions/'; +$_section[1][0] = _AT('forums'); +$_section[1][1] = 'forum/list.php'; +$_section[2][0] = _AT('delete_forum'); + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +$_GET['fid'] = intval($_GET['fid']); + +$row = get_forum($_GET['fid'], $_SESSION['course_id']); + +if (!is_array($row)) { + $msg->addError('FORUM_NOT_ADDED'); +} else { ?> +
    + + + + addConfirm($confirm, $hidden_vars); + $msg->printConfirm(); +} + + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/editor/delete_news.php b/editor/delete_news.php new file mode 100644 index 000000000..786c2d5c9 --- /dev/null +++ b/editor/delete_news.php @@ -0,0 +1,67 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/news/index.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $_POST['form_news_id'] = intval($_POST['form_news_id']); + + $sql = "DELETE FROM ".TABLE_PREFIX."news WHERE news_id=$_POST[form_news_id] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + /* update announcement RSS: */ + if (file_exists(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS1.0.xml')) { + @unlink(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS1.0.xml'); + } + if (file_exists(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS2.0.xml')) { + @unlink(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS2.0.xml'); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'tools/news/index.php'); + exit; +} + +$_section[0][0] = _AT('delete_announcement'); + +require(AT_INCLUDE_PATH.'header.inc.php'); + + $_GET['aid'] = intval($_GET['aid']); + + $sql = "SELECT * FROM ".TABLE_PREFIX."news WHERE news_id=$_GET[aid] AND course_id=$_SESSION[course_id]"; + + $result = mysql_query($sql,$db); + if (mysql_num_rows($result) == 0) { + $msg->printErrors('ITEM_NOT_FOUND'); + } else { + $row = mysql_fetch_assoc($result); + + $hidden_vars['delete_news'] = TRUE; + $hidden_vars['form_news_id'] = $row['news_id']; + + $confirm = array('DELETE_NEWS', AT_print($row['title'], 'news.title')); + $msg->addConfirm($confirm, $hidden_vars); + + $msg->printConfirm(); + } + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/editor/edit_content.php b/editor/edit_content.php new file mode 100644 index 000000000..49eb85f92 --- /dev/null +++ b/editor/edit_content.php @@ -0,0 +1,304 @@ +addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } else { + $msg->addFeedback('CLOSED'); + if ($cid == 0) { + header('Location: '.AT_BASE_HREF.'tools/content/index.php'); + exit; + } + } + + if ($_REQUEST['cid'] == 0) { + header('Location: '.$_base_path.'content.php?cid='.intval($_REQUEST['new_pid'])); + exit; + } + header('Location: '.$_base_path.'content.php?cid='.intval($_REQUEST['cid'])); + exit; +} + +$tabs = get_tabs(); +$num_tabs = count($tabs); +for ($i=0; $i < $num_tabs; $i++) { + if (isset($_POST['button_'.$i]) && ($_POST['button_'.$i] != -1)) { + $current_tab = $i; + $_POST['current_tab'] = $i; + break; + } +} + +if (isset($_POST['submit_file'])) { + paste_from_file(); +} else if (isset($_POST['submit']) && ($_POST['submit'] != 'submit1')) { + /* we're saving. redirects if successful. */ + save_changes(true); +} +if (isset($_GET['tab'])) { + $current_tab = intval($_GET['tab']); +} + +if (!isset($current_tab) && isset($_POST['button_1']) && ($_POST['button_1'] == -1) && !isset($_POST['submit'])) { + $current_tab = 1; +} else if (!isset($current_tab) && (($_POST['desc_submit'] != '') || ($_POST['reverse'] != ''))) { + $current_tab = 4; /* after clicking 'make decisions' on accessibility tab */ +} else if (!isset($current_tab)) { + $current_tab = 0; +} + +if ($cid) { + $_section[0][0] = _AT('edit_content'); +} else { + $_section[0][0] = _AT('add_content'); +} + +if ($cid) { + $result = $contentManager->getContentPage($cid); + + if (!($content_row = @mysql_fetch_assoc($result))) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('PAGE_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $path = $contentManager->getContentPath($cid); + + if (defined('AT_FORCE_GET_FILE') && AT_FORCE_GET_FILE) { + $course_base_href = 'get.php/'; + } else { + $course_base_href = 'content/' . $_SESSION['course_id'] . '/'; + } + + if ($content_row['content_path']) { + $content_base_href .= $content_row['content_path'].'/'; + } +} else { + if (defined('AT_FORCE_GET_FILE') && AT_FORCE_GET_FILE) { + $content_base_href = 'get.php/'; + } else { + $content_base_href = 'content/' . $_SESSION['course_id'] . '/'; + } +} + +if ($current_tab == 4) { + /* kludge for issue #1626: */ + /* fixes the base href for the AChecker tab. */ + $course_base_href = ''; + $content_base_href = ''; +} + +if ($current_tab == 0) { + if (!isset($_REQUEST['setvisual']) && !isset($_REQUEST['settext'])) { + if ($_SESSION['prefs']['PREF_CONTENT_EDITOR'] == 1) { + $_POST['formatting'] = 1; + $_REQUEST['settext'] = 0; + $_REQUEST['setvisual'] = 0; + + } else if ($_SESSION['prefs']['PREF_CONTENT_EDITOR'] == 2) { + $_POST['formatting'] = 1; + $_POST['settext'] = 0; + $_POST['setvisual'] = 1; + + } else { // else if == 0 + $_POST['formatting'] = 0; + $_REQUEST['settext'] = 0; + $_REQUEST['setvisual'] = 0; + } + } + if ((!$_POST['setvisual'] && $_POST['settext']) || !$_GET['setvisual']){ + $onload = ' document.form.ctitle.focus();'; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($current_tab == 0) { + //used for visual editor + if (($_POST['setvisual'] && !$_POST['settext']) || $_GET['setvisual']){ + load_editor(); + } +} + +$cid = intval($_REQUEST['cid']); +$pid = intval($_REQUEST['pid']); + +?> + +getRelatedContent($cid); + + $_POST['pid'] = $pid = $_POST['new_pid'] = $content_row['content_parent_id']; + + $_POST['related_term'] = $glossary_ids_related; + } + } else { + $cid = 0; + if (!isset($_POST['current_tab'])) { + $_POST['day'] = date('d'); + $_POST['month'] = date('m'); + $_POST['year'] = date('Y'); + $_POST['hour'] = date('H'); + $_POST['minute'] = 0; + + if (isset($_GET['pid'])) { + $pid = intval($_GET['pid']); + $_POST['pid'] = 0; + $_POST['new_pid'] = $pid; + $_POST['ordering'] = count($contentManager->getContent(0))+1; + $_POST['new_ordering'] = count($contentManager->getContent($pid))+1; + } else { + $_POST['pid'] = $_POST['new_pid'] = 0; + $_POST['ordering'] = $_POST['new_ordering'] = count($contentManager->getContent($pid))+1; + } + $pid = 0; + } + //$changes_made = check_for_changes($content_row); + } + + + echo ''; + echo ''; + if ($current_tab != 0) { + echo ''; + echo ''; + echo ''; + echo ''; + } + if ($current_tab != 1) { + echo ''; + echo ''; + } + + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + + if (is_array($_POST['related']) && ($current_tab != 1)) { + foreach($_POST['related'] as $r_id) { + echo ''; + } + } + + echo ''; + + /* get glossary terms */ + $matches = find_terms(stripslashes($_POST['body_text'])); + $num_terms = count($matches[0]); + $matches = $matches[0]; + $word = str_replace(array('[?]', '[/?]'), '', $matches); + + if (is_array($word)) { + /* update $_POST['glossary_defs'] with any new/changed terms */ + for($i=0; $i<$num_terms; $i++) { + $word[$i] = urlencode($word[$i]); + if (!isset($_POST['glossary_defs'][$word[$i]])) { + $_POST['glossary_defs'][$word[$i]] = $glossary[$word[$i]]; + } + } + } + + if (is_array($_POST['glossary_defs']) && ($current_tab != 2)) { + foreach($_POST['glossary_defs'] as $w => $d) { + /* this term still exists in the content */ + if (!in_array($w, $word)) { + unset($_POST['glossary_defs'][$w]); + continue; + } + echo ''; + } + if (isset($_POST['related_term'])) { + foreach($_POST['related_term'] as $w => $d) { + echo ''; + } + } + } + + if ($do_check) { + $changes_made = check_for_changes($content_row); + } + +?> +
    + +
    +
    + + +
    + + + /> + +
    + + +
    + /> +
    + + + + +
    +
    + + \ No newline at end of file diff --git a/editor/edit_forum.php b/editor/edit_forum.php new file mode 100644 index 000000000..01ac00f72 --- /dev/null +++ b/editor/edit_forum.php @@ -0,0 +1,94 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/forums/index.php'); + exit; +} else if (isset($_POST['edit_forum'])) { + $_POST['fid'] = intval($_POST['fid']); + + if ($_POST['title'] == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('title'))); + } + + if (!$msg->containsErrors()) { + if (!is_shared_forum($_POST['fid'])) { + edit_forum($_POST); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } else { + $msg->addError('FORUM_NO_EDIT_SHARE'); + } + + header('Location: '.AT_BASE_HREF.'tools/forums/index.php'); + exit; + } +} + +$onload = 'document.form.title.focus();'; +require(AT_INCLUDE_PATH.'header.inc.php'); + +$fid = intval($_REQUEST['fid']); + +if (!isset($_POST['submit'])) { + $row = get_forum($fid, $_SESSION['course_id']); + if (!is_array($row)) { + $msg->addError('FORUM_NOT_FOUND'); + $msg->printALL(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +} else { + $row['description'] = $_POST['body']; + $row['mins_to_edit'] = $_POST['edit']; +} + +$msg->printErrors(); + +?> +
    + + + +
    +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/editor/edit_news.php b/editor/edit_news.php new file mode 100644 index 000000000..8969882fe --- /dev/null +++ b/editor/edit_news.php @@ -0,0 +1,154 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/news/index.php'); + exit; +} else if ($_POST['edit_news']) { + $_POST['title'] = trim($_POST['title']); + $_POST['body_text'] = trim($_POST['body_text']); + $_POST['aid'] = intval($_POST['aid']); + $_POST['formatting'] = intval($_POST['formatting']); + + if (($_POST['title'] == '') && ($_POST['body_text'] == '')) { + $msg->addErros('ANN_BOTH_EMPTY'); + } + + if (!$msg->containsErrors() && isset($_POST['submit'])) { + $_POST['title'] = $addslashes($_POST['title']); + $_POST['body_text'] = $addslashes($_POST['body_text']); + + $sql = "UPDATE ".TABLE_PREFIX."news SET title='$_POST[title]', body='$_POST[body_text]', formatting=$_POST[formatting], date=date WHERE news_id=$_POST[aid] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql,$db); + + /* update announcement RSS: */ + if (file_exists(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS1.0.xml')) { + @unlink(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS1.0.xml'); + } + if (file_exists(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS2.0.xml')) { + @unlink(AT_CONTENT_DIR . 'feeds/' . $_SESSION['course_id'] . '/RSS2.0.xml'); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'tools/news/index.php'); + exit; + } +} + +if (!isset($_REQUEST['setvisual']) && !isset($_REQUEST['settext'])) { + if ($_SESSION['prefs']['PREF_CONTENT_EDITOR'] == 1) { + $_POST['formatting'] = 1; + $_REQUEST['settext'] = 0; + $_REQUEST['setvisual'] = 0; + + } else if ($_SESSION['prefs']['PREF_CONTENT_EDITOR'] == 2) { + $_POST['formatting'] = 1; + $_POST['settext'] = 0; + $_POST['setvisual'] = 1; + + } else { // else if == 0 + $_POST['formatting'] = 0; + $_REQUEST['settext'] = 0; + $_REQUEST['setvisual'] = 0; + } +} + +if ((!$_POST['setvisual'] && $_POST['settext']) || !$_GET['setvisual']){ + $onload = 'document.form.title.focus();'; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (($_POST['setvisual'] && !$_POST['settext']) || $_GET['setvisual']) { + load_editor(); +} + +if (isset($_GET['aid'])) { + $aid = intval($_GET['aid']); +} else { + $aid = intval($_POST['aid']); +} + +if ($aid == 0) { + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$sql = "SELECT * FROM ".TABLE_PREFIX."news WHERE news_id=$aid AND course_id=$_SESSION[course_id]"; +$result = mysql_query($sql,$db); +if (!($row = mysql_fetch_array($result))) { + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +$_POST['formatting'] = intval($row['formatting']); + +?> + + +
    + + + +
    +
    +
    *

    + +
    + +
    +
    + onclick="javascript: document.form.setvisual.disabled=true;" />, + + onclick="javascript: document.form.setvisual.disabled=false;" /> + '; + echo ''; + } else { + echo ''; + } + ?> +
    + +
    +
    *

    + +
    + +
    + + +
    + + +
    +
    + + \ No newline at end of file diff --git a/editor/edit_post.php b/editor/edit_post.php new file mode 100644 index 000000000..57a1ac180 --- /dev/null +++ b/editor/edit_post.php @@ -0,0 +1,146 @@ +addError('ITEM_NOT_FOUND'); + header('Location: ../forum/list.php'); + exit; +} + +$sql = "SELECT *, UNIX_TIMESTAMP(date) AS udate FROM ".TABLE_PREFIX."forums_threads WHERE post_id=$pid"; +$result = mysql_query($sql,$db); +if (!($post_row = mysql_fetch_assoc($result))) { + $msg->addError('ITEM_NOT_FOUND'); + header('Location: ../forum/list.php'); + exit; +} + +$forum_info = get_forum($fid, $_SESSION['course_id']); + +$expiry = $post_row['udate'] + $forum_info['mins_to_edit'] * 60; + +// check if we're either a) an assistant or, b) own this post and within the time allowed: +if (!( authenticate(AT_PRIV_FORUMS, AT_PRIV_RETURN) + || ($post_row['member_id'] == $_SESSION['member_id'] && ($expiry > time() || isset($_POST['edit_post']) ) ) + ) + ) { + $msg->addError('POST_EDIT_EXPIRE'); + header('Location: ../forum/list.php'); + exit; +} + +if ($_POST['cancel']) { + $msg->addFeedback('CANCELLED'); + Header('Location: ../forum/view.php?fid='.$_POST['fid'].SEP.'pid='.$_POST['pid']); + exit; +} + +if ($_POST['edit_post']) { + $missing_fields = array(); + + $_POST['subject'] = str_replace('<', '<', trim($_POST['subject'])); + $_POST['body'] = str_replace('<', '<', trim($_POST['body'])); + $_POST['pid'] = intval($_POST['pid']); + + $_POST['subject'] = $addslashes($_POST['subject']); + $_POST['body'] = $addslashes($_POST['body']); + + if ($_POST['subject'] == '') { + $missing_fields[] = _AT('subject'); + } + + if ($_POST['body'] == '') { + $missing_fields[] = _AT('body'); + } + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + if (!$msg->containsErrors()) { + $sql = "UPDATE ".TABLE_PREFIX."forums_threads SET subject='$_POST[subject]', body='$_POST[body]', last_comment=last_comment, date=date WHERE post_id=$_POST[pid]"; + $result = mysql_query($sql,$db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + if ($_POST['ppid'] == 0) { + $_POST['ppid'] = $_POST['pid']; + } + header('Location: ../forum/view.php?fid='.$_POST['fid'].SEP.'pid='.$_POST['ppid']); + exit; + } +} + +$_pages['forum/index.php?fid='.$fid]['title'] = $forum_info['title']; +$_pages['forum/index.php?fid='.$fid]['parent'] = 'forum/list.php'; +$_pages['forum/index.php?fid='.$fid]['children'] = array('forum/new_thread.php?fid='.$fid); + +$_pages['forum/new_thread.php?fid='.$fid]['title_var'] = 'new_thread'; +$_pages['forum/new_thread.php?fid='.$fid]['parent'] = 'forum/index.php?fid='.$fid; + +$_pages['forum/view.php']['title'] = $post_row['subject']; +$_pages['forum/view.php']['parent'] = 'forum/index.php?fid='.$fid; + +$_pages['editor/edit_post.php']['title_var'] = 'edit_post'; +$_pages['editor/edit_post.php']['parent'] = 'forum/index.php?fid='.$fid; +$_pages['editor/edit_post.php']['children'] = array(); + + +$onload = 'document.form.subject.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    + + + + + +
    +
    +
    *

    + +
    + +
    +
    *
    + +
    + +
    + · + · + · +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/editor/index.php b/editor/index.php new file mode 100644 index 000000000..aa0335733 --- /dev/null +++ b/editor/index.php @@ -0,0 +1,26 @@ + +blank page + \ No newline at end of file diff --git a/editor/view_item.php b/editor/view_item.php new file mode 100644 index 000000000..a30bbc696 --- /dev/null +++ b/editor/view_item.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/enroll.php b/enroll.php new file mode 100644 index 000000000..9016eefd5 --- /dev/null +++ b/enroll.php @@ -0,0 +1,163 @@ +From = $_config['contact_email']; + $mail->AddAddress($to_email); + $mail->Subject = _AT('course_enrolment'); + $mail->Body = $tmp_message; + + if(!$mail->Send()) { + //echo 'There was an error sending the message'; + $msg->printErrors('SENDING_ERROR'); + exit; + } + unset($mail); + } + } + } else { + // public or protected + $sql = "INSERT INTO ".TABLE_PREFIX."course_enrollment VALUES ($_SESSION[member_id], $_POST[form_course_id], 'y', 0, '"._AT('student')."', 0)"; + $result = mysql_query($sql, $db); + } +} + +if ($_SESSION['valid_user']) { + + $sql = "SELECT * FROM ".TABLE_PREFIX."course_enrollment WHERE member_id=$_SESSION[member_id] AND course_id=$course"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_array($result); + + if (($course_info[0] == 'public') || ($course_info[0] == 'protected')) { + if ($row != '') { + + $feedback = array('NOW_ENROLLED', $system_courses[$course]['title']); + $msg->addFeedback($feedback); + header("Location:index.php"); + } else if ($course_info[1] != $_SESSION['member_id']) { + + require(AT_INCLUDE_PATH.'header.inc.php'); ?> + +
    + +
    +
    +

    +
    + +
    + +
    +
    +
    +printErrors('ALREADY_OWNED'); + } + } else { // private + + require(AT_INCLUDE_PATH.'header.inc.php'); + + if ((!$_POST['submit']) && ($row == '')) { + + $msg->printInfos('PRIVATE_ENROL'); ?> + +
    + + +
    +printFeedbacks('APPROVAL_PENDING'); + } else if ($course_info[1] != $_SESSION['member_id'] ){ + // request has already been made + $msg->printErrors('ALREADY_ENROLED'); + } else { + $msg->printErrors('ALREADY_OWNED'); + } + } + +} else { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('LOGIN_ENROL'); + ?> +
    +
    +

    +

    +
    +
    + +
    +
    +
    +

    +

    +
    +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/exestyles.css b/exestyles.css new file mode 100644 index 000000000..f82ba97cc --- /dev/null +++ b/exestyles.css @@ -0,0 +1,197 @@ +/* +=========================================================================== +eXe +Copyright 2004-2005, University of Auckland +style sheet for default theme +=========================================================================== +*/ + +.execontent { + margin: 10px 20px 10px 20px; + padding: 0px 0px 0px 0px; + font-family: arial, verdana, helvetica, sans-serif; + color:#4d4d4d; + font-size: 13px; + background: #E0DFD8; +} + +a.execontent { color: #FF6600; + text-decoration: none; +} + +a:hover.execontent { text-decoration: underline; +color: #B34700; +} + +img.execontent { + border: 0; +} + +p#nodeTitle { + color: #4d4d4d; + font-size: 32px; + font-weight: bold; + letter-spacing: -1px; + display: inline; + text-align:left; + padding-right: 30px; +} + +div#nodeDecoration { + padding: 2px; + border-bottom:0px; + text-align:right; +} + + +/* --- iDevice Styles -- */ + + +.emphasis0 { + padding-left: 0px; + padding-bottom: 20px; + margin: 0px; +} + + +.emphasis1 { + background-color: #FFF; + border-bottom: 1px solid #9d9d9d; + background-image:url(top_left_corner.gif); + background-position:top left; + background-repeat:no-repeat; + margin-bottom: 30px; + text-align:left; +} + +.emphasis2 { + background-color: #E0DFD8; + border-bottom: 3px solid #9d9d9d; + background-image:url(body_top_bg.gif); + background-position:top left; + background-repeat:no-repeat; + margin-bottom: 10px; + text-align:left; +} + +* html .iDevice_inner { + background-image:none; + background-position:top left; + background-repeat:no-repeat; +} + +.iDevice p { + padding-left: 0px; + line-height: 16px; + text-align:left; +} + +.iDeviceTitle { + color: #568D14; + font-size: 24px; + font-family: Arial, Helvetica, sans-serif; + font-weight:bold; + letter-spacing:-1px; + vertical-align: top; + background: #FFF; + padding-bottom: 4px; + padding-right: 10px; + margin-bottom: 0px; + background-image:url(top_right_corner.gif); + background-position:top right; + background-repeat:no-repeat; +} + +.emphasis0 .iDeviceTitle { + color: #568D14; + font-size: 24px; + font-family: Arial, Helvetica, sans-serif; + font-weight:bold; + letter-spacing:-1px; + vertical-align: top; + background: transparent; + padding-bottom: 4px; + padding-right: 10px; + margin-bottom: 0px; + background-image:none; + background-position:top right; + background-repeat:no-repeat; + } + +.iDevice_icon { + margin-top: -10px; + margin-left: 10px; + padding-right: 10px; +} + +execontent.input.feedbackbutton { +margin-top: 10px; +margin-bottom: 10px; +background: #DBE992; +} + +p.reading_reference { + font-style: italic; +} + +p.reading_feedback { + border: 1px dashed #ADADAD; + margin: 20px; + padding: 8px; + background-color: #FFF; +} + +.iDevice_inner { + color:#4d4d4d; + background-color:#f2f2ef; + padding: 10px; + margin: 10px; + margin-top: 12px; + padding-top: 10px; + background-image:none; +} + +.emphasis0 .iDevice_inner { + color:#4d4d4d; + background-color:transparent; + padding: 10px; + margin: 10px; + margin-top: 12px; + padding-top: 10px; +} + + +/* styles for image with text iDevice */ + +.image_text { + border: 1px solid #9D9D9D; + background: transparent; + padding: 4px; + margin: 4px; +} + +/* styles for 'tips for completion' and 'pedagogical help' */ + +.popupDiv { + background-color: #EDEFF0; + border: 2px solid #607489; + padding: 0px 4px 4px 4px; + margin-left: 15px; + text-align:left; + z-index:99; + -moz-border-radius: 3px; +} + +.popupDivLabel { + text-align: center; + font: message-box; + font-weight: bold; + color: #fff; + cursor:move; + margin: 0px -4px 0px -4px; + background-image:url(popup_bg.gif); +} + + + + diff --git a/export.php b/export.php new file mode 100644 index 000000000..532735d8d --- /dev/null +++ b/export.php @@ -0,0 +1,95 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + header('Location: '.$_base_href.'tools/ims/ims_export.php?cid=' . intval($_POST['cid'])); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (!isset($_main_menu)) { + $_main_menu = $contentManager->getContent(); +} + +function print_menu_sections(&$menu, $parent_content_id = 0, $depth = 0, $ordering = '') { + $my_children = $menu[$parent_content_id]; + $cid = $_GET['cid']; + + if (!is_array($my_children)) { + return; + } + foreach ($my_children as $children) { + echo ''; + + print_menu_sections($menu, $children['content_id'], $depth+1, $new_ordering); + } +} + + if (!authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN) && ($_SESSION['packaging'] == 'none')) { + echo '

    '._AT('content_packaging_disabled').'

    '; + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } else if (!authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN) && ($_SESSION['packaging'] == 'top')) { + $_main_menu = array($_main_menu[0]); + } +?> + + +
    +
    +
    +

    +

    +
    + +
    +
    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/faq/add_question.php b/faq/add_question.php new file mode 100644 index 000000000..64dbb6d82 --- /dev/null +++ b/faq/add_question.php @@ -0,0 +1,106 @@ +addFeedback('CANCELLED'); + header('Location: index_instructor.php'); + exit; +} else if (isset($_POST['submit'])) { + $_POST['question'] = trim($_POST['question']); + $_POST['answer'] = trim($_POST['answer']); + + $missing_fields = array(); + + if (!$_POST['question']) { + $missing_fields[] = _AT('question'); + } + + if (!$_POST['answer']) { + $missing_fields[] = _AT('answer'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + + if (!$msg->containsErrors()) { + $_POST['question'] = $addslashes($_POST['question']); + $_POST['answer'] = $addslashes($_POST['answer']); + $_POST['topic_id'] = intval($_POST['topic_id']); + + // check that this topic_id belongs to this course: + $sql = "SELECT topic_id FROM ".TABLE_PREFIX."faq_topics WHERE topic_id=$_POST[topic_id] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $sql = "INSERT INTO ".TABLE_PREFIX."faq_entries VALUES (NULL, $_POST[topic_id], NOW(), 1, '$_POST[question]', '$_POST[answer]')"; + $result = mysql_query($sql,$db); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index_instructor.php'); + exit; + } +} + +$onload = 'document.form.topic.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + + $sql = "SELECT name, topic_id FROM ".TABLE_PREFIX."faq_topics WHERE course_id=$_SESSION[course_id] ORDER BY name"; + $result = mysql_query($sql, $db); + $num_topics = mysql_num_rows($result); + if (!$num_topics) { + $msg->printErrors('NO_FAQ_TOPICS'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +?> + +
    + +
    +
    + +
    *

    + +
    +
    +
    *

    + + +
    +
    +
    *

    + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/faq/add_topic.php b/faq/add_topic.php new file mode 100644 index 000000000..b57884b51 --- /dev/null +++ b/faq/add_topic.php @@ -0,0 +1,61 @@ +addFeedback('CANCELLED'); + header('Location: index_instructor.php'); + exit; +} else if (isset($_POST['submit'])) { + if (trim($_POST['name']) == '') { + $msg->addError('NAME_EMPTY'); + } + + if (!$msg->containsErrors()) { + $_POST['name'] = $addslashes($_POST['name']); + + $sql = "INSERT INTO ".TABLE_PREFIX."faq_topics VALUES (NULL, $_SESSION[course_id], '$_POST[name]')"; + $result = mysql_query($sql,$db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index_instructor.php'); + exit; + } +} + +$onload = 'document.form.name.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    + +
    +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/faq/delete_question.php b/faq/delete_question.php new file mode 100644 index 000000000..8278c7855 --- /dev/null +++ b/faq/delete_question.php @@ -0,0 +1,61 @@ +addFeedback('CANCELLED'); + Header('Location: index_instructor.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $_POST['id'] = intval($_POST['id']); + $_POST['topic_id'] = intval($_POST['topic_id']); + + // check that this topic_id belongs to this course: + $sql = "SELECT topic_id FROM ".TABLE_PREFIX."faq_topics WHERE topic_id=$_POST[topic_id] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $sql = "DELETE FROM ".TABLE_PREFIX."faq_entries WHERE entry_id=$_POST[id] AND topic_id=$_POST[topic_id]"; + $result = mysql_query($sql, $db); + } + + $msg->addFeedback('QUESTION_DELETED'); + header('Location: index_instructor.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +$_GET['id'] = intval($_GET['id']); + +$sql = "SELECT question, topic_id FROM ".TABLE_PREFIX."faq_entries WHERE entry_id=$_GET[id]"; + +$result = mysql_query($sql,$db); +if ($row = mysql_fetch_assoc($result)) { + $hidden_vars['topic_id'] = $row['topic_id']; + $hidden_vars['id'] = $_GET['id']; + + $confirm = array('DELETE_FAQ_QUESTION', $row['question']); + $msg->addConfirm($confirm, $hidden_vars); + $msg->printConfirm(); +} else { + $msg->addError('ITEM_NOT_FOUND'); +} + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/faq/delete_topic.php b/faq/delete_topic.php new file mode 100644 index 000000000..a5a9f1c02 --- /dev/null +++ b/faq/delete_topic.php @@ -0,0 +1,58 @@ +addFeedback('CANCELLED'); + Header('Location: index_instructor.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $_POST['id'] = intval($_POST['id']); + + // check that this topic_id belongs to this course: + $sql = "DELETE FROM ".TABLE_PREFIX."faq_topics WHERE topic_id=$_POST[id] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + if (mysql_affected_rows($db) == 1) { + $sql = "DELETE FROM ".TABLE_PREFIX."faq_entries WHERE topic_id=$_POST[topic_id]"; + $result = mysql_query($sql, $db); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index_instructor.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +$_GET['id'] = intval($_GET['id']); + +$sql = "SELECT name, topic_id FROM ".TABLE_PREFIX."faq_topics WHERE topic_id=$_GET[id]"; + +$result = mysql_query($sql,$db); +if ($row = mysql_fetch_assoc($result)) { + $hidden_vars['id'] = $_GET['id']; + + $confirm = array('DELETE_FAQ_TOPIC', $row['name']); + $msg->addConfirm($confirm, $hidden_vars); + $msg->printConfirm(); +} else { + $msg->addError('ITEM_NOT_FOUND'); +} + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/faq/edit_question.php b/faq/edit_question.php new file mode 100644 index 000000000..226df6eff --- /dev/null +++ b/faq/edit_question.php @@ -0,0 +1,129 @@ +addFeedback('CANCELLED'); + header('Location: index_instructor.php'); + exit; +} + +if (isset($_GET['id'])) { + $id = intval($_GET['id']); +} else { + $id = intval($_POST['id']); +} + +if (isset($_POST['submit'])) { + $_POST['question'] = trim($_POST['question']); + $_POST['answer'] = trim($_POST['answer']); + + $missing_fields = array(); + + if (!$_POST['question']) { + $missing_fields[] = _AT('question'); + } + + if (!$_POST['answer']) { + $missing_fields[] = _AT('answer'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $_POST['question'] = $addslashes($_POST['question']); + $_POST['answer'] = $addslashes($_POST['answer']); + $_POST['topic_id'] = intval($_POST['topic_id']); + + $sql = "UPDATE ".TABLE_PREFIX."faq_entries SET question='$_POST[question]', answer='$_POST[answer]', topic_id=$_POST[topic_id] WHERE entry_id=$id"; + $result = mysql_query($sql,$db); + + $msg->addFeedback('QUESTION_UPDATED'); + header('Location: index_instructor.php'); + exit; + } +} +$onload = 'document.form.topic.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($id == 0) { + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$sql = "SELECT * FROM ".TABLE_PREFIX."faq_entries WHERE entry_id=$id"; +$result = mysql_query($sql,$db); +if (!($row = mysql_fetch_assoc($result))) { + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + + +$sql = "SELECT name, topic_id FROM ".TABLE_PREFIX."faq_topics WHERE course_id=$_SESSION[course_id] ORDER BY name"; +$result = mysql_query($sql, $db); +$num_topics = mysql_num_rows($result); +if (!$num_topics) { + $msg->printErrorS('NO_FAQ_TOPICS'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +?> + +
    + + +
    +
    + + +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    + + +
    + +
    +
    + \ No newline at end of file diff --git a/faq/edit_topic.php b/faq/edit_topic.php new file mode 100644 index 000000000..79169df6a --- /dev/null +++ b/faq/edit_topic.php @@ -0,0 +1,86 @@ +addFeedback('CANCELLED'); + header('Location: index_instructor.php'); + exit; +} + +if (isset($_GET['id'])) { + $id = intval($_GET['id']); +} else { + $id = intval($_POST['id']); +} + +if (isset($_POST['submit'])) { + if (trim($_POST['name']) == '') { + $msg->addError('NAME_EMPTY'); + } + + if (!$msg->containsErrors()) { + $_POST['name'] = $addslashes($_POST['name']); + + $sql = "UPDATE ".TABLE_PREFIX."faq_topics SET name='$_POST[name]' WHERE topic_id=$id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql,$db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index_instructor.php'); + exit; + } +} +$onload = 'document.form.name.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($id == 0) { + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$sql = "SELECT name FROM ".TABLE_PREFIX."faq_topics WHERE course_id=$_SESSION[course_id] AND topic_id=$id ORDER BY name"; +$result = mysql_query($sql, $db); +if (!$row = mysql_fetch_assoc($result)) { + $msg->printErrorS('ITEM_NOT_FOUND'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} else if (!$_POST['name']) { + $_POST['name'] = $row['name']; +} + +?> + +
    + + +
    +
    +
    *

    + +
    + +
    + + +
    + +
    +
    + \ No newline at end of file diff --git a/faq/icon.gif b/faq/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..56ae823123136bb18f482f65f9af0c7e03953650 GIT binary patch literal 502 zcmV_wErP@2Y3o5x$A$!4a@XsFI{tj=_= z(tozre6rDpxYUxq*O$ZHqRQc%!`ZFS<)_Kqx!35j&)?AG@Z9V4^Z5I{)#Aw8<a9I-gDjNOqg&GVD8-y8- z02nC%nGA#-h_ZGXnE@z`nF$&ikrhr3s+j|eBTU9m1_n(Hk#(M#4=2l85rwP93MLlU zSrvtc*WTby6NSRy=I4){?j{)S1H^U_?g%H!;MsQ0=c<{I;LgmMGxR`_zyOGz!)_=9 zoYO!^&9wr^N<08Z(T>Gs6j;Dn*0IjVOd(ry5Hwbj&dDtWEWnVMsilXPSrlYk@h#JV z1VDiz(gHxh3Z$u{o?3uT)qc+l6c;lqd%D_+dFF_I7fJNg~!@c;k- literal 0 HcmV?d00001 diff --git a/faq/index.php b/faq/index.php new file mode 100644 index 000000000..d36b73420 --- /dev/null +++ b/faq/index.php @@ -0,0 +1,52 @@ + + + +
      + +
    • + + +
        + + +
      1. +

        +

        +
      2. + + +
      + +

      + +
    • + +
    + + + + + \ No newline at end of file diff --git a/faq/index_instructor.php b/faq/index_instructor.php new file mode 100644 index 000000000..e09be5a40 --- /dev/null +++ b/faq/index_instructor.php @@ -0,0 +1,94 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$counter = 1; +$sql = "SELECT name, topic_id FROM ".TABLE_PREFIX."faq_topics WHERE course_id=$_SESSION[course_id] ORDER BY name"; +$result = mysql_query($sql, $db); +?> + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    +
     
    +
    + + \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bfeca5e706edede2c87a6da893d23037e5c87fc4 GIT binary patch literal 3262 zcmds)!D|yy5XQG>J%|VKn4<^pUOW`Mi+B+6>^~rQ5^P2Epce~@B2o%MP>5|5C5^OF z8XDVRh*cvYsiConF~l^R5`rWI>rY09Np@QVNeaI1Zf0lZeLMTj_g)&u8R0JwIN~nJ4J84@gZ#1^r z?RK--#Nfc-)+S@)ktkQ{5u9$fi*09F{7$Dc9Q=*77SU#VxR4U-B6JzPgW$`OMbFq~lo196fB$;~Pb~SoKqc88CBt-qpjov!0 z{<#O|sH$8pE4~=M_=}G&q++4f__Po*ckh(q5CR|em>v(FS3mES&1NCis)C%M;oD-g zDz5?0^cT{o&Gv=NbSg$jXcuy9{fNYi=JmiEAhe#j=*K1`Urj-ss!krE{BWBLU$ptY zHbp|Rt}mM-5@Hz&vKJr8J-dEXryv!kSn&`NktjYnHlL`5hL6t^ZOcS*ECH=BGI2u0 zuOwJXd3PjAYpg^q|KLNBT{Vf>+iV?*&msc9R;y_f*On(Wit%nG!qTu3>ci&|pWlXb z3iPtX^j5@a5gK1VY7~Qd?9)N>;^VYaSjBqFbP>O0K%*F}Zng+z?{DxE(L0KO_(h!H zLjo)@7AMbW0u3U87T^bbukd42XSF1Hsy6#7`?e^YB54F{C&HIB0RsU*5q<{StS|q4 zUDN3-A9jA|MaFMlTzefJ=dcBki3Z{`V-n&^#}^;otgsbd#cy9wqh5m@X(xQ&?GEvX zIN#4+^`dz_@#(R>!iOTeS4eHNjOHRv{u%IA>-EgvKfP1^;Imi2GxFAh&dS<{y}pp< yScC7ZUGRCtzmNX|e{<7?*g*{8XQ0addFeedback('CANCELLED'); + header('Location: index.php'.$owner_arg_prefix.'folder='.abs($_POST['folder'])); + exit; +} else if (isset($_POST['submit'])) { + $_POST['assignment'] = abs($_POST['assignment']); + $assignment_row = fs_get_assignment($_POST['assignment']); + + if (!$assignment_row) { + $msg->addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; + } + + if (!$assignment_row['assign_to']) { + if (!$_SESSION['enroll']) { + $msg->addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; + } + + } else { + $sql = "SELECT group_id FROM ".TABLE_PREFIX."groups WHERE group_id=$owner_id AND type_id=$assignment_row[assign_to]"; + $result = mysql_query($sql, $db); + if (!$row = mysql_fetch_assoc($result)) { + $msg->addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; + } + } + + if ($assignment_row['u_date_cutoff'] && ($assignment_row['u_date_cutoff'] < time())) { + $msg->addError('ASSIGNMENT_CUTOFF'); + header('Location: index.php'.$owner_arg_prefix.'folder='.$_POST['folder']); + exit; + } + + foreach ($_POST['files'] as $file) { + $file = abs($file); + fs_copy_file($file, $owner_type, $owner_id, WORKSPACE_ASSIGNMENT, $_POST['assignment'], $owner_id); + } + + $msg->addFeedback('ASSIGNMENT_HANDED_IN'); + header('Location: index.php'.$owner_arg_prefix.'folder='.$_POST['folder']); + exit; +} + +// get all the assignments assigned to $owner_id (which is either a student ID or a group type ID) +if ($owner_type == WORKSPACE_GROUP) { + // get all the assignments assigned to this group type + + $sql = "SELECT type_id FROM ".TABLE_PREFIX."groups WHERE group_id=$owner_id LIMIT 1"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + $sql = "SELECT assignment_id, title, date_due, date_cutoff FROM ".TABLE_PREFIX."assignments WHERE assign_to=$row[type_id] AND course_id=$_SESSION[course_id] AND (date_cutoff=0 OR UNIX_TIMESTAMP(date_cutoff) > ".time().") ORDER BY title"; + +} else if ($owner_type == WORKSPACE_PERSONAL) { + // get all the assignments assigned to students + + $sql = "SELECT assignment_id, title, date_due FROM ".TABLE_PREFIX."assignments WHERE assign_to=0 AND course_id=$_SESSION[course_id] AND (date_cutoff=0 OR UNIX_TIMESTAMP(date_cutoff) > ".time().") ORDER BY title"; +} else { + exit('wrong workspace'); +} + +$assignments = array(); +$result = mysql_query($sql, $db); +while ($row = mysql_fetch_assoc($result)) { + $assignments[] = $row; +} + +if (!$assignments) { + $msg->addError('NO_ASSIGNMENTS_FOUND'); + header('Location: index.php'.$owner_arg_prefix.'folder='.$_GET['folder']); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    + + $file): ?> + + + + +
    + +
    +
    *
    + +
    + +
      + + +
    • + +
    +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/file_storage/comments.php b/file_storage/comments.php new file mode 100644 index 000000000..74f167b57 --- /dev/null +++ b/file_storage/comments.php @@ -0,0 +1,194 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +if (isset($_GET['done'])) { + header('Location: index.php'.$owner_arg_prefix.'folder='.abs($_GET['folder'])); + exit; +} else if (isset($_GET['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'.$owner_arg_prefix.'folder='.abs($_GET['folder'])); + exit; +} else if (isset($_POST['edit_cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: comments.php'.$owner_arg_prefix.'id='.$_GET['id']); + exit; +} else if (isset($_POST['edit_submit'])) { + $_POST['comment'] = trim($_POST['comment']); + $_POST['comment_id'] = abs($_POST['comment_id']); + + if (!$_POST['edit_comment']) { + $msg->addError(array('EMPTY_FIELDS', _AT('comments'))); + } + + if (!$msg->containsErrors()) { + $_POST['edit_comment'] = $addslashes($_POST['edit_comment']); + + $sql = "UPDATE ".TABLE_PREFIX."files_comments SET comment='$_POST[edit_comment]', date=date WHERE member_id=$_SESSION[member_id] AND comment_id=$_POST[comment_id]"; + mysql_query($sql, $db); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: comments.php'.$owner_arg_prefix.'id='.$_GET['id']); + exit; + } +} else if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'.$owner_arg_prefix.'folder='.$_POST['folder']); + exit; +} else if (isset($_POST['submit'])) { + $_POST['comment'] = trim($_POST['comment']); + $_POST['id'] = abs($_POST['id']); + + if (!$_POST['comment']) { + $msg->addError(array('EMPTY_FIELDS', _AT('comments'))); + } + + if (!$msg->containsErrors()) { + $_POST['comment'] = $addslashes($_POST['comment']); + + $sql = "INSERT INTO ".TABLE_PREFIX."files_comments VALUES (NULL, $_POST[id], $_SESSION[member_id], NOW(), '$_POST[comment]')"; + if (mysql_query($sql, $db)) { + $sql = "UPDATE ".TABLE_PREFIX."files SET num_comments=num_comments+1, date=date WHERE file_id=$_POST[id]"; + mysql_query($sql, $db); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: comments.php'.$owner_arg_prefix.'id='.$_POST['id']); + exit; + } + $_GET['id'] = $_POST['id']; +} + +if (isset($_GET['comment_id'])) { + $onload = 'document.form.edit_comment.focus();'; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$id = abs($_GET['id']); + +$files = fs_get_revisions($id, $owner_type, $owner_id); +if (!$files) { + $msg->printErrors('FILE_NOT_FOUND'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +?> + + +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    + + + + +
    +
    +

    -

    + - +

    +
    +
    + + + +
    + +
    + +
    +

    -

    + +
    +
    + + +
    +
    + + +
    +

    -

    +

    + +
    + | +
    + +
    + +
    + + +
    +
    +

    +
    +
    + + +
    + + +
    +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/file_storage/delete_comment.php b/file_storage/delete_comment.php new file mode 100644 index 000000000..8b93fd952 --- /dev/null +++ b/file_storage/delete_comment.php @@ -0,0 +1,62 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +$_pages['file_storage/delete_comment.php']['parent'] = 'file_storage/comments.php' . $owner_arg_prefix.'id='.$_GET['file_id']; +$_pages['file_storage/comments.php' . $owner_arg_prefix.'id='.$_GET['file_id']]['title_var'] = 'comments'; +$_pages['file_storage/comments.php' . $owner_arg_prefix.'id='.$_GET['file_id']]['parent'] = 'file_storage/index.php'; + +$id = abs($_REQUEST['id']); + +if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: comments.php'.$owner_arg_prefix.'id='.$_POST['file_id']); + exit; +} else if (isset($_POST['submit_yes'])) { + $_POST['file_id'] = abs($_POST['file_id']); + $_POST['id'] = abs($_POST['id']); + + $sql = "DELETE FROM ".TABLE_PREFIX."files_comments WHERE file_id=$_POST[file_id] AND comment_id=$_POST[id] AND member_id=$_SESSION[member_id]"; + $result = mysql_query($sql, $db); + if (mysql_affected_rows($db) == 1) { + $sql = "UPDATE ".TABLE_PREFIX."files SET num_comments=num_comments-1, date=date WHERE owner_type=$owner_type AND owner_id=$owner_id AND file_id=$_POST[file_id]"; + $result = mysql_query($sql, $db); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: comments.php'.$owner_arg_prefix.'id='.$_POST['file_id']); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$hidden_vars = array('id' => $id, 'ot' => $owner_type, 'oid' => $owner_id, 'file_id' => $_GET['file_id']); +$msg->addConfirm(array('DELETE'), $hidden_vars); +$msg->printConfirm(); + + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/file_storage/delete_revision.php b/file_storage/delete_revision.php new file mode 100644 index 000000000..b2c4174ca --- /dev/null +++ b/file_storage/delete_revision.php @@ -0,0 +1,91 @@ +addFeedback('CANCELLED'); + header('Location: revisions.php'.$owner_arg_prefix.'id='.$first['file_id']); + exit; +} else if (isset($_POST['submit_yes'])) { + $path = fs_get_revisions($id, $owner_type, $owner_id); + + // set the new parent // + $sql = "SELECT parent_file_id, owner_type, owner_id, folder_id FROM ".TABLE_PREFIX."files WHERE file_id=$id AND owner_type=$owner_type AND owner_id=$owner_id"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + $sql = "UPDATE ".TABLE_PREFIX."files SET parent_file_id=$row[parent_file_id], date=date WHERE parent_file_id=$id AND owner_type=$owner_type AND owner_id=$owner_id"; + mysql_query($sql, $db); + + $sql = "UPDATE ".TABLE_PREFIX."files SET num_revisions=num_revisions-1, date=date WHERE file_id>$id AND owner_type=$row[owner_type] AND owner_id=$row[owner_id] AND folder_id=$row[folder_id]"; + mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."files WHERE file_id=$id AND owner_type=$owner_type AND owner_id=$owner_id"; + mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."files_comments WHERE file_id=$id"; + mysql_query($sql, $db); + + $file = fs_get_file_path($id); + if (file_exists($file . $id)) { + @unlink($file . $id); + } + + $back_id = FALSE; + foreach($path as $file) { + if ($file['file_id'] != $id) { + $back_id = $file['file_id']; + break; + } + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + if ($back_id) { + header('Location: revisions.php'.$owner_arg_prefix.'id='.$back_id); + } else { + header('Location: index.php'.$owner_arg_prefix); + } + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT file_id, file_name, owner_type, owner_id, date, member_id FROM ".TABLE_PREFIX."files WHERE file_id=$id AND owner_type=$owner_type AND owner_id=$owner_id"; +$result = mysql_query($sql, $db); +if (!$row = mysql_fetch_assoc($result)) { + $msg->printErrors('FILE_NOT_EXIST'); +} else { + $hidden_vars = array('id' => $id, 'ot' => $owner_type, 'oid' => $owner_id); + $msg->addConfirm(array('FILE_DELETE', '
  • '.$row['date'].' - '. $row['file_name'].' - '.get_display_name($row['member_id']).'
  • '), $hidden_vars); + $msg->printConfirm(); +} + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/file_storage/edit.php b/file_storage/edit.php new file mode 100644 index 000000000..d1db0a96a --- /dev/null +++ b/file_storage/edit.php @@ -0,0 +1,221 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'.$owner_arg_prefix.'folder='.abs($_POST['folder'])); + exit; +} else if (isset($_POST['submit'])) { + $_POST['id'] = abs($_POST['id']); + + + if (!$_POST['name']) { + $msg->addError('MISSING_FILENAME'); + } + + if (!$msg->containsErrors()) { + $_POST['name'] = $addslashes($_POST['name']); + $_POST['comment'] = $addslashes(trim($_POST['comment'])); + $_POST['description'] = $addslashes(trim($_POST['description'])); + $_POST['body'] = $stripslashes($_POST['body']); // saved to disk not db so no need to escape. + $original_file = fs_get_file_path($_POST['id']); + $folder = abs($_POST['folder']); + + if (!$_POST['edit'] || (file_get_contents($original_file . $_POST['id']) == $_POST['body'])) { + // file is not editable ,or it is editable but no changes made. + // only add the comment (if any) and the file name + + $num_comments = 0; + + if ($_POST['comment']){ + $sql = "INSERT INTO ".TABLE_PREFIX."files_comments VALUES (NULL, $_POST[id], $_SESSION[member_id], NOW(), '{$_POST['comment']}')"; + mysql_query($sql, $db); + + $num_comments = 1; + } + + $sql = "UPDATE ".TABLE_PREFIX."files SET file_name='$_POST[name]', description='$_POST[description]', num_comments=num_comments+$num_comments, date=date WHERE file_id=$_POST[id] AND owner_type=$owner_type AND owner_id=$owner_id"; + mysql_query($sql, $db); + } else { + // this file is editable, and has changed + + $size = strlen($_POST['body']); + + if ($_POST['comment']) { + $num_comments = 1; + } else { + $num_comments = 0; + } + $sql = "SELECT * FROM ".TABLE_PREFIX."files WHERE file_id=$_POST[id] AND owner_type=$owner_type AND owner_id=$owner_id"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + if ($_config['fs_versioning']) { + $sql = "INSERT INTO ".TABLE_PREFIX."files VALUES (NULL, {$row['owner_type']}, {$row['owner_id']}, $_SESSION[member_id], {$row['folder_id']}, 0, NOW(), $num_comments, {$row['num_revisions']}+1, '{$_POST['name']}', $size, '$_POST[description]')"; + $result = mysql_query($sql, $db); + + $file_id = mysql_insert_id($db); + + $file_path = fs_get_file_path($file_id); + if ($fp = fopen($file_path . $file_id, 'wb')) { + ftruncate($fp, 0); + fwrite($fp, $_POST['body'], $size); + fclose($fp); + + $sql = "UPDATE ".TABLE_PREFIX."files SET parent_file_id=$file_id, date=date WHERE file_id=$_POST[id] AND owner_type=$owner_type AND owner_id=$owner_id"; + $result = mysql_query($sql, $db); + + if ($_POST['comment']){ + $sql = "INSERT INTO ".TABLE_PREFIX."files_comments VALUES (NULL, $file_id, $_SESSION[member_id], NOW(), '{$_POST['comment']}')"; + mysql_query($sql, $db); + } + } + } else { + $file_path = fs_get_file_path($_POST['id']); + if ($fp = fopen($file_path . $_POST['id'], 'wb')) { + ftruncate($fp, 0); + fwrite($fp, $_POST['body'], $size); + fclose($fp); + } + } + } + $msg->addFeedback('FILE_EDITED_SUCCESSFULLY'); + header('Location: index.php'.$owner_arg_prefix.'folder='.$folder); + exit; + } + + $_GET['id'] = $_POST['id']; +} + +$onload = 'document.form.name.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (($_POST['setvisual'] && !$_POST['settext']) || $_GET['setvisual']) { + require(AT_INCLUDE_PATH.'lib/tinymce.inc.php'); + + load_editor('body'); +} + +$id = abs($_REQUEST['id']); + +$sql = "SELECT file_name, folder_id, description FROM ".TABLE_PREFIX."files WHERE file_id=$id AND owner_type=$owner_type AND owner_id=$owner_id"; +$result = mysql_query($sql, $db); +if (!$row = mysql_fetch_assoc($result)) { + $msg->printErrors('FILE_NOT_EXIST'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +if (isset($_POST['description'])) { + $row['description'] = $stripslashes($_POST['description']); + $row['file_name'] = $stripslashes($_POST['name']); + $row['comment'] = $stripslashes($_POST['comment']); + $_POST['body'] = $stripslashes($_POST['body']); +} +$ext = fs_get_file_extension($row['file_name']); +$file_path = fs_get_file_path($id); +?> + +
    + + +
    +
    +
    *

    + +
    + +
    +
    + +
    + + + +
    +
    + +
    + +
    + '; + echo ''; + } else { + echo ''; + } + ?> +
    + +
    +
    + +
    + +
    +
    + +
    +
    +
    + +
    + + + + + + + + + + + + + + <bgsound src="file_storage/index.php<?php echo $owner_arg_prefix; ?>download=1<?php echo SEP; ?>files<?php echo urlencode('[]').'='.$id; ?>"> + + +
    + + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/file_storage/edit_folder.php b/file_storage/edit_folder.php new file mode 100644 index 000000000..adde43d58 --- /dev/null +++ b/file_storage/edit_folder.php @@ -0,0 +1,86 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php?folder='.abs($_POST['parent_folder'])); + exit; +} else if (isset($_POST['submit'])) { + $_POST['id'] = abs($_POST['id']); + + if (!$_POST['name']) { + $msg->addError(array('EMPTY_FIELDS', _AT('name'))); + } + + if (!$msg->containsErrors()) { + $_POST['name'] = $addslashes($_POST['name']); + $folder = abs($_POST['folder']); + $parent_folder = abs($_POST['parent_folder']); + + $sql = "UPDATE ".TABLE_PREFIX."folders SET title='$_POST[name]' WHERE owner_type=$owner_type AND owner_id=$owner_id AND folder_id=$_POST[id] AND parent_folder_id=$parent_folder"; + mysql_query($sql, $db); + + $msg->addFeedback('FOLDER_EDITED_SUCCESSFULLY'); + header('Location: index.php'.$owner_arg_prefix.'folder='.$parent_folder); + exit; + } + + $_GET['id'] = $_POST['id']; +} + +$onload = 'document.form.name.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$id = abs($_GET['id']); + +$sql = "SELECT title, parent_folder_id FROM ".TABLE_PREFIX."folders WHERE folder_id=$id"; +$result = mysql_query($sql, $db); +if (!$row = mysql_fetch_assoc($result)) { + $msg->printErrors('FOLDER_NOT_EXIST'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +?> + +
    + + +
    +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/file_storage/index.php b/file_storage/index.php new file mode 100644 index 000000000..e0e22bf7e --- /dev/null +++ b/file_storage/index.php @@ -0,0 +1,679 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} +$_SESSION['fs_owner_type'] = $owner_type; +$_SESSION['fs_owner_id'] = $owner_id; +$_SESSION['fs_folder_id'] = $folder_id; + +if (isset($_GET['submit_workspace'])) { + header('Location: index.php'.$owner_arg_prefix); + exit; +} + +// action - Submit Assignment +if (isset($_GET['assignment']) && (isset($_GET['files']) || isset($_GET['folders']))) { + if (isset($_GET['folders'])) { + $msg->addError('HAND_IN_FOLDER'); + } else if (!isset($_GET['files'])) { + $msg->addError('NO_ITEM_SELECTED'); + } else { + header('Location: assignment.php?'.$_SERVER['QUERY_STRING']); + exit; + } +} +// action - View Revisions +else if (isset($_GET['revisions'], $_GET['files'])) { + if (is_array($_GET['files']) && (count($_GET['files']) == 1) && empty($_GET['folders'])) { + $file_id = intval(current($_GET['files'])); + header('Location: revisions.php'.$owner_arg_prefix.'id='.$file_id); + exit; + } +} +// action - View Comments +else if (isset($_GET['comments'], $_GET['files'])) { + if (is_array($_GET['files']) && (count($_GET['files']) == 1) && empty($_GET['folders'])) { + $file_id = intval(current($_GET['files'])); + header('Location: comments.php'.$owner_arg_prefix.'id='.$file_id); + exit; + } +} +// action - Edit File/Folder +else if (query_bit($owner_status, WORKSPACE_AUTH_WRITE) && isset($_GET['edit']) && (isset($_GET['folders']) || isset($_GET['files']))) { + if (is_array($_GET['files']) && (count($_GET['files']) == 1) && empty($_GET['folders'])) { + $file_id = abs(current($_GET['files'])); + header('Location: edit.php'.$owner_arg_prefix.'id='.$file_id); + exit; + } else if (is_array($_GET['folders']) && (count($_GET['folders']) == 1) && empty($_GET['files'])) { + $folder_id = abs(current($_GET['folders'])); + header('Location: edit_folder.php'.$owner_arg_prefix.'id='.$folder_id); + exit; + } +} +// action - Move Files/Folders +else if (query_bit($owner_status, WORKSPACE_AUTH_WRITE) && isset($_GET['move']) && (isset($_GET['folders']) || isset($_GET['files']))) { + header('Location: move.php'.$owner_arg_prefix.$_SERVER['QUERY_STRING']); + exit; +} +// action - Download Files/Folders +else if (isset($_GET['download']) && (isset($_GET['folders']) || isset($_GET['files']))) { + if (is_array($_GET['files']) && (count($_GET['files']) == 1) && empty($_GET['folders'])) { + $file_id = abs(current($_GET['files'])); + $sql = "SELECT file_name, file_size FROM ".TABLE_PREFIX."files WHERE file_id=$file_id AND owner_type=$owner_type AND owner_id=$owner_id"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $ext = fs_get_file_extension($row['file_name']); + + if (isset($mime[$ext]) && $mime[$ext][0]) { + $file_mime = $mime[$ext][0]; + } else { + $file_mime = 'application/octet-stream'; + } + $file_path = fs_get_file_path($file_id) . $file_id; + + ob_end_clean(); + header("Content-Encoding: none"); + header('Content-Type: ' . $file_mime); + header('Content-transfer-encoding: binary'); + header('Content-Disposition: attachment; filename="'.htmlspecialchars($row['file_name']).'"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Pragma: public'); + header('Content-Length: '.$row['file_size']); + + // see the note in get.php about the use of x-Sendfile + header('x-Sendfile: '.$file_path); + header('x-Sendfile: ', TRUE); // if we get here then it didn't work + + @readfile($file_path); + exit; + } + } else { + // zip multiple files and folders + require(AT_INCLUDE_PATH . 'classes/zipfile.class.php'); + $zipfile =& new zipfile(); + + $zip_file_name = fs_get_workspace($owner_type, $owner_id); // want the name of the workspace + $zip_file_name = str_replace(" ","_",$zip_file_name ); + + if (is_array($_GET['files'])) { + foreach ($_GET['files'] as $file_id) { + $file_path = fs_get_file_path($file_id) . $file_id; + + + $sql = "SELECT file_name, UNIX_TIMESTAMP(date) AS date FROM ".TABLE_PREFIX."files WHERE file_id=$file_id AND owner_type=$owner_type AND owner_id=$owner_id"; + $result = mysql_query($sql, $db); + if (($row = mysql_fetch_assoc($result)) && file_exists($file_path)) { + $zipfile->add_file(file_get_contents($file_path), $row['file_name'], $row['date']); + } + } + } + if (is_array($_GET['folders'])) { + foreach($_GET['folders'] as $folder_id) { + fs_download_folder($folder_id, $zipfile, $owner_type, $owner_id); + $row['title'] = str_replace(" ","_",$row['title'] ); + $zipfile->create_dir($row['title']); + } + + if (count($_GET['folders']) == 1) { + // zip just one folder, use that folder's title as the zip file name + $row = fs_get_folder_by_id($_GET['folders'][0], $owner_type, $owner_id); + if ($row) { + $zip_file_name = $row['title']; + $zip_file_name = str_replace(" ","_",$zip_file_name ); + } + } + } + $zipfile->close(); + $zipfile->send_file($zip_file_name); + } + exit; + +} +// action - Delete Files/Folders (pre-confirmation) +else if (query_bit($owner_status, WORKSPACE_AUTH_WRITE) && isset($_GET['delete']) && (isset($_GET['folders']) || isset($_GET['files']))) { + $hidden_vars = array(); + $hidden_vars['folder'] = $folder_id; + $hidden_vars['ot'] = $owner_type; + $hidden_vars['oid'] = $owner_id; + if (isset($_GET['files'])) { + $file_list_to_print = ''; + $files = implode(',', $_GET['files']); + $hidden_vars['files'] = $files; + $sql = "SELECT file_name FROM ".TABLE_PREFIX."files WHERE file_id IN ($files) AND owner_type=$owner_type AND owner_id=$owner_id ORDER BY file_name"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $file_list_to_print .= '
  • '.htmlspecialchars($row['file_name']).'
  • '; + } + $msg->addConfirm(array('FILE_DELETE', $file_list_to_print), $hidden_vars); + } + + if (isset($_GET['folders'])) { + $dir_list_to_print = ''; + $folders = implode(',', $_GET['folders']); + $hidden_vars['folders'] = $folders; + $rows = fs_get_folder_by_id($_GET['folders'], $owner_type, $owner_id); + foreach ($rows as $row) { + $dir_list_to_print .= '
  • '.htmlspecialchars($row['title']).'
  • '; + } + $msg->addConfirm(array('DIR_DELETE', $dir_list_to_print), $hidden_vars); + } + + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printConfirm(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + +} +// action - Confirm Delete Files/Folders +else if (query_bit($owner_status, WORKSPACE_AUTH_WRITE) && isset($_POST['submit_yes'])) { + + // handle the delete + if (isset($_POST['files'])) { + $files = explode(',', $_POST['files']); + } + if (isset($_POST['folders'])) { + $folders = explode(',', $_POST['folders']); + } + if (isset($files)) { + foreach ($files as $file) { + fs_delete_file($file, $owner_type, $owner_id); + } + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } + + if (isset($folders)) { + foreach ($folders as $folder) { + fs_delete_folder($folder, $owner_type, $owner_id); + } + $msg->addFeedback('DIR_DELETED'); + } + + header('Location: index.php'.$owner_arg_prefix.'folder='.abs($_POST['folder'])); + exit; +} +// action - Cancel Delete +else if (query_bit($owner_status, WORKSPACE_AUTH_WRITE) && isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'.$owner_arg_prefix.'folder='.abs($_POST['folder'])); + exit; + +// action - Create Folder +} else if (query_bit($owner_status, WORKSPACE_AUTH_WRITE) && isset($_POST['create_folder'])) { + // create a new folder + $_POST['new_folder_name'] = trim($_POST['new_folder_name']); + + if (!$_POST['new_folder_name']) { + $msg->addError(array('EMPTY_FIELDS', _AT('name'))); + } + + if (!$msg->containsErrors()) { + $_POST['new_folder_name'] = $addslashes($_POST['new_folder_name']); + + $parent_folder_id = abs($_POST['folder']); + + $sql = "INSERT INTO ".TABLE_PREFIX."folders VALUES (NULL, $parent_folder_id, $owner_type, $owner_id, '$_POST[new_folder_name]')"; + $result = mysql_query($sql, $db); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'.$owner_arg_prefix.'folder='.$parent_folder_id); + exit; + } +} +// action - Upload +else if (query_bit($owner_status, WORKSPACE_AUTH_WRITE) && isset($_POST['upload'])) { + // handle the file upload + $_POST['comments'] = trim($_POST['comments']); + + $parent_folder_id = abs($_POST['folder']); + + if ($_FILES['file']['error'] == UPLOAD_ERR_INI_SIZE) { + $msg->addError(array('FILE_TOO_BIG', get_human_size(megabytes_to_bytes(substr(ini_get('upload_max_filesize'), 0, -1))))); + + } else if (!isset($_FILES['file']['name']) || ($_FILES['file']['error'] == UPLOAD_ERR_NO_FILE) || ($_FILES['file']['size'] == 0)) { + $msg->addError('FILE_NOT_SELECTED'); + + } else if ($_FILES['file']['error'] || !is_uploaded_file($_FILES['file']['tmp_name'])) { + $msg->addError('FILE_NOT_SAVED'); + } + + // check that we own this folder + if ($parent_folder_id) { + $sql = "SELECT folder_id FROM ".TABLE_PREFIX."folders WHERE folder_id=$parent_folder_id AND owner_type=$owner_type AND owner_id=$owner_id"; + $result = mysql_query($sql, $db); + if (!$row = mysql_fetch_assoc($result)) { + $msg->addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; + } + } + + if (!$msg->containsErrors()) { + $_POST['description'] = $addslashes(trim($_POST['description'])); + $_FILES['file']['name'] = addslashes($_FILES['file']['name']); + + if ($_POST['comments']) { + $num_comments = 1; + } else { + $num_comments = 0; + } + + $sql = "INSERT INTO ".TABLE_PREFIX."files VALUES (NULL, $owner_type, $owner_id, $_SESSION[member_id], $parent_folder_id, 0, NOW(), $num_comments, 0, '{$_FILES['file']['name']}', {$_FILES['file']['size']}, '$_POST[description]')"; + $result = mysql_query($sql, $db); + + if ($result && ($file_id = mysql_insert_id($db))) { + $path = fs_get_file_path($file_id); + move_uploaded_file($_FILES['file']['tmp_name'], $path . $file_id); + + // check if this file name already exists + $sql = "SELECT file_id, num_revisions FROM ".TABLE_PREFIX."files WHERE owner_type=$owner_type AND owner_id=$owner_id AND folder_id=$parent_folder_id AND file_id<>$file_id AND file_name='{$_FILES['file']['name']}' AND parent_file_id=0 ORDER BY file_id DESC LIMIT 1"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + if ($_config['fs_versioning']) { + $sql = "UPDATE ".TABLE_PREFIX."files SET parent_file_id=$file_id, date=date WHERE file_id=$row[file_id]"; + $result = mysql_query($sql, $db); + + $sql = "UPDATE ".TABLE_PREFIX."files SET num_revisions=$row[num_revisions]+1, date=date WHERE file_id=$file_id"; + $result = mysql_query($sql, $db); + } else { + fs_delete_file($row['file_id'], $owner_type, $owner_id); + } + } + + $msg->addFeedback('FILE_UPLOADED'); + } else { + $msg->addError('FILE_NOT_SAVED'); + } + } + header('Location: index.php'.$owner_arg_prefix.'folder='.$parent_folder_id); + exit; +} else if ((isset($_GET['delete']) || isset($_GET['download']) || isset($_GET['move']) || isset($_GET['edit']) || isset($_GET['assignment'])) && !isset($_GET['files']) && !isset($_GET['folders'])) { + $msg->addError('NO_ITEM_SELECTED'); +} + +if (query_bit($owner_status, WORKSPACE_AUTH_WRITE)) { + $onload = 'hideform(\'upload\'); hideform(\'c_folder\');'; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$orders = array('asc' => 'desc', 'desc' => 'asc'); +$cols = array('file_name' => 1, 'file_size' => 1, 'date' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'file_name'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'file_name'; +} else { + // no order set + $order = 'asc'; + $col = 'file_name'; +} + +$folder_path = fs_get_folder_path($folder_id, $owner_type, $owner_id); + +$folders = fs_get_folder_by_pid($folder_id, $owner_type, $owner_id); + +$files = array(); +$sql = "SELECT * FROM ".TABLE_PREFIX."files WHERE folder_id=$folder_id AND owner_type=$owner_type AND owner_id=$owner_id AND parent_file_id=0 ORDER BY $col $order"; +$result = mysql_query($sql, $db); + +while ($row = mysql_fetch_assoc($result)) { + $files[] = $row; +} + +?> + + +
    + +
    +
    +
    +

    +
    +
    +
    +
    *

    + +
    +
    + +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    *

    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    + + + + +
    + + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + » + + + » + + +
    + + + + + + + + + +
         
    + + +

    + +
    + + + + + + - + + + + +
    +
    + + + + \ No newline at end of file diff --git a/file_storage/move.php b/file_storage/move.php new file mode 100644 index 000000000..cba9d5f73 --- /dev/null +++ b/file_storage/move.php @@ -0,0 +1,129 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'.$owner_arg_prefix.'folder='.abs($_POST['folder'])); + exit; +} else if (isset($_POST['submit'])) { + $_POST['new_folder'] = abs($_POST['new_folder']); + + if ($_POST['folder'] == $_POST['new_folder']) { + // src = dest + $msg->addFeedback('CANCELLED'); + header('Location: index.php'.$owner_arg_prefix.'folder='.$_POST['new_folder']); + exit; + } + + if (isset($_POST['files'])) { + foreach ($_POST['files'] as $file) { + $file = abs($file); + // check if this file name already exists + $sql = "SELECT file_name FROM ".TABLE_PREFIX."files WHERE file_id=$file"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + $sql = "SELECT file_id FROM ".TABLE_PREFIX."files WHERE folder_id={$_POST['new_folder']} AND file_id<>$file AND file_name='{$row['file_name']}' AND parent_file_id=0 AND owner_type=$owner_type AND owner_id=$owner_id ORDER BY file_id DESC LIMIT 1"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + fs_delete_file($row['file_id'], $owner_type, $owner_id); + } + + $sql = "UPDATE ".TABLE_PREFIX."files SET folder_id={$_POST['new_folder']}, date=date WHERE file_id=$file AND owner_type=$owner_type AND owner_id=$owner_id"; + mysql_query($sql, $db); + } + $msg->addFeedback('FILES_MOVED'); + } + + if (isset($_POST['folders'])) { + foreach ($_POST['folders'] as $folder) { + $file = abs($file); + $sql = "UPDATE ".TABLE_PREFIX."folders SET parent_folder_id={$_POST['new_folder']} WHERE folder_id=$folder AND owner_type=$owner_type AND owner_id=$owner_id"; + mysql_query($sql, $db); + } + $msg->addFeedback('DIRS_MOVED'); + } + header('Location: index.php'.$owner_arg_prefix.'folder='.$_POST['new_folder']); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$folder_id = abs($_GET['folder']); + +// can't use fs_get_folders() because we want all folders, not just at one level +$folders = array(); +$sql = "SELECT folder_id, parent_folder_id, title FROM ".TABLE_PREFIX."folders WHERE owner_type=$owner_type AND owner_id=$owner_id ORDER BY parent_folder_id, title"; +$result = mysql_query($sql, $db); +while ($row = mysql_fetch_assoc($result)) { + $folders[$row['parent_folder_id']][$row['folder_id']] = $row; +} + +?> + +
    + + + + + + + + + + + +
    +
    +

    +
    + +
    +
      +
    • /> + + +
    • +
    +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/file_storage/new.php b/file_storage/new.php new file mode 100644 index 000000000..5c4010fbe --- /dev/null +++ b/file_storage/new.php @@ -0,0 +1,159 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'.$owner_arg_prefix.'folder='.abs($_POST['folder'])); + exit; +} else if (isset($_POST['submit'])) { + $_POST['comments'] = trim($_POST['comments']); + $_POST['name'] = trim($_POST['name']); + + $parent_folder_id = abs($_POST['folder']); + + // check that we own this folder + if ($parent_folder_id) { + $sql = "SELECT folder_id FROM ".TABLE_PREFIX."folders WHERE folder_id=$parent_folder_id AND owner_type=$owner_type AND owner_id=$owner_id"; + $result = mysql_query($sql, $db); + if (!$row = mysql_fetch_assoc($result)) { + $msg->addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; + } + } + + if (!$_POST['name']) { + $msg->addError(array('EMPTY_FIELDS', _AT('file_name'))); + } + + if (!$msg->containsErrors()) { + $_POST['description'] = $addslashes(trim($_POST['description'])); + $_POST['comment'] = $addslashes(trim($_POST['comment'])); + $_POST['name'] = $addslashes($_POST['name']); + $_POST['body'] = $stripslashes($_POST['body']); // file gets saved to disk not db, so no need to escape. + + if ($_POST['comment']) { + $num_comments = 1; + } else { + $num_comments = 0; + } + + $size = strlen($_POST['body']); + $sql = "INSERT INTO ".TABLE_PREFIX."files VALUES (NULL, $owner_type, $owner_id, $_SESSION[member_id], $parent_folder_id, 0, NOW(), $num_comments, 0, '$_POST[name]',$size, '$_POST[description]')"; + $result = mysql_query($sql, $db); + + if ($result && ($file_id = mysql_insert_id($db))) { + $file_path = fs_get_file_path($file_id) . $file_id; + $fp = fopen($file_path, 'wb'); + fwrite($fp, $_POST['body'], $size); + fclose($fp); + + // check if this file name already exists + $sql = "SELECT file_id, num_revisions FROM ".TABLE_PREFIX."files WHERE owner_type=$owner_type AND owner_id=$owner_id AND folder_id=$parent_folder_id AND file_id<>$file_id AND file_name='$_POST[name]' AND parent_file_id=0 ORDER BY file_id DESC LIMIT 1"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + if ($_config['fs_versioning']) { + $sql = "UPDATE ".TABLE_PREFIX."files SET parent_file_id=$file_id, date=date WHERE file_id=$row[file_id]"; + $result = mysql_query($sql, $db); + + $sql = "UPDATE ".TABLE_PREFIX."files SET num_revisions=$row[num_revisions]+1, date=date WHERE file_id=$file_id"; + $result = mysql_query($sql, $db); + } else { + fs_delete_file($row['file_id'], $owner_type, $owner_id); + } + } + + if ($_POST['comment']){ + $sql = "INSERT INTO ".TABLE_PREFIX."files_comments VALUES (NULL, $file_id, $_SESSION[member_id], NOW(), '{$_POST['comment']}')"; + mysql_query($sql, $db); + } + + $msg->addFeedback(array('FILE_SAVED', $_POST['name'])); + header('Location: index.php'.$owner_arg_prefix.'folder='.$parent_folder_id); + exit; + } + } +} + +$onload = 'document.form.name.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (($_POST['setvisual'] && !$_POST['settext']) || $_GET['setvisual']) { + require(AT_INCLUDE_PATH.'lib/tinymce.inc.php'); + + load_editor('body'); +} +if (isset($_POST['description'])) { + $_POST['description'] = $stripslashes($_POST['description']); + $_POST['name'] = $stripslashes($_POST['name']); + $_POST['comment'] = $stripslashes($_POST['comment']); + $_POST['body'] = $stripslashes($_POST['body']); +} +?> +
    + +
    +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    + '; + echo ''; + } else { + echo ''; + } + ?> +
    + +
    +
    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/file_storage/revisions.php b/file_storage/revisions.php new file mode 100644 index 000000000..0d7ed181d --- /dev/null +++ b/file_storage/revisions.php @@ -0,0 +1,142 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +if (isset($_GET['download'], $_GET['revision'])) { + header('Location: index.php'.$owner_arg_prefix.'download=1'.SEP.'files'.urlencode('[]').'='.$_GET['revision']); + exit; +} else if (query_bit($owner_status, WORKSPACE_AUTH_WRITE) && isset($_GET['delete'], $_GET['revision'])) { + header('Location: delete_revision.php'.$owner_arg_prefix.'id='.$_GET['revision']); + exit; +} else if (isset($_GET['cancel'])) { + header('Location: index.php'.$owner_arg_prefix.'folder='.$_GET['folder']); + exit; +} else if (isset($_GET['comments'])) { + header('Location: comments.php'.$owner_arg_prefix.'id='.$_GET['revision']); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$id = abs($_GET['id']); + +$orders = array('asc' => 'desc', 'desc' => 'asc'); +$cols = array('num_revisions' => 1, 'file_name' => 1, 'date' => 1, 'num_comments' => 1, 'file_size' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'num_revisions'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'num_revisions'; +} else { + // no order set + $order = 'desc'; + $col = 'num_revisions'; +} + +$files = fs_get_revisions($id, $owner_type, $owner_id, $col, $order); +$current_file = current($files); + + +usort($files, 'fs_revisions_sort_compare'); + +?> + +
    + + + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + + + + + +
    + + +

    + +
    +
    + + + \ No newline at end of file diff --git a/forum/delete_thread.php b/forum/delete_thread.php new file mode 100644 index 000000000..c9730601d --- /dev/null +++ b/forum/delete_thread.php @@ -0,0 +1,131 @@ +addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; +} + +if (isset($_POST['submit_no'])) { + + $msg->addFeedback('CANCELLED'); + if ($_POST['nest']) { + header('Location: view.php?fid='.$_POST['fid'].SEP.'pid='. ($_POST['ppid'] ? $_POST['ppid'] : $_POST['pid'])); + exit; + } else { + header('Location: index.php?fid='.$_POST['fid']); + exit; + } + + exit; + +} else if (isset($_POST['submit_yes'])) { + // check if they have access + if (!valid_forum_user($fid)) { + $msg->addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; + } + + if ($ppid == 0) { /* If deleting an entire post */ + /* First get number of comments from specific post */ + $sql = "SELECT * FROM ".TABLE_PREFIX."forums_threads WHERE post_id=$pid AND forum_id=$fid"; + $result = mysql_query($sql, $db); + if (!($row = mysql_fetch_assoc($result))) { + $msg->addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; + + } // else: + + /* Decrement count for number of posts and topics*/ + $sql = "UPDATE ".TABLE_PREFIX."forums SET num_posts=num_posts-1-".$row['num_comments'].", num_topics=num_topics-1, last_post=last_post WHERE forum_id=$fid"; + $result = mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."forums_threads WHERE (parent_id=$pid OR post_id=$pid) AND forum_id=$fid"; + $result = mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."forums_accessed WHERE post_id=$pid"; + $result = mysql_query($sql, $db); + + } else { /* Just deleting a single thread */ + $sql = "DELETE FROM ".TABLE_PREFIX."forums_threads WHERE post_id=$pid AND forum_id=$fid"; + $result = mysql_query($sql, $db); + if (mysql_affected_rows($db) == 0) { + $msg->addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; + } + + /* Decrement count of comments in forums_threads table*/ + $sql = "UPDATE ".TABLE_PREFIX."forums_threads SET num_comments=num_comments-1, last_comment=last_comment, date=date WHERE post_id=$ppid"; + $result = mysql_query($sql, $db); + + /* Decrement count of posts in forums table */ + $sql = "UPDATE ".TABLE_PREFIX."forums SET num_posts=num_posts-1, last_post=last_post WHERE forum_id=$fid"; + $result = mysql_query($sql, $db); + + } + + if ($ppid) { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: view.php?fid='.$fid.SEP.'pid='.$ppid); + exit; + } else { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php?fid='.$fid); + exit; + } +} + +$_pages['forum/index.php?fid='.$fid]['title'] = get_forum_name($fid); +$_pages['forum/index.php?fid='.$fid]['parent'] = 'forum/list.php'; +$_pages['forum/index.php?fid='.$fid]['children'] = array('forum/new_thread.php?fid='.$fid); + +$_pages['forum/new_thread.php?fid='.$fid]['title_var'] = 'new_thread'; +$_pages['forum/new_thread.php?fid='.$fid]['parent'] = 'forum/index.php?fid='.$fid; + +$_pages['forum/view.php']['title'] = $post_row['subject']; +$_pages['forum/view.php']['parent'] = 'forum/index.php?fid='.$fid; + +$_pages['forum/delete_thread.php']['title_var'] = 'delete_post'; +$_pages['forum/delete_thread.php']['parent'] = 'forum/index.php?fid='.$fid; +$_pages['forum/delete_thread.php']['children'] = array(); + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$hidden_vars['fid'] = $_GET['fid']; +$hidden_vars['pid'] = $_GET['pid']; +$hidden_vars['ppid'] = $_GET['ppid']; +$hidden_vars['nest'] = $_GET['nest']; + +$msg->addConfirm('DELETE', $hidden_vars); +if (($ppid=='') || ($ppid =='0')) { + $ppid = '0'; +} + +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/forum/index.php b/forum/index.php new file mode 100644 index 000000000..872f4f745 --- /dev/null +++ b/forum/index.php @@ -0,0 +1,57 @@ +addError('FORUM_DENIED'); + $msg->printErrors(); + require(AT_INCLUDE_PATH.'footer.inc.php'); +} + +$_pages['forum/index.php']['title'] = get_forum_name($fid); +$_pages['forum/index.php']['parent'] = 'forum/list.php'; +$_pages['forum/index.php']['children'] = array('forum/new_thread.php?fid='.$fid); + +$_pages['forum/new_thread.php?fid='.$fid]['title_var'] = 'new_thread'; +$_pages['forum/new_thread.php?fid='.$fid]['parent'] = 'forum/index.php'; + +/* the last accessed field */ +$last_accessed = array(); +if ($_SESSION['valid_user'] && $_SESSION['enroll']) { + $sql = "SELECT post_id, last_accessed + 0 AS last_accessed, subscribe FROM ".TABLE_PREFIX."forums_accessed WHERE member_id=$_SESSION[member_id]"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $post_id = $row['post_id']; + unset($row['post_id']); + $last_accessed[$post_id] = $row; + } +} + +require(AT_INCLUDE_PATH . 'header.inc.php'); + +require(AT_INCLUDE_PATH . 'html/forum.inc.php'); + +require(AT_INCLUDE_PATH . 'footer.inc.php'); +?> \ No newline at end of file diff --git a/forum/list.php b/forum/list.php new file mode 100644 index 000000000..2c29e3bc9 --- /dev/null +++ b/forum/list.php @@ -0,0 +1,94 @@ + + + + + + + + + + + $forums) { + if (($num_shared && $num_nonshared) || ($num_nonshared && $num_groups)) { + if ($num_nonshared && ($shared == 'nonshared')) { + echo ''; + echo ''; + echo ''; + } else if ($num_shared && ($shared == 'shared')) { + echo ''; + echo ''; + echo ''; + } else if ($num_groups && ($shared == 'group')) { + echo ''; + echo ''; + echo ''; + } + } + + foreach ($forums as $row) : ?> + + + + + + '; +} else { + echo ''; +} +echo '
    ' . _AT('course_forums') . '
    ' . _AT('shared_forums') . '
    ' . _AT('group_forums') . '
    '._AT('unsubscribe1').''; + } else { + echo ''._AT('subscribe1').''; + } + echo ' ]'; + } ?> +

    +
    '._AT('na').''; + } else { + echo $row['last_post']; + } ?> +
    '._AT('no_forums').'
    '; + +require (AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/forum/lock_thread.php b/forum/lock_thread.php new file mode 100644 index 000000000..5598df656 --- /dev/null +++ b/forum/lock_thread.php @@ -0,0 +1,98 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'forum/index.php?fid='.$fid); + exit; +} else if (isset($_POST['submit'])) { + $_POST['lock'] = intval($_POST['lock']); + $_POST['pid'] = intval($_POST['pid']); + $_POST['fid'] = intval($_POST['fid']); + + $sql = "UPDATE ".TABLE_PREFIX."forums_threads SET locked=$_POST[lock], last_comment=last_comment, date=date WHERE post_id=$_POST[pid]"; + $result = mysql_query($sql, $db); + + if($_POST['lock'] == '1' || $_POST['lock'] == '2'){ + $msg->addFeedback('THREAD_LOCKED'); + header('Location: '.AT_BASE_HREF.'forum/index.php?fid='.$fid); + exit; + } else { + $msg->addFeedback('THREAD_UNLOCKED'); + header('Location: '.AT_BASE_HREF.'forum/index.php?fid='.$fid); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$pid = intval($_GET['pid']); +$fid = intval($_GET['fid']); +?> +
    + + + +
    + + +
    + +
    + + +
    + >
    + > +
    + +
    + + +
    +
    + +
    + \ No newline at end of file diff --git a/forum/move_thread.php b/forum/move_thread.php new file mode 100644 index 000000000..3e57bd746 --- /dev/null +++ b/forum/move_thread.php @@ -0,0 +1,108 @@ +addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php?fid='.$_REQUEST['fid']); + exit; + +} else if (isset($_POST['submit'])) { + // check if they have access + if (!valid_forum_user($_REQUEST['fid']) || !valid_forum_user($_REQUEST['new_fid'])) { + $msg->addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; + } + + if ($_REQUEST['fid'] == $_REQUEST['new_fid']) { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php?fid='.$_REQUEST['fid']); + exit; + } + + $sql = "SELECT * FROM ".TABLE_PREFIX."forums_threads WHERE post_id=$_REQUEST[pid] AND forum_id=$_REQUEST[fid]"; + $result = mysql_query($sql, $db); + if (!($row = mysql_fetch_assoc($result))) { + $msg->addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; + } // else: + + /* Decrement count for number of posts and topics*/ + $sql = "UPDATE ".TABLE_PREFIX."forums SET num_posts=num_posts-1-".$row['num_comments'].", num_topics=num_topics-1, last_post=last_post WHERE forum_id=$_REQUEST[fid]"; + $result = mysql_query($sql, $db); + + $sql = "UPDATE ".TABLE_PREFIX."forums SET num_posts=num_posts+1+".$row['num_comments'].", num_topics=num_topics+1, last_post=last_post WHERE forum_id=$_REQUEST[new_fid]"; + $result = mysql_query($sql, $db); + + $sql = "UPDATE ".TABLE_PREFIX."forums_threads SET forum_id=$_REQUEST[new_fid], last_comment=last_comment, date=date WHERE (parent_id=$_REQUEST[pid] OR post_id=$_REQUEST[pid]) AND forum_id=$_REQUEST[fid]"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php?fid='.$_REQUEST['fid']); + exit; +} + +$_pages['forum/index.php?fid='.$_REQUEST['fid']]['title'] = get_forum_name($_REQUEST['fid']); +$_pages['forum/index.php?fid='.$_REQUEST['fid']]['parent'] = 'forum/list.php'; +$_pages['forum/index.php?fid='.$_REQUEST['fid']]['children'] = array('forum/move_thread.php'); + +$_pages['forum/move_thread.php']['title_var'] = 'move_thread'; +$_pages['forum/move_thread.php']['parent'] = 'forum/index.php?fid='.$_REQUEST['fid']; +$_pages['forum/move_thread.php']['children'] = array(); + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> +
    + + + + +
    +
    + +
      + +
    • + /> +
    • + +
    +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/forum/new_thread.php b/forum/new_thread.php new file mode 100644 index 000000000..eecff2c31 --- /dev/null +++ b/forum/new_thread.php @@ -0,0 +1,187 @@ +addError('FORUM_DENIED'); + require(AT_INCLUDE_PATH.'header.inc.php'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php?fid='.$fid); + exit; +} else if (isset($_POST['submit'])) { + $missing_fields = array(); + + if ($_POST['subject'] == '') { + $missing_fields[] = _AT('subject'); + } + + if ($_POST['body'] == '') { + $missing_fields[] = _AT('body'); + } + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + if (!$msg->containsErrors()) { + if ($_POST['replytext'] != '') { + $_POST['body'] .= "\n\n".'[reply][b]'._AT('in_reply_to').': [/b]'."\n"; + if (strlen($_POST['replytext']) > 200) { + $_POST['body'] .= substr($_POST['replytext'], 0, 200).'...'; + } else { + $_POST['body'] .= $_POST['replytext']; + } + $num_open_replies = substr_count($_POST['body'], '[reply]'); + $num_close_replies = substr_count($_POST['body'], '[/reply]'); + $num_replies_add = $num_open_replies - $num_close_replies - 1; + for ($i=0; $i < $num_replies_add; $i++) { + $_POST['body'] .= '[/reply]'; + } + + $_POST['body'] .= "\n".'[op]forum/view.php?fid='.$_POST['fid'].SEP.'pid='.$_POST['parent_id'].SEP.'page='.$_POST['page'].'#'.$_POST['reply']; + $_POST['body'] .= '[/op][/reply]'; + } + + /* use this value instead of NOW(), because we want the parent post to have the exact */ + /* same date. and not a second off if that may happen */ + $now = date('Y-m-d H:i:s'); + + $sql_subject = $addslashes($_POST['subject']); + $sql_body = $addslashes($_POST['body']); + + $sql = "INSERT INTO ".TABLE_PREFIX."forums_threads VALUES (NULL, $_POST[parent_id], $_SESSION[member_id], $_POST[fid], '".addslashes(get_display_name($_SESSION['member_id']))."', '$now', 0, '$sql_subject', '$sql_body', '$now', 0, 0)"; + $result = mysql_query($sql, $db); + $this_id = mysql_insert_id($db); + + /* Increment count for posts in forums table in database */ + $sql = "UPDATE ".TABLE_PREFIX."forums SET num_posts=num_posts+1, last_post='$now' WHERE forum_id=$_POST[fid]"; + $result = mysql_query($sql, $db); + + // If there are subscribers to this forum, send them an email notification + $subscriber_email_list = array(); // list of subscribers array('email', 'full_name') + $subscriber_list = ''; + + //get a list of users subscribed to this forum + $sql = "SELECT member_id FROM ".TABLE_PREFIX."forums_subscriptions WHERE forum_id=$fid"; + $result = mysql_query($sql, $db); + while($row = mysql_fetch_assoc($result)){ + $subscriber_list .= $row['member_id'] . ','; + } + if ($_POST['parent_id']) { + $sql = "SELECT member_id FROM ".TABLE_PREFIX."forums_accessed WHERE post_id=$_POST[parent_id] AND subscribe=1"; + $result = mysql_query($sql, $db); + while($row = mysql_fetch_assoc($result)){ + $subscriber_list .= $row['member_id'] . ','; + } + } + $subscriber_list = substr($subscriber_list, 0, -1); + + if ($subscriber_list != '') { + $sql = "SELECT first_name, second_name, last_name, email FROM ".TABLE_PREFIX."members WHERE member_id IN ($subscriber_list) AND member_id <> $_SESSION[member_id]"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $subscriber_email_list[] = array('email'=> $row['email'], 'full_name' => $row['first_name'] . ' '. $row['second_name'] . ' ' . $row['last_name']); + } + } + + $sql = "UPDATE ".TABLE_PREFIX."forums_threads SET num_comments=num_comments+1, last_comment='$now', date=date WHERE post_id=$_POST[parent_id]"; + $result = mysql_query($sql, $db); + + if ($subscriber_email_list) { + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + + if ($_POST['parent_name'] == ''){ + $_POST['parent_name'] = $_POST['subject']; + } + $_POST['parent_name'] = urldecode($_POST['parent_name']); + + foreach ($subscriber_email_list as $subscriber){ + $mail = new ATutorMailer; + $mail->AddAddress($subscriber['email'], $subscriber['full_name']); + + $body = _AT('forum_new_submsg', $_SESSION['course_title'], get_forum_name($_POST['fid']), $_POST['parent_name'], AT_BASE_HREF.'bounce.php?course='.$_SESSION['course_id']); + $body .= "\n----------------------------------------------\n"; + $body .= _AT('posted_by').": ".get_display_name($_SESSION['member_id'])."\n"; + $body .= $_POST['body']."\n"; + $mail->FromName = $_config['site_name']; + $mail->From = $_config['contact_email']; + $mail->Subject = _AT('thread_notify1'); + $mail->Body = $body; + + if(!$mail->Send()) { + $msg->addError('SENDING_ERROR'); + } + + unset($mail); + } + } + if ($_REQUEST['subscribe']) { + if($_POST['parent_id'] != 0){ + $this_id = $_POST['parent_id']; + $subject = $_POST['parent_name']; + } else { + $subject = $_POST['subject']; + } + $sql = "REPLACE INTO ".TABLE_PREFIX."forums_accessed VALUES ($this_id, $_SESSION[member_id], NOW(), 1)"; + $result = mysql_query($sql, $db); + + $msg->addFeedback(array('THREAD_SUBSCRIBED', $subject)); + } else if ($_POST['parent_id'] == 0) { + // not subscribe and it's a new thread, mark read: + + $sql = "REPLACE INTO ".TABLE_PREFIX."forums_accessed VALUES ($this_id, $_SESSION[member_id], NOW(), 0)"; + $result = mysql_query($sql, $db); + } + + if ($_POST['parent_id'] == 0) { + $sql = "UPDATE ".TABLE_PREFIX."forums SET num_topics=num_topics+1, last_post='$now' WHERE forum_id=$_POST[fid]"; + $result = mysql_query($sql, $db); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + $_POST['parent_id'] = $this_id; + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: view.php?fid='.$fid.SEP.'pid='.$_POST['parent_id']); + exit; + } +} + +$onload = 'document.form.subject.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$parent_id = 0; +$new_thread = TRUE; +require(AT_INCLUDE_PATH.'html/new_thread.inc.php'); +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/forum/stick.php b/forum/stick.php new file mode 100644 index 000000000..d00360a6b --- /dev/null +++ b/forum/stick.php @@ -0,0 +1,30 @@ +addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + +header('Location: '.AT_BASE_HREF.'forum/index.php?fid='.intval($_GET['fid'])); +exit; + +?> \ No newline at end of file diff --git a/forum/subscribe.php b/forum/subscribe.php new file mode 100644 index 000000000..7a597b320 --- /dev/null +++ b/forum/subscribe.php @@ -0,0 +1,82 @@ +addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; +} + +$sql = "SELECT subject FROM ".TABLE_PREFIX."forums_threads WHERE post_id=$pid AND forum_id=$fid"; +$result = mysql_query($sql, $db); +if (!($row = mysql_fetch_assoc($result))) { + $msg->addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; +} // else: +$thread_name = $row['subject']; + +/** + * Protect against url injection + * Maintain consistency in data by not allowing any subscription to a reply thread, only top level id's (0). + */ + $sql = "SELECT parent_id FROM " . TABLE_PREFIX."forums_threads WHERE post_id=$pid AND forum_id=$fid"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + if ($row['parent_id'] > 0) { // not allowed, only top level + $msg->addError('FORUM_NO_SUBSCRIBE'); + header('Location: view.php?fid='.$fid.SEP.'pid='.$row['parent_id']); // take us back to where we were + exit; + } + } + +if ($_GET['us']) { + // unsubscribe: + $sql = "UPDATE ".TABLE_PREFIX."forums_accessed SET subscribe=0 WHERE post_id=$pid AND member_id=$_SESSION[member_id]"; + $result = mysql_query($sql, $db); +} else { + // subscribe: + $sql = "REPLACE INTO ".TABLE_PREFIX."forums_accessed VALUES ($pid, $_SESSION[member_id], NOW(), 1)"; + $result = mysql_query($sql, $db); +} + + +if($_REQUEST['t']){ + $this_pid = 'index.php?fid='.$fid; +} else{ + $this_pid = 'view.php?fid='.$fid.SEP.'pid='.$pid; +} + +if ($_GET['us'] == '1') { + $msg->addFeedback(array('THREAD_UNSUBSCRIBED', $thread_name)); + header('Location: '.AT_BASE_HREF.'forum/'.$this_pid); + exit; +} + +/* else: */ + $msg->addFeedback(array('THREAD_SUBSCRIBED', $thread_name )); + header('Location: '.AT_BASE_HREF.'forum/'.$this_pid); + exit; + +?> \ No newline at end of file diff --git a/forum/subscribe_forum.php b/forum/subscribe_forum.php new file mode 100644 index 000000000..6ac5445d3 --- /dev/null +++ b/forum/subscribe_forum.php @@ -0,0 +1,52 @@ +addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; +} + +$sql = "SELECT title FROM ".TABLE_PREFIX."forums WHERE forum_id=$fid"; +$result = mysql_query($sql, $db); +if ($row = mysql_fetch_assoc($result)) { + $forum_title = $row['title']; +} else { + $msg->addError('FORUM_NOT_FOUND'); + header('Location: list.php'); + exit; +} + +if (isset($_GET['us'])) { + $sql = "DELETE from ".TABLE_PREFIX."forums_subscriptions WHERE forum_id = $fid AND member_id = $_SESSION[member_id]"; + $result = mysql_query($sql, $db); + $msg->addFeedback(array(FORUM_UNSUBSCRIBED, $forum_title)); + +} else { + $sql = "INSERT into ".TABLE_PREFIX."forums_subscriptions VALUES($fid, '$_SESSION[member_id]')"; + mysql_query($sql, $db); + + $msg->addFeedback(array(FORUM_SUBSCRIBED,$forum_title)); +} + +header('Location: list.php'); +exit; +?> \ No newline at end of file diff --git a/forum/view.php b/forum/view.php new file mode 100644 index 000000000..600c6270d --- /dev/null +++ b/forum/view.php @@ -0,0 +1,182 @@ +printErrors('FORUM_DENIED'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +$_pages['forum/index.php?fid='.$fid]['title'] = get_forum_name($fid); +$_pages['forum/index.php?fid='.$fid]['parent'] = 'forum/list.php'; +$_pages['forum/index.php?fid='.$fid]['children'] = array('forum/new_thread.php?fid='.$fid); + +$_pages['forum/new_thread.php?fid='.$fid]['title_var'] = 'new_thread'; +$_pages['forum/new_thread.php?fid='.$fid]['parent'] = 'forum/index.php?fid='.$fid; + +$_pages['forum/view.php']['parent'] = 'forum/index.php?fid='.$fid; + + +if ($_REQUEST['reply']) { + $onload = 'document.form.subject.focus();'; +} + +$pid = intval($_GET['pid']); + +$num_per_page = 10; +if (!$_GET['page']) { + $page = 1; +} else { + $page = intval($_GET['page']); +} +$start = ($page-1)*$num_per_page; + +/* get the first thread first */ +$sql = "SELECT *, DATE_FORMAT(date, '%Y-%m-%d %H-%i:%s') AS date, UNIX_TIMESTAMP(date) AS udate FROM ".TABLE_PREFIX."forums_threads WHERE post_id=$pid AND forum_id=$fid"; +$result = mysql_query($sql, $db); + +if (!($post_row = mysql_fetch_array($result))) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $_pages['forum/view.php']['title'] = _AT('no_post'); + + echo _AT('no_post'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$_pages['forum/view.php']['title'] = $post_row['subject']; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + <?php echo _AT('reply'); ?> +'._AT('lock_no_read1').'

    '; + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $parent_name = $post_row['subject']; + + echo '
    '; + echo _AT('page').': '; + for ($i=1; $i<=$num_pages; $i++) { + if ($i == $page) { + echo $i; + } else { + echo ''.$i.''; + } + + if ($i<$num_pages){ + echo ' | '; + } + } + echo '
    '; + echo '
      '; + + if ($page == 1) { + print_entry($post_row); + $subject = $post_row['subject']; + if ($_GET['reply'] == $post_row['post_id']) { + $saved_post = $post_row; + } + $num_per_page--; + } else { + $start--; + } + $sql = "SELECT *, DATE_FORMAT(date, '%Y-%m-%d %H-%i:%s') AS date, UNIX_TIMESTAMP(date) AS udate FROM ".TABLE_PREFIX."forums_threads WHERE parent_id=$pid AND forum_id=$fid ORDER BY date ASC LIMIT $start, $num_per_page"; + $result = mysql_query($sql, $db); + + while ($row = mysql_fetch_assoc($result)) { + print_entry($row); + $subject = $row['subject']; + if ($_GET['reply'] == $row['post_id']) { + $saved_post = $row; + } + } + echo '
    '; + + echo '
    '; + echo _AT('page').': '; + for ($i=1; $i<=$num_pages; $i++) { + if ($i == $page) { + echo $i; + } else { + echo ''.$i.''; + } + + if ($i<$num_pages){ + echo ' | '; + } + } + echo '
    '; + + $parent_id = $pid; + $body = ''; + if (substr($subject,0,3) != 'Re:') { + $subject = 'Re: '.$subject; + } + + if ($_SESSION['valid_user'] && $_SESSION['enroll'] && !$locked) { + $sql = "SELECT subscribe FROM ".TABLE_PREFIX."forums_accessed WHERE post_id=$_GET[pid] AND member_id=$_SESSION[member_id]"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + if ($row['subscribe']) { + echo '

    '._AT('unsubscribe').'

    '; + $subscribed = true; + } else { + echo '

    '._AT('subscribe').'

    '; + } + } + if ($_SESSION['valid_user'] && !$_SESSION['enroll']) { + echo '

    '._AT('enroll_to_post').'

    '; + } else if ($locked == 0) { + require(AT_INCLUDE_PATH.'html/new_thread.inc.php'); + } else { + echo '

    '._AT('lock_no_post1').'

    '; + } + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/get.php b/get.php new file mode 100644 index 000000000..1e14d6aac --- /dev/null +++ b/get.php @@ -0,0 +1,129 @@ + \ No newline at end of file diff --git a/get_acheck.php b/get_acheck.php new file mode 100644 index 000000000..031a856d6 --- /dev/null +++ b/get_acheck.php @@ -0,0 +1,44 @@ + \ No newline at end of file diff --git a/get_profile_img.php b/get_profile_img.php new file mode 100644 index 000000000..65f6897e4 --- /dev/null +++ b/get_profile_img.php @@ -0,0 +1,77 @@ + \ No newline at end of file diff --git a/get_rss.php b/get_rss.php new file mode 100644 index 000000000..ab9b025b0 --- /dev/null +++ b/get_rss.php @@ -0,0 +1,102 @@ +useCached(); + $rss->title = $system_courses[$course]['title']; + $rss->description = $system_courses[$course]['description']; + $rss->link = AT_BASE_HREF; + $rss->syndicationURL = AT_BASE_HREF; + + $image = new FeedImage(); + $image->title = 'ATutor Logo'; + $image->url = AT_BASE_HREF . 'images/at-logo.v.3.gif'; + $image->link = AT_BASE_HREF; + $rss->image = $image; + + $sql = "SELECT A.*, M.login from ".TABLE_PREFIX."news A, ".TABLE_PREFIX."members M WHERE A.course_id = ".$course." AND A.member_id=M.member_id ORDER BY A.date DESC LIMIT 5"; + + $res = mysql_query($sql, $db); + + while ($data = mysql_fetch_assoc($res)) { + $item = new FeedItem(); + + $item->title = $data['title']; + $item->link = AT_BASE_HREF . 'index.php'; + $item->description = $data['body']; + $item->date = strtotime($data['date']); + $item->source = AT_BASE_HREF; + $item->author = $data['login']; + + $rss->addItem($item); + } + + header('Content-Type: text/xml'); + $rss->saveFeed('RSS'.$version.'.0', AT_CONTENT_DIR . 'feeds/' . $course . '/RSS' . $version . '.0.xml', false); + + echo file_get_contents(AT_CONTENT_DIR . 'feeds/' . $course . '/RSS'.$version.'.0.xml'); + + exit; +} // else: this course didn't enable rss + +header('HTTP/1.1 404 Not Found'); +exit; + + +?> \ No newline at end of file diff --git a/glossary/index.php b/glossary/index.php new file mode 100644 index 000000000..b46f605e5 --- /dev/null +++ b/glossary/index.php @@ -0,0 +1,146 @@ +0 AND course_id=$_SESSION[course_id] ORDER BY related_word_id"; +$result = mysql_query($sql, $db); +while ($row = mysql_fetch_array($result)) { + $glossary_related[$row['related_word_id']][] = $row['word_id']; +} + +$_GET['w'] = stripslashes($_GET['w']); + +if ($_GET['w']) { + $sql = "SELECT * FROM ".TABLE_PREFIX."glossary WHERE course_id=$_SESSION[course_id] AND word='".addslashes(urldecode($_GET['w']))."'"; +} else { + $sql = "SELECT * FROM ".TABLE_PREFIX."glossary WHERE course_id=$_SESSION[course_id] ORDER BY word"; +} + +$result= mysql_query($sql, $db); + +if(mysql_num_rows($result) > 0){ + + $gloss_results = array(); + while ($row = mysql_fetch_assoc($result)) { + $gloss_results[] = $row; + } + $num_results = count($gloss_results); + $results_per_page = 25; + $num_pages = ceil($num_results / $results_per_page); + $page = intval($_GET['p']); + if (!$page) { + $page = 1; + } + + $count = (($page-1) * $results_per_page) + 1; + $gloss_results = array_slice($gloss_results, ($page-1)*$results_per_page, $results_per_page); + + if($num_pages > 1): + ?> +
    +
      + +
    • + + + + + +
    • + +
    +
    + + + + +'; + } + $current_letter = strtoupper(substr($item['word'], 0, 1)); ?> +

    +
    + + +
    + + + + + + + + '.urldecode($glossary_ids[$item['related_word_id']]).''; + $output = true; + } + + if (is_array($glossary_related[urlencode($item['word_id'])]) ) { + $my_related = $glossary_related[$item['word_id']]; + + $num_related = count($my_related); + for ($i=0; $i<$num_related; $i++) { + if ($glossary_ids[$my_related[$i]] == $glossary_ids[$item['related_word_id']]) { + continue; + } + if ($output) { + echo ', '; + } + + echo ''.urldecode($glossary_ids[$my_related[$i]]).''; + + $output = true; + } + } + echo ')'; + endif; ?> +
    + +


    + + + + +
    + +
    '._AT('view_all').''; + + if ($_GET['g_cid']) { + $path = $contentManager->getContentPath(intval($_GET['g_cid'])); + echo ' | '._AT('back_to').' '.$path[0]['title'].''; + } + } + +} else { + echo '

    '._AT('no_glossary_items').'

    '; +} + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/google_search/admin/module_prefs.php b/google_search/admin/module_prefs.php new file mode 100644 index 000000000..9f08c263a --- /dev/null +++ b/google_search/admin/module_prefs.php @@ -0,0 +1,63 @@ +search($search_array); + + if (isset($result['faultstring'])) { + $msg->addError('GOOGLE_KEY_INVALID'); + $key = htmlspecialchars($stripslashes($_POST['key'])); + } else { + $key = $addslashes($_POST['key']); + $sql = "REPLACE INTO ".TABLE_PREFIX."config VALUES('gsearch','$key')"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('GOOGLE_KEY_SAVED'); + } + } else { + $sql = "DELETE FROM ".TABLE_PREFIX."config WHERE name='gsearch'"; + $result = mysql_query($sql, $db); + $msg->addFeedback('GOOGLE_KEY_SAVED'); + $key = ''; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    +
    +
    + +
    +
    + +
    + +
    + +
    +
    + +
    + + + \ No newline at end of file diff --git a/google_search/google.gif b/google_search/google.gif new file mode 100644 index 0000000000000000000000000000000000000000..845b9f9f455b1d735e2a182bec7088dc723cba76 GIT binary patch literal 1446 zcmW-feNYrc7{*slM?8cyAS<1+j~Pv%MwU6x!^6x;#8L0mLKN$)#jcQYne5gph(u!K9#45Y^;DaxOWOoJvmAT_z;sk}=7sWJHZpAt{%X zNlGOpP?AJQ!X;snP)Sfg8`99iFm4mIM;$H%6M_ms)LK-W3(f?mf)ho7CgXxJ!Kh$F zLE$dtf-*s=pahH<6@&}I1fhapE2tp`Xix$RJuHScq@jgjq711ThjC6hC(0kzqGF6Q z${A61L4hV^oKj8++ye@CIboboPGApt029-Q1O5R4hoFWSph1bN;J{*NLmFB{C8ye` zaVTR%1qpvxi;7Z4337#9P@u^OWdu1QX#@Z+Tu0Dwiztx?Ffoldzy!l^2x^D{8k4{R z2Npvc(nLLxx{Wq!9D)}^kno4Ks3=jNL*?pwZ`JfYp^Dk}D(bE;XqCDzJ2mQyLp_4e zp;Gcet2gm+C}E#8z5`wf;lYz{)pM`cJ3KT}Sy44Q>h0?4b`N>S8L!SV7h0?}rPp0y z>*|(SsTW-Gs;BbG@SR)dSH^jsJ!@-ibvm8+`frSk9Rs5z91H-7B*Y)4Crn#> zsi1nlfAFkC$E9=jLzCWGa(1!pd~Np2bYqLdR`{oN`og2r;(jXn>%`1e-)H$3Y`C_) zE%|uZ&Y(4QdHNmQHJ>yjRfI-w^=`_@Jv(>rbI%dY_|i2ui=)f0u6po7w>iDz$HDRm zq*=FPaLbd5QxP+CyB>f0&4I?!wRN^ndn`Y!e*AjH_SX2c%{(VO^RwZ;ddF8~;h7oz zFV4vPyD?9{t@F*Mf&b$3kG&H5#InYAK0j%DQTLS!dgtXWm?R#M9%}#i_R5$IiMGsnAsdJC_5WsRh@mK+QCHmjkl zXl4j;>8aKbv2CGsU-RJ3;Fz25nCXLn{(ihj$;dQ;G*j`Ak+P*%IpKip*x z)EU3H((r0zWnn{1VtVe0Z?o7MCPq41?--jMR1*-M8eCv-dD!5=Y^`rD1>r0V@mrsA`1 zYC3wqWdF(BmZEm+{D0Eyg)72N+drD$lirl0^Ss?@HH@h`vr5;Sb|NQ5pOSYm<>9e) zwMN~=)}`Cbzg}CRb43LQt$z5WU&s=Yt~pF;_2odL^S6Najm-&@Z|J-?54Ob3aa&AA eXK7L2?-S?r_Sq-JhWFQmtWNE(ojPtTiT)pzGv?j^ literal 0 HcmV?d00001 diff --git a/google_search/index.php b/google_search/index.php new file mode 100644 index 000000000..426835965 --- /dev/null +++ b/google_search/index.php @@ -0,0 +1,92 @@ + + +
    + + + + +
    +
    + + +

    +

    + +
    + +
    +
    *

    + +
    + +
    + +
    + +
    + +
    +
    +
    + +search($search_array); + + if (isset($result['faultstring'])) { + $msg->printErrorS('GOOGLE_QUERY_FAILED'); + } else if ($result) { + echo '

    Search Results

    '; + + if (is_array($result['resultElements'])) { + echo '
      '; + + foreach ($result['resultElements'] as $r) { + echo '
    1. ' . ($r['title'] ? $r['title'] : ''._AT('no_title').'' ) . ''; + echo '
      '; + echo ''.($r['snippet'] ? $r['snippet'] : ''._AT('no_content_avail').'' ) .'
      '.$r['URL'].'
      '; + echo '
    2. '; + } + + if (count($result['resultElements']) == 10) { + $search_array['start'] = 10; + $result2 = $google->search($search_array); + + if (false !== $result2) { + foreach ($result2['resultElements'] as $r) { + echo '
    3. ' . ($r['title'] ? $r['title'] : ''._AT('no_title').'' ) . ''; + echo '
      '; + echo ''.($r['snippet'] ? $r['snippet'] : ''._AT('no_content_avail').'' ) .'
      '.$r['URL'].'
      '; + echo '
    4. '; + } + } + } + echo '
    '; + + if (count($result2['resultElements']) == 10) { + echo '

    '._AT('top_20').'

    '; + } + } else { + echo '

    '._AT('none_found').'

    '; + } + } +} + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/groups.php b/groups.php new file mode 100644 index 000000000..bf5bff88f --- /dev/null +++ b/groups.php @@ -0,0 +1,53 @@ +printErrors('NOT_IN_ANY_GROUPS'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +$group_list = implode(',', $_SESSION['groups']); +$sql = "SELECT group_id, title, modules FROM ".TABLE_PREFIX."groups WHERE group_id IN ($group_list) ORDER BY title"; +$result = mysql_query($sql, $db); + +echo '
      '; + +while ($row = mysql_fetch_assoc($result)) { + echo '
    1. '.$row['title'] . ' '; + + $modules = explode('|', $row['modules']); + asort($modules); + + if ($modules) { + echo '
        '; + foreach ($modules as $module_name) { + $fn = basename($module_name) . '_get_group_url'; + $module =& $moduleFactory->getModule($module_name); + if ($module->isEnabled() && function_exists($fn)) { + echo '
      • '._AT($_pages[$module->getGroupTool()]['title_var']).'
      • '; + } + } + echo '
      '; + } + echo '
    2. '; +} +echo '
    '; + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/headstuff.php b/headstuff.php new file mode 100644 index 000000000..c6210c04e --- /dev/null +++ b/headstuff.php @@ -0,0 +1,124 @@ +', $styleStartPos) + 1; + $styleEndPos = strPos ($headText, '', $linkStartPos); + + // ensure this is a 'stylesheet' link + $stylesheetPos = strpos ($headText, "\"text/css\"", $linkStartPos); + if (($stylesheetPos !== false) && ($stylesheetPos < $linkEndPos)){ + + // get the 'href' attribute value + $hrefPos = strpos ($headText, 'href', $linkStartPos); + if ($hrefPos !== false){ + $hrefPos = strpos ($headText, '=', $hrefPos); + if ($hrefPos !== false){ + $hrefPos += '1'; + + // get first character in attribute value + $index = $hrefPos; + + // find first attribute character + while (($headText[$index] == " ") || ($headText[$index] == '\'') || ($headText[$index] == "\"")){ + $index++; + if ($index > strlen($headText)){ + break; + } + } + $indexStart = $index; + + // find end of attribute character + $indexEnd = $indexStart; + while (($headText[$indexEnd] != " ") && ($headText[$indexEnd] != '\'') && ($headText[$indexEnd] != "\"")){ + $indexEnd++; + if ($index > strlen($headText)){ + break; + } + } + } + } + + // convert the href attribute value to an "import url" statement + $importStatement = '@import url('.$path.substr ($headText, $indexStart, ($indexEnd - $indexStart)).');'; + $styleText = $styleText."\n".$importStatement; + } + + // look for another 'link' element + $linkStartPos = strpos ($headText, ' \ No newline at end of file diff --git a/help/accessibility.php b/help/accessibility.php new file mode 100644 index 000000000..136c81e75 --- /dev/null +++ b/help/accessibility.php @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/help/contact_support.php b/help/contact_support.php new file mode 100644 index 000000000..67e004dbb --- /dev/null +++ b/help/contact_support.php @@ -0,0 +1,130 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +$onload = 'document.form.from.focus();'; +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($_SESSION['member_id']) { + $sql = "SELECT first_name, last_name, email FROM ".TABLE_PREFIX."members WHERE member_id=$_SESSION[member_id]"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_array($result)) { + $student_name = AT_print($row['last_name'], 'members.last_name'); + $student_name .= (AT_print($row['first_name'], 'members.first_name') ? ', '.AT_print($row['first_name'], 'members.first_name') : ''); + + $student_email = AT_print($row['email'], 'members.email'); + } +} + +if (!$_config['contact_email']) { + $msg->printErrors('CONTACT_INFO_NOT_FOUND'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +if (isset($_POST['submit'])) { + $missing_fields = array(); + + $_POST['subject'] = trim($_POST['subject']); + $_POST['body'] = trim($_POST['body']); + + if ($_POST['from'] == '') { + $missing_fields[] = _AT('from_name'); + } + + if ($_POST['from_email'] == '') { + $missing_fields[] = _AT('from_email'); + } else if (!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,6}$", $_POST['from_email'])) { + $msg->addError('EMAIL_INVALID'); + } + + if ($_POST['subject'] == '') { + $missing_fields[] = _AT('subject'); + } + + if ($_POST['body'] == '') { + $missing_fields[] = _AT('body'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + + $mail = new ATutorMailer; + + $mail->From = $_POST['from_email']; + $mail->FromName = $stripslashes($_POST['from']); + $mail->AddAddress($_config['contact_email']); + $mail->Subject = $stripslashes($_POST['subject']); + $mail->Body = $stripslashes($_POST['body']); + + if(!$mail->Send()) { + $msg->printErrors('SENDING_ERROR'); + exit; + } + unset($mail); + + $msg->printFeedbacks('ACTION_COMPLETED_SUCCESSFULLY'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +} + +$msg->printErrors(); +?> +
    +
    +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/help/index.php b/help/index.php new file mode 100644 index 000000000..943225d11 --- /dev/null +++ b/help/index.php @@ -0,0 +1,42 @@ + +
      +

    • +
    • + +
    • +
    • + +
    • +
    + +

    +
      + +
    • +
    • + +
    • +
    • +
    + + \ No newline at end of file diff --git a/images/after.gif b/images/after.gif new file mode 100644 index 0000000000000000000000000000000000000000..c05f3edf0a73d62fae009d7c61b145caac9ff365 GIT binary patch literal 73 zcmZ?wbhEHb6k_0In8?8J=H(3r28RFt{{uadS3wL6)&S}47JL8z literal 0 HcmV?d00001 diff --git a/images/archive.gif b/images/archive.gif new file mode 100644 index 0000000000000000000000000000000000000000..06c4daa56bca6d7147d73601daaaf95e7dff5c70 GIT binary patch literal 140 zcmZ?wbhEHbOaGoGiUz)|37o)Ooo{Z3=IDnz?9-o7DgbCK?g*D)H*Pm zb8w|@GjMaCE2Wt3bjTv$vj+n!?~G+~Gal@d+tCr2*!?W1S7`r&0}2Trw7BdvL!U8Q mSj_i#U}CUtVAS@UeA17hrNoNWg@M6ZrKw>>)Y=vf25SI$y)88W literal 0 HcmV?d00001 diff --git a/images/arrow_ltr.gif b/images/arrow_ltr.gif new file mode 100644 index 0000000000000000000000000000000000000000..90da978cdef95e4467e1ff4bbd0e8435211621d1 GIT binary patch literal 88 zcmZ?wbhEHbRAUfhXkY+=|Ns9h{$yblVPIs?0r5dH3{3hx{VPwu nm4HXrm6WuMs!j86A6jg4`COLwPSxCpF&Rmyj$ar)so{3qF18LR=j$`rW( literal 0 HcmV?d00001 diff --git a/images/at-logo.gif b/images/at-logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..c15d18d5969e94c70f0c228d1c320d24f1e3e6fe GIT binary patch literal 1627 zcmeH`>o=PR0LEXH2CbIXw3S-LR;6Zbrc`aZy41C21WVq^RI3+iwGl)qB8h~ir9xA| zL`a$YT}jjqk%Xj7U7{IvzXVy@gf^!qnZwro6Z^8~!|&^J&hI&ox3AYZ=Wrwd13myB zv$L}knUW<}Zo<wR+DJjfMD#`B<}ZZwm3nbqep)n&*NJ(I|IN!k?IZxgeidRS8F> zeZ!LRxs@fQn!zlSOwEkEnjDr$H$G_RR@UqYHU0%$AADg1yCC2_j>0cZsbS%w#i;FzKZuN;cgm0 z4G)vTY!0q|2UuO8*j|Ap==w8})&-%HB*H{pm_mfjkkv|?!oGCLfjx=zv$|%0TnJv> zM{SQaC^>QoT@^yN9P?X`x89%0iTY^-r!O2Nb{Q#)9d>;nSh!#@&8o4=hnY>^BV%i( zDdKCHi2av66-X?h2RwZh$M*IoIK|8VFxyZEuv`-3<}{&IkHE2@V6Dp5GaEdX($STy zt2ey6$!J?qq`PWZY=2rqKj{(S19v=+ciL$W&Jr| zrkQ$JB=%zGQG3^8Q4r#N8hRfQVu`_=vXcl=(9mb(kbvd86V#}rN}UI`#h>(p?%ABh z+r;@;lrE8jAcBSn*QF=uKw}?0(6kwu5uB)UgGZonrn}NrZh8r+X19aFz)weH=D-66 zAGH^8eAYeO{x}bH62dM=UAGsEn>b;tcJHyRSD6wUi;h#W8j32cS@>2CjgAiF(hh-G z<0X_K84TeU4Z(KH3>vyO0jF=)A9LCrZt0}7ZJM^EU6mrh?9+Ovh0 zJ?p1dpgK*X@}X%r(>-VUi-rTMoQXc)-Fe^}U*G6dCIcHMuw9b{+Ux5I7Kd z#rxdFpxOA6>3(ypOZ35c(xBVo(Kvm7&O#EOcXy7;mAzl_uOn+#vSRjYd>;pY8|Yra ND5b3-c0+(~{stYNfkprT literal 0 HcmV?d00001 diff --git a/images/at-logo.v.3.gif b/images/at-logo.v.3.gif new file mode 100644 index 0000000000000000000000000000000000000000..c15d18d5969e94c70f0c228d1c320d24f1e3e6fe GIT binary patch literal 1627 zcmeH`>o=PR0LEXH2CbIXw3S-LR;6Zbrc`aZy41C21WVq^RI3+iwGl)qB8h~ir9xA| zL`a$YT}jjqk%Xj7U7{IvzXVy@gf^!qnZwro6Z^8~!|&^J&hI&ox3AYZ=Wrwd13myB zv$L}knUW<}Zo<wR+DJjfMD#`B<}ZZwm3nbqep)n&*NJ(I|IN!k?IZxgeidRS8F> zeZ!LRxs@fQn!zlSOwEkEnjDr$H$G_RR@UqYHU0%$AADg1yCC2_j>0cZsbS%w#i;FzKZuN;cgm0 z4G)vTY!0q|2UuO8*j|Ap==w8})&-%HB*H{pm_mfjkkv|?!oGCLfjx=zv$|%0TnJv> zM{SQaC^>QoT@^yN9P?X`x89%0iTY^-r!O2Nb{Q#)9d>;nSh!#@&8o4=hnY>^BV%i( zDdKCHi2av66-X?h2RwZh$M*IoIK|8VFxyZEuv`-3<}{&IkHE2@V6Dp5GaEdX($STy zt2ey6$!J?qq`PWZY=2rqKj{(S19v=+ciL$W&Jr| zrkQ$JB=%zGQG3^8Q4r#N8hRfQVu`_=vXcl=(9mb(kbvd86V#}rN}UI`#h>(p?%ABh z+r;@;lrE8jAcBSn*QF=uKw}?0(6kwu5uB)UgGZonrn}NrZh8r+X19aFz)weH=D-66 zAGH^8eAYeO{x}bH62dM=UAGsEn>b;tcJHyRSD6wUi;h#W8j32cS@>2CjgAiF(hh-G z<0X_K84TeU4Z(KH3>vyO0jF=)A9LCrZt0}7ZJM^EU6mrh?9+Ovh0 zJ?p1dpgK*X@}X%r(>-VUi-rTMoQXc)-Fe^}U*G6dCIcHMuw9b{+Ux5I7Kd z#rxdFpxOA6>3(ypOZ35c(xBVo(Kvm7&O#EOcXy7;mAzl_uOn+#vSRjYd>;pY8|Yra ND5b3-c0+(~{stYNfkprT literal 0 HcmV?d00001 diff --git a/images/before.gif b/images/before.gif new file mode 100644 index 0000000000000000000000000000000000000000..a1ba5597ffc6f84f9620ee89a310966d27b05a78 GIT binary patch literal 71 zcmZ?wbhEHb6k_0In8?8J=H(3r28RFt{{ul41&^6d=)qSOuEKd&-`?A4+rbSOmAbKZ$ef`~J^gKfZl^ zd#CsMqkm^4ODjbxm(h$o+EGTOW{qWQtyraXH7l=nl~tLHCUUe8%ACEvUhSiz1tm zMjJ7vd&S$tSvz*I$5t-uU1wd~0zoa_IB|&sN`~vL)AL6hP%=y&1ONpVfkq2zFzE$^ z%}Aq-Sg-di@dGEjB}eSBl}k3+5;Xq7qPv@3kOYl?u;?af?2;vMK*=z90EJ^L0*w~b zjKT#7n~_GlH+tDo=Lb%CLXyQW9F+UK*nJLX_<3Psz88I7>98(%++Va8$CDPw_uh}= qgFX`|9p;7gY%YiI8ic!vD=%&nkr_s99|7p4!T&a_sQFCg1q~|Nk@K0E$0Z7#SGE8FWDM zAUhdY10JaMrFb$m337I6GC9iVw_6H21|Dg-*eB}9!*o+oqvw*+GGzs}DJ@1DRCF|^ qv`tY_u$bTM<{UK3fjzNH`J;jCA>L!R9_`Xl;cH(K`@Y+W!5RRCnn2zF literal 0 HcmV?d00001 diff --git a/images/check.gif b/images/check.gif new file mode 100644 index 0000000000000000000000000000000000000000..14834e9b74827cc10405a8134fd99f604cc61a50 GIT binary patch literal 57 zcmZ?wbhEHb0r5dH3`_z&{gMk#S2vgh+ocDGZC}X5 GU=09i{SB-D literal 0 HcmV?d00001 diff --git a/images/checkbox_check.gif b/images/checkbox_check.gif new file mode 100644 index 0000000000000000000000000000000000000000..d374e92850aab88127b215bacad10b2631e4332c GIT binary patch literal 100 zcmZ?wbhEHb@~ literal 0 HcmV?d00001 diff --git a/images/checkbox_empty.gif b/images/checkbox_empty.gif new file mode 100644 index 0000000000000000000000000000000000000000..b14f6e36389d6c09ab7aa4f8e97ee65ef645e2d1 GIT binary patch literal 861 zcmXAov1^lI5XNr^5+Oz7&?$p$=@3y6ZZTF63f4MQg3wJUBHZL62z4m<;Sj_@ghJuA zQd-f$C4WH|1M&JT4b`MhVrr&t8m37bHCJYcCzEXQVi#mL$YSkjCi7=U6VLK-YsLla&QVKUHQ)5=|nWVul_8jWVN*=n`g?e_Ha zbf?pqot^D=yS-j-adB~FWo31Bb!}~JeSLi}7;J5A4Tr2P zT)Fo6T;&B; literal 0 HcmV?d00001 diff --git a/images/child_of.gif b/images/child_of.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b48afb6e80abf51d3b2908180dc1d7d69f4e47f GIT binary patch literal 73 zcmZ?wbhEHb6k_0In8?8J=H(3r28RFt{{uo`wzf7Rq^qsnmlj?N@5M`7GQNG)tS&G1 z)I>dDT^r;T*jr@2R#7Wcs5C`a*{eY=L_6_Ots3oPO!PM`EG$SG z)7}eh`DLNZG~E2Of_1~`h5R8%kA?WO&kNJz(nfwp!V9+Z+X-o9_7!%H`~53+<5JcD zH($=lQFN7x8Oidt+*d=~xk>5MhnW&q>bPgHh>@i9JKxukGTPZIW?p%P^AX&;EUHhK zot=Hk&XRGcYSkFi>*8a2T&OQeCAuqP1dR6GPmaiLAv@2bT|UmLd~sw>S!^HkYD2oC zvbVaYE?yK7%`NclpkGyjHJZ7}GhR7uMM(o~xr_5tBf`3wQK5uaDq^O+?DYca7dq~x z@`_H$S}8**l!5k3ea%5HGV#bxB_LQ+chWtRFq%l>2 z^BV?hWDm2HVEgl~vS%G7ot2>h2eMl5Q3XLnUS(YW1JYh}RzZ5&^PWnT_}-|vo|Eqd zHYSXKwX4e-kRI3HLK=~`WL{3Wn|Fy-}DlUrUXnm&x^ev{`qq>LbEVTAzm52#iVPxHB4zws4DEG#-MmF4~5Ks-Nhn zuySSFNgnF38LxtbFmi*UCgj;CEd2)GC!YaUs3X<_*xAak?wR4HGS(^5!4cG; zq74l%rp_Nr0Qq~`xP!2pehGY$t1-gid9!FNF;c(hcgN3KIrdhW`lYOm9PrV+ZoiXb z6M1heb`tK8IQ3y-#SZJ}Va_CAA_Q>CyM&bIlPh_Fx_Jd_;E9ti5#&R(#~)~o$yd8= zo$ZW%y8-t(Xh3p=U!eQl(Ta9jdP!K^z2{uuwsab>1OBz}wjp-=KB7Z)`r=ENgESI- zo#2YlF@skS2^(_F_trUBpb{yUHf@>1Pzk938NbP~*abexA3-ptezzZ`;h`iqbF2G617rfn z3U0fu7hiTWsR;sYo9(BkJp9cX(jc9EO0_uE5Gp*ss|?@iZOh^glOE{}&-v?943fYb zAwQ9NbrX>gioB6Wz1DuNC7(l(%WvgxPIY*2PLe`U4n zV(@>3d**KjP$B)hSdFev3Mhsg4~gUM1brA*w!pWL_U4VoC00e#yyZ`_I literal 0 HcmV?d00001 diff --git a/images/courses/3dgraph.jpg b/images/courses/3dgraph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8aa608cdd638916e9907d5551d48d27c58d37d81 GIT binary patch literal 1910 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 literal 0 HcmV?d00001 diff --git a/images/courses/bar_graph.jpg b/images/courses/bar_graph.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a2cca3e7fbd9c4b9d0dda734701d792206e09e2 GIT binary patch literal 1961 zcmb7^X*Ao38pi+s#1b??CYDk}5<*B+Y_*hHM}&}2l~6sY!H}V&Xf0hB6jRk!6H94p zNmQtvAleyi)7Gs$mTPahZIzCycC@;vac|E(bMD9czMtOnd(ZPcAKvqBPi{X2RJ=SW z9sme}fagvF+cSVGpdcp?lb2I~!C;Dt3Q7nKWdt0K*n?72)xhXtvHH4bv;o12Xn-dh zq0uBKGqR1XgM$N(=;GmQ=V4{++ZE^>1k< z+~XEry2s_Qv4Gq*!1v^>-1_SF!R>^kH?irHCY0F{j32OH1LR*8%;yjFV8ytOs@69! z%LG8alA2=g1mu4M=#gPSH<$SGk1r7WZy>{iQd{qlQpZO5x!Bk&QO8B>xhi?;~7)fxTS^Zg=dHn#o7D0aUw}oomXL< znE1o$wU1BA)NhW3d^nloq9x2Q!xLQ0!~A1DHL{a-)v(R@mf6z8l2_)z68lC(a(I_5 z2EcVnV-HyWcDNFBqWh4828a5s!>58I!4$d%Wshw!Xnc>jfGX$mjM6TVC<|(g_6&2r z1*&PdXH2Y%IAW3Wx{Xrn*vq?GL=x$dUj-dgk@#~$XI2M6F>8$5H{d8e94^^6oh5BE zQaSDBM$kD}+kcT7-Y&|Eb}!=08O~zWT=4vtnhV0RPnf_AZ(6@!aco&Ni&Jfa)p9D3uu^9?7LZ-fI_-NJ+4F;`;`* zv1PAN>MPd@O@e%ywJ#P$8vV&iB!`v>v)V#}Ta_m4{#8d{T7zF| z#CeRs6m#2dNR~U<|ex6xTHrX;lt54=<##&7>C=Ptmz}($pkOn(}E^s zePz6gbv^;&`{VD8oF}`BWlM~aj36$5)1y8+x3g)(z| z{1qO|`d;-|yvRlJ@YpIyv9qA-n6X@QC;P(8xmH3!gI!9crKGPVar)0uMTO*FjpAg^ zPdVc*7U#R&Z%t$>+~no{vn`osn$D@2yuJx%I$P-&GI9Vv3hvFMxuOrvm&PcVw|;&u ze~OkQ=#zPN9UZ@Ae{|g9N~FT6vml)t`J!!i;p0(~R;f~)ZP;W#?n~~{Vb= z4=Fe8GV@@XwkVHMu5WbqKtX0E-@+Pz^!((O68ZYhp05dwHFy2Xh)SI6o9FM~YnubA zjZG`YO6*#X_dNu}1r^6lY0L-Kmo{{4-?z*ys?Ap%`pVa1ur0G|mWSF4*Hn#&{HxSt z{!DM}0Uv=rK#Pe?%WKxP?`AWaR$->B#~SLMw4iPob;{CuMFpXrBB2VxusP3Twt>&e zH)7!ah3BNmbPixDcNDj%Y%-uSR0vv9#ZqOkW zoJ$Qg^h`5cMk^^#{r;wSxPJtvVc~F)w8(wdP#kYv{^JtS)J7oF&M`_aYMPdI25=vt7!uc*oRX+)sa z1VpkL&N=>zb0}qSt6Tl8XNe?>qgpd9-ur@vl@V@e?4MgyFeByuT%Ki`ao39=`uZdU z@$Hp-zn2+WJM_#q0XHj-5R|dQok>c_YwJjs5NB{zYYm-@ZylHYJVD)jGTpcVz*)h| z$LgtZ&M^j++_oxC$eQSk<^J})^9{Wzt5p!1Ftz1*uRChXI@`%H@(8j1)h{T1H?Jes zPtS;~S&g0}wZZEb?Zp%Cx_WG6GfZ2g;hn<`A$H)uKiC~yfrA3$m-Jqe3T3$dZ^>O?$s_@l$MC-=DsmF@SU%lT2p z6uF`pov*j9QdbxeWpUv!#R40>$}I)tb+&;IYBdqXSvbL0oUQ?-fGN zrvr3cW<}~iLp**!C9Nx`-LZ11`?l+uje@T>@9VbQSUiUJKlVZAu2WX`ltZ_t{sN}D BLG%Cs literal 0 HcmV?d00001 diff --git a/images/courses/books.jpg b/images/courses/books.jpg new file mode 100644 index 0000000000000000000000000000000000000000..594e3e6e362827431d0811090727a5e3720c1cfe GIT binary patch literal 1958 zcmb78i#yYc8~<*@!rIKD6v{2Rop8)$Vl+pV%QDBEVR9MPIWm_}ilZ{Qrnw}ha?K^2 z5IPx-CHFJKh}@D(N>(TxJL^2Z^9TGs@B2LO^M2m<^Lajk3BfENb=Deh4S+x(z(!br zU<$wiNZ5YFen}((jzCEx56EfC%N;x@XP~BjRMX7R(&Ch%DaOi<>||x*g~ymW(_Fj) zf~gm%r-?CFqeBwNp;XFu6Oc3tB_}JVFE6i8u{O1){NE6C0LXm+0U$s?$^aM%f*?VH zZr}(2K!jn1asPves2BtcfS|&ou@nFX1EL@y0~P)E0|bVM0HR1~B|R~erQ@{&%KCoc zSt_UNWqu@IWR1+pS`nQhN`%TopzpT-S$>~FB_JZaC?i1t7$gb^`+pGbNQltU5~Y0F z(eIjI5`aPe<&XdtsCY67YpT@bdt ztVbH$HSDp_d4!jG)}(HY0YPjQF@Le#=lDvpi;qL=FJTm;;0Ov~E>A0C?uY>Jf~egc z!zNtmN^jMo9u0$@+7uDfp%WZ7mJ!3Bj0eSBMFNQ)*5fy4?Qw|O(>o-UCA!U8ug~gof0CJq{}d=8b7iY5RCYnu{bUO^48mMe$T};zL+UL zQfv{eS+o`XW0>(d;>6qEPL1?BfAh}?wl?o7a4cfg$y5~heF44wHm{F)TKX8aIG)@d zl*us9gBsn}Pg!ku`Y~VJ^d|5q16g+BWP^^@0@j{gUx=7t$rtl2UWcdYZW1vAeR2c& z8dJp+OzB{5)9yRwPO%C-u*Rj|;~24(!d6+o7V$FwGQEG>P&=#S#N1X3rwFd5T@^w5I#&c;OwgUBQ)N~!6ELumpd`(I*eNycbp>RnA4$s!0 zww)>Ba6Zsq@-`ieK4`|1esFk>UcRiC5v=1{pJS`@@}s*%D~_yEHfDx~W(^`>u90My z-U`Qn_$B_3(hAI%zxieMX`@)*T83|5b|EJ1d{(3{Vu|x@L7uIPdUKD1B**X$olSj$ zytcvb;XTVWvDHfCo31-95f1x#l6?p^kDIQe3x3{53ByN?9A1Sl?b0CP7x3nB`4%_Z z@Jh;Qmv}?%{jvU|o3_yh!?JaPV_s#Y6GnIDrq8D3bjy~JH>x(BI|6q76hh##h%~lz zs{yh*E1k|n*hQxt+9h$9Y^eK!Ua@c%4hwva3^Ng=0M}OOHOZ3KLr^r68aM!XYTCA9 z2edqM1I2UBUv*+$Iw5F^efNU%fC*u-_4KREuY3tNgOZY28hKf_l4fi7Wa3%8lAvhu-kXT}uUT!@rKDyvJu2o3*rQI&Q^$gBAM5eKEUPg*OZ;sCscA zCxzhjhK_GMq3ram*@#|#qgKjeaPC9YxXqXgCNA|^@7JO{H3}(3=1E%sG)Mq&KCfB6 zs>Yih<@VIgM}N7dZTb!HCxT`#x#nZ#oUMws|Vd0ueqjM8)Z2sRFLw!Z5py_U+}zEvaBni4MQeRqH3Eh(E-}8ToGv7~I%7 zH-FuHptD%~r#(0JR?q9lIbhjnMK2ijb>;I0vgbArohbM4mw6>?h(>I*yJ8}g6v?os zna7d~dYl3kt$7EBymd+5Id{U*On6~cXkBH;OjjZ_^L(K3Zw&n9foIKEqRg>&L=bbB N#(otC7A+R={s9flem(#I literal 0 HcmV?d00001 diff --git a/images/courses/botany.jpg b/images/courses/botany.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5118b9fcd6a42921a5e614a2c5574cc71781a711 GIT binary patch literal 2048 zcmb7FdpOgJAO7xQ!xly^({h_^EyS!MMI&tDEF-z6CAn=ixt5YrDWfJ$(>S`gBn$nD zRYxe9ge8?32SrGv?4aCs^gF-jIe-7&&!6w-ec$JOp3n1q6jH??pyBRHbp=2m5I|WO zK+y|01IjQM9HyiUhr?A=lvRLxZ*Y7>tprCC|1N}9$nYc2BrH27*0FE*Em zbz)R&(;GWiBxn!-`Bna3{8ys1LYbgejDMv8kpHnDFaSYmT0@Ps$X@Il-xM+cxe^0L zK~R7rFf~K)5t4F61(eT6P3aXL)lU&HRm$Qa^jyW` z89sD*4EI68qo9{ge!hP&@dD3o+ZOEkX7;3eWpUJQ3F*F7$_9$u5+)zE9mS%{ex|g5 z$P&@J!8x_h`8mP8mvsEne>Re@PPGimWf^pm8go-wKLTr-t_}0G3=VD+ZV^E>O@?>-iozevH^N8NZG-r3{7ZWQ6QSS)ZfbV!|`v+lgl;@_xB7Pc+?l+n?`#bbh za-(ET9(StOY*p-LPI}_y{;GL{LQ~#kXYfbI&b{KyY$-&Ntz5Y^T<%d~-1jsf9 zx}>7I9`5{keEK?QxFYM!7~qgAeAga-qO3QnQ(FFlt(qRY1(`kmq6(&7G$(wrK;uUT zyURvow%lB*2}T!fI(S*70Y2lEY9`@kjHNQ1)jIg$dvBqyYdq&#*YRXa_V33!(waRrNKXabj>B|2A=9MGNJ-n$sr3zeF&oaGgM4=} zEQ$LfC$t`X@K$%+V$BiQ(Z9|#cQv~eEvPb!zurqW>iSS`3bLz@GJz}=0FEDEO=g0I2o|*;o-q)7MMI$VEkwM>9 zN8`^(X~1o!l>=fmfyTVMcz$82^U)6+zLhi_(-}{CXRfp7NXH+Jd5*`Z zKT6-~)NJ0&8?ZwBPyhj?>wZ%~Lk8x)gv3=`S$k~y4UX_1bB=x1(~yw*pC0;^o;`hf zJHLy~9BK}ng+P%*%SAeKb~xN7?bO0ME=@-~Y;JkR%zNHWkYmetWd7A+sOL38kX0j! zgRa!4w@4{=vm@z$EniTotKwQ!@eb%0$=CwqklwcBgr!fXBX|)ZxQ=dmDIB9e2IRi9 zNxNA~39jp_B_@TrohmN)ZQ@LWr0(GRho7pu88u}7Ex&?X1rWztu$^hgbWMbI2~%uu zDcd}H5_>{)FIlJ@zcF)b64AA0S4>H=O0x$mc=zby>Eq##z6kG@89U5+J3n&tF7+vI zb~XzA&^T-*zq>bxlUw>-bzJW;ecoC(GjWi_8^qfOg|4?#046Xv4)^{#-gAoPKY$Kl zOqyP7cw$(8_@Ee4n=&kSf9~p3s>Xlipb@e!s=%czT0iSqQzpwI2cx|=;UL5Hq;x?6 zBx?8ksrl;={4~gG8>eqCgmAJY^j%8?GWcOLi@`{c7>2h_L&A`#Q*P|S$QM3@v%6Q` zfjS|eJEQGVG>oaWrs87#Yt$Va?uY{Tgzx)vW*w)k-86>W;tM@zxc_YFR(aIazynsZ zO*Wf)!mPnMW7*6NA(axx1Nm{yg?=X4DD{hDL&w9Ald>HcLvL9+j<(8SetVSvqJK4p zRbGTg4*1U)?#52&aaZ8)4T->mi$3yaB{^w-8d5pxG()6yj4WqW7w#QBuNnjNaS toVI3?gR?{`;EqMdJ|LA82+92C_iQE8-Z`pQMzee5!ukDgy&V-je*?GYe@p-X literal 0 HcmV?d00001 diff --git a/images/courses/brain2.jpg b/images/courses/brain2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6effd6258522b94ccdd60976d986e4017f3e5350 GIT binary patch literal 1544 zcmb7=dpHw%7{`CxTq?9?BH3J%a5(PAjB*{Kxn<>6Sh-~hqj}s~E}heuxul339Tc%J zv2Lh@kxpu<=91g;h+!Nhm$S3ZKj-Ps^L?N9pZEK|pZ9rR(RhT0|$VRm4nO4AmBUUNO^>UvK~rVNlDpETSraL#=_3l z+5&6k=pO3h=o08^h4m#90#8Sf&XVlCDHqO1rH7s&MSh1s_LZNQphuT>uJ!!JsfHNeS4$4G<^{ zNFd}jjFEPlULleuvDExZ1$*zNC9Nle6Q+|w@sN`EB|q@KGl1AYA;je$cR`?HmYs2k zhzDe0ViN&FfJ5NR#pPkkxf_%cNzkL+ZjuV&Doj~4W}J<_m8M^>W4}#Od>=eSDNNIEdq7Z@U>HZg3eiX ze@)WC>+yuJtBUo=1gaI64d(6r zL+}PPspgaZb^~E?nI$Ych09%{R6fb4`*|p^lD)%$^H%VUua~sUHHua489nll9ax8( z8%mmd%wC_g-mbwt71I}AxVhU;YtElTK31*H3DSubu2%2AzO+oPCJqrK$zK=ok3OTd zF6%^a-f4LC^iSD4JrHW{e|e&=rL+QlGoz{;`qUziEnoWn-EFIR|H#gI>#yR4LHX?WSiZRe)Wye)s`s4 zxN7?bn`ZdU)2wqy{7lx2aoZRJv(GgAPGtgoKxLOlU;d-eI%c?4c~kbAmpd&N-AA8k zH`=xqF9cv?+IY=|il4tkjCn&H*eA(Rg8QFX{JJ5$Pt*R>tvTo&$fpfe^SC4tNO0qX zH(gmMbd9*6j$kAWzrGu-Q}DN$9O}9;sTJK36)HUHw`WO;F&Mn;Ox*C^ij48k>E%rd zN*5d|D^jz}cXL~(s=2S+WDjE2L;&k0PdCJ7tbX43kI1deK(x;-rF{>+Up6Im% zerj~c4mSu36*IHp)7~YAqGxXODz|QqzC4(aLBvAq=1(!om{Rd4ZhdIY{(v4y_jV{S z?Wqn-t4UXSXsjrsQG{ssR2%WtEak~%xW~m#5-c}-R=qppaH}l&LRh?NBl-47RPUc_ zyK~Q-RkW?oL@s0p0&LmPNUoNgm-@L|rwww}xj6Rc@^b*5n&QcxukjB_J~&2+QJst? zm)le6)^+b1<-?}5GcTvKofHP}74g5vG7_sKtm=76(zhW#D@>MCfAquTwg{u$amdE* zBZZ_QwX^v{JbzNO_Ft9_Y^r3Pl?J!Ly*ho{&$NdYFTbC#L@DHw5 BqdWir literal 0 HcmV?d00001 diff --git a/images/courses/business.jpg b/images/courses/business.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94c35527b7dab93863a96d863297b920ba090c4c GIT binary patch literal 1428 zcmex=?)7ux-bac0Y3}FL zZ;SMaY$F-`KfoZ!!Qju}&&;UAz$D1XEXer(2!k{OBLfpN(6w;D#=y$N%+3Omv=m@q zWM*byW#?vLhNxgd??}^^bx34 z1ldT4*&tCtB#WS;w-|VUhBFB=3o_U<#Q3rKb1j&@WL1%4cScW|jm7FKqJ5LRs$AN1 zK8mh-()&((q5aI&)usDvw;4tB^)Mcdd1b5CG+ip>{oEO6)34s${d47}OY8Hccfa-2 z3Xr~;8NR*u?l+iFsPL9$k7h4!oz5hgo2s}ru!-^cvXAq9I?nE!d$N$xd9_l*ztdiO z_vF3b>Km(-f9_h(JKNaX{~5YG_$opc*o%9HTxpbgFLI>hL;Q+*JCgbp++J1c7Iv}50|~UzV0T|s=e|%mz0#< zJsmwg$ws8BDSXyL%h@HaCu<&RK42G>YmA%4y!5)M&yE=Kc+4>Cr8J9@+Cg4b-jOBpos1dtd7}=jy%Rk}odzE^NDTpp=6_$lvT$YJ_6j?84&$4O4eH zMzxD3Bm^Y#X$LIYF5BRoAt7mLQuk*4$1j_NSKL`@w4lyw$(5wPr!r)__Jm01-r2gd zO!=V4inqI`ZPz|%<{lBHHl)gL;>hKto}9nd}7 za_UaznI<8lsfPs%9rtUSa$V}x3&NJ^V(VlH9ni@5; zTee;7vCg(zckXRfRS>Oyoy)RV{9Ulao6tu~zMwlk++4$R$DtyvYfDtmq%7~3xvC?) za@plW+eLx#^jFH=LCde@l$%ec?k+14F8^!&J{@l~wflZK#kdP_*dHxbzvogWQ+c?> zY|`R)qGuOvdHU+hgf&y`o^AToE_~OqXLa(%+>2@Y3LaVqjx$))e7~&AJ8|14)jjW1 zv;42Wjy9Rc6~AG}6cyeEZU>nI^^vQ5*`}`4a|tT9n6Tyd@qga~OjZUhMRI%EC$n3j zoLlmPBE#GdhDg2?);lm??yIb7w7%h!zLGD0?Lw>hqKy|X{qdUHsr~edYgbjZJ-sf8 zOfqnkWb50z_|pTsm13UO3Ts~_)^#q}yx-_gw@q8J!rH414D6DU_uWjKllfl#F1jK) zarKIp^<{tF%l#8g%Dd%o@=6g)sYan<^7|-JyJy=EzuN2+ytwHc*S^XHVUL6!XE_}U zTHq)fdiL?6*i}DV%BHS(dzKSOPcD_-p^m|{`Wt_-5T-PHv$8;xv_k-dR$-2 z`gQM1{iA%|eabuh7l_Wi`f{;d^uD^e^56e6l(OFTkhAJN&^J|%Wlil10q<#NG+x&^ z9TJ$hXI|aHkSLqW+qrwXue3~AT9?de|M~LWKUcC28a?E*`2Tp%L<|0V!C2y#aN literal 0 HcmV?d00001 diff --git a/images/courses/business_service.jpg b/images/courses/business_service.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d31d35bf39775661ae7ca03ea13f1cfb83d780d1 GIT binary patch literal 1477 zcmb7=c{mh!7{`AzgAnGBaWe*sX5Eb#Sv#{!jN6RKeN|#zkA}!qrzJaH$$PXG-^h$F<%;wW(`Nwf^cKpCT;fFWt?sTtUsIXc*w zS(9l#u>myq2oJJ#(DmSmt4WzznNs!PkML?FFa`S2ZFQs4BmPEBuf(&?Dn?80JFo39xuB7@m`YQ_ zA87bB&peklA6L~l(HFHxOU9v;3&ghM_SFZil3cC^DUx0-4#C?xuXrXB`wdT=Pt;D; zXk5gPVC)|S! zp}VuWz}4{YViUB8e*ioCg~N$)O$dTv@*2TO>5PW}F|pEL$+= zq>_kdv)Q^i>RK6lCTk(}x#d(zvp9v_M`!ve^)%d)e!$^_<23w=nx55&7k3skx~}hG z>5J?oYK2@yK`G4BX=A#-0PP%L8`S5N{i3FF*g{FHpY9~&R5^XJXK2XcJObK@h8azkn?qdf7t7E#|rziMCYVY zdy@C2TMoabQBEIf;5t;v&=FLzl3zhPBCq@hDiyO?Te(1*!f*Vz3i9wX+=2_Ea#_=*FIrVNPfh2kiLNYunsRz znEz*&hD)xp7Ryg*SG&fXf{))ec)xW@<44WP2zm3ZyS0xzJ`fi!_;<~)S}sRAR*Z5K zD-rV+iF55o`=Tn=gy+-;qjm<~E~xb0=&3vfPm|Do!SR&Qo)~MOkA^lVc>FoRUSPa`got|UK6-J+qB#(q!nE}sWeDAKlL`m-(Pixb<+Vei@lrfoi%XN zMVMMhXIwCh>D-R`SfQNVI}lx3R1-?ge^0-`j1t{mrZs+N{JA(xQzzL+*2%kOh#}{5 z2X)JyV5y-dyFqdtPV=|Ng^i&MRcc_u9X8YO29~a(Bw73cq5_OMWb*mJ5Z2 ph7P@9t3B(?)EfvgK)eYcod$Us4BN}GEfO*&b#-;sVpq8D{slQIg|+|y literal 0 HcmV?d00001 diff --git a/images/courses/caduceus.jpg b/images/courses/caduceus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f545746641c242e5685e4b69f8f0c155cf4b956 GIT binary patch literal 1505 zcmb73GnkM9b-~< z@$N&+TEWWJi^^8^gK>ZVM91lBfc+I*k95F%nW?Lvq6*;n)1eH$`p#4@_u1qq=mtGLl_6;{| zR;^&c5=~4NmIX}QB?{)5I9eIjwl;8*2On3k;g38x(%A4(|K)^9M;!)3Q^a+IM9i&N z9V+N5ZOVWoL#!ZE4^;v?svrGQjA8heN>f}W#L62$`&z-v}M_eF=U1W3*c9TVf}^f&$%5pi+xb6ytWGU~q9 ziwE1igUL750lc0ropEm`qEVyJ0kB=xZ^>#>5s=5a`rr!OGxfnk6-kv>43BhkBgsO3 z#=P1Pi?Q=yn>hraFWy)=XI`PWX=RFb(cK?C@GQT-nlSp!l`5(lAvOIm^B24^#j2Cq zZT?m;2Qe)`Mz={to?q;Bw8wI2p{9ME?Rf58`Ah?ihL7ll);QT>XZMDw+5H?I2j?4F zUT`7iWrJ6mug=`zimUiH3gQvbRQa&61G0{T!>#9oUo_0FUR^-)cD66;A{Oavz z8v5**%_*0kil*vk>*_S!(rNdU+aIv?+;E0fJky2DggXX3o3a4`*pfbFM6g3RW`3n8 zY&v-EO6$y{A2Ba14F<=5m0#o5x++EiE?WU9^WuIl5ww)%(cyPpdH0+ z=!^5U)a-VB<{2%uUfHbRP|#sYQVeC(xr&3*r|k72di0sLIh>#Y4$ecCl#A@W6r+2e z89KMZ3h1gTcVhw5^qMazgo_zNg|5+yj7atMFy&HalH!TA*KbFI z@G07SrjcAyi019G(l{!E-~QEm#MS8JBRWqjvcsP3Cp#<81s%#&tw*ib8pWbzL9dl& zx@h@Ly)!BG6)C4I8Rwk3by5p|!CPjDTve^n#*miG;5CFz;ljj-xHK@Tfk{mwy%rXC zPskZ<=zQY?1yfaL8ogr-6MtCs(chs9Gqdho9-aPJW1SqP!97NQ;=3+5MRhR4I_wpB Ui_e%o3@>pe@dVB!wvA-$9|lXO1ONa4 literal 0 HcmV?d00001 diff --git a/images/courses/car_wireframe.jpg b/images/courses/car_wireframe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c92954f8564004e8459283c251ece325d6132275 GIT binary patch literal 1235 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<Uuc19LfW+o1xtdRf% zBQrBIBO5aZGen+|iJ66gRgg_c(NWkiFtKnVyNHsJQ&Qu?jR!9(2R#Jp5kWQ!q6s7_ zh-3p)^cDjTGthQHWR-ODx>vX2O7WGo-^C;S>WT^uoUQgvduLe1pQ4E@?Pa8FYMk`^*I|H~bD- zyzMtPcjl2+Rp%YeaZ{OpLXR+lCvCuEg4-fp!s&rVR>8Pm{$iO(s z-|MVXoyyt5ZkIGc<;|(j56Lq;SdlQn*1|-psy$Bk>N?q82lXkd5+zT5aQNr{^l{8; zy|p`U3Ex=r=eEk!oJ#jP&y$Mr_p-Zgd)_c>+rhGo|C#JvtUDJuywQG&d z*u!?Ld;VsR#k>Cud2gy7?K0Os6Q*-X)mU@7h=3E947-*M|CO#4qB|PcFL54YJZblJ z-7l%c)~O633!5G7c4oc!R-J5iJJETa$qlFZ?;UKtYW#}Nm#+<*ZasODs_ygHpgR%P z(-u#vULECnVCBa1Dm=f#_HNUeefE(}#GAEGHIp?R&PzVI5L;#LXP%s<{UiL$sjg6E zEsJwO4#%fGvV9dFao};^tFuh2=9cQ*{CYYl)y-#y{)V|{t>>L}=kjDf@K{A|=IW>& zRnz_4t{6PMTM`^KRF?%q??N_wck#yfSZ}aTI!YH)$yfNM)lg2CU>8nfV%vR5qeV7s*)UYCLSz2S}=uQsH*Py(s-$4 zuiIbt$Q{!v-?za!l1o15{0E!WWoJ{H6SprCVRMp}S?NAi=f{e#rWY0jO#z|HJ8mtE zoxyV^!GiHr2&dPCnxKUz?50ZX%Sg{R43)VTy5TXON7wCj%Vo`bmn}0{(2{w-?ZO*# ji|?#4OFe7nOqeufDa!=6!k(`mSMJqxSPDXp|8D{SVAu8F literal 0 HcmV?d00001 diff --git a/images/courses/cell-anatomy.jpg b/images/courses/cell-anatomy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e009909ea6b217402b9eb3d2dd911ef87e697595 GIT binary patch literal 1667 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 literal 0 HcmV?d00001 diff --git a/images/courses/feather-pen.jpg b/images/courses/feather-pen.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b333a6d6a5530f5604bd0729507209de1914c47c GIT binary patch literal 1470 zcmb7Bc{tR082`?Uk(Y@{ciNDpgbU|vvULQ?wubVvV^>f+?e*pzhoR}q+$v^0c;jE@{Krjv*y`u_%} z1)z9%%9sZP$E1?+>nh%y)jJN_H!N?sS7UhvcFpfORDPbG#rhUX3fv*UKfPi zj`D$Sw*jH+ck$lrV4CDH4*iEi(XTS=&PpMKdSA!pncWPHXQ9{P?m2a0JuTk#n9tA3Vp1Sq&|uXdU3vQK*+GN zLXp|XY^;`Pp!bF(Tj=46gp!#KG&Qe69U6NwB(p4OydYPdvb0SiS&%jqt%#-5hX*yL zdYD~&uYFRlzRWTFRPZL7*CTMfcf-^rneroyfMQ_hYf%M8@w75q>qyWdF8Pox9G)vM zG&$K>4dPn*pPZ6!i=8`pdC05BlqaE6R-HO|9xF9TmY(R>d$Qsb)m-^yZROUc;h53J zq-w=S0p$M3?!f8%KFKtV#4L=y48T z6h?7b3=)@mz($(|cq^h_^O(mVx9+#BblD7MMjSSikJrTs*zrPS&D_3rs`Ob(*QiED zB#%=na0?8wWeaN+tjb-jb(A&S$wTFa2<~ds-zM_WlFsU^r8`_|eT-}@S89+^&F}Bs z)Q2sZdnw^l`0pfm5Vb~Azd%W>P%GYb^v8E54!IOFS+44=& z1Qn;UqC>f!18uuCqx}zG#!n5tjSp4ef8JWluWDo3)M~6@GGP9+8l85u2Hbh6_p*9 zXO0Hc4TDVwUx*G4>`@E2bk3RsYB+#pgK;|N)@Fh*-%nkg+(hgwIJa_lNw_^yVFz_$ d7ydMr8>h1ZmVB=?JGbY(H_1y?w#nm+{{upyjJ*H= literal 0 HcmV?d00001 diff --git a/images/courses/fire_helmut.jpg b/images/courses/fire_helmut.jpg new file mode 100644 index 0000000000000000000000000000000000000000..131e2e69a7e1bd6ea9c3dfb5b4c0afa9c77bffbc GIT binary patch literal 1274 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 S$%f(2=dX)ii(jq(e-i*DJ1%$t literal 0 HcmV?d00001 diff --git a/images/courses/helix.jpg b/images/courses/helix.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5d661a80e0adc990e765d738eab6e538bb2e9e6 GIT binary patch literal 1297 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<EUauy>_ACF0R~29 zW+oO^CRSF60!Aig76w*9Aw@P}!$2j+#KJ}qCoyH?i3>%Il9D$9wMYPc4)Qz_U}j`u z0m{e-GB7g&5t1Au6VN0>X2<`x7=Q#HOZt(^7vwQ%=^*X!Nw-(_@N)%}sS_RzN{hnC!4VsKM2&uqz(<{p{yRsY0i zrAE$n?o$26nR({xiT8edDqCzN^EMasJex9kiG@*}wshVe+ssELGpz#UDy|h?Ncs9> z-LvTF%k?(So9G>*>d?C}wrl2%Kvxk)$7R=E=c)&Hd$E_w1TDOFN7Cui!aFh-B=anL zHs|*1ZfVtQFK}ve6W#Wo;rROygM>~8#T9>^IWpcjZBf|sbIH7wYma`Pv|8rK{$E)c zOCIlh`RCC_vCh@g^P>x8dG9ep2) zJ9}g9_em7$PDx(p`KtJ%*A?|mInpNFMO%+0s8$?Xw8;Nm)}h(g`1s0}Yw3HlvM-es znR#o2T;;J<`uA>iYo65+VKosknj2Rs8ZLJ1(vqTx=nKyp=LN}W^7Xw4cYYgn&a8Vz z;j@LDK{t!Nn)W@Jw`lXkC5mk`uWaW@eX3cL7oomDZtClwYn#vKYs~(u6tc(VkF#NW zkmD0?kBIXNKd%s|C@U_%-M70dSaFg}a7RXB)t`@Huco|~*|EJu$))t)l=(j&$!gxN zNi{VqzBT8mhUym0>ZvThzOg)hv{}l$WG;7Ggs|PZly()nASS;Pp0XXXby9 z+*m9sWOR5Udk4Gp%e~%?&slceyniMnbNfrr7jG50U)UbCFcV>X-up5uJ>&E3{i3nH zM-Q@oTkM{hx|Mb7nkOB8!w>Jw zzM1;UNlm(a-=itTyy=f^!a;2|kwp&%+4N94P=l9uTM$yxgCbc<*PL@6J%+Jia zl56q9@>GfQil?hTB|T_oa`^4nS-6Ynym-ff|1&?z(PWf$FouW~;E@_FVwZu~I zgm)2 zEqrzhd9goleCV~>Kch=2`gXp9qxDO{)^ Q8y0nGFm-7xu>XG(0N|VmO8@`> literal 0 HcmV?d00001 diff --git a/images/courses/helmet.jpg b/images/courses/helmet.jpg new file mode 100644 index 0000000000000000000000000000000000000000..054241fbe95479a8373b2d81b8b1628f6c1ebead GIT binary patch literal 1722 zcmb7^X*|@68pr?t`Olb{%wWW6Fk>v^TIyKFoMYyq$-ZTq(~z|o5oH-gGR|payT>WA zD^e2%SC*kD%Msa9cFC5=u_Z*wB{j#nFV5$4U*7NY^7lNy-|y8U8WYU`Qnr>hmH-HX z!0G(~M3aCSfD#i!iXl))Bod8A9l*$7G2-GFIq8FvGDLZjB2k_|P$FxqE2$h&B@i?W zG>_=&QK?jtI^CE?G1AtjQvNal(P%VA9D~PV@f2l(GUfk9^aQ}607t+P0#yJQ4uo)^ zs2xxM02uUF+rL4G!5}yi1olO`6aWJu7#u=~LFoT3fG`Mv;}FWy2lY(ERGfV{v1vl2 z429V`Xd2F!Rn<51O>dk1uzxBC0{?5f9|H#g#J;4217Q2?%YSErFdU?;XCi%2hT<%m z05A}^-w?t948XEs_m4Ix2Y6%<4(%RE>XoW|NI9yqp8 zY2BWrc4;*^-g&1z#>j2S_`$1L5%74@^WS$*HA!y#qce&zRPe@S$0d4hu;#@pHFw9@ zABg7V$1Q4zAD-%@&aZBC{P6TM+gBN8b+fcfg4uRY4(?r67jjFt&fN$#K z%ge(h=2=X1e~_GH{9f|Q593~+%RY904t8Sog&Ev8*v%5;^4HW@>Jbjbzr%74$z41b zteifW4I~dH1xn0p(cc@U29~T#Mp>JLWC)+BsyRAuRGQuU%3o@kKx^|6Bj%(|8A>XT zP8w|tNt=5u@p-^Fe{TfZOiPVY$-}=Q4@Hs^+o%A%wZh8bS}B<@u%aUq=*nd07smMI zgYG&_j)HL?^ZaFpR@JG6n|C7vT81+DfMO=@{_jha$1bGox*++!vIxITkBI~&Kg*IM zm);N!xupsB4_^-a7LccWxe&v+%WsUPikI3D*D^Gw80aoxLU^+?JUX-Z1n&J#8ovh{W*@w6%hs*KZ4aIVb6Hw=vI?gm=COFpuWz z?K|}!kHrm)7FWj(UQE}^gW9IQ&%K7qmB!B(n%(|6jP#yK` zME{S2_yF4S(9KWfiMbd2dGApo|Ayj!AW>284=^k_TmL8AaV$igDYhBJAqRMY505%Aijtf9tA zA|(l<-$Tn?eM%uJbwQJy+`^mUB%y>V;p2hr_)x3 z_*|~B201OKq^eJNTsvfKqVKgF*H8qky)0InwxxQYVLks4x0+;-eoa9$9=ZnmoL5_Py!5o)OeWbVhJ88$;n};?kdmt zrRY)a{J<$Hm+f6RhguU@B~KrFws-tOnwd_-bMDe3wc6)wf2~GR7NCE*8q4inuCCm+ o*}T*b9rHKj_(e|QtFp$39sUbx&F&eT;5Vb0J-+EDu879}1RNFOTmS$7 literal 0 HcmV?d00001 diff --git a/images/courses/light-bulb.jpg b/images/courses/light-bulb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34424b3e5843b48f8be65486fcaf3a0a5e8cb000 GIT binary patch literal 1556 zcmb8qdpOg390&04Z=227rVU*fo3%>j)*9g`p<%)rbtsfMZez^ci^rKd6*6l&Zk=4} zP_C6yQLD(MT#hV~BDZpRh#n^;MLRmrdCp(wpY#6w`F@_)^ZqFM6(eAcvjfWkKoA6+ zRu3q?0b4Se6&@*wiU|xL2So|O$S`J~S|nW^Eh3Rj zHQqv|7;YpI^>=JFG~LEvFi2Z0cUsV`jkh!C-w_CnMq^Yl>#^ANbUmUT{eMT%0PxCy z4cKsq0$_Luj)xS@Knno)>c0^9H!wIt2||L^ZpRt`gWxb2QdtQB|GS4^aDc!Q^tRb5 zsdKm~QVq&Rcj3hvIhAf_--y)okB-S2{fP|Qw*Z@GwY$Jq9kC#ojVmrr%ohdW<3SbaCk*MVCFRh{7 zuD7(*#*Gsnn0=%^&2Wh`oX2@LNrLip7k)d6+m%rEws4F+Bpl4+EG|8#A>;Yy9LPG^ z=LLBU(+}}W`C^T(_$UVpbMNV}G$yPAsdIK0?w|?mOeztP*NzL)OB`L(U;27!oUKEQyEWjZ=R-vmUR~ak~?SXHc&-7ql|votpD$lM1?ro+$oQ^)2y0B)iv%_t(Rk(xq`?Xd%3}EHG()(r4kVw@nMiLF1!_3@G zMk$ac+G_s?3tjDSdm+h_e+iMWBIBf<31rbtBG~G0Jo>9W%6qsg@%QHk@=MOLFn;Yj zOA6)JqaWv@Vv_3a-C78QFH z9wb=2FrHK~7|0d-?RCPH{bU(Lq$UrG#wWerCDTZ02OK${zdpLW=Tz)8O6S$Ci7`h> zU+xK)lNnJZC(=#1BVpR97hFqEr_uPI=dX&qL`YWu0pBfz$4S#NIH}s8H`##n$)r!F zJrJ2sGcKz7^M(Sj+k`yE+81FFs#Xu8;xWQP?Iav?9W#d5*I9FTxO9q+5Ffh%S)!;l z)B+jJ{dwNg<_D9Y*^=yr%DcA0L`up@7qU)@ WgH5_P<)WKOr}ganXBO&;mwy3HNrGko literal 0 HcmV?d00001 diff --git a/images/courses/map.jpg b/images/courses/map.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45761df768f69a2ae31424bbe46cfdb16476f183 GIT binary patch literal 1064 zcmex=E}IM4pj}ftf{+RY=iLSjjOkQN*ZFdE!E2r^by3fy%{!o<=o^fsu(BC?P2b zmO-|JQIJV7@c%6a9%e?MTbKnI>>09J)HxY)Ca|C3I}~=}{PE+i=^F&@?yPzjQfJ+< z|8}O`;_2Hz>jkdl6f<*5xwP&2zOc6&SL!shwB1>yxiRQ=sASu5bI0E&8(DH>4=8dt zoOm=pzIwy)yCq6*wwra=-)#FCDWvA6GakJ&-@I-vT$9@*>+-36ecdepgRk>orHeO}k%Oea6b)A$%>>$5F+*OpHy z%Gk8<>cz`dw+xH}1&qa1Hmb}IwvxP1k{0;$%IB4rj`S^=xv*U7&!e_mpCY<`P1WBw z`~CWiD|7C2pI?_-dOi2(I)Qznop~qq9*VHuP_E1UUD9)TzSm=hQz5-gCTZdq{_+JE zUy|#N(Ad!XiTUIEy}mEy+|Jp~a(F)FrN_I{Tb?czWyRqSr>*U+i&xIy{%e|2oay!C zTe?doIDYy1qt`<6>$8yPIBCs`VMaF_1G}TMjprMxOuD?vtK^xK?N*7+6>+9p<4Zk% zEfF%gYcBT6Id^5$_cAW?&*plIgZbMdCpPB3y?Eko)z>S_eu%AOO8p*Y+rHp?Z^RZo zGozs8iEP{7E1o^3+j8~s&q#l(6>t2$uk5_E@WB^7Q%7d8k0Mc=Z~xi%-^)1D6MoXt zY`4-*X;bE{7v8S#oAggC;?$b?ysuMVoVwTMrQ;+pLGxqPboq{msktF9x9+dpd2pkz zg!55`&GYIHe3@EY$mTA$Hs`k_v;5pD-<7LtVa{*;y{q^iF3oY* z_^R;T*uN=d>yD!lpGA|n>#9x`Rpi-jiCP(?y+1Cu^v;(#c1w=>l-_VCyZ0t-?F`*R b0yE{Jwv>mbvQB<$x2UQ`K>&v8|K9`vE3V66 literal 0 HcmV?d00001 diff --git a/images/courses/microchip.jpg b/images/courses/microchip.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3833b8b9d070882970b86d9bafdba9ea1d24d15e GIT binary patch literal 1611 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 literal 0 HcmV?d00001 diff --git a/images/courses/molecule.jpg b/images/courses/molecule.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85db73d5eed3f2da5a40bed0e40e953f31c17214 GIT binary patch literal 1708 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 EFDR`(C;$Ke literal 0 HcmV?d00001 diff --git a/images/courses/normal_surfaces.jpg b/images/courses/normal_surfaces.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0137bf70d0c5fe015459704740d6606c268921b GIT binary patch literal 1871 zcmb7^XHb)g7KXnRl0c9UN+2Ks5|9!u5^698Lb)Npu5>BVOlVRC5mrPNK{O(vErPI= zm5#C^B5f6srCw>mVyHm`alsI!C?cZS+?~1m|DN;b%sg|Rd1ubd5zYvg0BHxhJskjn zKmbG3fN&nL0VLpXaX3su93hTGN=Txx(kLk@6b_>xgVj(wqDfFA;I;o{ZlJAeO2iWk zZ4FH+R2q$T#DMPjZwm)=OB(gR5)cxJL>)q@NK30wbqG4t|GR`w0W<<|0-PWqJOD<6 zAZU=V4^RdGh$yTm?ms04gF@gSun3w<17HvY41qzx2>9O|1cm@mw2Zo#ED46UaycC< zcRBAi!BF1F*qWKv+~XRT-}3v!mS`0V`rG@DR5XZ8P%#n0qXCfx3J75a6oHaiY>zHWBrf%$dt4U3Upmdcv|y zx;T&g{%BOvqoD1>U*27N-K#q4YP8^6vn`h6(RfFy2CMtk3>Q!|59?gGA45+HP$4Gu z;1enyK2C~Qflg1bv7oGKy3Ak|_-Q_Zyx#V4k-Kbr$@T1BiQf+X1a^$-3*mD+e1VA_ zS+Rn1@+UseOLmh2pmaqpqdK&m(m+}Jv_+T}0^zNXZock5Lpf6ua6@u2>q1O|e&P2n z!?OJxM>QOQ0F{xN^6e4hrt1-P8=wj*sIsH4WaPW^wUEW`$ISeE=!pHm0}eS--v-C` z^otp_D!kKL;U+R-KOper~Ywn%@6G3HF3(DJg@RA>w!PEx;9E^ z0QRKA1HQ#5_D}?qTh&F1`q3GQ7`19J2_f`-5E}k6!KW{F1$_8A>(3o?A6&ubfI< zpIjtpZ67rY$@-6(W;45b_n8;{)d+!!5CZVqYj*b*-FIh~erxwuJG*5td-;p1%c`%& zQrmUI18U!dv=OgEYkmiuG)b8kCu?pLG{WcVE<&OPb6)0oK$DNn%C{yb?{o(ymL zxPFQpPgkDBoRO~%hB6eG*O+%JfV1I|g0SZX2+!&zBh7K~C!OglWDb95f@sjPn(dRf zxF&^U)t*bAyeFv2B!*SB1J?Cm&>tsE8+KIV`T6wu*t=Nbblt7mQka_-B119lc?jm4 zO||MR;9$)@LV?=*P)6|!wGW$gKuJx0Kq|>uN;t4@IvK5ic{os%?^cU(P6~?dV=;{~ zKY$@%1XP7>EP5G|pyv|7@f(=m?|4$!Czr_!{pPQ~<1ssC%sx9=Q(Lwhr+3{J=j78) z-SE_MH4b%#z;PC#0fm^mg)A4hdJ6ShxD%VES@Ds*PUzcI%yWtVPjX*sLm?AcDe{Y zLRwHQ)9>6!olKG1n%)ah8k`Eu=`#M+j9;ua#HTG_wn>qroHVTA`TDN|7UejbI)}=O z9nn#R+oT%7SWwotV7C@j?aJJPSlsxQdh~>^PqF)l{007GvedD!4VSWZ#7*i~{cYnJ zjn$AftC#Smny4Wge$}yv0PXRiAA>!O)X3^Bi$hxk)<;E?m#N>$vi*JD!kxWoIM#0| zJ*ctVP5#V1j2A>M%;18?3gabY>b&oV8MpGWx#QE8)!=Qx=MZw7K@c>1_c%9?n_Js@O=}9d+eKtB1vOobRvy z>E<}6iYsSYniUGmQ!+fGco!z4mA;7{c)wCe8;*#sH7|1#DF1o0LLM5lFIW!W6CE;8 iD%De&!f1@bw_T1Ol*w=r0x7MF8H$D!)t@7Uvws0{;ULfe literal 0 HcmV?d00001 diff --git a/images/courses/pedal.jpg b/images/courses/pedal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1baac078969a9bb6662386fa0a868d9b4531b433 GIT binary patch literal 1702 zcmb7=eLT~P9>;$_V>3?~E5l^A2{Vha4$g2CYaVLN%tJ*r4{NfSk#cpq6zV$BgD&N1 z7C98|$(TAM&*Sv4M4c9MJ=~&DE^@2Ij_yC_{(IkleP7?t=ll7*USG{i%>-Z^NDH6= z;08pH2mqROU>l8>7>79_;-#j>2{4>=jBjibCl0gkXi{oY%F!fYErvpJ){FwX09_~) z2G!Ap!C-K>uATwX&_G|`z}&=i6Vl4UdaIQM8jZn|>@Zj&4vn_|&VlIc;^yXNZRg?T zPNtGv-N@fUKsX$3pl^UOG(?eY&^F}%8%-yG&;=L(0|H_JEd&TbfSO*w5&$3o1O$OU z(bmy|Ktb4sNHqquKnSP}g~GL9|22SG5I`HDV`6IKg2ejnWFCRKCTCriY{ucqA)%b6 zXOt8_mgwxAuEmY(E#IE?XY9rV0$SfH5#RRz+X(^)8yBXpMDq$TfNYo$5Cq@@sMnB8 zwttFCf~T@gHvU7j+4JgFTQlzbl!x<-Pp$obV#9Y6?{t|4INriuD2mA>BrdC>_8c3U zGOk&fAM`A%s5;?}&Y*jT5=rc%b;GqXL}|m`xbXoj^ZCB0dti>@iLBJ4_`-?hi$GUI z#wYGfSO=|RFO#)xWOVO(WsFJ#l$vo{+%LaZ{93#cJ<2>A7)f!IQl&bV95|!xwF858 zRMAP{bhpGD(J{bQ67h^>=9{QT05^$V?(l1Ehk3;uRxq zZ|41XW;UYV_<{ZARrj8gV)9?El{_u~c{SUdxZauku(zCbZ21u%FMHY&09~2p<9@o^ zQ+U^hAh|g!dlf%Y|wKPWcR>(FzCJv#snu1FN@!&+s4Pd%TsSBNL~}2$|@>7-c*-gVr<46`6WtIO(Ol~n#7^b zq3=7*VPfvzF?JTgT9aoj!$P8vv2qMrNQF;cM4x<~7fAQ?Z&5WSUrA$R;V|mIecpGe zB7$ep*C^$6v|b_qmW<~S==)Y<>u?3Gp$=9%^y9L}d-UYCQ`JqEU#0!9bpp2j*ekf8 zZ|5`2Kfm}lB#4e*qZbLqJrOCu65fKMf64e_fDw`Q)=1LoHd!HxI1jrffj#JZsT*|*OdXN z0le`kp9zP$;P{n1cYH?nz1A!NTfeXQZ8O7I7r%DkFwn^@aE%CmT|QI1G*>^lV|B-( zi?-ZCf*asmeRll(M{Y;Nw8Ic7TG`aOuz3MBKfUCQ>>h2ikLxHqL)L|Vscca+Hywg{uSo0;AB<-VT0}j_M^w!pPnurq@LU2d4tv{znZe09r4-OzWUR=(Qp*S z_Ex0Rf`nxf8154`?TEn{oEtc^ThWv&=JGPchj?q#>aA7E@*qZQnAEWD?bjj)ync$& z_icN+{{67t7d5qCDn8U|x*yJ`xR(Wra=W>5W*d|4J;ke-YjHf-UgVhiOH*Qk*}VdT zWL3e+&x5{->q_)My>;ja=}U>Am@xCze^Ev2$gn;oCfa*ruMMZ(iCr3d>>70_7$}~)9BaFkn?Yl zuPfbO3GivdsYN$lOSYUp-8A#A|9i9c@yTU*zJ4~zGOmU@TS{FXvs*x_PF50fAb?Qo zeyww54>r%fCbmXa> z6&O9bTeSL+7=(of*yJXUB&qw%%OfAX6XdZf34gi$(=`pCa#Bluhle`H70Gt8kO#K? z2`^ffRx@U&3R6(72h;q@=*vFY=_OA5a;ruX%B$xB`o|ILoKx-U(|{mXmp{xwU7^fm TAJkKZWki0=v%gUqu2KF0xRldL literal 0 HcmV?d00001 diff --git a/images/courses/pharao.jpg b/images/courses/pharao.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efd8c341949c3e43cc57917d5bd47981b3ce4f07 GIT binary patch literal 1953 zcmb7 z1((R(+)6F?(wZ`{GIz}tofexcwd7^qbKdzrzkAO8@;vvs_sWK4Q@}Qc2i*ezfj|IF zUVv;Aa03)!FgQ#>5e|nV5Q<7j4HcxaG7^JUSJTkd*2C#)W3l>1I|=#*W`5oJ+ z3riat8$ANWk!9X;n9{@Wu28YoCwuIgI@OzxgK=07D@lKtV3yQ2-bs-zjhZN1lm7;|-`9mg+pd zYy?2ctzZ-c1vmpNDu05Tjz6hlaj9}^cf{V^u{lf$yMQblHS}z;a`40k(B}mEXy1I+ zy}R}|X))tWsicnisy0%_I4?aocdWU5DiVI?@y2SQ@jAP!Hb&dg{7j4OFq?zf=R&we z;cskxHsACsnw>Fnx{F(h4TNnjbfiN}c*b(SEB(9N>^_wG*vybcT3 zx*&p%*$bI)-nst!AuOII=@`TDsaHV6ncmHw=(ibR;a{tQ8~$izM)qYV&vsESkf}6p z%p@p)0=`06Ud)a<6PYp7uPKnac(q)AB1x}YIdFMQ#B5o6qPs@tS~(6GLDj0S*bD{* zJ{m0lrXrKi>*@K32AX-nZ54`;wS~< z%-tUt3C$Yi74K4QRYPCt%*QjD?>$IkFcj;DBxVQf@4gx}ud?S1_x}Q&O+AOLee8X_ zIjvLRFL>iB8TgDl+So{c_es$3!(~FJXz9QX@+J1+#+pF-hmEvKZYwT|aDhp8=WW(? zu%N{%n<<0n#<6hnaPf-Qa~(uNRQZ+AaRQeJJcpJt1F0eKNM0l&W8{FmY7z#urQ72TN#x)os3eA&o}BuI`zSn8%Koj;Zx+v_kk;~--b5zhxUj&D}FQ2h#|zJ&-qEBi*j6t)r=+YOAa4f z3gDu;NIpXgp&$MObE-er^T>iLkyw?{ZZ7RKd;eix6jM$%sMF!{_0e#f0ZOR8Dw28=Lsuw1!5*bgGq- z=w|0aca;C6SI=pC?IWf`je}MTZJ!0YeDYq}`#e}PbzSXYJ-_>T;#9;k<5Y^ckN3#E zS@>N#a-v}?sUnpYqT-C3KFz?nT6n|`A^qGZ_w>Xa$tcaH5~=z^qx5U*aoM&BjAQy> zmtKktNWK;mw3AzGQ+=%tAUitwAqmELna!o~9O%n=VLV}SrlxR;)Sp1%`;L(p25;h? zR;sq~d}pqAI+%X0E;-)ZQ%5$>z}6hzt*VVq1vN27{GRC+DPK2n$Qq`C7*1u7FO|9H zyBlG!(W6;Tl2Y2O?+?vi>t*;= z)IP0;PMtW~x*7VA)-Wy_!%z-h*j~Kq6O|n4Uya%&xK1+2_1V|YxPqWd)xMTRp5C>m zJR?N;JWFDyQ$ZGrNmOhb(a+k`9=wiu1z1MA6d)d{af3=(UVOv&$YnQfRe-3BIWU2I zsB`%QXCBnCJ?}JqW{qO>>Y;mFaCgL|($3aPf5dDwj}U#X>`YT)wNykBG%qGLJA&D1 zBema_#Tw+j9iA6A3^(^rsNd-3Ya4i-rgU>C-y<{*xg0QY)^j3qq@K zoRIluG}D+C#=OH27K^Y$rn$Fg%hMJWbc~4+-<43zx`R@d2bH!ycfN#+l27k4wUY{&)#L!4r`Tqxvd>n>Buh{B F=D+lcOV|t%^?6QChUF*1D%e%A%MQ zqb*uT990%|Y@JS1QLmql$1b8V`QYIq@-086y-4Lsv0NMRn^pR+6Fo}%~M)xYPx3$ zr%oFh8yjorkj+hqW(G#a#6KmVq@<*@l(e#pj4~0gh9~~t5w`+p34jjJp`a!JL4!~< zDDD7`0{{d91%dww0tN@6NQonORvrMMP!NuQ!4S}YH$Vs!2Efq@2)v<-x1y$1P;8YJ z(K-W(Q5w{CW%1i)s279(w1U8q^ymlw4IBYLVITx~1PSP)l}BDE6#gF!LI5Zl23JtT z8)B@ywTMA38T__E@jF2J=rRZziUz&`);3&h?C~}jRj!jN|7Ew^`m)JtR_=ubCS9E= zsj;x)YB0bVDc}J#ege$rx0{g2nd?)7){g1dDrc`MTZQ;+@KVeG9TU@+jA^) zmUT+rm}5+G&M!S6XfN5;l+dK7e}tX5%U&r-U{LSHapk7c%fnv2qV41ayLQN2rk;yy zl%@7GqFfcyfmXGzZHL{HF6&PZTzcQsH)w-lx}&=M(>XN74O4UEn%fsr+|@w?y?0fz z5ToZ_Nj=$bE$4+*pKC|hnfZTX8gE^LvCcN^aUi8iyy74|6D+v5jEO&)bE-)M6U4{4 zg?o}$_;y*m0-;0lYpkYgEpLH8nVTK#px>X3*O?)hIwaQ@7g${8%eBaU3z;rdNf*Y3 zLvy}b2&FRCf30?Z+F5#Nv$1G`8hAT48Wny_a#g$2ewFy}nrDF-LGRA1)XNJrTJ!jv zE>@=F_FqTy`D0Fmmu0nw_98^&r4N!m|GMSARW9&IxxqY~dyBHAn=NeTrwQ)4$>F_FXNO>-?C%E2RtPp}{7d34Uz^b(Lw{aBUpazQhkR`&D0 zM^`aP^yb$3nJ^tg^4(!C``jU;3ezFvcbm6aXK#)d_H^7Nse9u~wjpLR?klR%`T~WE z(~p(RZD_SE`Y9=fGp6@7tvuTU71AyZEZFC%ZS9kf2OoK#&7dkStNt++$8LQW6 zek`1NH7YQkhr#S>1i9Z>8FH{=Zx#o$D+~QoWF18b`MMlCPTk1T3)85K-kb_r&0nxi zQCIIW9A_+MzZ^RD7jRup8jd`cFJ*-2#NB+N5H*gO)$*I|)$^Ui*IT}?m;WhfI5hmz zO7Y9Bw_8NvM8H+ki!sI{y1^POYpnX_=@~646ycvaKi_Q$h|t?j=wp>$If*2#nX7i$ zcmKZNc{;~qKEM4nm-O9Us&b;c&@m({(8{h0S(rw#ebvc5eT@Ho4?kHXv<{S3d^+4n zLIx>D%PTKmqwx?6^3HVUVDo+h2JY@&p-X~-kju0dvoYTtYn*Kvr4nVE}ijo?PT&I@ZS5ZZ`%eoNOw zQO_vhNo=xa`AQaB#HvD(Z{lK#(t)@6N}R%msS;A3-O`#GmiI_*>eWE+GQ}fNrg{x* zwns)hAhMTSqQU#CK2b%?+|Yr@o|WvH^8tfOs-qPgEvb-C$G@a*^qaNS8A+1q;q9Hi zC8S;s4ljTe2Lgc=f9Iz-#9i7k{NCkRWYU&`@#332_~P?B4{&@Yjn%XoYTc-(mVSmP z@}1TJrl;3_dtt|F$o^On8x)q2G#H~9VMl<;B|d_Rlq*n8)h*>8s>fu~s2UAn`(53? z>DP~OV)Ee`e0WjG`DprX37cX_u9Y7hb~S1+Nju!E@eRA?&t&Tbof1q@%DlFjJkfPO%{^Ch{k^eJJ|TT)&CvfT*t33+>JZgVkkE@@GtOat@;RgH)#6M` zy6$-8AMI}pr_K$$yESj&75nLe^bhgfo8E`rz(IhShou4;+5CsHI?Yb@x*{e{|A)oSc~{ G9{&T!bQ|UX literal 0 HcmV?d00001 diff --git a/images/courses/planet-earth.jpg b/images/courses/planet-earth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b06b188fb290943d7b2650b325f03a1731de0912 GIT binary patch literal 1501 zcmb7CX*`q(9Dd)KF$ZQc4C{DDnB0>xnb44|7_o9xB4p)gBg>3RvC%})ZLm4-f_i5O^_ZRef_uq>LAXrG_GqDBp6jol4Zt zk*8tD;O5orU{}3AEr3oPR>Qe69$4tgh2Jll-Ar&E`zXx#yu&&vdBRkcXvB~ z^yKW*#5nPx_18L06UEWu+FbVqy#j7QDkUxT%UVrlWvFh)Y8%mLc9h21$B4heXp?77f;_UKgu_7%(nK0x%6x&T}h1MEIM@kLb~Z>4#iSi z?l3O2*=a#jPZE&1NL_1<>urz^FHq%d47B=q{QDM&QbkKUyy@*~=x4EMK04jeo%2QO zcBEgg6D6utyCMN?f?l4tS5{(&!y(1Y^jm5O`T@%_eAdj=)y3|LJ?ivz--a{qJeb`f zNbMYR@pn?+fd zBtg>Ie5~mf_b4_sDk$#Agh_YUM^$qnV5deey*y}5tZWN0N#vwAbmjS#xIVF>u3Ogj zDSKvkagZm{vdp%4{?%hkO7au>FWw>rPI`9zn_<79ye_XAGTNiJG&PEafcPK1<mlJ$sBK|cA);MHGHEeKzD;zIq>5;Uwswrh44J5|IR1IXjEb?8#lD)m=KS}rji^O|N@BsmxC4rZ IB8Bh%1cEwzk^lez literal 0 HcmV?d00001 diff --git a/images/courses/police_hat.jpg b/images/courses/police_hat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f61197af15568139ab3cdea72cb8c225ae4f4963 GIT binary patch literal 1337 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 literal 0 HcmV?d00001 diff --git a/images/courses/skull.jpg b/images/courses/skull.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e50666d1b9fc82b0983affc91fce5207f694731 GIT binary patch literal 2043 zcmb7-c{tPy7sr3U8Ov;93<@*GRwIOlHcOUXVaS*nB1J>4gkAj zz!?B0BqS^(2on|-hQnb9l!OQhi9|_@V?-rzGI%+h3>GV|tU-`hR9C`cRZbjM*E*`B zqk|`$GB`=p*U;7>{v!e5a5xHyIv^r)fT(~~ApYOkZ3fUVfDDkKpdtW4gHSZM+X`R- z00M!6An@M^2@41Udn4E$)fEFkC=?125P(8O{=ET0plCoqP)J}BKo}4_l!(b<8{k4&vVHDuAaYmA!g@xiPJzu6~}e%$(Z-s z485{d#s(qrSQ}r@i!tLlNdc?}?bx9SN_o{m?GwyL7&!I7V{_b{ACzlcjj}P44OURk z_G$h>{mj^*ti<=jPjHrM%mA`KLPta4Hq*TIiv>tRy3XSL)p{0!vO4ukZ_Hq8Y$IJ; zI<+F6B+S-5lW=;zFp{y7K6Pys5GZa<1`nNcsrGR9UaX-5;v=?POha1DiA~uOa9R17 z=v)0sov^mU$akYftFp%XSfPb=Jbda?!sDQc`IqaKUIPcHQaJ^L-dH!sBkyY-UcBIZ zkTkkXx*Qt*TDNovFX|W4RiG{mkuH zDtne8eF*t0Ys=OU8M|X)z_DZ42?<<{KIF)LuwyF6w<~>wJiO|zX40W(HXV)gW){MH z;l)z5PHvdyC5b|6XmVNffF`H*x5}0!1=^gAxjdP&9pU<|v&BR9r}e5;%)gRa5>hHE zmc1e`I=-D{g!|Lfh~UEM7^W-Vykjf7D&EYf>fKHdzAay+J0wF0p_g1sk8jnjO&zs~ zi~uE%l^$O~-n>74kbK+-ktskfP`K0j`9Te$vdP5Fo&MdMdRxU$T(lyDhbeyL5HptK zQn&6cj!4kAPbBT!Q#O1imwZ_!K(5e17Dtb`)UF86+?-(t@?H#b+H|&t*qW_+H1u#T zA!R7hwYG%>Zq^#BhS+sGijiQ@__kTS#ZeBjtI{&uM>|*foVnXX35~kON-tU&Ak# zYbJj@kjHr4WOm<9T^|^a+X)Rx-dOK0>ytK6Vo2343L?|`JNO#lpaG1*K^wjZSP?(% zt7yeN^9$Ia@5i+ZDWqN6kUGjt3)ZFQfQT{S52&6k)6>c30dq(%&alRa)vbnoADLS9 zc<%vwImwPvSX!*cE78frH4e92?Z@P7$oOs5OlzaWi(@m=ol_2ePG?Gg0p@;w1=e|J zOMX&z%?Tg(g@HKbR^w)F;);{X-Wu3m2{2eSE241zb;4RsCep1iPs($6MkD1{$ zBN_B3+^=p*<)*=@P2RH~`wQ*vozZY%N3DERC8U1{vu4&}Obc2P5Tu4JN#WGsl*kHIqey=x%hcezb)+0uZUQlsV_wgu$$0J* zsD@qX?IkxD+xDM+KkYIj>(JNJZmwdbGhAN-z!@t!E@%kS!?HCnAbW$pqp z^RJx2ecgulc~z%Y&v`)As7fDrLW-<(f8HWWrrAc?Hr+@2LQ)6_(`ad34TuJ z7`>Sm$X4Ml8qaRL=+f$%pQ%Dk#Jk;kSlQ1B6Gm9~k?Uvqwy6ys4s&)3n%64)$!hZ3 z6St5mdiS}py&;HM?`f~LabpE98yls&ig%xU4=-}450pllIvx~4c4r!EFCU8Nw-3T2 z)?bYL7IvP#wq#>zN$;)X>8H25f3eRNLyd@?CHU+8krnQ6&*wHFI9NGwG3J!gzz1r; zj8t$5r|Ei-bNCS&+d( zDf?x6{^(~oQ07ImEvK>V_+q-nuNM`vl s8F8WCFc!4)7rM>`X47kOWNjYQyG_~_^=v0mX-m}7c*Q~Lr1tK}-x-LA>i_@% literal 0 HcmV?d00001 diff --git a/images/courses/skull_wireframe.jpg b/images/courses/skull_wireframe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6b5732a1e770bb8c0a829aa22ff17e44af58552 GIT binary patch literal 1751 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 G0029+x0h7_ literal 0 HcmV?d00001 diff --git a/images/courses/snail.jpg b/images/courses/snail.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7aad5a0ac01276c5e4e4b5175d94fa1e9ac043ec GIT binary patch literal 1187 zcmex=cRarq{j0R}-127d;BW=16jCP7AKLB{__7^E2(n3zGXMF3W27B(h!kff;q10ypN zGb<}QGb==%5vZC)kX1-g*w8UBkxi*^;zAK4W2cP=FNy^CAhRHYJ;S#YMGgk1r=N_>rh7cwy12Wy zX|bNQqoA&EuAE)O(ZA&?w;T+deBPA4OP(uh!7CH<`WM53zmB&1r1k%8uM4S8{uSPA z!r_s4{1x}^FAMsT-u_xW@$rhtzvk8b3CfF*k(0rr36$)#_-cZ)OTPDVF({`|VlP=32%nj)J7sUnp?jX4Uk$$GOlLkLy1r|XIZN)Eo;cq<_qsx?d>^LW&1MzZ96iT9GThS zcK>Ba=uA;KY`I7S` zb;OCCe5usK5+RIj`C5vUtb9Axg=)9%9`^^_`~BnV{eC`P$^qqT0PW%8?gD@y2)L;h zP!0o5fF=U50->(CLSu!NmL?K~L!-2{QET;A>EMislyzhxnPj@2K{Yj}Tad`Ktu*=; z7MsncP+hh;+j}q^*sSjesHLTaT8Sc{(FB$m*^KqSN7)2mGypEZg+LMj!+;P5R6YUl z004tjZ9(9_fvZ942msW8sZtsmfPoMMQ-i_Pp??lQ7zDsEYC1+%9Cd^)$vY%Tj}~~Pzz+fs7{x7CF0bu}yG17rsasI)Cy~-f~ z34yAD5C(7n1}iEmHq9lZ_6PiG(`CM&9;pPn3v7vAA~g=;nuxKu`6)zM*wIf%jJFT& zP%I`Nji#t%y;R8#vPr^v$p16~M_I(UEdq%yNK2{Xl%Qb!L((VMX9 z=*W{fg6N3ua9DH6SqSRF;v1UHZuJyK>3RAbIjk!xxpy6Yg?JsHG84)V!f)(iE}svm z5>cLt-XFYt?ZJlUaZeJf3|Y|$Vaq*fbJg(#ZeAl&T)6OIFy@To{LXxm*hWl-Bf#7= z{DJ)AyLq^+{NuB(Sgv%mK@xoE(78dTHPhF%0Z;q&=DsM|iHcpB7CfWin+FIVq<)Km z7wshU3;UgK@UMHdbULA|GsaY3|Bh3# z7gmzJbbiv=;zu^Og)nqjpL)e>j_*1gbjmX$EDF~qmR#etCqDbDN|tVvF1_eKE|}HR z+0J-_?ULu0wN0=4rTTQ|aMzJdcQ@kQV>CmDy)SW7(n61}?FSat3sx6A`gUr(`Jg$g zaXZ&!ILmV6A$%jU~FP4HzZmKoS#6f?0tC;zTvHtu|gZ;ORZ&@t0G`&(F}*$#}j z+s-!~6`*zf-GgXuv7jXXM>63opPA56o)N6!LPq{+rBTk0GA;lJV#!^CuGcs0Z#R)n z9@`iF-HF1_;(-&BdF%EL$M$^voFnI!?q=pZ{^J$xOWh$cFL3q??!nvXN_4`Ww>=4k zZQrI#UM|*}%O{gLZTT&srKEUKvAnP&;#|?*aSMYu!rTknvSow5c;4ITt7F0sZiVM$ z>K-p2Ct4F4V4SaVYU8n!O=L<BLMH&>xWEn?x%3I|s@eZ2X1)6RPdgj}W?!N9c?9?eCJI|=?j}h~y>_wL z1x7MFfh`KrA4Ah+=s|XV$l8i KY$=7x!M_2vrKGO_ literal 0 HcmV?d00001 diff --git a/images/courses/sphinx.jpg b/images/courses/sphinx.jpg new file mode 100644 index 0000000000000000000000000000000000000000..031bb4480c22ccc9d30727f4c3e9683936d93a1e GIT binary patch literal 1994 zcmb7FdpOhkAOCFM8FQ#znnT3cqG6TmPl;`eHq2#1ZaFTiEX^s2t~QMla$B8TLX>+> z62){1PiUc&m6Jw7>LgL>M<;Z4R?qW0|Nma^=kq-8_viI~zh2M#ueWkoIS$Ys?kslz zgTVk(6+k%wbleW}cLTs?19Jd?hU%%H{2Sl`{VA?KY+sHWmrM8#n3ZO4Vmodw~gk`@?v{!+~Oa?^$2Eo zda=HVz_hisv1lw2haD8a}eQIWO-`vPNwt zU-HT*{m0 z#ZCYjzH2oaODAjq#M}Kt_3elsUOd5D;?qSA^}g!@CAVf@4YL3alZnR)ZEwDCFWgsr3F-tEHods_7>}*+ zT!CvW;q=DBIMh8Xt5;8CLFXn9#nwdLAb&PUF(*^;QyI-wGqMAbzYp5oq2+l zw|7D}F|x(TYd+w1(5+wN9z8DRgd#P;-wfeV?vo&28tt%5CULl&S#mjL@yCgcyNcd& zbYLum!AY$FKj}=Xr@*%HqD;Y4g1UZz5jXIGN0DIn@j7eGjKAY zr2>>^jx;be9gxyi$1@hIPW%{rEVLz{Z+rFQz-|+m4A&nZwBH@{FyRYo^VZZ23J1v? z{qNVO_DY8vpD1qb%*-5R(DQkVaNZzdCsLPtE$k)|SgSAC)*rkkeSPPTUNqVt4Lhk( zV4D1OFXg&uQEkV8!S>U?ocRiM>?c*{9DlM&?bTCCfQYGEYHl1~)zkglHmydc=9&{^ zrnntOO&qxVoSkXzPs(>;Zr&mpEp@8>iXx^KDnYthr!+J>RN7^#{$boGm_UC|`$>CE zEdyVZ{W8O8GIgYUVVk_n{9{)2{Q?9{wn$CD)eps#hzVl7i~y_D{NLx#uMwRs2U9!= z-jV6$F;Y6N^)yLjU1%mwf#j8*9j!1C5yRd0@;+W~Z7xS<+(@F6SQ&RO$8O>`Y)vIU z8p-uXH&h$!DP8cMn@U)NV!m8ApeGl+duQ9TAfR6`ym>|~pZCq)G~wWkaqL*_{8 zex)-#-u9EjI%MB{+B46IHsGZqO%WUTIix*;Z|^uf`H~)4I zozlD$YQk2)=ruSYUurp3=908N^43K~ZWfD$kacF|6s7O9i{4+o-fhStPQF~X%tSx!u>tNOKOq1B literal 0 HcmV?d00001 diff --git a/images/courses/toolbox.jpg b/images/courses/toolbox.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a3f88178a2fad1a49b9d8dc99875e5c1c6f5bf8 GIT binary patch literal 1636 zcmb7=eLT|%9LImZZT7%w#%R{om^$Ndnun&0OQ)GGx?HA{os_OH8O@!!&Z|-`L>|_{ z<>|6yB)ikq%In_4y~t$HZd^7;7A1WCK7>2G~H}#VM?(!ClaaK zEUoRfIyg9xEu0y2nv1Qy1MQ;(M4?b&9b0EX3pBMi(8x9R!SAu1MtteK%u81z31LaM>XGg>ea0el+*ikg7#8ru1oN#X(s0jTa)Fqo>{xjJc)lra{sPC#!~m_16Te ze6}7PHYiir46k@Kj$s%?yhCVNa%0!X@3>(24jk+ zeuLO=+0rICHwxYgell(O{6o>)o*!4LlT$XWDw9$w@5b(+FSOSi8CRTnYLsvUU)Vu$ zdu112W3r*0&}C+mN(%5f>2z68Y^$Qm^T@}zoSI*%%gW_rDk|^3E^Ewt3wP*8<*@)hzT(sGr3R`EB`GM{^sS zd!}Rqs)Bg=kItZeiFD zo3WX@53y=7d})o_a0A;JGYesqu*st#ZYy7vN=pnHvPq9ba@P^#T>B5qI&N{G7x&7L zv2{UNMt}nU)Rpt-^&b^iamegiY#jJJ0Jg+y5i5S z*|f=+XleDKJlv2eCh>rvJ&o9DnJ~Q+ka%RVsq;XdbBGM7Y^_X@>7kFV?}?(%NDhj} zV+4%}>=%Y*i*qTGib7J*JHpKqH{?E#nl<&6nXuDVu|3Z`b1hEYYAEfyy)TX-953u$ z`etuMWB;7t{S>$=E#ch!b5dy>;acrJ;1#|0=F`~7=I}{dBUb9RkRv^w_<2Wkf0KCG zPeI$c{B6|SDM9r0ZR*ysrth|;$NhBZa}2hzZER#$@1gZxe;3x4+_VLtqCt&DI zb!;Z9cj!_8UpUMuco_2Ce1L^MeRO-tITq~L`PBD$)`3}pk_Tnym1&MvwZx;?v!Cx@ zc&70u`p!JgXjVOWc6Upz$>!mFLtpQ4-^8PV4@s*0qBM1(XZ?=IlFdtC&NW#W?8?f9 zh%J|tIjoK6MTkDd)VGcAQv`4Dl3@*>yPd(_Q!N$s3hgk1jKl%nfuYq7Zj~fC?1kOc zi|pFh>1|NqK`;F=LENFLHvevu?p&{6j`=7r=gwfyVO3~MM90g(np%-{viN0xAb%E% z4Sze5O4fBET~vql4{Jn7%!0dO`F3bMfC~Z;krl_eS%S_O(V`Z3v|iS0tn>zR;xOKErHXoVrUc4uCxinh+vmbuzg2m#^Q0e{3MwCs&4--t(3Hj+f8C0Ax_xf!sF8;Z$ zpsI_TeMbRLix`e+Mdz2~Xu>SBC=ZZruB_{_V+~I5t^FPed{I2UNtdUBu3SVkp F{sV(A)Up5o literal 0 HcmV?d00001 diff --git a/images/courses/triangle.jpg b/images/courses/triangle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e62f7e1ebee14e3f40b4b8a9ec935e7d3cf9b1e0 GIT binary patch literal 1234 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<D~TTdtzS=VcTzx2f@( zrvl?Oj|Kh9ZrnY*{!WZ{USNz_%3~Ib6UPqMUH+4hej$9;<Wh}-nyzM$;U#^>3Z zF7jnHOO6)=iGK`s^qaDj35b@z+SPp1X=1d}>Dq$3vU}Vo=55P68o1N;hV%r!)vH(J ztWDjyqhP|3rE~iOMD4w{&dQu0y3c8P@Oqv?bL)zoEq{*BE`N|G5|DMd|9KhnIr&d1590>WYoFd(OMB|2op+Zwd9-}ZuHMD*5#BkQIBtGy(>~fGP?=H| zQ0J)RU8^#2*Df1DqfK*~IBNv5Z4dm=+nrr_Qg6cT{m&#zz9uh`@8-%ZTbuHqfvwUi ztm~Gl9-Hy*uPKjqXMMXA^K!C^vhfNb=gHr?ob{?Vv9jF?*N&d?URQBv$7GomvYxUo zDdAD9nn9+~oq6xV-8WC16e-^KEXBgW#Zy{tS&qQo8OdJ@oG1O+y|UBt<+h+o*~#aY zKQCV;+n&u-w?ge{@%HUq*X~(YC`UZ%byCte5Mag-?!~I<#dGq@oPTZhcfKy$tbVEZ zm&AXD;%l=wXNBcH-@Cz@BlV@Se7X7*+nAUv>uD>moWB2dYqa*kO&-2m_Rh$?F#n2$ z`w~;XCf046ORcij=I31xj$V;n!K@|8Dajz*!1jt$eO^7+!=-ob--zDs{ovhd(<^6E zcFgX(QqotwE4P7x!K#62-ND54oKqK~4hw6QWF`0LiCaFrz1sTGmJ9A5&;DnaZMA;O z*6&vk%&SRL1pgG*KRdVjt#0jC8#pUsMcHeO563=iwrAYtwECCywz76uC1GDAh9zMO@K^@f!YZSJMs_1sV{rjo23bUc)dB%Q z69UoT1P}xf0TB=o3L;8U78Ae<1xlofMMJ}MrtNRfo%?m}Ip==dyZvT+4nX<)Kt2En zf`Ff_fNde*1*j-0A(RwU5C{YksiKN8P{W{57!w^`4Fd}^D@&Xi7HhM|+u6q6-2sbr z32}AzfdYd9tqI{VVgAwH0fEqt35Y}@F({0&nwl|WhqZ(LH@3R~v?34;1j9ii0EPzP zXmGn1&;2Sk27>RQe+$@Bl4w*7B7o!%b&4z3dGC9;WAG!leJ7im$H}4Rt)74TS=-;f$n-3LE5d4Thnf8{&qa1{VMki(nf$Z zWwl+1=F{JHHg8srXhwB5;)hI5?7<^$x|?#BZ#sc*ALN=v)vU4Bpk09sr&?F~x!b%M zdpF5tldiebl7*G&Doip5HD2kWqFCS{2a--rFlj54)4vD6}uz2ZVjY% zqqusDo`m0VKF(rZLjLRG3A~N63y<ZWRZ)vVk?ugX?&Xw9!>Z^3E6BHwX8DW+# z{rp9ldFDmdSQaUTt;uYPoAo2!Sct#UNnMEIS_<;N9`qecZ(=dsO9cL zXU=$I6aAVkHu2So&o*uhmw|ZNh+|ss58@vqAocd*C)~ExVvWX2dG4f@HojzGIr1cp zjJ%g5hgCUn%o_kHJba!KSGUfauV*g1_K7f7eF9wTe#ZFyv@J65G^RvDV7?6`%B_!< zGj+z7lRxQKbw;@@GNyV~#LW7IeM={YGG}83yZUL`MLECv;E4UBru~TzViOv$fU~HYeQ>!Ke(vbwioB`ux@pqPpR%v-uYxDH}jGkDnR)ItAvmE2%plT_u zZo(>FNSQboAk15N+pd`J^fise6t59@w+_t3p4FuHiO53>Zx$-{5=fQ4I{s5^Vu5gZ zAk}idjaivT02%#Vpa`17-7sHZB%G#`25H%C1DDRtNrSIQV2=avpY#vU6P(Jkt{2i> zH$^k~stRRpxSkQ!^+)dr-ScOHh?Mu6P=!m%QEjj1;y;ppmiahD@mnCEPslG}f+2L+Hud;G_b-K^-2w4x0H#K01 zD#tfoCQJ$UyD~d$xoV?US4j;i)(XPffFRCg<>;oWt;miRPYTpP@f)47KxIrPFZ)hb z^*8CTC%Xd4@u2A0guKFf_^Gky-=yB_xqAip#rGNn5ScUyYh1U+lznls)V*ox7_}o_ zCBI=)p`>qYXt2JIa{ql;48Ob})`RoDr6so271}5gjnMf-PEnk&+7G2##=3!Tdq{;V zS0zRiQF|*mo*ra%iWm|4@i?bF5aX+p-quXrtGyhSG~U}a;*~Dw}2KVuKS?F8yDXddYPVeFx34Ppj0}~GjQ+(=UEP(%LX{IH_9-%00|3!vO5p$i literal 0 HcmV?d00001 diff --git a/images/feedback.gif b/images/feedback.gif new file mode 100644 index 0000000000000000000000000000000000000000..e285230ddd7f45a83bc0293f36bac48c783dcff7 GIT binary patch literal 156 zcmZ?wbhEHb6kyCBD!6<41~4f8WMSlDU}w+)X$2X=!0b`6>cZX$jSernjXU-pSGazpS2{rCfFjq~ zjCsAs4n5`U*0;K?nYVcVaV>F^FDWiF5+?*HcAq&qVSA6)#NI67OF|O+rgt1s^kZPK F1^~7zJbwTH literal 0 HcmV?d00001 diff --git a/images/file.gif b/images/file.gif new file mode 100644 index 0000000000000000000000000000000000000000..229756dd6fc8d92670340449031c6cddc1b17bc5 GIT binary patch literal 117 zcmZ?wbhEHb6krfwSj52a|NsAE$BwnMv@n3#KoSBJf3h$#Ft9M_fVd#F49r#@CU+Ja z@Hu2w2%h6&l5pBqAj_H-{dA7hP1f)myOyn4qE~%+>yi3xg8u4D1Phlue!nA%m9uF@ KiIz75gEas+awe(( literal 0 HcmV?d00001 diff --git a/images/file_types/audio.gif b/images/file_types/audio.gif new file mode 100644 index 0000000000000000000000000000000000000000..ea9ee78bcab3fac2e7eca6d8e4d5a2357b354412 GIT binary patch literal 1010 zcmZ?wbhEHb6krfw_|CwfU#x3TqG!=!V!m40bCH2xqkB-7S5S{vP_I`=uXjkFcSw(q z-*V@mg)X%-D(h!fr!9?1T$7l!I3Z_oR?d>_%l+2p-dQ+HQS z-BUMxS7^hD$i`z4O-Ex}j>NSbN$fbB)Ok3y>ri_4!OWh6IeiEIGyHG7o6|IFPwU)$ zvp3J2vt`!Wy=&I(Ti3DRK=-0UJ&O+YFFi7G`LRhWj!j*CV)~ksGuNJ)v*FC#jc4a? zKDTJ=g~i)0F57Ww;D| zYfpY%fBO68v){L$|Gx9$_q~_DpS*hf;MJdpZ~i=f`{(JqKhNI(dGX=ztB-$QfBO6O z^WXPh{(kuO@6-2xUw-`i`t#rSU;lpo{tpBUD+L)C7=+%uxw3Q9hNCyGi`t4XHHa`d z2)*UG?z;Y#<$zZZZ^AeRMbpU~?W z6Mp9aWq?A8ZzUjhfw&)5K?H%~6Q1vxaJ3C+DNyBv--SRnPz0p+?UM=5PYAv1nea|x z!tV-3pl2Cagx&(JW`GDzWGw)O0MI=XIYH`y0BnWFM9xV-23XmgyKnjKzEwzCc7lO% zNz$?_U{wf0=v{`;yEh^+1wbV9Zo#uZ%7>Tg9g|uh^zO!?LuY~39Xj+_By0jumVtp; zBw+v1OAkZ>fVN)|dbb2Riotpmiq zS8Z3|h=Fm9(0i4;IVD2xb$|+h=-GqC3=Evlnl=C}Rs6}q$iSe``vPVJw4OR9V&jlCQD9*cD`UvAKUWxyyBXPd6+~tTr8XayvDheM zaH-f)L_0va)&MH(%wGTi literal 0 HcmV?d00001 diff --git a/images/file_types/binary.gif b/images/file_types/binary.gif new file mode 100644 index 0000000000000000000000000000000000000000..2fca556b1aa24ce5dca5e8ed4954f4890722b0aa GIT binary patch literal 1016 zcmYk54NMzl7{_0_)|G6T$E9%$7j1=*k<@(pkb?7K8qN3?GW2Rje z1}8z<;2oB2EVp?w4pAY4EVq!2j()&dl`R9yfgg}=Y%KzJt=qK1^~1MqqP}@@d7l6C zf8O77mt67QJsNE_0uT@ZKxI*BEe1IWR5q=uA1Pq6wREY@rmexUb!>r=(;g3&zTY-- z3?Dg0jC}aHN(Qte#`25+vcio zbCO1cei!LKjyNnx0wf%y)`nTIkb$+!IWn6icW|VZwHxLbUC5#1SYw1WMA#aVBpc5U ze{$i5ouq9vNz-%-<+OIWZC&oq=uzS;w!N3__||*2@B7aFAIO363xhYmxN@tDxqa#C zM9o`a z{5c^08Wew95a)gu{fp5%%h7p0dS8eJLeYhAZ1IoS(t{ZPFcx|g3;z{=5Q#tfJO1ZN zJhB>J5fkuCmt9s!8ggVg(`EB8L3srLfRK4}6O}0MCuI8-YkLXVd#Ip+I?C@#cPlRX zQ9+*SmY{s)|HQnsm>Q`AKnhy{Ob>u0m2Zb-ZsM@dIvBeRQ&>tN4_!Kki}e5~p;U2k zA!DMz%Br56h+^SP5Ko@knTf;Ziq%hMV>=;mom8qbm}{%ptI&l3dU|J z16P8x-KWaayv1hUzX2qAG?X`6{{b3OLj#O}{}KS1fyMy{Rjo)f;Ku~&lc&&ZETO3ysD;iDnhL;db`Pi%SB?!4>zvTgf|jy~Yh z>E-GQjb@zCES-7$pz`$zf0%vkM`Pieg9cfXXH(fkYknEs`0}Q#XLgyLl&5+9Ms+!b HAYkV|BNp8i literal 0 HcmV?d00001 diff --git a/images/file_types/csv.gif b/images/file_types/csv.gif new file mode 100644 index 0000000000000000000000000000000000000000..dc94f559b208c413e2214ef7cd5757ca8acb9c42 GIT binary patch literal 1050 zcmZ?wbhEHb6krfw_|Cxa{>$G9d%JTtq(6G|$GCv^>5Er0w>^lP5gNTH;>Cx*_h0>< zylDH>B|A+bM2$1~Z$0~M>M8Z`_3w_gPrKGV$y}Q>`B2~I@Bgkp{dMihuY|f7>kPR$ zs}G#J_w)0Qe-GdMnYL{A!p-x)eE%0U%hM=B!z7pQ<;TA-Km57>^1f52sa37|nY%w) zRzK@m|D|HjAfzy6Jw7qscnjn%s@-h27mIG6AF`#&qTowY7hGL4gp znBjiy(KS%PL>)*}Fftp8tOH z`L9Ww$h9ZGUw-&&k}SC4z_p6SucvN#RK4^?>hkDIkA6LQ`)A_DM`v!G{_^ABjiSiCoT#xNf9y$7N57{e%6}QwR^tzpOLq6kx-O$QJ&<$C~`tUNHN)Ks%e)F%PohM4XTVYoVs{C z6<8S9EUma!I2`3tGhyf3VyL8gg2~I`t}dEvxF-zuIJEsQ6YO0alXG!!p)oTDyK!m`ik;Uov|TA>Qh0v7icFLABH z6;C1`u-h@SXlf*B6fE^zV{crs;ArnGy}-H^4M8hiv%R@boiJ2*#>362{i=tv_|K%T MuWzhpXJN1g07G+wasU7T literal 0 HcmV?d00001 diff --git a/images/file_types/doc.gif b/images/file_types/doc.gif new file mode 100644 index 0000000000000000000000000000000000000000..438cfd31d6343b52f8ecd3083092e943009e99d9 GIT binary patch literal 1028 zcmYjQdrXs86u+&lw5EY_SF;9OQbnUPRU0x5C|f$#X^D1=OGqk%tpyR(LN>x{Qwc5Q z*@k>o5#nI^hCIXv4`t$mN%>kxS!6*{9&@mjheeU^Yego|7rUj&;>r2rcYf!0?(f{2 z+#_*^qoS2uzy-?y&?579eUic2r(+(_uwu$K#{R@UdS~mgs|OQmBEP=3JGm=L*?REw zec732@u^P9nFsM14M{mS(+cj!W}4%&pL~_~d;GaSzP(_Q7d*|YsLibG$-;WF3_ZD* ze*3ZN(YdPbg6fCyg_aZQez~SENo)Q_YgVWSm1U;na#Lyrk*4cCt?yM;8q+F9@(d&A ztH;;Cn&xVEaoyvh+GmA7+skmHuAb1>6S{^;Lvw%itpTicw60^Yyz%9woAzt>p0+%) z-hMdL*8R_o$FJLr<9AKZx-3fr!_%V^^TX3F>x^r3);0FrJu$uXr``S6oO|Mh`|p=- z+q`FL!81d8o>LyX!}G%Foqz3pwdf_^cpXb#=c3E`*0;FqTUzn`yXsqZ`BvR)C_qan z001s5SRdT!XcUia{+LHE07)KF8km-dvrb6b49w%apz8)^ z2Bf0=Cy+6LuDtX~`bate4Ain~B>>RZu?UqBXIHGc4(||xsAM2N z_^JkTs{jxnN?vLVc==1`jR1*wY_1y{DM6-4iMhW=7%~1?au%DjKuV8Me9WCsLze{% zNFr+xAPvm#&g&>OF$~kF-;!BOzh?5){`(pQ^9u z!=fus3}iK`g}e5@APNyGpg`VW-Y&$a*n literal 0 HcmV?d00001 diff --git a/images/file_types/dvi.gif b/images/file_types/dvi.gif new file mode 100644 index 0000000000000000000000000000000000000000..6c4e71e63f1ea23d6c50b81f6f4224a908e35d1e GIT binary patch literal 972 zcmZWodq`7Z6hFIOb0Zt}bu(T4F*T^jA|lGD;6|1P2}K146=_5dELKGHfKXdnX?1UA zT3IX~sb%yIE6cg*TE(E`mc5kKbeito+0*oHvvaqIpu^$vJHPWg-#Op8d?`zpB+bo; zf+!dO*v8cDIMKL^Yuv>*?kRe-zxd&S;)a7I4_0T}*W}pJb6eIKo7WqgGmcm@k6Je! zvurMC+FIC@b;3Lh!@1`g4qteD#AGfgw-lCJPF6MZ)wWYLw&JVylDem7uRXhP(@}Bn zW$i=Zy7|p*>$}!ZLxOAQb>~o9m;BZ(zweem^vE5bWoNJNqsQkGeO;2z?e+Ea`+L9m z`@Z_cZ+`E0fB(NK{ zse{>6BBuXCP7IO361*3UDYr2h0OvfqRvQO;O3oI}szJ)QX*4x1C6Zcy~_TtHKQfO+;m-A(9U_;M#E>UZd#I zf-O>c%_#&J5~-|R)V7QI%*%G58Zs{nis&E1A4DV%v(SuAB$L~hV6B>N)8U+NEEWg0 zvsheA8ekS6jA5CURwu*au>z4Qu{H6s*0rab^vW2hOfG(f%8lbq=!@yQI1<(#YFE~a z)|)5%bsUCxC$?wpCf-C8pu3$F02+7h4Qv`WNUH$GK%!Enya`a(!X)*C(NuH3RyTcB zl7Tf@HSv3T>^ZKyhb;S^8M}e{b7j1Vu{0Lio$1$!D)=aY>vQgj=yq|zjl+o zdzHL`n!Jpn!kMkgqqfnr!`jl~`qbn4;q3h5?fm8L{O0fc^!WaImAihIx`my-h@ilW zqQZ}*#F3}QlBmX&tH_tE$(^yysk_v#z}WEi{_^+!_xk?z`Tqa^|NsC00000000000 z00000A^8LW0027xEC2ui01yBW000J(z@0Ee1I=Ww)=H%kI(IbyE{D3=1}a_i8J$+I zSuM9jE|-4<{xid=3p8PB9S>ln@P< zmkbC_Fc680jSUP77)~yUCnpQ5tO*uQ9*T?tj-v?*6izIQWeUE&BL_|^v$YGiBO(D# T9UL4R8W|TA69xqY1VI2hye7PK literal 0 HcmV?d00001 diff --git a/images/file_types/image.gif b/images/file_types/image.gif new file mode 100644 index 0000000000000000000000000000000000000000..01f4c070e3dbba574e70ea5a433c7282d7becbc5 GIT binary patch literal 1025 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 CtNGXf literal 0 HcmV?d00001 diff --git a/images/file_types/oot.gif b/images/file_types/oot.gif new file mode 100644 index 0000000000000000000000000000000000000000..853f444bc403bb5f59ba3063b356f215d31ef18b GIT binary patch literal 1031 zcmYjQ0ZbcZ6#iRV2CO4^)NL7EETNcTSYrlRFwRU%X^R;~7prL4u$5IdnWJcg>7s3| zZD%XHW2+1@Ol82pF$V=_<`}eB)>KnW!47aMSZG%mqgPPofVR~CN}|5JT)y|c@4fHc zB_}KrAcMhRuvo0@>}(#7S6o~y7K_Wu%49N`{P>BQnwtIE-287if-78p zU(V~jc_;ehNAK`XO^ZL9dE@=M!D@7{8XNrR?9GpjH$E};f7a9l&*2+3d2WMLscV|yt1}2w#o@d*6*%L4Aj@9sDAoe-&nr7iG zT}0dvD?cBTHOG!Utglry^?%Vkpd8SeOs!_KS!c57TW~`Qex_{*yJWBLup2Ks8oGXN zyzwefr5-vi;hvtiF%c zYag6P!<7KAAti)m+>0z1zuO=okIwd^w>8idD$%eUV#tuQK|ea{KnMd$Y)8Yj6!Lx= z5`@-p4@qM5D)>_H9xRE}!-!jmu%vnjU?9YW$zaN4kS%R@0BX6k-5sa@dmuywLM$-# zCYT6e3Pdt(ZCv{fh$nD-7~0{uk9nF6y8t}KRG4p#dYKBi){PLY&>9K7U@JXmWs_$> zCEs`(D&I*bvyk=!JPFR8OjB(5&1>BMCZHIQ5NERTLnM>~1uz5NivT1ARNc@tW0gh$ zfD3ZSLGqsfiGFY>QC&SGdOTx)t;c10(NwVQB?KupQZp-Vy5s{ zfl@f7ZbbG7cWlWjPVSSkIRGS&nk0_j3hPiBgSp+3@YT5|b{#W}SVk4bz3;i__NBGa zH>XMSn67D+$lY1wcfTU1G7|PuwW7ig+KU)j;)9CSYO4h8EII7Zb-(?6Lvo6;`{o{{ zhL&((p!WVj{M$3Rvag+r5ulynmJ0G0B<%-On^M@N0dtnxw)2RCBU&t9-n#oq))YHe eU?_85?X9Y+$Slxo-nt7-rQikHE$LJ$c<+fb(!wPdt*w{kdlF^JTwPRY(n#?X3?NFg?QMbCOT?`q7 z02UNzT#rG-rN&yovCT$|Vac%N&lS3AkSQqzH)+~|J%`>Mb8ZFtZ@)#fnNCaEJit0IC3t6!rO;;p3L!Ua#qN)}0+JtM~40@a$OfOG)BrBGN^Di=+=v^o#Kq*OYI z<9>>oERY8j3Qmega6Cd$qCycVC`if`lQbQmX@Avc98HTVTBK=CrxUeWQLE#0Rh-c% z*3=}8#v~*gzjZd9A3ALtX|uCtJNtF-81tQ{z0cG6qxbCP8|NH1t^E_{uionZ>CX4p zeV2#)S4L*9xql0oOo0IxXEuvgtLSh{{jutsU-d7n&fJgQ4M%_HqW2y|1Aj(Ezn>E$ z!NpkUQEZ-%-4|kEG4^07zW7)C;o~^}cU*iDU-~!kIFfj>ocL!Y5m`;FM3bmUNj)i1 z5`6B=&MOE%m(@43a~=VLCjo%T^yb%g5qyxz+(oYMV=|8rLNVeAz9hXZv(FNObZx69 z_&raNo6_W(ny_#zVr@T}{6&=`JG2K3X zGvkzMsP5;@_U*f0E6Xj$B>o-G6l$y;4pmdV`^5v!^24FA8?7(MJ2V%A{oAzE4llcp zRkdQLN(Lt?^3RE6!7f>`Z_CN82VcF=tvnVi`sJfvZ5K=S2J!V0EGs9s3lD8smz6_e H7`*cz-lEi} literal 0 HcmV?d00001 diff --git a/images/file_types/ppt.gif b/images/file_types/ppt.gif new file mode 100644 index 0000000000000000000000000000000000000000..3e706b638b22e69dc7792385395595b6ec233cd6 GIT binary patch literal 1040 zcmYLIe@s(X6uvDKTUdZRyQS+KL#cs;Dog>3Xo8BPMh*VJrOFR2LqR}R7*Qi?C?Kl? z^*sa;q)RQ(shI<|0o#O8TIlKq3%bHAjD??tA$`3finOooZXwxjPVW8AIp4Y8cmKGt zdp;6GihY4ESOnnXw|vfW*%$pe+1ERB@y=YL^X$!z3zd)ZE88zu{dA;2e^jay74{?* zcPAHji)GrBtJ;%aXwpi%PM39MT~`~2)@z-Aaa6KLtSRTHiJYr+@Ha@W> zl-RnNhze_p3{l2xu8$3CjE#J-PtbTEsy!~`+r!)CNy4V%F>Rt9KOEcHk-WQ8EHoYs zR*Qw&lY6zN_WqI?r_YS*%1h|YIoz8Q-+xZ@${oxo`L>j!64sT_`stkB14OZts#iy_#1FG^0Yuc~Kf0ilKrAkei zQbT;DtNQve{>`Agxv#GE$^A!$M)kArv_r5}3Oh<+PdR*C1^ezk9k&`Ltb>!*Kc{R) zlWlm~_ScNt{RQ&S{mvQRV7KKsJ{eBN$;X}2ucsh4JI!2(}9 z<`*3cZyc|d9E(D5vjM=K-^OiO0QkGQZT%Q2K){v42P;LC;M48+KnX@N z5fiuNAdD)mS@R@5jdaU!l7rjM)0|FpCuT;{V5LYfB*-W7L$F+Yw3a1=1gji@Wm@fs z*?Yw7pQ6$OdV7k>u*~{@Ll42oIrb%h0wWbBDnQ$?QO8waGp2F?F+X`vfnv9N3$lb}>n|Tz(VHzX{1<>; zhFN$cS$UX+j|eDCqjdnVOodHIbnTKm4S?-{?;3Rd3BWXieCDKbz1KUzM^rI;@MwkB zFM)!_xVx3cKrb2N9o&-;SxUfGzEAur=bdK{}8*M82KRV8u3L==kaQ2v$}BSgrew2-qKycmA^} z&pTnO((eV$H+bFT?TSx*Q{!=s_O9TnV8=RMH`nXTkTP-?(EZBw6BtCRh3es+Q$gRK zkSdF1-rUf5Ca!u|y$M@$=*5s}zWR?;e?bMk<)OJXRVR>eu7sF2{n*2oFc~zu8^dFt O3@T`D3{N^8MEwgQ9P9A_ literal 0 HcmV?d00001 diff --git a/images/file_types/ps.gif b/images/file_types/ps.gif new file mode 100644 index 0000000000000000000000000000000000000000..ced7c63291dc9bb1009796eb39071dd6b66b560e GIT binary patch literal 990 zcmYjQe@qi+7=Bx>YnhJJFXx;;qDA?`EM`F+u||xIia!?pV=4(t)Igb;nrbRBN@hZk zRKY>y4kR#Blan6~4T*@jh;&j~s8vIv?i3W!YU_b;cdf>WaHaTOn{0dY=F9Uw@AH1o zdtY*!w{9}8&NG4$#sOyk@OyI6;EL*(=Gwrz^MS)>y9$`D0=DZ|^Ydz!L_nYUJ^6mo_-L|vtVgy z=Ps}JRMdMan|jzkd{xc9+LpT)uJtwi`S5Zl&-RX7bq`$kK5KqB*7En*jREo2gW-;+ zqH9pPAC&t-@}t+2d~otfXtMu}@>Ea;hn43e%8R#3U^Mzlj0UCX8#yY3qa*L%jYOtK z-%W)-OhrD%-jByVe2V=u5gVV3O(@eCpoWFWEsXq49BTnIpmh*A7f*JsU2iSZTldFX zpb;6+%poF$Vj{Zvj%{#x7A6sS{-)g4@<1&Ch$!+MZCLitUQ26>X|07wGyAt+MO;lG z2qGX7jY?MM*Y5%%1z6pWw7!|u9U`(>y+O)MbQiZXL^i~`TZokNKQb*r#z$~H3R{9> zBLMD?I2}v(f#1$3g&OtgC?csZlOS209p4l8VUtxoM%-cxn_Pt;E^`h^DMOOUddUx3 zm-P}KSN(Soc|Vawx+s82WKM`K@iu+uo5vA(z~kvdJC7$wp8)IvB++)E_fdehqdQOJ zMzkhji+A_AZj-tODmT_VMrHnd4l|3ofh*x`MZ}Qs8$Heco1i^M!f8Xcqa?fx1(-sh z0U%i@X+_i22}%Pn50OTR7PRKB9%d4l(%u3C)=d@b54PPx~7A)W4@EcQSRDI6_ z*Kns2RvZk~H8$R<+Pc1eH<9% zaF@>ljoE0XFE(7s{yK?yk)EDmFgi1>&eoH>PgiQXEjZYVhrXDZ@vS)u$FdxYG7h#I zE%_zhl-1dk!4fDf_O3LUL)^~IDGOHFcy9TIO-ZHm>7^DsSFHPzEHvl3O(t0L8Lx7< A=l}o! literal 0 HcmV?d00001 diff --git a/images/file_types/psd.gif b/images/file_types/psd.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f6979762290c95035da5a0f7feebcdf4bd14cd9 GIT binary patch literal 951 zcmXAov5VJN5X6V$hiJrbXltX{6anoncwh>Xh;hZjQ`Y7xA%zAv#T87 zP{~>75>VvW$XVw?6jG(pZT$o6#1xM2o4jIq)i67s*>Cj7;(;^sn8#cE{|rcg5I_u) z5JCYpXhI1G+~5f(0tiDSf+(O2l_;WtHguvnlt2R$Mw&sg$BLq)j@dIot_Nm_klAVTx2x1uCYJDpZB4sirE`p>FD_P7P?7 zMru$CTBem+)P}Zcr#8pNN>iqi)9NrsI_Lryb4eGv!qr^UmF{pi_jIQRJj^3K=mjtH zN-uiD+q~18BSoh<)5$4LSRexoL5PK92tyHSp&80>gj;xqGXfD7kr9kSltpC}qY-V< z8O=c^Xu%9}LIf*hfh8!hk}P2e3fSSN7nS zkNEQBXDhewug2p0ub)0Sv-^NAY#zV$=I-aquP**Q`{BjuCHyphXMO8~bEmLz?AVRh zXV<=3es=z^YrFnj+Wqs&w{vg)eROT@==XbHuKaW4x97_nuNPu%>E{05=YITd{lbe^ N$1k1Sv1NvX9{^0o#4G>+ literal 0 HcmV?d00001 diff --git a/images/file_types/qt.gif b/images/file_types/qt.gif new file mode 100644 index 0000000000000000000000000000000000000000..87e187c6927d4d3fef5149f4b81d0aadd4af8fd9 GIT binary patch literal 603 zcmZ?wbhEHb6krfwc*ekRV8a1>g#!f%2Nd|v3-CWskbkdl@W9^TLVUvggoN`21?Te% z_SZKYm@whMh7J2KT)4mgz}{e=1F6$0+}&)>g(|NWo8 z|3@|+d+_Sd`!9b(8%{(t9gS@{64!F1Xu|&MPk&!~^6Tca-?yLtzVqVuy_dgVeE9qN z(_e-B2Z4wb^xdCl@Be)H@vmy??z-u_TIcTTUUX>U@?(=$9Gkx8xPAge%e!oa?xA+E{F%hJ=s&DF)(xv4MCTiP$c z(bq@LIi|ON;^e8*XU>{qw`8f^!bMG9%a-=6>$6<5#&&j`h3t-C_Y{#>6GU?qF}XM^nQzE-;8eJB*t}K;!;>b>+AyA@>L#2MOLw8tQ6BaZ;lES`N`V zd}_acs~9wi@uchsN_A+@eD5)(;30=&BL^o_jE3VxC4Rxa4j1be=USZPtSu~dB_4L; Tl`>A+lOf1-q@BN!fx#L8LC*+o literal 0 HcmV?d00001 diff --git a/images/file_types/rtf.gif b/images/file_types/rtf.gif new file mode 100644 index 0000000000000000000000000000000000000000..67b939081a2847e478c08e9ed19fe7acac0368ba GIT binary patch literal 975 zcmZWo3rJH@7(QED+n|P>)w~O(9X1y-Ax7XwA z`{w)F?_<9E+yg$(Pk;ZQf8dw@$B=(;*gwPtz%Z*vNQ;7o*>cS83gQ1&EoLhTc4Ckh zA|yb<7QR;4LWU=+bS)}fRj5Qj69~P;v2xTQo zHD;y3Y&>Sx{X<5F$Y2SaO9UyGVKG85KVUV4DqR?rbI<1i2%!l2;jb47E(xJ1pd?C7 zs23l4DncaiL{BZzb{d+3lHd*i28OR?x``e;W^>`}1eYoZ1Yl3h@K+ilNpUjVIm|=K zcs*FKMLa3X2N0AMIvBZwiApT9BSCFq85LChUEqN*ODm3qfn(O_@~W(*v9<^!W;-pG zW@u-zbSVxcKo+49isapmtxiQUbf++Toquk(*1G9jeH1?iC>IyBfpS}<5qyd00gME- zCmsAGV11{lKaPaG*d6UiI*8pdAOLqcOAwN|(yO4Ua!4dVXe^51%lJQmq?KrzG+H@D zlqrvhU8B}(jaHc|m2M$NJR2Q3^5~qxsB0z9@^IXq?#_}7L;loN*;J~jwCTJuJZ`~| zsjO+DdP}w1iCr%WV>ft2vi`=5@i9`(K*CAesBq1pDVt}Rm698iO?!M*i!EtSvKIx6OhvnBFbxkVKgCTpa8X7~0hKMYx7`Hc9P8z-FlfTfdGPfyUN!Jw1W L353&p0^t1LN&cHS literal 0 HcmV?d00001 diff --git a/images/file_types/sql.gif b/images/file_types/sql.gif new file mode 100644 index 0000000000000000000000000000000000000000..f51298b3c52d48c58aafb6ed9167e487e99b2ab6 GIT binary patch literal 328 zcmZ?wbhEHb6krfwxXJ(mH#bS`pUKc)%y4XT&i=J&|IaWi@0NIdx#Y|;-Zw{eAD_;d zS;Mt;rrMQ5)t_(IJl(H$bUxet6B(y>7H*uP^y!T8r8UBH8~N_^$EqFEUY37N(?$6qd|URU`utFSm2=})$h?5 z)F7h88_@hoqa$kRvBtKxAEqho1_PHae!r$?_!% waWgQ~Gc+-j2nsRON;1fHce_Zjw$?GoO>viDVGy1>)wRueS=$m{S4ReG00OdNu>b%7 literal 0 HcmV?d00001 diff --git a/images/file_types/sql2.gif b/images/file_types/sql2.gif new file mode 100644 index 0000000000000000000000000000000000000000..adc157b2b2fef80e042cc10752d5272e867d660a GIT binary patch literal 610 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 VtJYSql($|*a@QGW26MFV%)ceL)4l)z literal 0 HcmV?d00001 diff --git a/images/file_types/txt.gif b/images/file_types/txt.gif new file mode 100644 index 0000000000000000000000000000000000000000..3a7f303fd724851d569765a9242b04bf7e911d71 GIT binary patch literal 972 zcmZWoe@s(X6h1921%sx$K7naQ%8!i37(&ecK*zGq!G_to%w%RPaYis^Z0Sr#jA4){ z)XpLhd=Ex+Mw3nkg2F(IQxK)RLMclyLY}}>3f)-W)lB$Xi*Y*|DeZ@@Q(fZq^4Y$e~dXJsy*<0@ZqQaGL8T`^Z zu-`gRQ0Xi@aK(M5 zZTP45-|1h+FI*jI{B5-L7T4jJyyko`_GFElT^pZUn|Lby;gKHBOOF<$$BWXm*FVGi zX9fRL(eLs37nTFwKLbn80>blv??qtwW$@Wb@WtQ3zgB}QYr$11ghs>z00syf5nG5@ z6v6*n4Mc3C#l$eL1W| zOT;XB2O&F>)vVJIF(#bNBSQXv$g~I1Iq|8RAE1| zbe5J(06L^J>-3Rca=3gsLLyJk_tN)IVpCMo(sziFk!yuHdfrXM8az8Kl_)|X+>;3M zl}1QLZN@vtd6-yPj}~r`$Hdkl2+Ph-2^*#aU175u6rF|5Tv+w*f)7MQp88&kPDH!M zpXzMNaBa2|agt?6upP_JQb#*63lK$_PYsSuQ)cYW5%CxKxqSxbz90K_@))ShX}FKd zgInzAxvJ|p64suWlCKxddy@OdaTwxDn=&0CzHKN#_e?he#Cj~9*fe=nr2yCn+vGC& zPe4p7q{pNsr>H77Y|i*B%WSYaV^d4`drZ{O`YoE$x6XsTap?3LWkqxPE)CS{KdQ>s zb~O#xL*jPR?u~EOBxK~X*444JyYV~UvzSILxe8m-H}}par@D*@xu0vz?t(?zmHcI_!R`gpyeT&IJ#UjaofmC*nI literal 0 HcmV?d00001 diff --git a/images/file_types/video.gif b/images/file_types/video.gif new file mode 100644 index 0000000000000000000000000000000000000000..5ddc738340f8febcab03b82862a51069692fe9f7 GIT binary patch literal 1041 zcmYLI4NMbf82-?9wvM>tQnF5QqtbxQi1WyPD9%aoXGq*c60`006X53NR$LtCma!uQ zYgLfWw0cBh&ZHBnnV}hE>yjZAXyJk;R%hxBH)&u%%h2A3%A0~nA%Ds(y>K@dh#SHS?1)|x4jHj@-(MnN$YP16j+U`CIQuo=r- zSQ)P^;k8r%Fp`c55wuWY_Rus(S}~FZw2h!#fbpsrw~pq)XQ%sW?R~Y5zAw*uY0mR? z>s6+;x8YpR{>I^Vj`D9?hTgXheqbFWJ#tl(zq;9f;FRy&iawBj;#4ANyd>|wULO_TJp~#&-7K0Ou!sOzwQ?YyD*zb|p{pncf z&lrSoY$iVbFg_8DPl@p`j6*2RJW4#6OGN)lz{d#*Mr0Yz{*#=Ol8@(;e=j7Z#pFUv zMuCfZhjO20RjEUH2p10mpg_MVY~2CCiY2}orEl%247PM9ZX=3Pg$4lpL7P2R13)$^ z?Z;KPScpg}oxQSLM2S7pYrlH}7gb1UkA03fs-$|OllI6kF52v()*kyRO_tG_cobQK z<)TA*7!8Kzai~*z6iXJR4)qyCmSo&$bj@fqyZX{FNV8U73NESsU(iKx@u9}uh=7aE za6HHF+QhGQ;^K(UcN5w9d=r{)E72|hD>csBLwCkBPUIfM#g5cBfyMs!*n#ZS7)ZIJ z^)6CU>zoKX6&^Ga>g{MKU-p|h5&REe#bzApM{ADYFdqpJ!ei|KsKb^nWU5m9b&#M_5D7v6D(w<`s^hJ5=_Jv!ngkywhY=?Q8-@tmm62Pd=Sh t*j42(HoyFQ)~26}w1IW692)5~jhF9k#y6DIH$A#|{FEl|O@#t%`4|1%>rMaw literal 0 HcmV?d00001 diff --git a/images/file_types/viewlet.gif b/images/file_types/viewlet.gif new file mode 100644 index 0000000000000000000000000000000000000000..5de854bb359ac0260307072202ada9bc24739182 GIT binary patch literal 1052 zcmYk5e^Aq99LJv_=4OH8>yE%sH>VN^2IU#U;G9X5#mu&;$=Wb)b*nr74MlF79W57UQ-v9}i4nBRUyROf@|9GC~^ZLBs&pmg~ z=`%55EG`vM(HcUJ(mWc{NYV^S>z5?ib&C9kNAp)+EjRW8f{rY&=IjHFJeDLsy7|uA z;=*_2WzoM1Kay5_+HmiBN9{#fU3yP}uda|}DBouk`aUja^jCxqRK3wx#Tuv#*WU{t zuVemJ7dlkO8oM7cahEh(|B~Y;isON&P2{`$khIZ6f);mZ-wAD=AbZi(N(DL9*|yL2 zOQb`}m}>}dGzL#Ju<+L7Pn+m#ve%sQAVn?5(iGeEAbn7hY7l2Ew6ksP33hqHviu}; zV$kIcJwBk?3!43)JOteV(0c?_LD0tpjX!7)f%Y({13-HOdS7>`BH?ia=z~BX48zC4 z7zV$yaK%Z7^30RYbL+ivFc81gowTM-T{ns> zYe`MM-7eMVRUrVY&KggmQ7r->KK6)1uXT$ie__Jx4EK&RUP~_ z4C`ayw9L=Xg9{ftPZJFD1T!5pgfPdHU`CDMd;#twc%DfDK*$|)q#&a8&tdWQ&j6r! z`{iQF7Ejaxb2Wy?7E?-y1+m5Os&R+sxPyM7UX9#lFVq{ip#K$yr(pO3jTc1-!>jEs zW|!!wY7b#zQYy7XoKiVS%SJ>Op>4D*PLIJ#%OY%z7+yz2V}C|h#X>8c-QoA;2h8RpAg!E5Gn3m!u%Qm5VBi;K!{?`5fh;dr#lHDG78!n z-1-xU>_lGVQ`VHT1+=4W^pRs?#vQ*Rc8#r@%)1@$;WdU5=XM7q(xYoax)ZD~GpY~1 z^>LyyxAq+SDhD&&au>xEE~<5***yQS{ej=H1+zO2zL{hmFp0Um?_-%eQ`uA|pXMD{ zwy3YoD=G>1&m5phUeFYH2Uqibw~6wE!G5_(v87Wzg7(b(W4Dq|3J&i|DW?XoTSB-I zKCg1-6nO>3OabGBBxgGQ_KxyvSs`6hn$p1c)M`nFe=N_f+|z4z_w?Bc))mvj{g5b9 wZj_MfhuD{jDybB=pl?u0f@q9P_SMmeSEi_fKd2lLXWxue{kTi(Lq#Y42F6M+F8}}l literal 0 HcmV?d00001 diff --git a/images/file_types/vsd.gif b/images/file_types/vsd.gif new file mode 100644 index 0000000000000000000000000000000000000000..aa77d3c1ec93b249b79915f6394715baa3fef639 GIT binary patch literal 1020 zcmZ?wbhEHb6krfw_|Cw4K{BB|YyOM*cUg!tMp9tZ|Bc;+k?hDEmxA z{xP@2r|#*`ywaZr<-85beVbDAD6#T$YR%`ozWqfL_7_duUp9Gf)zsb9Q}@(O-xb<$ zBC_#VMAOmOmLqX3M-n>@Cv_f9?K+g+eK51BJsp$DyKk@5- zhW|~o_O#C3*EZvJ*SzN)v%YoC{?@VJK=-0UJ&O)aTz+i&nv)aOU7Ne{?8L<{CoK3r zY0>w^+b*u$eP!{MAL|d?*nIfbffN6)-28v((XT6ye_ea>>-y8*H=q5!{rvZx7r*bl z{Qcn7pNDV$JbwG<>AOGA-v4>=;qR-De_wz4`}XtS_h0^g`1bG9_kUl0{QLUz-}hht ze*XRs1R_igyetQ<`#uITgx-oUFfdGHJt0+WAoTXZMAkqN_7xLZbA{en0L6vg+CXH( zpBM$Z*g0*BYFt7lnp0&6zFff7H20*S?_e|sjsRshE6&@2gCjl8?WpnPn<-7Y#L~0p;Na)>yXMdCrFV#CHwLs|IjYEgd0D_y~E*{DF+om&H$=(nR*qdGFf^75V^8!1v&|+cS&6U z#J*Q;SKx?&>4ngHmAg45Lhp5e3V`U@gT)LCoX?sz04-Jg$->CMV9THb(g?~E3>-HZ zsyU{7I?^em;@Gkc_}O)?Kp zN)?zUcw)g7jU~Q)(iTzM3Juy8o|nyaad>#)7_&E9(xHZ*k5XAX&7=$xF3fb$ysW3~ zu;I>yv{UVxxqJOtl1;_}hDJsvCWZpV*{s~W?QUzTG}kQsBr3_*siW#W>y4-Y>Cq^wRB~E X1uSGb+9_n3cBJBA6Ki(^1A{dHjc3q* literal 0 HcmV?d00001 diff --git a/images/file_types/xls.gif b/images/file_types/xls.gif new file mode 100644 index 0000000000000000000000000000000000000000..8da8f410460eb7daa3c4e5c0140d7514e41034ab GIT binary patch literal 1028 zcmZ?wbhEHb6krfw_|Cv!>M3R7D{1O0VG<;65-e^KA!-sQY!WA88Yg9($#0y?X97gY zf+i_KX35gl8FE(na>fO`mIZQF<&rk#@^;m7Mj0B`g-TYn>h`sY33V|}4XSP}I_|By zPMxOi9oD`*X8wJa9+T{YCp!d9_lTI`9yQA|VqQ?(jL`Un!O@E%3TEdfE(%Fp5Rtk( zI(=1q%8G={wMkiPQgb(?mn<#F>)T&6VSmxY{biH)R!!YqJ#|mr^j)D1Cn6ht)UHG6-3K#!4(9Y7_|NdaY1W?Bx%=8zwocgFJ!ix0g`4MhEI81; z=upq1Llc)Do4)4cgmu^EZalkq+r^c;uS`DFH~C2Kv?CK|9hUp^ZymUJ;LNSl z=kK1s_UPLEm-jC{`gP^;uWL_!U4Q!f=Cj|opZ~t|;`hCmzn{K&`ry@{hj0Eoe*5R? zyFbs~|9SD@@2ii0Uw``h_VeHOU;cjh_V3g8e_ww5`}*_W_h0{h{{9aHLT_yt7#Jq9 zo>00fA@q)8B5R-syNA%*2qZxjh~PxlT%mUv3=Awlsb?)N3=B+QwgHeEKB41E_r|{$ zfJ`8lMTCJt==F>VzjGKE6o5iXR~3ZbSpXRz?uS(nK_F+s^F0%;wgD{#s+{n<5Xc6K zfb_n7GU53Np?5tK-bqaOUBUSOKhR8}w?L~IAc7NF3xF;Mx@RIMNIejMt?-!0ISI%B za)sW_x%-yy?puYVWhWRI4phdWnf?yS#aa%r3WGlfGV#Dy;}kbwD%5&W2PKb067Dw(q-yZpvq+F z1wiD=vK8ngpxz~Q0T2scwOxTD1|}Av_bPXDN`&6)02Khyvj>YA7&xCbZ2(%T_>+Z^ zfx(?Y2c!{{Cm1*$GW2siNm|M!su?&><>p4`1&5WRzdSiueB4jg%KDp$jgfL&w}_fs z!;1|I56$V3vV0eLvM80sQp5Dz4yNWKa{3wp27vv zSSS&V%y-^{j8^#M>m=)BKk(pL{335m5hW142=v7mzJ0Yw{!P&PXWmO@5FYb8PDjIlhT6E;K%N>s4}Y`t#vnv%3QWgEat(BGEno literal 0 HcmV?d00001 diff --git a/images/file_types/xml.gif b/images/file_types/xml.gif new file mode 100644 index 0000000000000000000000000000000000000000..e40ecfa23394e708585d69d65a960868f78f5946 GIT binary patch literal 970 zcmZWo3rJI86h50@8|FQmsb1^}wn7hf41qE^Rq_=I;7qwvE}HsW}~+bKAG%wx^k_=_jn)PFl7X zwCyZx%PeAo84!eE&iR(S3lB_Yrl7)7SYau?)K1rQmeh8Z*4fTn?K*eu5q16fh5E;p zP0udhV{b4oZdqS-zxT3E@AE#d{e$?@CBE(#-+UC`ei9u6zIU9@$@@MCK9}3~(c>TZ z;{W{B&wul~zxzEu178ON-+u*u3qC>nK zKn8M7>Xmc!1Vg+hI^O*&+#=&BfMUWaP)s<6y|W4~kHH`u%Qg#*2cxAFfN&gprvX#@ zxJ4TIF^ybD_>uP2HxM(5Ci`k90>W!hNh@tyeKX-5v~sOxcrC5mLxg$K4*bG!HI7Oq zf+|!^CVc8YWI~t>wcxoFSaRhq0l@hYCt<49Gi*V<--8fS1^SWCXDKlgD@esrYrbVjok*E4wsGfW@MI|NfLyU~n%lA?JHX;<_*(otg77XH^gqN-~OwvjN-Z{=gt0g_I zkVP`BEAJ#DGZCYszR4ys)LFLwoW{jnZMjQ!yOP(-c zzkz)APk_9NxD$Fa_Y-#_3NT!bN&vMh=O&uQ4k=^+VP}&)xb1WLTsGE6d5xs zB}uO{Th;Md+*3N@;i!qj4$UdkmRCM3o;=sc#bzgT6-`~aE3vELc-QHXqs(RJO8Q2O zpS?Rj45j498n-cffksh&ww-b`Q1&CF(E^W@55Du6awgi;+jNu`1X FzX3rGqF?|3 literal 0 HcmV?d00001 diff --git a/images/file_types/zip.gif b/images/file_types/zip.gif new file mode 100644 index 0000000000000000000000000000000000000000..addcd22826f2c3027dbd283dbc35e078f9f96c76 GIT binary patch literal 1005 zcmZ8g4NO~A6u#{$t1e)#EnO6prON<+e(7EP(tEm<$}8yj;Bw7Xq$!Wp zmdAEgC0#rbr>lMR;_#1fl`mwbOY+(7k{=noIDd z3YvQ`VXd0xmO<+2$f4K;sf2$~<=rTn4=M5gPNMu8{9=G1hHlrCSt+PL20#n|=~Lzv z=+;e{TZBN!m!1ZI2PwrrY&bUS^; zy2uK^_mXOa5JnkK39vcn#=BUMYVZ*cc}Y_Q;+D~mCq{f@w$eq5gSbY!O#qniF6zkWfaqeRcqym5yL~?di5B#~MU^M|_H%=^K&O||hc zafv%+XW0Jb#yrb6FZYz#W(QO+!Ck{$8O9qXf}edkySb?H1~+lXpa zW^QU~W@2J$Y-}=f&C}UypUqzTbl!&N^MPpN^Tk_UEZY2h>9&{4w!K`jy!4zFxEE)%yLf*YA6^@xbd%2VZYF{ASycw_6Xt*?I)X zc(dc!+g&H#?K=K;_lb9VPrW;E=KcQD?+%`QfB5`|!{^^0x$xo0`S(XJd^mRT!->lu zk6-$5>dMEn*FWt!^=|)}cL&eCKYRhG=Kax&A5LERc;fPh)7L(oy87|-wU0qlu2-&k zF!#_46B83)uz-VywuItO7Dfh!I0hY%HJ~_QVBgjd*VNq7+ScCD&dSNr%gNo@%);g8 z7w#Rz#xyaGJ!WdCr;8&e`?BTCE%W>$ebfT%EX_@g^`)YCR?UwHaZ$FlFflfe5ZkfK zFErT6LCIWBMpsGkGZ;4WX+|tG(S+?X1iU^|XZr9?zZc?doj*%2-NE zMDXKkU-y;?4;Y<}wTWqJ{rFwtxO1W~c@MjSbJ@#B3sRcd Qc!G+ePHuX7%7MWe09YRtpa1{> literal 0 HcmV?d00001 diff --git a/images/forum/19.gif b/images/forum/19.gif new file mode 100644 index 0000000000000000000000000000000000000000..0a5a37f2e591baaab97c09243dde4f93a4848a3a GIT binary patch literal 456 zcmZ?wbhEHbW4ijMlo5l|^jhTU!fs=s)Xqw0Z1tuoTd1{<9RJHdN=$v0` zy)K^vtk4^xkOh~*==Dhug-{b=3WXOa^ey4wSiW+Z`h-RKn&-E?>{Db={8t^4ky)&e zn3tKGSdyBe;O^$MU}whwS0ghmWB_ZQ80mV%r)Hl?%LR z+aIyfVzm3xM|rFu9b z>|tSGVPFSh1~xv21Nj~zVjU;$2hLz&VMHil21;{+l?WWTzg|J-AA|GaO&%^Ia}aj%0o8CwNYx*8Vysj# zLox=*#Xuzy68{+XI|+K4a3LvS1-cf58Q6FZ%>NM1z|iKL%qYpip!lykBqOs}Au%sA zH?br&MZw+EO(88aCsm<5u~;EFKd-o?s5BWQQCggtm#z?+lbQ%oc`_930^68^T}> E0B!h}9RL6T literal 0 HcmV?d00001 diff --git a/images/forum/3.gif b/images/forum/3.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe5e522b15588682a59ae074ce128078b719518f GIT binary patch literal 112 zcmZ?wbhEHb6lM@)SjYeZ|NjFK2q^w!VPs%nV$cDJg5(*P9H;biaKDsD^3Dkq5a}!8 zT2pXC%;)At-K1ZwD&f-({XF>O_0_v8ycTkZ{7rC?U)6EurI)B8Yi9MH4lmxVuT~`R IvNBi$0CT@8GXMYp literal 0 HcmV?d00001 diff --git a/images/forum/30.gif b/images/forum/30.gif new file mode 100644 index 0000000000000000000000000000000000000000..10063690f8cc0f694252c676786dd34f4110e95e GIT binary patch literal 379 zcmZ?wbhEHb$MU}whwS0gZqn%-qEE%w#UEkc`Y?g|y6^RE6@yVuj?Q)Wnk16ovB4 zk_-h$s3HY-Pd9}y1p_@xL$0Jsg`mvzj1q;Cdv=W72ppoT?MX3s&dC7VVia%Kx zWf_$E$G2qG*XgSlV_kt@4fMUD=Cs@1Bxd zYTIAQ9lDd*>l8%xL7A2A8k#ZSao3b5cwJO`A?j-8UYB(9p{09dEgVA8s zHSiZ;I-WQ0^zD4kd48Sq-M)3>@|F9W*u-!Ae*^>!0th067`R4)0tX2skwVUD6d^%_ z0*WZ11`RaPLJ!7Z#0WECNHCzlL?D6@ikL7D8B}m05y?nJPRRTWDKt@tVw9pL8qtha z^n{fTV-#Z=SfvG-&ooB#u)n#)^+XO6OftnB%AQ;nH7u~m5^LCClP&hp?hP>FOxn7q zp~Pe$gBi-0bRLGJl9P!{W-4=1&dF3tO%}44rL4(DHnWvI=|nARl;e!B6s}h7561WUu9h2|IC*liO_eCz3Tubsk9KDlWM<*`p zTITK3maN!9t;zI8H>l^`>R+e-9y|b3oQL1~PhjIV=Fstt%J)w;X6whNz3Tmu4h9SCEo{ZY z9mr~&C(r8N{ASMA%zyjpm9yt=ZDJFD@c$7IFbE)s5MtmO2?`t}kVFbOt5Jjm4GJit zgc>x^L<>C_gApUlgdxFz0uzAW zfedCSW72sTl1fe{GMTB&NjWD|DK%NhVwSQd8`;cO_M{WFs8NnH!cw#XwI4VRJGU|W zSu&SU_rWwq^nm+Z(t4wUiYlo_4K>wLkGv%tb?;1hMRw^%Oa&@fp^7Q*&DK55sYE3! zRXHV;9Enk<3RSF9)l{RJ)vBKI<{h5-XWDCbawf-gpo1OinD#9=PAlScqLZEKoEBPK zGBsW3Vwbw68{Opy{wYnVOzH!45e-IxQvK0o=@u`q-Vg)$iTp$_>+Z|hk=Pf z2gn9$;Adc9(wV|L^Y|pjhe--im9O?Pw=bgUe#+r=D zfh7{G2m_cISQt2gn1P9#N1)QI`9hybv1SNDo{52(ft!I1C@7}ty+3ECb%Fsc!uVLl3CuH400K9J-2|5hc0N8YoGynhq literal 0 HcmV?d00001 diff --git a/images/forum/56.gif b/images/forum/56.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a943eea25a0a9dbfc4fc40107ab43d630cd2cca GIT binary patch literal 341 zcmZ?wbhEHbU+MM?PJCwKS?hm^?kej z-U>~8q69I53uFW{11AtN0gYgj5IFN%!47OXSc-*#1*n1@D8*Y*xaW_-sg(^|wKHmw zG$T}SOYCC2*MIWn66P{Sun9&W!&!kQurhD}P2l9%zUv>)K809jWb;{}=5t9focd^R z>gKe?!pPDf>)Ak>E7({6Gw?bt2ekU1taDLnVo7R>LQqI6yBM~Cow)uQi!U|st97$H)aE#My!3EMRfgkfh~|tOyx4pbRTmhAl*?YzMLwD_n{d zBo%?s!~&OLi%~P1-3>8M4&(xm6x603lS(Zln~-Eej4GwjWT0-CBL+7P>>(sKOc83U Yh(@>p$>AUw4kYuCd^@FB1L!4d0OnId*8l(j literal 0 HcmV?d00001 diff --git a/images/forum/frown.gif b/images/forum/frown.gif new file mode 100644 index 0000000000000000000000000000000000000000..b99883b6b0b31df98f6bef2ff8d517496f3aa3ef GIT binary patch literal 878 zcmX9-O{>mv5ItTN&t2$lC|Qk-C=1zmxv67AC`;?1WTPaKGyH=n@LVs7rj z*SPWtY-BagFTd5({AbSF%yaYBjmuZ=Z(|#O@c$7IFbE)s5MtmO2?`t}kVFbOt5Jjm z4GJitgc>x^L<>C_gApUlgdxFz0uzAWfedCSW72sTl1fe{GMTB&NjWD|DK%NhVwSQd8`;cO_M{WFs8NnH!cw#XwI4VR zJGU|WSu&SU_rWwq^nm+Z(t4wUiYlo_4K>wLkGv%tb?;1hMRw^%Oa&@fp^7Q*&DK55 zsYE3!RXHV;9Enk<3RSF9)l{RJ)vBKI<{h5-XWDCbawf-gpo1OinD#9=PAlScqLZEK zoEBPKGBsW3Vwbw68{Opy|b9n9A8P37LJ&7Ao5{lmfaH#l|s z`Q-~g_upZ2_3O(=_iw&EcJ0Nlv%f#@e>`*P%l?n2yL+Ev=fUpDXAf_@KlkL`<0}^r M?!MkSau_@R0I@NALI3~& literal 0 HcmV?d00001 diff --git a/images/forum/happy.gif b/images/forum/happy.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc136ce4d730eb88276f70e2b8bc4fa0cc4108c6 GIT binary patch literal 880 zcmX9-t%{am5Iut76O={JVsR{DFc=j75YCoe6%0n(Y!GZ3#AG;v3WA7u1%tsW@B&6y zaDz9YEZQw%8qb4I`j~g-{LOs3cXqB_-`m0#{^0*3AYc$c5Fy0CH4+p!NFa$6a#o`V z2^thoLB!v>pdv4?hVfDvcX z);$d+CIcDFP{yS5FeH_nOk^@snUiu(rc!FMki{%zO*XQbt?WrBYEh#cXN09_1!_NV z9CmJF_OoOzq3(lejOYRPxuo?*1r=3NjT&mIr5<@pHtOD)@`~)zjhG5lutF76-kYs^ znp25NR;qGJC^-_NP8F(HrK+h$HLF!U<;^=h^Ut)`?&M64=|BfN)G_T_aGX}e=|m?x z)j2J+xMXU&(8VrwO*gvPt?p@GlNVx7GwYPVWeDq-d^bK3U%7lJ?~ckI`{YJ5t!m4{MLU0n|qjJr#6*eUTo&{;n(-yw_oDS z-KWgwy?-{AK7`?SBs09}j-VvjL)nLdA?ZI-Kos=tr7 z%%-!trLD2!?eg#R_SxRx;^X80|Ns5{{rdX)_V)Ji@$u;B=;h_*+}zyQ*x1t2(#Xij zxVX6g|Nj6000000A^8LW0012TEC2ui01yBY000GuU?+}bX`X0W5^U?TW1%!rZP$%b zbcAyMHU&#ilK^c2mQ8XnIGr^LMp7#EHkEC7-hfDn!s85kJ@EC~UZpcerd8wdm)1qcfq RtgWmJ2s4u8dIDP5iC|&3D2NB}04oHw z67d8oIYAn+TIa*BdhBm^{_Vc~yL-Dg4!5z5KluL$2p9wqLMNKrK z8Lj9ED;>rt#x$@>3o@T+jOby1bBXJT9444#iaC@$xh!f}V38%(u)!u{4?#fJ2{hMI?%xmbxivf9H$j=I?>5a zbxsQ{E}5Dxbg@fa(~WL+t9#nl5Xns&%4#XF8)2U1yfvw-}+BrbAUO!v#I=aw3+iKUta#Y^9&ab zp6p)xef$EOn;*YEKHPtP?)KA@E2nRdUtPZbe&@xH*n4^D{-bAaPTzfgefHtEdmq04 Ld~me2gPY+32ek_od=)lW8dBR+x>PQ-ru>kzm0AD!T(13QPnd7@>#>^N>LWClZm2ROE!r&yYeBg(yZTYN8R% zXhlz0=`cnyrh!#jkoinwL=XF$OI%OnFu^2K%%SYbWl_Tdi!8B*4K~?g5AEInBhI9) zdm2hi1~QnTj7jHVNGds*$YiE6C*_<>rPO30i&@H=Y-BTA*^^GxqDDE+2usll)PCSN z?A*reXUSYb-3QYc(F5*tN$ZUYDypO!HPlo~J@S@p)V(w171^a5F%_s_g({}JH(U2K zrxKN{ROOUVawJBbDpavbRa1>>R;zl-n|FBTpJ}h%$(bC}fev=4W7@aiIIW1&iB5K^ zb6RL|$<%bAi(TrPZgjI--P67%FT|c^)+vF@5Y{pIZhRuXfOTKwa>=zM@59kM*>!Z{ zvaV&`K5fa0E!3J!Z*+rt-mU(1@$ab(nBpq@)_($f=}E?>}!}zo22|zK`F2 zEM2>C+2&olF5X>x;@YfTr(eGP@czrUrd9iI-h1%s)$5NRKknGETp8sILKo(H^$->CMpv#~G(hc$x1KYd<(+WIvr20>!6duj7n(6GwaBx-B>W+p5 zTe)Jag{QbA^BQPh73OZvieJON>}yHWmcV(dvK0L1>*R7PXtmU6mvks{Ye=?esWSMe zv$2(E$!qXwX{t`}Ve4z*6H(Drnak_bqS~UVsl0BT%1Z5i)peXa8Z7)9xqMU(t}EZo oz|0`%qr|>(=Wc#>1};`@T_#o;wOhAuNwY>f`9Hd<>&RdY0GjikP5=M^ literal 0 HcmV?d00001 diff --git a/images/forum/tongue.gif b/images/forum/tongue.gif new file mode 100644 index 0000000000000000000000000000000000000000..569d95c39336fc6f987308370dec7212b1d314f0 GIT binary patch literal 881 zcmX9-Pm9lS5Pp=h4nk3K8W$-J4vJl=$HhjQ*D!l0CGGhU4lY_=!L(f5oi%F1!D~?D z6}ZT0JfD0{zvesh{G0i0-@S8VbN3`p;t&2m0s;mB1Q9|ETq8k&g9MUDA!jv;kf1>U zMU+s32AXK02V*c|gqbiT7*Jp$5WxsVOqhoZDmamdWTYY|WPXMenkYmuN>LMyXhth~ z!b*oRiZKnW(t^xq8Y6nx-(2E)B8LeknPLuQPcDlZ7FcA7HEgiS7JF#-1{iTBZQavQ zVlt4y3}s9@4?|MP$wVeIl{qQrWGba53t7xk)?_1_*~*@Dq82sEaYk5*R-pC+$6@C- zWQteMRjQh5RI^&uQ{KG8GyhC`?M}|*m=1KXLmkt;1;=ScoKAGIQ=QX7 zi%X`a3tj9|*L0(s-Rhq9HF+WSG_y_#T!yfY$#>%u@dd2=B9}|9C3zo?-pQ_`6PI-@ z^Y&>=R&1fxWO}0;)bnojuM2;V9)T&Yz;FF0uyG%A{LDt>r>7fp_ScvFAGe?5{JkeP zuKqlHiH)rfUmxvmzc_Jg@7JZ@2ZwJiUf0gXJ-) N_3_Iecg~%{&3`WVemwvH literal 0 HcmV?d00001 diff --git a/images/forum/topic_stick.gif b/images/forum/topic_stick.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6d6bf624377d6e48dc7c6acb1aeb8df40a854a9 GIT binary patch literal 442 zcmZ?wbhEHb6lM@&xN5|3_{L+#xE{@tnWnW1TV^i#{QcMV9XlVsdN*^~+Vc;dM^4=w z*E#>6fPh8g(l32|KWuIPDk!|Wd-v7HZ?8|De7s@9=bD;N4C;q3=IGO0|}yl;!hSv1_mPr9gu2}pBUJ#JIoBw2;^is z(YVSWhs#$xSjm;u!Pif5Wr@eueGi;FpQvcASj(%zwy7rm@xu%TKf|Po^RKTKaWXim zD#yiVSMXI=YjGI~X~%W)RqzPv8%)#CW>x0W?bH`6moZqfM1z?@OJ&}CQA6RS%T%>i zP1`6exm0hrMw7DY#-&QTkLak^vuYpNEum=0FRQ1cqrt}LqoSpAq@sfV(lPD`BTjAg z%Q{l>hTz`^$BrEx+7!+sqjHxq#k4Go7`wOJHpl9nE9 LU<=v=^rkfc81u3e literal 0 HcmV?d00001 diff --git a/images/forum/wink.gif b/images/forum/wink.gif new file mode 100644 index 0000000000000000000000000000000000000000..a86e6db6d5f817d974d66bf1c12dee388c5ad0ec GIT binary patch literal 150 zcmZ?wbhEHb=@u`q-Vg)2on0q!kPl4b$}SC zfuDha$)d$}=J5%P50jLmDzhqr__uI6nRYA@?pkb>_ax%j#@n`C%P+Q~zf+eE9JF`}bLUFI;-`N;YrCix)4hUcGwj)~$Q@?mc?+==t;KU%q_#{rk6O+1$sE zAD=sS?(*f!*RNl{ef#!<2M?Y+dGhk*%eQaee*F0H+qZ9j{`{$0b!gqeGslk~KXc~H zg$oz1T)A@d=FPiz?>>C^@Y%Cx@87@w{Q2|oTTiqr<{vq7nczVP#`uWnpe^X6NAK;^yYz<>TjIZx#>~5@uMi zfLB6NP@qXlT1J+EaUCOrimIAay}E{`miAhvy&H`9jMYtqP0h^Lu3yJsBWYr5XJ_xQ zXD`zRS5;d!H+K)ulcyLACD?4eeSH0{?qg7PwKee%@V0xno`EOGL_IjfE%cr4?u4gD zhLTh*#VOAcOq_3G7|H*e<8pa1RK zw>2kkYFEsE_TtscmoFDDUK|`8{Oi}R?>~QuXHR?f?Ai0@&p&+lke8SD^y$;ruV3%l zwJRql=j+$6FJ8WU^5luXzyE>-3%-B<{^-S13r)9a64s#YFq zYHITH^V_*|=keRm9zTBU>+AdW?b`#_AHR6KZbd@(Z-&<+&xa zRdsar_N<++FK=MTZKPvtVtRV7*?My=&P&G378W-wHLT>Vg>3E_G8^04UDva;mv@+N z;8kz*4}JtC%fG%-CeRrQ`xU?8F5*=a8|tDr#X{mFKv0E-nFO|SWv pYj9e4EL3D|ZD9=zu+%bW^%B(%TNN;K(#nYooZ5wSvqU%;tO28ue{ui- literal 0 HcmV?d00001 diff --git a/images/help4.gif b/images/help4.gif new file mode 100644 index 0000000000000000000000000000000000000000..94d8d7f885a509263620941ea5b7c62e36efd8dc GIT binary patch literal 67 zcmZ?wbhEHb6kyTf8}ZR|4|KF4oWWF Uxhd;k>aC83xfM)Lv_u)K0p61rzyJUM literal 0 HcmV?d00001 diff --git a/images/home-acollab.gif b/images/home-acollab.gif new file mode 100644 index 0000000000000000000000000000000000000000..cac789b412ba312ee52378d28a8942d5bc409f65 GIT binary patch literal 1667 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 RV!vRSKpp&M-+}}L06Wfy{}TWJ literal 0 HcmV?d00001 diff --git a/images/home-file_storage.gif b/images/home-file_storage.gif new file mode 100644 index 0000000000000000000000000000000000000000..8269127ea5548f2b1bd4dc4aeb525ec72cd3cbf4 GIT binary patch literal 682 zcmV;b0#*G-Nk%w1VKV?T0M#@A|Ns90008sz!hnE)zrVkKe}BNhz@ML=-{0Tg-;?6v zqNSyB=jZ2WXlT&T&j)Nn3#u$hsVdq&(F`_-<%K-5cT!q z_xJaBcz9r7V8X(K`1ts^xVYNdhwtz2;NYFt*Vpjy@Y>p%u&}VVx3^GGQ0eKa?Ci$f z-I}PVsIRZDXJ=<1ARs_MK-=4o|Ns9000000000000000000000000000000000000 z00000A^8LW001-qEC2ui05bqH000L6K!9*aED9Nhq;kn@CLzYCl*q6QuGp-0J7_$n zLYjC?9)l{}G`AxOl*Poi+@-E(V*&R&E+>cVfDw6mWqf@!4uEzlgM?&;eFp@Sl$Dm3 zlZ}pJka7fIphB8*oo}C^V556OhhnEj3Yg-oXeih!GptLy3|q7aMGsQ$il1G#o$HUG^J(D+UV+J?9}ewWdjBG`1$(#_w(e; z=AMbe^>120Q3I6~{1$}+f`<Kr0&YE@-hZaZ|U2>!vV(h=4=KiWlQK^Jg*J zK>#dMMrom-rcDJIHiWY_u4OsLBMAfu9V(Q;il+)XHJow(Ei`UgW+xQP=C;yn4-`_|Vrb8%<#q zW*viuaABzn+939rj-Dh;m@!RG91Wz(W1A_f`;00yN`^)V_&RW*IrD7tjy!~=M^_;Il-;@i1bo{}7t QjNU^qWL{rsgtj06J4NnIi2wiq literal 0 HcmV?d00001 diff --git a/images/home-forums.gif b/images/home-forums.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ed32ce0ea5572adef97ea62a17cc1d1cdf6995f GIT binary patch literal 1653 zcmV-*28#JdNk%w1VKM+R0Qdg@;JkIr%*?T|v8=4D%Eh_y@$kv8f!Mft>gwvkwVm49 z+NP$Z($dn+w13XRslU0b{>x^xw6wCavaYVK!L5XY!NKnC@WZ{Yy}iA^vzztDYx2cx?!#{9z;WEVcGtLh(zSfhw0_gJd&;qZ;o;%e z*3{b9)9=J?-@JAI&1L`2Wc~g9|IcIo{{H*>``fyA_Qz`f%w_!i{P_6z_4W1t&Sn45 zV)pj-_sDAO?Ck03>Cm)&>cMdM$!Yz|XXd|h;=OeL&1U1ibpO#}?(XjM^Yi)n`T5Cc z&9i?0(P8?@Xw0&I(Y1Zrxp?!&YxBlz)wg=(<>mMH_rI)#_3-EB<>T(x2V?E*2}Vg-Q3&r^6>4#Z`IGm)t*`S}0LV!Ex6xV5g~;NH;C(B|go*LzGc--6B*3{43*384Lgu}0g!MdyT#%#B&mDad^+1c67yqV?Z=FGQ? z-qE(*)4jW@hx+>Yz`eN0#J$V3hRw5o(X@Qi)6}%LyUonW%*@Ksw0+Oc%g@ix$jHd8 zuCTkQh{VLi#>K_Q$H&FFpqZJO?d|Nsz`D({f7aI6!?&Q$#Hy=V)*k%b&Fy)HLlb{n`=49OT z7vqZ=B!hbP%=E!ckD)91#2bN2Y0O<8tfagd1IP^`fH)BKc47?{D1_E!bD&BTC42f#V^s$8EY^X*kB&tbhU`MiCX?xti(aHm)Nw-`Kp@cw zHPaa6LV!H_BZf3XWOUOKmE<8(4G5eOfDk+sw8I5Na0nF*su*y^kYjLhSpm*GVcbnJ zlt9G@TgecI3m_?m$|Ltw=}!(=l+ouAf7C!4KX)v_qYUT(@Pv39(GcfsGZ=D%fOSEU z4u?KuAdhfA5I};OnI3Qg23y7d0Ko-22=~t%764(J3~d1O#gHd-Vyi&GXxFD2#dv|5 ztQG_^EI9MPfI><#sHN;pKBUmau>Xv5LJVu%-~$d*K%pz1FA$)`ur{z`#U((jL4g5B z)b&IN`EXmnJfQMO$36?35vXv7=p$*Bbad0jI}*?`Flnh=vm=k1_)tF z;Gq1&0CM!K*bI?SFoFy*h=2t>hSW;X1`!m1G7lB7;Iv|31j9i9!7wpVFcG}*bp;1< z8xjK%G=Z`ZY1Ah-MV_Qm0S3zM1aRcu5*;G|&KOS+1mP6PF#yN?1R+3!j7MYx2q3r} z05U9BK9C(1WTArqLU=w=69P1&%>bR7E>Hjibg+!;6Cp6cGg;6skqsRz5D)-6LgcZK literal 0 HcmV?d00001 diff --git a/images/home-glossary.gif b/images/home-glossary.gif new file mode 100644 index 0000000000000000000000000000000000000000..41e8646b54551dfb4f7cdde1350865d742beb178 GIT binary patch literal 2237 zcmV;u2txNqNk%w1VKM+R0Qdg@(AUnmxVVIbgx=!ayT!S+z_ab{?X0fkv)J9&e0+Siz_fybf_Qj%m6etE`1Zxk!|3bh z;N{=1yR5#*z5hmQ&ehESewo0?zKMv5|F*@=)XS=>s>;&IsHmu(o}SRx&;R-Q$;rw8 z^7Zla@bB^OzrVlb=jXMxwg1M^rKP3+9ZIaYssH@_>+R|P04)CiGye%Y{{SZb{{H>_ z{rvp=`}_Ok=jZ6?==u5i+uPgi?d{gw)#d5r<>lqK!nNk=<>lz)^7Qi4+0py_ z`_|ml{{Q}+ot^LR?|^`S)7sL{*3I_!_0rkV)6>)H>gwIy-QeKh$Ir#=?CiM0w(INb z^!D`T>gMU~>FMm~%hSrdyu8%f(vFUf?CE-_) zOzrUO*WK3D+tb?L*~!t!|1Vjmr>Fnp>6Vt3_V@PRoaEg+WlK=4Y!okAzlBNGSVcg-{`uY0$ zCQ8A9W+78;;*n_f6{!N(;V25{AVAfK%QJ5Nv_@f0BPx!-x9YQ=4O+GwqqD?4c070UF1C4Ts zVLc4t#Sugl_5%?^2th;=J^aALjdA#M#+6W1(Zm)p2vJNh<|t7FmxV!cLKXvo@MMf- ze9?zLP6)vV7f7J-2NFtr5yY4N$j1a4N|>?UWlI$C1sfWkGH0E4`sljqTMnoSP;vh;qkJ!pY8AxzJ zh7wYc;e{51oN*Y!<*s6w6HO>FM2rX?Q3V95N1&ELzjj1URc9bU=fJ6X_$dV6%N9g$|WZL zLtSA&c!9+aKJ?)(6k7-(M15Qofv5^9pb(?d5UR^iVGC9G()!v*0BOO`2h>6W#4d9M zBkZnsU|1Y{{Gp0;w66q>Ko=2?KqdHiZ-a$l1R}&R5D)^a2xdUx1OQOL4XTiZ0x5w4 zP-vMq;6V>O^v4bV2eJlC1ko@)1R@W6Z~$KYqliZ=%o;=iha*j)PeGKChXfFS5w~%`4+bIzK|qNSBIv*>4&j4@zyS~raEB%e zfC&T8A`uTD#R6tYiU&x*3ja970U$7rNjR~S{tyE*DnNh;{6h#VXoUa-u!vbMU<3ld z05Kv#h)F=88n3v+C&(~__WffJQZNApFkp`fAfN%86o?NTzz75o;2rEp!5uIFgCcA) z5J<3s;(joih5#%;0^CqX9sH*R69_{9BUr#95c+^b^uY>s7y&kHkj{Vj-~jU&fCMgp zf}(Xn0@)P61MndM8PH&vCcr`>>JWr2EaDEge1buWaE&^^Gzgz4LqXoa3kp=>2}($T z1yVqXG#~^BU3dTn5`lpSY@s1Ppo9QSa0P<|!VD&`Kr7JjkS@?b3ld=g61?dH7zjWL L3Hu2{0s;U#345Q` literal 0 HcmV?d00001 diff --git a/images/home-links.gif b/images/home-links.gif new file mode 100644 index 0000000000000000000000000000000000000000..2e8639affc62d52e9c851f194b9b3bd92fd4a1dd GIT binary patch literal 2148 zcmV-q2%GmuNk%w1VKM+R0Qdg@$;rvJ(c9zg@uJY*!`g$Ha*XQTw$>;RA#>K(G!K&8fWMpK#($bN{)P1k2 zeSLkJnwrew>DS@dYin!y`T6wp^kHFPi^8If!kfF?>Tq zsHmvw^YwSWiJ+jMg~5-5yN<1`t@!x(y1KgM<>iLLlj`c~guJJ?xVUq=k!_fXvee44 zv9XeplE=r#+vx4i&d+zJmzAuv>hANz#KeKahOVxz;o;$wz@)#wzv<}cq1EP^$eU)l zd91jwq0-^Z%*>CEkFKz>pU9%n(9ng&jIhkI(CP7+qo0w+me%R-eZ7*>($aFletW-+ zgT9=b#Hy>ey4~#Yn#iKh=kK!I>(Acig2IjQ_xjlD@S(}7+UDx5xx1pXxQoS+io%zt z(9YuK<(8I~z1Z4z!GVs@=8DFT?f3fEA)YN*ohSuNXyVA?M*w6d>`_||1wa&(WrG~-Z=gZ5>mB^HzvABxDySUNW z&e_iS`un%SxV5jeXt09&{QJJjypz71x6;+G)8D|>%Ej2tgP@vYt#`ZO?r^_+jL49W zsj}ec>wmtVs;H`@(bb@>s)n75g~ObrO-00wD zW@i8Y|NsC0A^8LW00930EC2ui05SkF000R80RIUbD58#)4hW~DnJ}=S!-xNdD5-_- z-Wf@$NKv#ty=*C1l#Z>nyZaGuo!VMvgb%5Ytp22 zI8BKP0vR$8AYj5o8$i5>F?2ZUMG{gzvzoFpW~jhakuof*flQ6GCy8WKdLYG#nJf)S z0SGfHt6djdht4vDt^yNUaehS5(P2#d>CtN-ksLhiO2&&4qPkK!RQzjFNBQ{d zkvb0fK|tgOPn^Io_%#A8q);17J0KYUkYMOvmNm?ozcEs#;fG&MHdQCb!pAr?@P@@v zGl>#36hI7s&p&}!z#I>0Ou?Q=JxyRl9s|`-MHAvYQUh+ka373qang(h$IZK~BO9-%P*@{SZYSTln_1wg^4KQyqosh*wk+08R%VABjRGEm?_ zBFyr!2pFLVLc#-d;9x^C0*!J6T|SA>0V;U@>f#Y~^^}i3bX=gw4g{d%i3jddkU%KM zpl|^Y3}~XnK%-o9l}}q-0`9Mzrjb`}9T+G1zbe7q*aaf*dzs zg98KBXn;>HDP8e`lRg#y5q7vEG~k9^SX@)a0SmO?g%l@vvA_ZbXc9v@Hx0$Z-dXug zB?cfMP{+>x1d6m5kd*~t3{iYaA|x@mPkEqc7XU_VVHflwOuvx`VHh})2x%~%)eCNv zo0S_$gfIR>LzF+#8%Jbe7ZFAT!rT$@o8Lo-5C(%40SmkHi9Oapg9(IT3Tt2kR(f)T z7w|xU4gm@PCUA`e_M`w_bHL^}5Qqtm1Pd0#U_(q11|uBdb3IYO6gUtrDsi9y?(+u< zub{$#xWEVqV1r%%6mW? zyul}<2m`sE_>Vsd(I<5nWDWH+f+OTYj9OykKMGK(tki)61nb8qUJ!z;yit>zghCOr z0sv565d&_xWL6O10#v2~3i|U&E04&52}lMDfk5Ry@?ZpC`eY2CY*7R1u&a@j0Xo7Y zrZHnU1v^AAhsT7bFw0D;(`Ldejv`9g>DM5MeS&u!8&++K@El003ok#RS}t agEX{}q63-05psZ#4j^C_6CFrE0029I+-zI` literal 0 HcmV?d00001 diff --git a/images/home-polls.gif b/images/home-polls.gif new file mode 100644 index 0000000000000000000000000000000000000000..6f3fb36867d4c55b77fa61d0b69fc47c94d2fc7b GIT binary patch literal 1095 zcmd6k?NibR0DynIDeY|e)<(_qvX#-foLak?bxX>Vc{5+Isi&@)wlb~IwC22J%tXyH zP(nZx#ZZw@5%d>xDj15qEje+aNr}8EScp39@NUPh{S|vYJfEMt2OAd~dHg~I5CK>L zKqwRz;_FL)W>|P!v)PxUB7-92ar9Ts^xT1i?n} zJcYuRO^jZ?RI|9aI5IL)QbH661O|M8TrOW&Sm^ETwJ78U(-NQ0FDUrcSafabe1;CZ zk>ByBenv{8acnl5xSdtb*J%5%8#tZXoFAo9X>LwsPtTz7m11^Yzp=U`5{aG*8(D4L zD=RA&izS5khr{9c=QIDUtu3q7T7(y>)oQof4g5a{a>4%#`Qn2=JOMo2gplOBmBgy* zntQdCKr)U*N+j1)a1E6B1PYCu5KnKS)KMQlYNj%}D9kqM6E3- zxFIp`_d!x$KU>iwe<~u4$@U~_wI9v=rAvINL&A0QGjOE-jc!sb5NHI_sR`VYaAbXa zZ&8@VVE|-K~-bOg@|8r0IRCegDGJj_LJPL_WAflW|}SVSm~)<@QykIIaQQPfE?g=TBVm1ORh!47%&O+f-Jwb|mxJkZ!zQ<R;n+#Rv>qA3hAL+E2xjgx$d$8cB_1PHuiq`u#M(Q`ki zrGkk8rGP)K21EQLCsIO0)f%Kg7@s!f1$~rmga(9tpH4n?y} z4^M6_n@G{?>Ci+M!pB_yZ6E{2jzi$cW=hiOBFwpj*eeIgDb^GVHOoQo2+6#qu+Z8$ z-V#P$XScQKD#!@-jRE1&h`kVcJ$7%nt2Gvy%I=EU-WQW`ISumZ@=3dQep3l#Z5ox< zbtI4DLw%5R&x<;o6z3lmKV9KVK_`zLKu6}QJru06ETp2pEC8n3NjuF`?!aatKwnP) dR+XNO^sdUwM)nbrnKg(}UmQk2ghPQ7{{rhr|Lp(( literal 0 HcmV?d00001 diff --git a/images/home-reading_list.gif b/images/home-reading_list.gif new file mode 100644 index 0000000000000000000000000000000000000000..b697c6415ad00c2c439ccf1c03d73e70fb821df0 GIT binary patch literal 1518 zcmZ?wbhEHbG-fbj_};*|Npev^Y30h)zHweYxxvq zd4;=IPL=v;SgQ-qsEVsf4?b|tt%&XAKtXk$x!LerIRZsR&*9d6nd(?fB$~% znl&3|x81pXa&~+1>AmZ&oj<;5PMe{w-i)f)$+2eB(_I#{W>>|!KX~w!M7iSH)htc1>28bNk%3S%m>&eC(xu>fb(pT+~z6 zmg0Q*_?~w!pRSxxapm}KPeX}`{S)53cyea%`lt7AmY4wrpR%X8oZf$0yaK zzI*rX;L+p2&<2M5C>W>^Q2fcl$iUFRpaXIMC{HkO{AXZfT$SK-Qih#FSS#klhQz}% zqAXr>I5J!qxy6>OkUX$)@$r5I=cXf{l$Bf?#kfUI1ROZXInf}wt>nV7CoXJS#bOOb zZp-{Ls^6hrA!kabX?z@ zvHhNbz%(rZ<{bZ1bG^%zVsi#W4m#oaO--Ey%rHlR|2SnWtAFw^Jd;9zQ z2b$TRD@!wt#Z3no;iXIt!aBKYf`o`w$`{(BRrgdH@KK8$H;x?No@!%(M z9SbL&X#W1;@#*>g`~NYs7QEm}4034#rdT$O2MtV6DPVga$58H4TA`C8eIXgbKD!csi+I z<+WQg*OW3$=Sa?rRGU?>D~(~c=cG)BjJRi-GZKrpads4+(JdFBYq#&gGRA6-gfZ#J_?)MdFacR}l# zPbX%!w#URvWuG~CL{Hq{F7KVEYl_cRXgpV})|%=lx6dX1sheDJ?*vCSQ<*nkE(auY JdpIyy0{}zw8NdJl literal 0 HcmV?d00001 diff --git a/images/home-site_map.gif b/images/home-site_map.gif new file mode 100644 index 0000000000000000000000000000000000000000..33c150f38ffbaf48c821ff2182cd227b0c5f271c GIT binary patch literal 1483 zcmd6m|3A}t0LMS%;fNf%tK7*YUlMv8>iXjJXp%0je2MFe)1@!Ym(xS3>*~6?%7ko% z(uL7{X*XXtM!p-{%q(3DL;KD?)_fT@hS}%yzPi8Sp1;4IkJm5H?*b0*-FMCl@`9GQ z5KxbR30e+A6jj>Gm8zIbCeR3gR*N8rMxy~R4Rm*bQ9KZf(EE3QY6h?vXij!HvmZ!^ zJPrfJrz7D(09gULS+J~p#t;c6HM9Z6;)?!Z%V>I=NIt8TslmJ176l%$sm@@D_lP*M1 zl+w_0`UUsR*et2z?SrO~$L$}??Lekt~N>^oZZYT zdowOmEtOW$&`jLlFH8Ey=k&4)@V=pLNQp8!ekkAwg+i592gC5pXeEQ)fL#8ieo%q< zA6P|D4x5tCmH;jPpRw6;YTfcGf?)4qtGX5iB#CPIQM&+5!-D1I2qJf!gPR*Jrnfc^ zDHnP0d^xE^IxhW_#zRhqzOBEX z+zj|b1q6bKiI>ae=%qMV`j*O@kd4dHCy!AU<78nEkV#RvRst)9y+riF*$xhq%;>|@ z#gCc>)GJ6OPstQc_jh;pa~SP{>Di%ztPUag59t4m{fdzR1aTqvk2gOy0hs_O$JF)+ zmDrhVvfee4LoH&aS~_@F4s!YTGdAtibq@J&J!Ds7Co99$I`%}Q@NMUosrQmU={e6O znA$S}pRGH?AoS2CjuFg$RZqvQckwIoi`MP>Vj=qYOaENwL%M5a;n?se5pD4vQ+-vD zroTJsc1~mLTEjzYI$rG%1gE;>e3L=N7&KeYjN!?@%`)4sZSFL6AW~(_Se=W*&&Hvf zFQz(}J(v5Nvut9_J-2o=?Tp!fwc4d*i?3PvxoDqT;?j#J@UQJKKKP~&8&msT*Pa*P z{IZ5WjbTlkS-q|j(QdDaaq+j@5Pbbch9SxANq%VH$eeLl$_Dr2W>yeL8j8(u6z6Rb z^)Tbs7DTnC)NqqreQ$j3{&d}oGlYdJV%tih`C9FEEObZL!+voIRT>lT8j1gs+zDPx z%}?&}Jr#BElOS?biuq4z!Y~7iM*D-CosUGOf#}$=+ZS9)Ol;N+#*X6~^u-dV@8XIN417mc`&x>%w((s7u&0)V|4>rPQ!@R@ctbp^T{m+crqz9pk6X&^Z ze`MM~R$rTASr$R$fMlz~eMFMwUdTSg!q?G$o69Y-&0RAOk0=OAbIv0h>_6lgVjSXg zg4mS3j%aZmO6HYjs_n3hNZ>5<2>= zeX1yvLAvb_&O0KZ)H*DFJ1H+|QpqZE-9jQdQbtLbMD}TQ!A;euf*Wr=Io!KzxHkj? Gefuxh;wM%B literal 0 HcmV?d00001 diff --git a/images/home-tests.gif b/images/home-tests.gif new file mode 100644 index 0000000000000000000000000000000000000000..c79d90cc6f17f383c84ba34dbf82b0fc87398d8f GIT binary patch literal 1938 zcmV;D2W|LANk%w1VKM+R0Qdd?{{H^o-`~;E(azP(*x1+9p^;?B;_<>lq`^Yiuf^~%c1y}iB7&CUD!`}p|y^78WJFMdx($e7I;Oy_~&(F{5>gxUe{qXSc@$vDux3}l&=I`(CovWJc?Ci_S%gNEm_V)JX z>gCVY&B)Nk+S=O8%*^KI=E%^;-QC^9#KhFv)8ORaoT{1O;o;lc+xq(Y$Ir#$=Hce* z=I!n6%+$-}>Ey`B$mZ$g;^N}W)5_l7-qX|5(9qE6>*wd|=KTEo=;-Ls*U#kWQ4+|?di3(we9fj(b&(^+0w(q!_Cyo$I!;c#>U^{ z-p9|z#?Hmb$;tBc^0>IT&DG1?;oI}{^1i;l>+b8;*4Fg)^zZTS%hJik&BNj4;IXl> z;pX6_vZBq^%)!CI>h9|J`S|6buc@}D>FnvIv!mhtyU#?Hjk#mM&e_Wwz4*WK2y zx~$*f;k(7Txw*N^&du=6)YI9~->kOg>FKq=v+nWk*xlEnub`l=ou#p&|Nj2b*wCA) znBG-z=<)C2aEJd_dhqh__xbqd>goOd{@2~r-q6$c`1b#Nme1DCr?aI0jHAQM!S(m` z$X?_V(lB-_ z;pN}G#=8HQuG-|{%F@Zf$-n=qyVBUu?(*@*&cnCDw4|}3{{S=S?C0d~?f*7jva+)O z|NsC0{{R30A^8LW008~~EC2ui05SkF000R80R0IZxX8wafd~^ST*%M|nlKCp&hWEh zP8%x#GDh4eFe3mtJi6rRH-qD>ekixSdJ%<78W9Ezh!EkiCV-hS4Fq!nq{|8iC{YgJ z*uzQCpk(A!>jDP|5K0cBN_9{K2%P~h8dc(RG^mS28`oLuN*1M^4`|bV0C4mM4l17b z7&xkA2uEFI^Xd)i423Baptc0{VRs{%y@<&UL&2CzlO-tsaN&q2v1OFBaA@Y{*cD1c z9Kl>p3_#SqV$DLKz|jLG9*$E+BQD_LhLs^U(v2##q2CLRO%%wMP3T&^el9o~V}ud` zh6oW52p?WHNg+E!HzuKmQb3Fj9SC^;px!*eQFGa_a5T{ZrHY^!4$0mTp+OE147!%X zwZ4777)Kq@PXZ(qVBmoUk}v`X5In&^1yGzpKmlE`V^4qX9aTX;1WZ7{hai49K@3@l zk;MZUOh*;~mtfe>10kf4f&>%vQ{MtO=7?hhBdCbjJTA)6!4+3XK>&FujWE|y*+s-2 zStnR9+yy7la6|rkUpwBtIAPE2oWU04N6(~jjGR`}eaH0%#EC`9j0%UEu&!nUC8?iA4#iRYU(G2|{ zu)q~R{17jaEQmwa8ywC5(GL?kFp)zJ0#Y}^5n|LJ1z9}M+fN2E^mD-l6H7jVUJ9IG zgaCVB5=RFRq|j_okJzx09@F$=a8QNAa0mqy+yQ&+u4j6<$1QCl< zXMqQ5)OZvt7&8>bQ2q0a};5$VIxcUMqV;-h7t^-1SL>Gx+nm_ z2SVWiG$29D$`+J%0AM4IXiZrZAb|u#AOQ(50@yf!!V|Kf06yvpFnpzuQaCCx22g+w zIhYt5{DC8Z7@GKR_OgLMd~hQcC<8b|FhsHp0SspF14jg6fKSk26M`8c8K4mlX((U| zQ$&aXoDc;z+=4t~aKHC!ZLGVZ%!?*z- YOkoBCNTebYIfE(qKo5gdNI(DpJ5s4K(*OVf literal 0 HcmV?d00001 diff --git a/images/home-tile_search.gif b/images/home-tile_search.gif new file mode 100644 index 0000000000000000000000000000000000000000..5d6b89e02ec1d3188d3bad3a2fdf9aa2dad1e9db GIT binary patch literal 1906 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 F1^}H2_5}a{ literal 0 HcmV?d00001 diff --git a/images/icon-zip.gif b/images/icon-zip.gif new file mode 100644 index 0000000000000000000000000000000000000000..c29470ce4443e905f5e16ed50567597f01dda1ae GIT binary patch literal 164 zcmZ?wbhEHb6krfwSoELaKL{`!J9ez4rGh$JbcZI-LZ$jDHSulDx#<>lq^@$oTs znKWW}rn9==-{9Qb+}POI|NsBe($cuNxVzQi`uh6){rw1Hj{sea5HUO&w1U6W!Kyi>XDp35% z!pH#Bssj=RnZdxKZlLP0a*t3;?#DaMPZ?bznI13TWA9@0P~4uJc&DkFvHijG#a$jk Hj11NQ?`AEC literal 0 HcmV?d00001 diff --git a/images/index.html b/images/index.html new file mode 100644 index 000000000..945c9b46d --- /dev/null +++ b/images/index.html @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/images/lock.gif b/images/lock.gif new file mode 100644 index 0000000000000000000000000000000000000000..af1eda7f48a15447671019a71727317fbbb41fc6 GIT binary patch literal 266 zcmZ?wbhEHb6krfyI3mmN>({RvH*Rnw_4jW-bLY;T`}ZH@PFo$&zdn88zPE4RK7RY@ z#EBD^E?ru>cH^?myI#C_@$KjDE&Go)t=j+X+qb`e|L)ka1H|FfuU6GU$MKAUhdY+Y{9LQZnadMCIkY-n7_2BPRFyDTR{T1@f~F z_ZlZSW{LO)RBCU?;owbM zs63CjH-4fwexW&lqd<+bLy)#blDI&JszQmZNRP8agrrcHyHc6FR-M6EpTbIoqgtE0 zWTnMWf0kE zyws4t*L0YwiL=O(ywQ`l$)d&AtIy$ik)3snn4i7Ogq*0Kx5JsRyrR0ssK3jr!p^kI z*T>)M#N6n{-RY^j#J0%Mxy#hU)!xtH>ec7)#nIQo&eYT2<>T-5mz|*0+TGCB+0NA0 z@%Q@Q<>)McsZN%;NPd`RqQ7se$Z4Osai_s&m#%Q2w{oJne5}KMuEl?^#)P!Xj=0Q% zrnjBP+myJ;t;Nu=$kVpY*}T->!rJA(*W%3E;>y`uh6$`T6zr z_4D)d?(XjF?Ck35>ged`=H}+)41ejD`b`kdcy;l$DWRTKj+hN2@v|)KS0>b5q8c>!D|y zn>TR(;9xKZ!H=FfaL}YNV{4BYGi8VXSmOihpgUHJfbqhG$DclW?f_6?#zz?^NW8#! zLa^+DwPei6*we<%t8-ZT;E5x^aA6hH%QpEBlB z*lX76qi8;L;I#fGXva4R07lHS0YHe&c`pQc`F7wNlRgc)QsRjzQYT3N zf8P8j$QIvpkli;8AhOMe5qXnDTdtgw0v{t8sicYCptz!v0Q7*QASXl#Ko)Kmg3U1U zWcf`GdyHt-IXBEF=6)ZnsUez!?gsz_O2X-ll!pw%ft}wd*G4lHev<@g%;ji+0s|)L z4HX)ADn$q`dLxA(+AV5j8)un=MGs_@A*%(h@^Oyr`+GL?l0zgEL0n{+a73F=C;2>>! zvbDGB>gw(7?P;L9+uYqqimS-n z=IrzKSd_BJ$jC2voq(>!XlQ6Aa+z9-qs-0Cgt5qKYHGW?yL_y~khsmG#n!UR*qWM} z&(P3`qp`ZZzxw?B)z#I>$;tNl`*xbF%gf90@$uH!+12Fh&CSid)!}JrX_=Xs;q3C6 zzR{+prc8pJwb0(cz`$HwT;$~Bu&}V?<>lMk+xhwV{QUgp=H~tW{`U6vUY^b0|HZJw7-%XF326M2&u)prfQZusR3=Lkj|BouEB9v9O~B4hljr31&DmB*`wi z6U`GfIyW~43>ZQ!csipSy4|1~+B*dRf*1g1W?*<4X zf;1#}x8nv42nc29QlSDNjU5IIn2=!YhpiGArD+VIOBz7~1#&cqAWX;r4FwDkl*SPh zL5MkWARs_%NQMLjau#@ZqvfY;cQIq~XdnSqDh)h><}eULmrx#1IS>edDN_U!NpmE% zVWF!9tx$P@@Zew(ls6m@gk8&a>bm5e?Gb1(A1z0Jwb> d91tL(1A)f`I!K7%r7si~50EHfQZh;q06V?158eO( literal 0 HcmV?d00001 diff --git a/images/pen.gif b/images/pen.gif new file mode 100644 index 0000000000000000000000000000000000000000..bff8964cc652344457d3f4c912a68c9532532572 GIT binary patch literal 84 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

    ghd|7 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 literal 0 HcmV?d00001 diff --git a/images/question.gif b/images/question.gif new file mode 100644 index 0000000000000000000000000000000000000000..02fd44948886b81e0da26fbe0133350a90fd15fc GIT binary patch literal 136 zcmZ?wbhEHb6k-r!*vtR|$BrHQPc%^c$->CMz{sEj(g`wyfyLC|1ZUPTeH&#ieS3S=Y}PXo34l41&^6d)m55X+dxd&-`?A4+rbSOmAbKZ$ef`~I)rKfir_ zd#CsMqkm^4ODjbxm(h$o+EGTOW{qWQtyraXH7l=nl~tLHCUUe8%ACEvUhSiz1tm zMjJ7vd&S$tSvz*I$5t-uU1wd~0zoa_IB|&sN`~vL)AL6hP%=y&1ONpVfkq2zFzE$^ z%}Aq-Sg-di@dGEjB}eSBl}k3+5;Xq7qPv@3kOYl?u;?af?2;vMK*=z90EJ^L0*w~b zjKT#7n~_GlH+tDo=Lb%CLXyQW9F+UK*nJLX_<3Psz88I7>98(%++Va8$CDPw_uh}= qgFX`|9p;7gY%YiIydZ-$0RG-VssI20 literal 0 HcmV?d00001 diff --git a/images/rtl_tree/tree_end.gif b/images/rtl_tree/tree_end.gif new file mode 100644 index 0000000000000000000000000000000000000000..b33f857c9514d16a28290a68f026c54464565e0e GIT binary patch literal 107 zcmZ?wbhEHb6krfw*v!Ddz`^jJ6rlK%g^_`QkwFKj6=;G00|SeM!3odRb055_HU2-F Uz0EOgTJoxOIj{ExvoKf#01^p3r~m)} literal 0 HcmV?d00001 diff --git a/images/rtl_tree/tree_expand.gif b/images/rtl_tree/tree_expand.gif new file mode 100644 index 0000000000000000000000000000000000000000..b25febaf477ceec7c56e4034d959e95e51104f5d GIT binary patch literal 117 zcmZ?wbhEHb6krfw*v!Ddz`^jJ6rlK%g^_`QkwFKj6=;G00|Sea!3odRdo7|5RPSfd e@KUs7Q`M?U^ji8sGXMGMx~O&U|A;a&SOWl77C-g? literal 0 HcmV?d00001 diff --git a/images/rtl_tree/tree_horizontal.gif b/images/rtl_tree/tree_horizontal.gif new file mode 100644 index 0000000000000000000000000000000000000000..c654fb6ce3331ca2d586e3983682efadbb1815bc GIT binary patch literal 105 zcmZ?wbhEHb6krfw*v!Ddz`^jJ6rlK%g^_`QkwFKj6=;G00|Seg!3odRdo5m{-F@6a RpfAa@E@RcY9BCH@YXFU`JH-G1 literal 0 HcmV?d00001 diff --git a/images/rtl_tree/tree_split.gif b/images/rtl_tree/tree_split.gif new file mode 100644 index 0000000000000000000000000000000000000000..cbf5395c02e0554f733cc103a58c700e0fd8f0b5 GIT binary patch literal 110 zcmZ?wbhEHb6krfw*v!Ddz`^jJ6rlK%g^_`QkwFKj6=;G00|Se+!3odRb055_HU2-F Xz0EOgTC!K?s}tMqb59OqVXy`O&_zD^ literal 0 HcmV?d00001 diff --git a/images/rtl_tree/tree_vertline.gif b/images/rtl_tree/tree_vertline.gif new file mode 100644 index 0000000000000000000000000000000000000000..542093629d68510de34cde2fc867aa60045beae9 GIT binary patch literal 108 zcmZ?wbhEHb6krfw*v!Ddz`^jJ6rlK%g^_`QkwFKj6=;G00|Ses!3odRQy;vlHU2-F Vy>E)gq-UJVw2p7PCGEms4FFNZJ}3YH literal 0 HcmV?d00001 diff --git a/images/search.gif b/images/search.gif new file mode 100644 index 0000000000000000000000000000000000000000..bbca7436c794a910dff7b1523320dc56d69a51fb GIT binary patch literal 315 zcmZ?wbhEHbv}WLEIP#xCUq69Ce*#0od4}`<6aN2Cm@r|&`SS=~L_P9PHs2{|YIINvG+M89B5~mZJ%z9} zGgu-mq*$E~mU+K9Rxt4_qXdfzXRO6JamjDBs$#wzUTqDH%FQ|n^#XicTs-Dxohsd0 zY-zkKSpuBATzrBZwKFsYc=`BPShD@Argd>NZ{4z8DSGKMbG0F}(f2@Z>qe!zT=<&M+K5$*_Ab!`AH#v*s{N zpUF^L$539uP*}u}ox_lk$&i}Hkd(|28O7l4!Qkk`U}w)@YQ|t>%%G#oAS%kh&(FZa z!@$YOz|72W>C&Y$XU?2FdGf%41AF)GUAlDXoH=u*O`A4(^5ov$-jU2?qN1Ff zoaE$WCnqN}Gc#jjoEfOLTT#K0DFU`Bz5j#R%#;;TtsLe{K( z!5*_1R8*gE9`j}3TmNC@4}%%Z4F?`2REPxfm00O^^mOZV$rv11GeNRAQ_4e=mw|5nc?NGX-nlDUK;l%WcB$kbAi z%2cH~Wm-#7%2JiOWF}kD%2u_yWuv9A(kiPxH>A-cS65glQ+a>>Yy%IFLO zL9HSys-i0l6RjQDQ61f3pwV)qqa5v73p83#g9#T!HY1HTVoZCAvx!rgooVc`l}lw+ zcBOF(1hvlU>`oI0lngt|*&cty0VTuaK>$!-5oola29sVu*o-vVh9yf87(i!QG;SQ9+%C)$Z)Nekq8@5S*zj|r3pbHZ9So5T09 zOw&$%K9>J;4*p)#?%iK*P&+-PWMinGY$6jW~g& zHGQG;_xfImpa1{=A^8LW0018VEC2ui022Tb000HK;3tX|!DJ{$bYm+7{lVXuh?`~hin z00+g{!tYxifDjxG1QL2!etm#+0R)9{fQftsln`G40gDfk7L)=ATpbORl$-(r5C$16 z5(EOJlBWnBI3E-Z2&cNcp9>inBPIwCyr>8Z4FoPQ3kJgw2nGfh$vGbY8w?&7+#U^I O)+06>92+t@ApkqvYktrG literal 0 HcmV?d00001 diff --git a/images/transfer.gif b/images/transfer.gif new file mode 100644 index 0000000000000000000000000000000000000000..3131207da03a8143040916c295cd71dd537b0872 GIT binary patch literal 468 zcmZ?wbhEHbjA9UBSj57RHuDSv1H+j!Xa0i$kPQKf|GE8KLxP^;UO&`S0=I=eRW8Zy?S^egpZ5tdL0v$?J Pkpe=BS_bJ;Xpl7k-hIL6 literal 0 HcmV?d00001 diff --git a/images/tree/index.html b/images/tree/index.html new file mode 100644 index 000000000..e69de29bb diff --git a/images/tree/tree_collapse.gif b/images/tree/tree_collapse.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f05065f85883e5d354b784a365b20c0ddf6ab06 GIT binary patch literal 115 zcmZ?wbhEHb6krfw*v!Ddz`^jJ6rlK%g^_`QkwFKj6=;G00|SeK!3odRdo7|5RPSfd c$V(QT6jw1zb?dITUrxPTez#&>ydZ-$0RG-VssI20 literal 0 HcmV?d00001 diff --git a/images/tree/tree_disabled.gif b/images/tree/tree_disabled.gif new file mode 100644 index 0000000000000000000000000000000000000000..7893680c037047dfe8cc6e25ac9e6140bcbbd630 GIT binary patch literal 116 zcmZ?wbhEHb6krfw*v!blz`^jJ6rlK%1*nOUL5BedKxQzoC>osbT)o#K`at!5293OA a(MgviSBO~e%)EJO{qxLb%7 literal 0 HcmV?d00001 diff --git a/images/tree/tree_split.gif b/images/tree/tree_split.gif new file mode 100644 index 0000000000000000000000000000000000000000..e89ce8045e3e48a6ce582b11899ecb70ff8e2a9a GIT binary patch literal 110 zcmZ?wbhEHb6krfw*v!Ddz`^jJ6rlK%g^_`QkwFKj6=;G00|Se+!3odRQy;vlHU2-F Xy)Pto literal 0 HcmV?d00001 diff --git a/images/tree/tree_vertline.gif b/images/tree/tree_vertline.gif new file mode 100644 index 0000000000000000000000000000000000000000..542093629d68510de34cde2fc867aa60045beae9 GIT binary patch literal 108 zcmZ?wbhEHb6krfw*v!Ddz`^jJ6rlK%g^_`QkwFKj6=;G00|Ses!3odRQy;vlHU2-F Vy>E)gq-UJVw2p7PCGEms4FFNZJ}3YH literal 0 HcmV?d00001 diff --git a/images/unlock.gif b/images/unlock.gif new file mode 100644 index 0000000000000000000000000000000000000000..87823b7e6f2acbb7c23ea2e5ad2c4786668e8133 GIT binary patch literal 266 zcmZ?wbhEHb6krfyI3mq(PlZBCiL7G7aBnGmRfwldCT3<@$yo{){oY$KkE67CUUT-(ZnOSh3Yj(re6_I%} zQqCUO6gf|f^;lCT3zx65iKl1S2FVOn&t)@I8K$WUNK7`I-pz70EBwwA?$mh+cU8sn z3kpSQB}I$H1yckI3psSsM7jj0_A;F>vnzaBrn zdGqG8XU~r7>h|>Xq@|^W+S)!24LxFJHo?~RX;sz7r%%h`;-)z}FSfAQQCpj3Wp%^Q zaIKTm`#E#G?Cn<=8n)TnZ{EE5lD77BL&KB$`qvB$78Vt)j)=IPknpO${-&4L)0;PI ze0=ur-+zA1nkNSiTy%C`HE-U#Q>QNL>fWxYxov97fEOtKWC6?TfJl&^9N0=78VWpg zq*xmpP9(`FNgFmi6qw*3=Q_DPKw?{jz@erU7HhhiT#N&`4lvDWTs%Wy$s~nCng)wG zd3+mvxtd&M8HG8V*aR81x?D9F#YKB1nE82pjXZ^lnwZ#4g&j04FG1&e~JJA literal 0 HcmV?d00001 diff --git a/inbox/export.php b/inbox/export.php new file mode 100644 index 000000000..1c657363e --- /dev/null +++ b/inbox/export.php @@ -0,0 +1,111 @@ +printInfos('INVALID_USER'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} else if (isset($_POST['export'], $_POST['messages'])) { + $inbox_messages = $sent_messages = ''; + + $my_display_name = get_display_name($_SESSION['member_id']); + + // inbox messages + if ($_POST['messages'] == 1 || $_POST['messages'] == 2) { + $sql = "SELECT * FROM ".TABLE_PREFIX."messages WHERE to_member_id=$_SESSION[member_id] ORDER BY date_sent"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $msg = _AT('from') .': ' . get_display_name($row['from_member_id']) . "\r\n"; + $msg .= _AT('to') .': ' . $my_display_name . "\r\n"; + $msg .= _AT('subject').': ' . $row['subject'] . "\r\n"; + $msg .= _AT('date') .': ' . $row['date_sent'] . "\r\n"; + $msg .= _AT('body') .': ' . $row['body'] . "\r\n"; + $msg .= "\r\n=============================================\r\n\r\n"; + + $inbox_messages .= $msg; + } + } + + // sent messages + if ($_POST['messages'] == 1 || $_POST['messages'] == 3) { + $sql = "SELECT * FROM ".TABLE_PREFIX."messages_sent WHERE from_member_id=$_SESSION[member_id] ORDER BY date_sent"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $msg = _AT('from') .': ' . $my_display_name . "\r\n"; + $msg .= _AT('to') .': ' . get_display_name($row['from_member_id']). "\r\n"; + $msg .= _AT('subject').': ' . $row['subject'] . "\r\n"; + $msg .= _AT('date') .': ' . $row['date_sent'] . "\r\n"; + $msg .= _AT('body') .': ' . $row['body'] . "\r\n"; + $msg .= "\r\n=============================================\r\n\r\n"; + + $sent_messages .= $msg; + } + } + + if ($inbox_messages && $sent_messages) { + // add the two to a zip file + require(AT_INCLUDE_PATH.'classes/zipfile.class.php'); // for zipfile + $zipfile = new zipfile(); + $zipfile->add_file($inbox_messages, _AT('inbox').'.txt'); + $zipfile->add_file($sent_messages, _AT('sent_messages').'.txt'); + $zipfile->close(); + $zipfile->send_file(_AT('inbox').'-'.date('Ymd')); + exit; + } else if ($inbox_messages) { + header('Content-Type: text/plain'); + header('Content-Disposition: attachment; filename="'._AT('inbox').'-'.date('Ymd').'.txt"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Pragma: public'); + header('Content-Length: '.strlen($inbox_messages)); + + echo $inbox_messages; + exit; + } else if ($sent_messages) { + header('Content-Type: text/plain'); + header('Content-Disposition: attachment; filename="'._AT('sent_messages').'-'.date('Ymd').'.txt"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Pragma: public'); + header('Content-Length: '.strlen($sent_messages)); + + echo $sent_messages; + exit; + } // else. nothing to export + +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> + +

    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + + \ No newline at end of file diff --git a/inbox/index.php b/inbox/index.php new file mode 100644 index 000000000..40cd93961 --- /dev/null +++ b/inbox/index.php @@ -0,0 +1,177 @@ +printInfos('INVALID_USER'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$_GET['view'] = intval($_GET['view']); + +if ($_GET['view']) { + $result = mysql_query("UPDATE ".TABLE_PREFIX."messages SET new=0, date_sent=date_sent WHERE to_member_id=$_SESSION[member_id] AND message_id=$_GET[view]",$db); +} + +if ($_GET['delete']) { + $_GET['delete'] = intval($_GET['delete']); + + if($result = mysql_query("DELETE FROM ".TABLE_PREFIX."messages WHERE to_member_id=$_SESSION[member_id] AND message_id=$_GET[delete]",$db)){ + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } + + header('Location: index.php'); + exit; +} else if (isset($_POST['submit_yes'], $_POST['ids'])) { + $ids = $addslashes($_POST['ids']); + + $sql = "DELETE FROM ".TABLE_PREFIX."messages WHERE to_member_id=$_SESSION[member_id] AND message_id IN ($ids)"; + mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: index.php'); + exit; +} else if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (isset($_GET['view']) && $_GET['view']) { + $sql = "SELECT * FROM ".TABLE_PREFIX."messages WHERE message_id=$_GET[view] AND to_member_id=$_SESSION[member_id]"; + $result = mysql_query($sql, $db); + + if ($row = mysql_fetch_assoc($result)) { +?> +
      +
    • + + +
      +

      +
      +
      + | +
      +

      +
      + +
      +

      +
      +
      +

    ATutor Developer Documentation

    + + + addConfirm('DELETE_MSGS', $hidden_vars); + $msg->printConfirm(); +} + +$sql = "SELECT * FROM ".TABLE_PREFIX."messages WHERE to_member_id=$_SESSION[member_id] ORDER BY date_sent DESC"; +$result = mysql_query($sql,$db); +?> +
    + + + + + + + + + + + + + + + + + + + + + + + + + '; + + echo ''; + + echo ''; + echo ''; + } while ($row = mysql_fetch_assoc($result)); ?> + + + + + + +
      
    title=""/> + '; + + $name = get_display_name($row['from_member_id']); + + echo ''; + + if ($_GET['view'] != $row['message_id']) { + echo $name; + } else { + echo ''.$name.''; + } + echo ''; + if ($_GET['view'] != $row['message_id']) { + echo ''.AT_print($row['subject'], 'messages.subject').''; + } else { + echo ''.AT_print($row['subject'], 'messages.subject').''; + } + echo ''; + echo AT_date(_AT('inbox_date_format'), $row['date_sent'], AT_DATE_MYSQL_DATETIME); + echo '
    +
    + + + + \ No newline at end of file diff --git a/inbox/send_message.php b/inbox/send_message.php new file mode 100644 index 000000000..b153289e0 --- /dev/null +++ b/inbox/send_message.php @@ -0,0 +1,238 @@ +printInfos('MSG_SEND_LOGIN'); + + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (($_POST['submit']) || ($_POST['submit_delete'])) { + $missing_fields = array(); + + if (($_POST['to'] == '') || ($_POST['to'] == 0)) { + $missing_fields[] = _AT('to'); + } + if ($_POST['subject'] == '') { + $missing_fields[] = _AT('subject'); + } + if ($_POST['message'] == '') { + $missing_fields[] = _AT('body'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $_POST['subject'] = $addslashes($_POST['subject']); + $_POST['message'] = $addslashes($_POST['message']); + $_POST['to'] = intval($_POST['to']); + + $sql = "INSERT INTO ".TABLE_PREFIX."messages VALUES (NULL, $_SESSION[course_id], $_SESSION[member_id], $_POST[to], NOW(), 1, 0, '$_POST[subject]', '$_POST[message]')"; + $result = mysql_query($sql,$db); + + // sent message box: + $sql = "INSERT INTO ".TABLE_PREFIX."messages_sent VALUES (NULL, $_SESSION[course_id], $_SESSION[member_id], $_POST[to], NOW(), '$_POST[subject]', '$_POST[message]')"; + $result = mysql_query($sql,$db); + + //send email notification if recipient has message notification enabled + $sql_notify = "SELECT first_name, last_name, email, inbox_notify FROM ".TABLE_PREFIX."members WHERE member_id=$_POST[to]"; + $result_notify = mysql_query($sql_notify, $db); + $row_notify = mysql_fetch_assoc($result_notify); + + if ($row_notify['inbox_notify'] == 1) { + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + + $body = _AT('notification_new_inbox', get_display_name($_SESSION['member_id']), $_base_href.'bounce.php?course='.$_SESSION['course_id']); + + $mail = new ATutorMailer; + $mail->AddAddress($row_notify['email'], $row_notify['first_name'] . ' ' . $row_notify['last_name']); + $mail->FromName = $_config['site_name']; + $mail->From = $_config['contact_email']; + $mail->Subject = _AT('message_notification'); + $mail->Body = $body; + + if(!$mail->Send()) { + $msg->addError('SENDING_ERROR'); + } + unset($mail); + } + + if ($_POST['submit_delete']) { + $result = mysql_query("DELETE FROM ".TABLE_PREFIX."messages WHERE message_id=$_POST[replied] AND to_member_id=$_SESSION[member_id]",$db); + } else if ($_POST['replied'] != '') { + $result = mysql_query("UPDATE ".TABLE_PREFIX."messages SET replied=1, date_sent=date_sent WHERE message_id=$_POST[replied]",$db); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: index.php'); + exit; + } +} + +$sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."course_enrollment WHERE member_id=$_SESSION[member_id] AND (approved='y' OR approved='a')"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_array($result); + +if ($row['cnt'] == 0) { + require(AT_INCLUDE_PATH.'header.inc.php'); + + $msg->printErrors('SEND_ENROL'); + + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + + +if (($_GET['reply'] == '') && $_GET['id']) { + $onload = 'document.form.subject.focus();'; +} else if ($_GET['reply'] == '') { + $onload = 'document.form.to.focus();'; +} else { + $onload = 'document.form.body.focus();'; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$_GET['reply'] = intval($_GET['reply']); +$_GET['forward'] = intval($_GET['forward']); + +if ($_GET['reply']) { + // get the member_id of the sender + $result = mysql_query("SELECT from_member_id,subject,body FROM ".TABLE_PREFIX."messages WHERE message_id=$_GET[reply] AND to_member_id=$_SESSION[member_id]",$db); + if ($myinfo = mysql_fetch_assoc($result)) { + $reply_to = $myinfo['from_member_id']; + $subject = $myinfo['subject']; + $body = $myinfo['body']; + } +} else if ($_GET['forward']) { + // get the member_id of the sender + $result = mysql_query("SELECT subject, body FROM ".TABLE_PREFIX."messages_sent WHERE message_id=$_GET[forward] AND from_member_id=$_SESSION[member_id]",$db); + if ($myinfo = mysql_fetch_assoc($result)) { + $reply_to = 0; + $subject = $myinfo['subject']; + $body = $myinfo['body']; + } +} +if (isset($_GET['id'])) { + $reply_to = intval($_GET['id']); +} + +/* check to make sure we're in the same course */ +if ($reply_to) { + $sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."course_enrollment E1, ".TABLE_PREFIX."course_enrollment E2 WHERE E1.member_id=$_SESSION[member_id] AND E2.member_id=$reply_to AND E1.course_id=E2.course_id AND (E1.approved='y' OR E1.approved='a') AND (E2.approved='y' OR E2.approved='a')"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + if ($row['cnt'] == 0) { + $msg->printErrors('SEND_MEMBERS'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + +} + +?> +
    + + +
    +
    +
    *

    + '; + do { + echo ''; + } while ($row = mysql_fetch_assoc($result)); + echo ''; + } else { + echo ''.get_display_name($reply_to).''; + echo ''; + } ?> +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    + '; + } + ?> +
    +
    +
    + + \ No newline at end of file diff --git a/inbox/sent_messages.php b/inbox/sent_messages.php new file mode 100644 index 000000000..c1ed715d0 --- /dev/null +++ b/inbox/sent_messages.php @@ -0,0 +1,178 @@ +printInfos('INVALID_USER'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$_GET['view'] = intval($_GET['view']); + +if ($_GET['delete']) { + $_GET['delete'] = intval($_GET['delete']); + + if($result = mysql_query("DELETE FROM ".TABLE_PREFIX."messages_sent WHERE from_member_id=$_SESSION[member_id] AND message_id=$_GET[delete]",$db)){ + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } + + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} else if (isset($_POST['submit_yes'], $_POST['ids'])) { + $ids = $addslashes($_POST['ids']); + + $sql = "DELETE FROM ".TABLE_PREFIX."messages_sent WHERE from_member_id=$_SESSION[member_id] AND message_id IN ($ids)"; + mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} else if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} else if (isset($_POST['move'])) { + $_POST['id'][] = 0; // to make it non-empty + $_POST['id'] = implode(',', $_POST['id']); + $ids = $addslashes($_POST['id']); + + $sql = "INSERT INTO ".TABLE_PREFIX."messages SELECT 0, course_id, from_member_id, {$_SESSION['member_id']}, date_sent, 0, 0, subject, body FROM ".TABLE_PREFIX."messages_sent WHERE from_member_id=$_SESSION[member_id] AND message_id IN ($ids)"; + mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."messages_sent WHERE from_member_id=$_SESSION[member_id] AND message_id IN ($ids)"; + mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (isset($_GET['view']) && $_GET['view']) { + $sql = "SELECT * FROM ".TABLE_PREFIX."messages_sent WHERE message_id=$_GET[view] AND from_member_id=$_SESSION[member_id]"; + $result = mysql_query($sql, $db); + + if ($row = mysql_fetch_assoc($result)) { +?> +
      +
    • + + +
      +

      +
      +
      + | +
      +

      +
      + +
      +

      +
      +
      +
      + +
    • +
    + addConfirm('DELETE_MSGS', $hidden_vars); + $msg->printConfirm(); +} + +$msg->printInfos(array('INBOX_SENT_MSGS_TTL', $_config['sent_msgs_ttl'])); + +$sql = "SELECT * FROM ".TABLE_PREFIX."messages_sent WHERE from_member_id=$_SESSION[member_id] ORDER BY date_sent DESC"; +$result = mysql_query($sql,$db); +?> + +
    + + + + + + + + + + + + + + + + + + + + + + + + '; + + if ($_GET['view'] != $row['message_id']) { + echo $name; + } else { + echo ''.$name.''; + } + echo ''; + + echo ''; + + echo ''; + echo ''; + } while ($row = mysql_fetch_assoc($result)); ?> + + + + + + +
     
    + + +
    title=""/>'; + if ($_GET['view'] != $row['message_id']) { + echo ''.AT_print($row['subject'], 'messages.subject').''; + } else { + echo ''.AT_print($row['subject'], 'messages.subject').''; + } + echo ''; + echo AT_date(_AT('inbox_date_format'), $row['date_sent'], AT_DATE_MYSQL_DATETIME); + echo '
    +
    + + \ No newline at end of file diff --git a/include/classes/Backup/Backup.class.php b/include/classes/Backup/Backup.class.php new file mode 100644 index 000000000..5ed7387a6 --- /dev/null +++ b/include/classes/Backup/Backup.class.php @@ -0,0 +1,423 @@ +db = $db; + + $this->setCourseID($course_id); + } + + // public + // should be used by the admin section + function setCourseID($course_id) { + $this->course_id = $course_id; + $this->backup_dir = AT_BACKUP_DIR . $course_id . DIRECTORY_SEPARATOR; + } + + + // public + // call staticly + function generateFileName( ) { + global $system_courses; + $title = $system_courses[$this->course_id]['title']; + + $title = str_replace(' ', '_', $title); + $title = str_replace('%', '', $title); + $title = str_replace('\'', '', $title); + $title = str_replace('"', '', $title); + $title = str_replace('`', '', $title); + + $title .= '_' . date('d_M_y') . '.zip'; + + return $title; + } + + // public + // NOTE: should the create() deal with saving it to disk as well? or should it be general to just create it, and not actually + // responsible for where to save it? (write a diff method to save it after) + function create($description) { + global $addslashes, $moduleFactory; + + if ($this->getNumAvailable() >= AT_COURSE_BACKUPS) { + return FALSE; + } + + $timestamp = time(); + + $zipfile =& new zipfile(); + + $package_identifier = VERSION."\n\n\n".'Do not change the first line of this file it contains the ATutor version this backup was created with.'; + $zipfile->add_file($package_identifier, 'atutor_backup_version', $timestamp); + + $modules = $moduleFactory->getModules(AT_MODULE_STATUS_ENABLED | AT_MODULE_STATUS_DISABLED); + $keys = array_keys($modules); + foreach($keys as $module_name) { + $module =& $modules[$module_name]; + $module->backup($this->course_id, $zipfile); + } + $zipfile->close(); + + $system_file_name = md5($timestamp); + + if (!is_dir(AT_BACKUP_DIR)) { + @mkdir(AT_BACKUP_DIR); + } + + if (!is_dir(AT_BACKUP_DIR . $this->course_id)) { + @mkdir(AT_BACKUP_DIR . $this->course_id); + } + + $zipfile->write_file(AT_BACKUP_DIR . $this->course_id . DIRECTORY_SEPARATOR . $system_file_name . '.zip'); + + $row['description'] = $addslashes($description); + $row['contents'] = addslashes(serialize($table_counters)); + $row['system_file_name'] = $system_file_name; + $row['file_size'] = $zipfile->get_size(); + $row['file_name'] = $this->generateFileName(); + + $this->add($row); + + return TRUE; + } + + // public + function upload($_FILES, $description) { + global $msg; + + $ext = pathinfo($_FILES['file']['name']); + $ext = $ext['extension']; + + if (!$_FILES['file']['name'] || !is_uploaded_file($_FILES['file']['tmp_name']) || ($ext != 'zip')) { + if ($_FILES['file']['error'] == 1) { // LEQ to UPLOAD_ERR_INI_SIZE + $errors = array('FILE_TOO_BIG', ini_get('upload_max_filesize')); + $msg->addError($errors); + } else { + $msg->addError('FILE_NOT_SELECTED'); + } + } + + if ($_FILES['file']['size'] == 0) { + $msg->addError('IMPORTFILE_EMPTY'); + } + + if($msg->containsErrors()) { + return; + } + + $row = array(); + $row['description'] = $description; + $row['system_file_name'] = md5(time()); + $row['contents'] = ''; + $row['file_size'] = $_FILES['file']['size']; + $row['file_name'] = $_FILES['file']['name']; + + if (!is_dir(AT_BACKUP_DIR)) { + @mkdir(AT_BACKUP_DIR); + } + + if (!is_dir(AT_BACKUP_DIR . $this->course_id)) { + @mkdir(AT_BACKUP_DIR . $this->course_id); + } + + $backup_path = AT_BACKUP_DIR . DIRECTORY_SEPARATOR . $this->course_id . DIRECTORY_SEPARATOR; + + move_uploaded_file($_FILES['file']['tmp_name'], $backup_path . $row['system_file_name'].'.zip'); + + $this->add($row); + + return; + } + + // private + // adds a backup to the database + function add($row) { + $sql = "INSERT INTO ".TABLE_PREFIX."backups VALUES (NULL, $this->course_id, NOW(), '$row[description]', '$row[file_size]', '$row[system_file_name]', '$row[file_name]', '$row[contents]')"; + mysql_query($sql, $this->db); + } + + // public + // get number of backups + function getNumAvailable() { + // use $num_backups, if not set then do a COUNT(*) on the table + if (isset($this->num_backups)) { + return $this->num_backups; + } + + $sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."backups WHERE course_id=$this->course_id"; + $result = mysql_query($sql, $this->db); + $row = mysql_fetch_assoc($result); + + $this->num_backups = $row['cnt']; + return $row['cnt']; + } + + // public + // get list of backups + function getAvailableList() { + $backup_list = array(); + + $sql = "SELECT *, UNIX_TIMESTAMP(date) AS date_timestamp FROM ".TABLE_PREFIX."backups WHERE course_id=$this->course_id ORDER BY date DESC"; + $result = mysql_query($sql, $this->db); + while ($row = mysql_fetch_assoc($result)) { + $backup_list[$row['backup_id']] = $row; + $backup_list[$row['backup_id']]['contents'] = unserialize($row['contents']); + } + + $this->num_backups = count($backup_list); + + return $backup_list; + } + + // public + function download($backup_id) { // or fetch() + $list = $this->getAvailableList($this->course_id); + if (!isset($list[$backup_id])) { + // catch the error + //debug('does not belong to us'); + exit; + } + + $my_backup = $list[$backup_id]; + $file_name = $my_backup['file_name']; + + header('Content-Type: application/zip'); + header('Content-transfer-encoding: binary'); + header('Content-Disposition: attachment; filename="'.htmlspecialchars($file_name).'"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Pragma: public'); + header('Content-Length: '.$my_backup['file_size']); + + // see the note in get.php about the use of x-Sendfile + ob_end_clean(); + header("Content-Encoding: none"); + header('x-Sendfile: ' . AT_BACKUP_DIR . $this->course_id . DIRECTORY_SEPARATOR . $my_backup['system_file_name']. '.zip'); + header('x-Sendfile: ', TRUE); // if we get here then it didn't work + + readfile(AT_BACKUP_DIR . $this->course_id . DIRECTORY_SEPARATOR . $my_backup['system_file_name']. '.zip'); + exit; + } + + // public + function delete($backup_id) { + $list = $this->getAvailableList($this->course_id); + if (!isset($list[$backup_id])) { + // catch the error + //debug('does not belong to us'); + exit; + } + $my_backup = $list[$backup_id]; + + // delete the backup file: + @unlink(AT_BACKUP_DIR . $this->course_id . DIRECTORY_SEPARATOR . $my_backup['system_file_name']. '.zip'); + + // delete the row in the table: + $sql = "DELETE FROM ".TABLE_PREFIX."backups WHERE backup_id=$backup_id AND course_id=$this->course_id"; + $result = mysql_query($sql, $this->db); + } + + // public + function edit($backup_id, $description) { + // update description in the table: + $sql = "UPDATE ".TABLE_PREFIX."backups SET description='$description', date=date WHERE backup_id=$backup_id AND course_id=$this->course_id"; + $result = mysql_query($sql, $this->db); + + } + + // public + function getRow($backup_id, $course_id = 0) { + if ($course_id) { + $sql = "SELECT *, UNIX_TIMESTAMP(date) AS date_timestamp FROM ".TABLE_PREFIX."backups WHERE backup_id=$backup_id AND course_id=$course_id"; + } else { + $sql = "SELECT *, UNIX_TIMESTAMP(date) AS date_timestamp FROM ".TABLE_PREFIX."backups WHERE backup_id=$backup_id AND course_id=$this->course_id"; + } + + $result = mysql_query($sql, $this->db); + $row = mysql_fetch_assoc($result); + + if ($row) { + $row['contents'] = unserialize($row['contents']); + } + return $row; + } + + // public + function translate_whitespace($input) { + $input = str_replace('\n', "\n", $input); + $input = str_replace('\r', "\r", $input); + $input = str_replace('\x00', "\0", $input); + + return $input; + } + + // public + function getVersion() { + if ((file_exists($this->import_dir.'atutor_backup_version')) && ($version = file($this->import_dir.'atutor_backup_version'))) { + return trim($version[0]); + } else { + return false; + } + } + + // public + function restore($material, $action, $backup_id, $from_course_id = 0) { + global $moduleFactory; + require_once(AT_INCLUDE_PATH.'classes/pclzip.lib.php'); + require_once(AT_INCLUDE_PATH.'lib/filemanager.inc.php'); + + if (!$from_course_id) { + $from_course_id = $this->course_id; + } + + // 1. get backup row/information + $my_backup = $this->getRow($backup_id, $from_course_id); + + @mkdir(AT_CONTENT_DIR . 'import/' . $this->course_id); + $this->import_dir = AT_CONTENT_DIR . 'import/' . $this->course_id . '/'; + + // 2. extract the backup + $archive = new PclZip(AT_BACKUP_DIR . $from_course_id. '/' . $my_backup['system_file_name']. '.zip'); + if ($archive->extract( PCLZIP_OPT_PATH, $this->import_dir, + PCLZIP_CB_PRE_EXTRACT, 'preImportCallBack') == 0) { + die("Error : ".$archive->errorInfo(true)); + } + + // 3. get the course's max_quota. if backup is too big AND we want to import files then abort/return FALSE + /* get the course's max_quota */ + // $this->getFilesSize(); + + // 4. figure out version number + $this->version = $this->getVersion(); + if (!$this->version) { + clr_dir($this->import_dir); + global $msg; + $msg->addError('BACKUP_RESTORE'); + header('Location: '.$_SERVER['PHP_SELF']); + exit; + //exit('version not found. backups < 1.3 are not supported.'); + } + + if (version_compare($this->version, VERSION, '>') == 1) { + clr_dir($this->import_dir); + global $msg; + + $msg->addError('BACKUP_UNSUPPORTED_GREATER_VERSION'); + header('Location: '.$_SERVER['PHP_SELF']); + exit; + } + if (version_compare($this_version, '1.5.3', '<')) { + if (file_exists($this->import_dir . 'resource_categories.csv')) { + @rename($this->import_dir . 'resource_categories.csv', $this->import_dir. 'links_categories.csv'); + } + if (file_exists($this->import_dir . 'resource_links.csv')) { + @rename($this->import_dir . 'resource_links.csv', $this->import_dir. 'links.csv'); + } + } + + // 5. if override is set then delete the content + if ($action == 'overwrite') { + require_once(AT_INCLUDE_PATH.'lib/delete_course.inc.php'); + delete_course($this->course_id, $material); + $_SESSION['s_cid'] = 0; + } // else: appending content + + if ($material === TRUE) { + // restore the entire backup (used when creating a new course) + $module_list = $moduleFactory->getModules(AT_MODULE_ENABLED | AT_MODULE_CORE); + $_POST['material'] = $module_list; + } + foreach ($_POST['material'] as $module_name => $garbage) { + $module =& $moduleFactory->getModule($module_name); + $module->restore($this->course_id, $this->version, $this->import_dir); + } + clr_dir($this->import_dir); + } + + // private + // no longer used + function restore_files() { + $sql = "SELECT max_quota FROM ".TABLE_PREFIX."courses WHERE course_id=$this->course_id"; + $result = mysql_query($sql, $this->db); + $row = mysql_fetch_assoc($result); + + if ($row['max_quota'] != AT_COURSESIZE_UNLIMITED) { + global $MaxCourseSize, $MaxCourseFloat; + + if ($row['max_quota'] == AT_COURSESIZE_DEFAULT) { + $row['max_quota'] = $MaxCourseSize; + } + + $totalBytes = dirsize($this->import_dir . 'content/'); + + $course_total = dirsize(AT_CONTENT_DIR . $this->course_id . '/'); + + $total_after = $row['max_quota'] - $course_total - $totalBytes + $MaxCourseFloat; + + if ($total_after < 0) { + //debug('not enough space. delete everything'); + // remove the content dir, since there's no space for it + clr_dir($this->import_dir); + return FALSE; + } + } + + copys($this->import_dir.'content/', AT_CONTENT_DIR . $this->course_id); + } +} + +?> \ No newline at end of file diff --git a/include/classes/Backup/TableBackup.class.php b/include/classes/Backup/TableBackup.class.php new file mode 100644 index 000000000..ca6c4b75d --- /dev/null +++ b/include/classes/Backup/TableBackup.class.php @@ -0,0 +1,1132 @@ +version = $version; + $this->db = $db; + $this->course_id = $course_id; + $this->import_dir = $import_dir; + } + + /** + * Create and return the specified AbstractTable Object. + * + * @access public + * @param string $table_name The name of the table to create an Object for. + * @return AbstractTable Object|NULL if $table_name does not match available Objects. + * @See AbstractTable + * + */ + function createTable($table_name) { + // static hash to keep track of new ID mappings: + static $id_map; + + switch ($table_name) { + case 'stats': + return new CourseStatsTable($this->version, $this->db, $this->course_id, $this->import_dir, $garbage); + break; + + /* + case 'polls': + return new PollsTable($this->version, $this->db, $this->course_id, $this->import_dir, $garbage); + break; + */ + + case 'tests': + return new TestsTable($this->version, $this->db, $this->course_id, $this->import_dir, $id_map); + break; + + case 'tests_questions_categories': + return new TestsQuestionsCategoriesTable($this->version, $this->db, $this->course_id, $this->import_dir, $id_map); + break; + + case 'tests_questions_assoc': + return new TestsQuestionsAssocTable($this->version, $this->db, $this->course_id, $this->import_dir, $id_map); + break; + + case 'tests_questions': + return new TestsQuestionsTable($this->version, $this->db, $this->course_id, $this->import_dir, $id_map); + break; + + case 'news': + return new NewsTable($this->version, $this->db, $this->course_id, $this->import_dir, $garbage); + break; + + case 'groups': + return new GroupsTable($this->version, $this->db, $this->course_id, $this->import_dir, $garbage); + break; + + case 'forums': + return new ForumsTable($this->version, $this->db, $this->course_id, $this->import_dir, $id_map); + break; + + case 'forums_courses': + return new ForumsCoursesTable($this->version, $this->db, $this->course_id, $this->import_dir, $id_map); + break; + + case 'glossary': + return new GlossaryTable($this->version, $this->db, $this->course_id, $this->import_dir, $garbage); + break; + + case 'resource_links': + return new ResourceLinksTable($this->version, $this->db, $this->course_id, $this->import_dir, $id_map); + break; + + case 'resource_categories': + return new ResourceCategoriesTable($this->version, $this->db, $this->course_id, $this->import_dir, $id_map); + break; + + case 'content': + return new ContentTable($this->version, $this->db, $this->course_id, $this->import_dir, $id_map); + break; + + case 'related_content': + return new RelatedContentTable($this->version, $this->db, $this->course_id, $this->import_dir, $id_map); + break; + + default: + if (class_exists($table_name . 'Table')) { + $table_name = $table_name . 'Table'; + return new $table_name($this->version, $this->db, $this->course_id, $this->import_dir, $garbage); + } + return NULL; + } + } +} + +/** +* AbstractTable +* Class for restoring backup tables +* @access public +* @author Joel Kronenberg +* @package Backup +*/ +class AbstractTable { + /** + * The ATutor version this backup was created with. + * + * @access protected + * @var string + */ + var $version; + + /** + * The database handler. + * + * @access private + * @var resource + */ + var $db; + + /** + * The CSV table file handler. + * + * @access private + * @var resource + */ + var $fp; + + /** + * The course ID we're restoring into. + * + * @access private + * @var int + */ + var $course_id; + + /** + * The directory unzip backup is found. + * + * @access private + * @var string + */ + var $import_dir; + + /** + * A hash table associated old ID's (key) with their new ID's (value). + * + * @access private + * @var array + */ + var $old_ids_to_new_ids; + + /** + * Constructor. + * + * @param string $version The backup version. + * @param resource $db The database handler. + * @param int $course_id The ID of this course. + * @param string $import_dir The directory where the backup was unzipped to. + * @param array $old_ids_to_new_ids Reference. + * + */ + function AbstractTable($version, $db, $course_id, $import_dir, &$old_ids_to_new_ids) { + global $db; + $this->db =& $db; + $this->course_id = $course_id; + $this->version = $version; + $this->import_dir = $import_dir; + + $this->old_ids_to_new_ids =& $old_ids_to_new_ids; + + if (!isset($this->old_ids_to_new_ids[$this->tableName])) { + $this->old_ids_to_new_ids[$this->tableName] = array(); + } + } + + // -- public methods below: + + /** + * Restores the table defined in the CSV file, one row at a time. + * + * @access public + * @return void + * + * @See getRows() + * @See insertRow() + */ + function restore() { + global $db; + + // skipLock is used specificially with the `forums_courses` table + if (!isset($this->skipLock)) { + $this->lockTable(); + } + + $this->getRows(); + + if ($this->rows) { + foreach ($this->rows as $row) { + + $sql = $this->generateSQL($row); + mysql_query($sql, $db); + //debug($sql); + //debug(mysql_error($this->db)); + } + } + if (!isset($this->skipLock)) { + $this->unlockTable(); + } + } + + // -- protected methods below: + + /** + * Converts escaped white space characters to their correct representation. + * + * @access protected + * @param string $input The string to convert. + * @return string The converted string. + * @See Backup::quoteCSV() + */ + function translateWhitespace($input) { + $input = str_replace('\n', "\n", $input); + $input = str_replace('\r', "\r", $input); + $input = str_replace('\x00', "\0", $input); + + $input = addslashes($input); + return $input; + } + + // protected + // find the index offset + function findOffset($id) { + return $this->rows[$id]['index_offset']; + } + + // -- private methods below: + function getNextID() { + global $db; + + $sql = 'SELECT MAX(' . $this->primaryIDField . ') AS next_id FROM ' . TABLE_PREFIX . $this->tableName; + $result = mysql_query($sql, $db); + $next_index = mysql_fetch_assoc($result); + return ($next_index['next_id'] + 1); + } + + /** + * Gets the member_id of the instructor who owns a course in the context of a backup restore + * + * @param int $id The backup course to query on + * @access protected + * @return int The member_id who owns the corresponding backup course + */ + function resolveBkpOwner($id) { + global $db; + + $sql = 'SELECT member_id FROM ' . TABLE_PREFIX . 'courses WHERE course_id = '. $id; + + $result = mysql_query($sql, $db); + + if (!$result) { + echo 'Fatal SQL error occured in TableBackup:resolveBkpOwner: ' . mysql_error() . + ' ' . mysql_error($db) . + ' Check that the course your are restoring to exists.'; + return; + } + + $row = mysql_fetch_assoc($result); + + if (!$row) { + echo 'Fatal SQL error occured in TableBackup:resolveBkpOwner: ' . mysql_error() . + ' ' . mysql_error($db) . + ' Check that the course your are restoring to exists.'; + return; + } + + return $row['member_id']; + } + + /** + * Reads the CSV table file into array $this->rows. + * + * @access private + * @return void + * + * @See openTable() + * @See closeTable() + * @See getOldID() + */ + function getRows() { + $this->openFile(); + $i = 0; + + $next_id = $this->getNextID(); + + while ($row = @fgetcsv($this->fp, 70000)) { + if (count($row)) { + $row[0] = trim($row[0]); + if ($row[0] == '') { + continue; + } + } + $row = $this->translateText($row); + $row = $this->convert($row); + + $row['index_offset'] = $i; + $row['new_id'] = $next_id++; + if ($this->getOldID($row) === FALSE) { + $this->rows[] = $row; + } else { + $this->rows[$this->getOldID($row)] = $row; + $this->old_ids_to_new_ids[$this->tableName][$this->getOldID($row)] = $row['new_id']; + } + + $i++; + } + $this->closeFile(); + } + + /** + * Converts $row to be ready for inserting into the db. + * + * @param array $row The row to convert. + * @access private + * @return array The converted row. + * + * @see translateWhitespace() + */ + function translateText($row) { + return $row; + global $backup_tables; + $count = 0; + + foreach ($backup_tables[$this->tableName]['fields'] as $field) { + if ($field[1] == TEXT) { + $row[$count] = $this->translateWhitespace($row[$count]); + } + $count++; + } + return $row; + } + + /** + * Locks the database table for writing or/and also lock the courses table for resolving restore issues + * in the admin context + * + * @access private + * @return void + * + * @See unlockTable() + */ + function lockTable() { + global $db; + $lock_sql; + + if ($_SESSION['member_id']) + $lock_sql = 'LOCK TABLES ' . TABLE_PREFIX . $this->tableName. ' WRITE'; + else // admin context + $lock_sql = 'LOCK TABLES ' . TABLE_PREFIX . $this->tableName. ', ' . TABLE_PREFIX . 'courses WRITE'; + + $result = mysql_query($lock_sql, $db); + } + + /** + * UnLocks the database table. + * + * @access private + * @return void + * + * @See lockTable() + */ + function unlockTable() { + global $db; + $lock_sql = 'UNLOCK TABLES'; + $result = mysql_query($lock_sql, $db); + } + + /** + * Opens the CSV table file for reading. + * + * @access private + * @return void + * + * @See closeFile() + */ + function openFile() { + $this->fp = @fopen($this->import_dir . $this->tableName . '.csv', 'rb'); + } + + /** + * Closes the CSV table file. + * + * @access private + * @return void + * + * @See openFile() + */ + function closeFile() { + @fclose($this->fp); + } + + /** + * Gets the entry/row's new ID based on it's old entry ID. + * + * @param int $id The old entry ID. + * @access protected + * @return int The new entry ID + * + */ + function getNewID($id) { + return $this->rows[$id]['new_id']; + } + + // -- abstract methods below: + /** + * Gets the entry/row ID as it appears in the CSV file, or FALSE if n/a. + * + * @param array $row The old entry row from the CSV file. + * @access private + * @return boolean|int The old ID or FALSE if not applicable. + * + */ + function getOldID($row) { /* abstract */ } + + /** + * Convert the entry/row to the current ATutor version. + * + * @param array $row The old entry row from the CSV file. + * @access private + * @return array The converted row. + * + */ + function convert($row) { /* abstract */ } + + /** + * Generate the SQL for this table. + * + * Precondition: $row has passed through convert() and + * translateText(). + * + * @param array $row The old entry row from the CSV file. + * @access private + * @return string The SQL query. + * + * @see insertRow() + */ + function generateSQL($row) { /* abstract */ } + +} +//--------------------------------------------------------------------- + +/** +* ForumsTable +* Extends AbstractTable and provides table specific methods and members. +* @access public +* @author Joel Kronenberg +* @author Heidi Hazelton +* @package Backup +*/ +class ForumsTable extends AbstractTable { + /** + * The ATutor database table name (w/o prefix). + * Also the CSV file name (w/o extension). + * + * @access private + * @var const string + */ + var $tableName = 'forums'; + + /** + * The ATutor database table primary ID field. + * + * @access private + * @var const string + */ + var $primaryIDField = 'forum_id'; + + // -- private methods below: + function getOldID($row) { + return $row[0]; + } + + function convert($row) { + if (version_compare($this->version, '1.4.3', '<')) { + // previous versions didn't have a forum_id field + static $count; + $count++; + for($i=5; $i>0; $i--) { + $row[$i] = $row[$i-1]; + } + $row[0] = $count; + } + return $row; + } + + function generateSQL($row) { + $sql = 'INSERT INTO '.TABLE_PREFIX.'forums VALUES '; + $sql .= '('.$row['new_id']. ','; + $sql .= "'".$row[1]."',"; // title + $sql .= "'".$row[2]."',"; // description + $sql .= "$row[3],"; // num_topics + $sql .= "$row[4],"; // num_posts + $sql .= "'".$row[5]."')"; // last_post + + return $sql; + } +} +//--------------------------------------------------------------------- +/** +* ForumsCoursesTable +* Extends AbstractTable and provides table specific methods and members. +* @access public +* @author Heidi Hazelton +* @package Backup +*/ +class ForumsCoursesTable extends AbstractTable { + + /** + * The ATutor database table name (w/o prefix). + * Also the CSV file name (w/o extension). + * + * @access private + * @var const string + */ + var $tableName = 'forums'; + + /** + * The ATutor database table primary ID field. + * + * @access private + * @var const string + */ + var $primaryIDField = 'forum_id'; + + /** + * Whether or not lock this table. + * This is a special case, b/c we read from the `forums` table + * but insert into the `forums_courses` table. Hence, we lock a different + * table than we actually insert into (ie. why we don't need/want a lock). + * + * @access private + * @var const boolean + */ + var $skipLock = TRUE; + + // -- private methods below: + function getOldID($row) { + return FALSE; + } + + function convert($row) { + return $row; + } + + function generateSQL($row) { + $this->count++; + if (version_compare($this->version, '1.4.3', '<')) { + $id = $this->count; + } else { + $id = $row[0]; + } + $sql = 'INSERT INTO '.TABLE_PREFIX.'forums_courses VALUES '; + $sql .= '('.$this->old_ids_to_new_ids['forums'][$id] . ','; // forum_id + $sql .= $this->course_id .")"; // course_id + + return $sql; + } +} +//--------------------------------------------------------------------- +class GlossaryTable extends AbstractTable { + var $tableName = 'glossary'; + var $primaryIDField = 'word_id'; + + function getOldID($row) { + return $row[0]; + } + + // private + function convert($row) { + return $row; + } + + // private + function generateSQL($row) { + // insert row + $sql = 'INSERT INTO '.TABLE_PREFIX.'glossary VALUES '; + $sql .= '('.$row['new_id'].','; // word_id + $sql .= $this->course_id . ','; // course_id + $sql .= "'".$row[1]."',"; // word + $sql .= "'".$row[2]."',"; // definition + if ($row[3] == 0) { + $sql .= 0; + } else { + $sql .= $this->getNewID($row[3]); // related word + } + $sql .= ')'; + + return $sql; + } +} +//--------------------------------------------------------------------- +class ResourceCategoriesTable extends AbstractTable { + var $tableName = 'resource_categories'; + + var $primaryIDField = 'CatID'; + + function getOldID($row) { + return $row[0]; + } + + // private + function convert($row) { + return $row; + } + + // private + function generateSQL($row) { + $sql = 'INSERT INTO '.TABLE_PREFIX.'resource_categories VALUES '; + $sql .= '('.$row['new_id'].','; + $sql .= $this->course_id .','; + // CatName + $sql .= "'".$row[1]."',"; + + // CatParent + if ($row[2] == 0) { + $sql .= 'NULL'; + } else { + $sql .= $this->getNewID($row[2]); // category parent + } + $sql .= ')'; + + return $sql; + } +} + +//--------------------------------------------------------------------- +class ResourceLinksTable extends AbstractTable { + var $tableName = 'resource_links'; + + var $primaryIDField = 'LinkID'; + + function getOldID($row) { + return FALSE; + } + + // private + function convert($row) { + // handle the white space issue as well + return $row; + } + + // private + function generateSQL($row) { + // insert row + $sql = 'INSERT INTO '.TABLE_PREFIX.'resource_links VALUES '; + $sql .= '('.$row['new_id'].', '; + $sql .= $this->old_ids_to_new_ids['resource_categories'][$row[0]] . ','; + + $sql .= "'".$row[1]."',"; // URL + $sql .= "'".$row[2]."',"; // LinkName + $sql .= "'".$row[3]."',"; // Description + $sql .= $row[4].','; // Approved + $sql .= "'".$row[5]."',"; // SubmitName + $sql .= "'".$row[6]."',"; // SubmitEmail + $sql .= "'".$row[7]."',"; // SubmitDate + $sql .= $row[8]. ')'; + + return $sql; + } +} +//--------------------------------------------------------------------- +class NewsTable extends AbstractTable { + var $tableName = 'news'; + var $primaryIDField = 'news_id'; + + function getOldID($row) { + return FALSE; + } + + // private + function convert($row) { + return $row; + } + + // private + function generateSQL($row) { + // insert row + $sql = 'INSERT INTO '.TABLE_PREFIX.'news VALUES '; + $sql .= '('.$row['new_id'].','; + $sql .= $this->course_id.','; + + /** + * Admin user does not possess a member_id, assign ownership to instructor of restored course + */ + if (isset($_SESSION['member_id'])) { + $sql .= $_SESSION['member_id'] . ','; + } else { // admin context + $sql .= $this->resolveBkpOwner($this->course_id) . ','; + } + + $sql .= "'".$row[0]."',"; // date + $sql .= "'".$row[1]."',"; // formatting + $sql .= "'".$row[2]."',"; // title + $sql .= "'".$row[3]."')"; // body + + debug($sql); + + return $sql; + } + +} +//--------------------------------------------------------------------- +// -- tests (`tests`, `tests_questions`, `tests_categories`, `tests_questions_assoc`) +class TestsTable extends AbstractTable { + var $tableName = 'tests'; + var $primaryIDField = 'test_id'; + + function getOldID($row) { + return $row[0]; + } + + // private + function convert($row) { + // handle the white space issue as well + if (version_compare($this->version, '1.4', '<')) { + $row[8] = 0; + $row[9] = 0; + $row[10] = 0; + $row[11] = 0; + } + + if (version_compare($this->version, '1.4.2', '<')) { + $row[12] = 0; + $row[13] = 0; + } + if (version_compare($this->version, '1.4.3', '<')) { + $row[9] = 0; + $row[14] = 0; + } + return $row; + } + + // private + function generateSQL($row) { + $sql = ''; + $sql = 'INSERT INTO '.TABLE_PREFIX.'tests VALUES '; + $sql .= '('.$row['new_id'].','; + $sql .= $this->course_id.','; + + $sql .= "'".$row[1]."',"; // title + $sql .= "'".$row[2]."',"; // format + $sql .= "'".$row[3]."',"; // start_date + $sql .= "'".$row[4]."',"; // end_date + $sql .= "'".$row[5]."',"; // randomize_order + $sql .= "'".$row[6]."',"; // num_questions + $sql .= "'".$row[7]."',"; // instructions + $sql .= '0,'; // content_id + $sql .= $row[9] . ','; // release_result + $sql .= $row[10] . ','; // random + $sql .= $row[11] . ','; // difficulty + $sql .= $row[12] . ','; // num_takes + $sql .= $row[13] . ','; // anonymous + $sql .= "'".$row[14]."'"; // out_of + $sql .= ')'; + + return $sql; + } +} +//--------------------------------------------------------------------- +class TestsQuestionsTable extends AbstractTable { + var $tableName = 'tests_questions'; + var $primaryIDField = 'question_id'; + + function getOldID($row) { + return $row[0]; + } + + // private + function convert($row) { + if (version_compare($this->version, '1.4.3', '<')) { + // basically, rework the fields then recreate the `tests_questions_assoc.csv` file. + // create the tests_questions_assoc file using $row[0] as the `test_id` and $row['new_id'] as the new question ID + static $count; + $test_id = $row[0]; + $order = $row[1]; + $weight = $row[3]; + $required = $row[4]; + + $count++; + $row[0] = $count; // question id + $row[1] = 0; // category id + $row[2] = $row[2]; // type + + for($i = 3; $i < 27; $i++) { + $row[$i] = $row[$i+2]; + } + + $assoc_data = "$test_id,$count,$weight,$order,$required\n"; + $fp = fopen($this->import_dir . 'tests_questions_assoc.csv', 'ab'); + fwrite($fp, $assoc_data); + fclose($fp); + } + + return $row; + } + + // private + function generateSQL($row) { + // insert row + + if (!isset($this->old_ids_to_new_ids['tests_questions_categories'][$row[1]])) { + $this->old_ids_to_new_ids['tests_questions_categories'][$row[1]] = 0; + } + + $sql = 'INSERT INTO '.TABLE_PREFIX.'tests_questions VALUES '; + $sql .= '('.$row['new_id'].',' . $this->old_ids_to_new_ids['tests_questions_categories'][$row[1]] . ','; + $sql .= $this->course_id; + + for ($i=2; $i <= 26; $i++) { + $sql .= ",'".$row[$i]."'"; + } + + $sql .= ')'; + + return $sql; + } +} +//--------------------------------------------------------------------- +class TestsQuestionsAssocTable extends AbstractTable { + var $tableName = 'tests_questions_assoc'; + var $primaryIDField = 'question_id'; + + function getOldID($row) { + return FALSE; + } + + // private + function convert($row) { + return $row; + } + + // private + function generateSQL($row) { + // insert row + $sql = 'INSERT INTO '.TABLE_PREFIX.'tests_questions_assoc VALUES '; + $sql .= '(' . $this->old_ids_to_new_ids['tests'][$row[0]].',' . $this->old_ids_to_new_ids['tests_questions'][$row[1]]; + $sql .= ",'$row[2]','$row[3]','$row[4]')"; + + return $sql; + } +} +//--------------------------------------------------------------------- +class TestsQuestionsCategoriesTable extends AbstractTable { + var $tableName = 'tests_questions_categories'; + var $primaryIDField = 'category_id'; + + function getOldID($row) { + return $row[0]; + } + + // private + function convert($row) { + return $row; + } + + // private + function generateSQL($row) { + // insert row + $sql = 'INSERT INTO '.TABLE_PREFIX.'tests_questions_categories VALUES '; + $sql .= '('.$row['new_id'].','; + $sql .= $this->course_id; + $sql .= ',"'.$row[1].'"'; + $sql .= ')'; + + return $sql; + } +} +//--------------------------------------------------------------------- +/* +class PollsTable extends AbstractTable { + var $tableName = 'polls'; + var $primaryIDField = 'poll_id'; + + function getOldID($row) { + return FALSE; + } + + // private + function convert($row) { + return $row; + } + + // private + function generateSQL($row) { + // insert row + $sql = 'INSERT INTO '.TABLE_PREFIX.'polls VALUES '; + $sql .= '('.$row['new_id'].','; + $sql .= $this->course_id.','; + $sql .= "'$row[0]',"; // question + $sql .= "'$row[1]',"; // created date + $sql .= "0,"; // total + + for ($i=2; $i<=8; $i++) { + $sql .= "'".$row[$i]."',0,"; + } + + $sql = substr($sql, 0, -1); + $sql .= ')'; + + return $sql; + } +} +*/ +//--------------------------------------------------------------------- +class ContentTable extends AbstractTable { + var $tableName = 'content'; + + var $primaryIDField = 'content_id'; + + var $ordering; + + /** + * Constructor. + * + * @param string $version The backup version. + * @param resource $db The database handler. + * @param int $course_id The ID of this course. + * @param string $import_dir The directory where the backup was unzipped to. + * @param array $old_id_to_new_id Reference to either the parent ID's or to store current ID's. + * + */ + function ContentTable($version, $db, $course_id, $import_dir, &$old_id_to_new_id) { + // special case for `content` -- we need the max ordering + + $sql = 'SELECT MAX(ordering) AS ordering FROM '.TABLE_PREFIX.'content WHERE content_parent_id=0 AND course_id='.$course_id; + $result = mysql_query($sql, $db); + $ordering = mysql_fetch_assoc($result); + $this->ordering = $ordering['ordering'] +1; + + parent::AbstractTable($version, $db, $course_id, $import_dir, $old_id_to_new_id); + } + + function getOldID($row) { + return $row[0]; + } + + // private + function convert($row) { + return $row; + } + + // private + function generateSQL($row) { + $sql = 'INSERT INTO '.TABLE_PREFIX.'content VALUES '; + $sql .= '('.$row['new_id'].','; // content_id + $sql .= $this->course_id .','; // course_id + if ($row[1] == 0) { // content_parent_id + $sql .= 0; + } else { + $sql .= $this->getNewID($row[1]); + } + $sql .= ','; + + if ($row[1] == 0) { + // find the new ordering: + $sql .= $this->ordering . ','; + $this->ordering ++; + } else { + $sql .= $row[2].','; + } + + $sql .= "'".$row[3]."',"; // last_modified + $sql .= $row[4] . ','; // revision + $sql .= $row[5] . ','; // formatting + $sql .= "'".$row[6]."',"; // release_date + $sql .= "'".$row[7]."',"; // keywords + $sql .= "'".$row[8]."',"; // content_path + $sql .= "'".$row[9]."',"; // title + $sql .= "'".$row[10]."',0)"; // text + + return $sql; + } +} + +//--------------------------------------------------------------------- +class RelatedContentTable extends AbstractTable { + var $tableName = 'related_content'; + + var $primaryIDField = 'content_id'; + + function getOldID($row) { + return FALSE; + } + + // private + function convert($row) { + return $row; + } + + // private + function generateSQL($row) { + $sql = 'INSERT INTO '.TABLE_PREFIX.'related_content VALUES '; + $sql .= '('.$this->old_ids_to_new_ids['content'][$row['0']].','. $this->old_ids_to_new_ids['content'][$row[1]].')'; + + return $sql; + } +} + +//--------------------------------------------------------------------- +class CourseStatsTable extends AbstractTable { + var $tableName = 'course_stats'; + var $primaryIDField = 'login_date'; // never actually used + + function getOldID($row) { + return FALSE; + } + + function getParentID($row) { + return FALSE; + } + + // private + function convert($row) { + return $row; + } + + // private + function generateSQL($row) { + // insert row + $sql = 'INSERT INTO '.TABLE_PREFIX.'course_stats VALUES '; + $sql .= '('.$this->course_id.","; + $sql .= "'".$row[0]."',"; // login_date + $sql .= "'".$row[1]."',"; // guests + $sql .= "'".$row[2]."'"; // members + $sql .= ')'; + + return $sql; + } +} + +//--------------------------------------------------------------------- +class GroupsTable extends AbstractTable { + var $tableName = 'groups'; + var $primaryIDField = 'group_id'; + + function getOldID($row) { + return FALSE; + } + + function getParentID($row) { + return FALSE; + } + + // private + function convert($row) { + return $row; + } + + // private + function generateSQL($row) { + // insert row + $sql = 'INSERT INTO '.TABLE_PREFIX.'groups VALUES '; + $sql .= '('.$row['new_id'] . ',' . $this->course_id.","; + $sql .= "'".$row[0]."'"; // title + $sql .= ')'; + + return $sql; + } +} + +?> \ No newline at end of file diff --git a/include/classes/CSVExport.class.php b/include/classes/CSVExport.class.php new file mode 100644 index 000000000..1959f8e4a --- /dev/null +++ b/include/classes/CSVExport.class.php @@ -0,0 +1,78 @@ +detectFieldTypes($result); + if (!$field_types) { + return FALSE; + } + $num_fields = count($field_types); + + while ($row = mysql_fetch_row($result)) { + for ($i=0; $i < $num_fields; $i++) { + if ($types[$i] == 'int' || $types[$i] == 'real') { + $content .= $row[$i] . ','; + } else { + $content .= $this->quote($row[$i]) . ','; + } + } + $content = substr($content, 0, -1); + $content .= "\n"; + } + + @mysql_free_result($result); + + return $content; + } + + // public + // given a query result returns an array of field types. + // possible field types are int, string, datetime, or blob... + function detectFieldTypes(&$result) { + $field_types = array(); + $num_fields = @mysql_num_fields($result); + + if (!$num_fields) { + return array(); + } + + for ($i=0; $i< $num_fields; $i++) { + $field_types[] = mysql_field_type($result, $i); + } + return $field_types; + } + + // private + // quote $line so that it's safe to save as a CSV field + function quote($line) { + return '"'.str_replace($this->quote_search, $this->quote_replace, $line).'"'; + } +} + +?> \ No newline at end of file diff --git a/include/classes/CSVImport.class.php b/include/classes/CSVImport.class.php new file mode 100644 index 000000000..1c9be15ab --- /dev/null +++ b/include/classes/CSVImport.class.php @@ -0,0 +1,159 @@ +quote_search, $this->quote_replace, $input); + + $input = addslashes($input); + return $input; + } + + // public + function import($tableName, $path, $course_id, $version) { + global $db; + static $table_id_map; + + $fn_name = $tableName.'_convert'; + + // lock the tables + $lock_sql = 'LOCK TABLES ' . TABLE_PREFIX . $tableName. ', ' . TABLE_PREFIX . 'courses WRITE'; + $result = mysql_query($lock_sql, $db); + + // get the field types + $field_types = $this->detectFieldTypes($tableName); + if (!$field_types) { + return FALSE; + } + + // get the name of the primary field + $primary_key_field_name = $this->getPrimaryFieldName($tableName); + // read the rows into an array + $fp = @fopen($path . $tableName . '.csv', 'rb'); + $i = 0; + + // get the name of the primary ID field and the next index + $next_id = 0; + if ($primary_key_field_name) { + // get the next primary ID + $sql = 'SELECT MAX(' . $primary_key_field_name . ') AS next_id FROM ' . TABLE_PREFIX . $tableName; + $result = mysql_query($sql, $db); + $next_id = mysql_fetch_assoc($result); + $next_id = $next_id['next_id']+1; + } + + $rows = array(); + while ($row = @fgetcsv($fp, 70000)) { + if (count($row) && (trim($row[0]) == '')) { + continue; + } + + if (function_exists($fn_name)) { + $row = $fn_name($row, $course_id, $table_id_map, $version); + } + if (!$row) { + continue; + } + if ($row[0] == 0) { + $row[0] = $i; + } + + $table_id_map[$tableName][$row[0]] = $next_id; + if ($primary_key_field_name != NULL) { + $row[0] = $next_id; + } + + $sql = 'REPLACE INTO '.TABLE_PREFIX.$tableName.' VALUES ('; + + foreach($row as $id => $field) { + if (($field_types[$id] != 'int') && ($field_types[$id] != 'real')) { + $field = $this->translateWhitespace($field); + } else if ($field_types[$id] == 'int') { + $field = intval($field); + } + $sql .= '"' . $field.'",'; + } + $sql = substr($sql, 0, -1); + $sql .= ')'; + $result = mysql_query($sql, $db); + $i++; + $next_id++; + } + + // close the file + @fclose($fp); + + // unlock the tables + $lock_sql = 'UNLOCK TABLES'; + $result = mysql_query($lock_sql, $db); + } + +} + + + +?> \ No newline at end of file diff --git a/include/classes/ContentManager.class.php b/include/classes/ContentManager.class.php new file mode 100644 index 000000000..037852137 --- /dev/null +++ b/include/classes/ContentManager.class.php @@ -0,0 +1,923 @@ +db = $db; + $this->course_id = $course_id; + } + + function initContent( ) { + if ($this->course_id == '') { + return; + } + $sql = "SELECT content_id, content_parent_id, ordering, title, UNIX_TIMESTAMP(release_date) AS u_release_date FROM ".TABLE_PREFIX."content WHERE course_id=$this->course_id ORDER BY content_parent_id, ordering"; + $result = mysql_query($sql, $this->db); + + /* x could be the ordering or even the content_id */ + /* don't really need the ordering anyway. */ + /* $_menu[content_parent_id][x] = array('content_id', 'ordering', 'title') */ + $_menu = array(); + + /* number of content sections */ + $num_sections = 0; + + $max_depth = array(); + + while ($row = mysql_fetch_assoc($result)) { + $num_sections++; + $_menu[$row['content_parent_id']][] = array('content_id'=> $row['content_id'], + 'ordering' => $row['ordering'], + 'title' => htmlspecialchars($row['title'])); + + $_menu_info[$row['content_id']] = array('content_parent_id' => $row['content_parent_id'], + 'title' => htmlspecialchars($row['title']), + 'ordering' => $row['ordering'], + 'u_release_date' => $row['u_release_date']); + + if ($row['content_parent_id'] == 0){ + $max_depth[$row['content_id']] = 1; + } else { + $max_depth[$row['content_id']] = $max_depth[$row['content_parent_id']]+1; + } + } + + $this->_menu = $_menu; + + $this->_menu_info = $_menu_info; + + $this->num_sections = $num_sections; + + if (count($max_depth) > 1) { + $this->max_depth = max($max_depth); + } else { + $this->max_depth = 0; + } + + $this->content_length = count($_menu[0]); + } + + + function getContent($parent_id=-1, $length=-1) { + if ($parent_id == -1) { + $my_menu_copy = $this->_menu; + if ($length != -1) { + $my_menu_copy[0] = array_slice($my_menu_copy[0], 0, $length); + } + return $my_menu_copy; + } + return $this->_menu[$parent_id]; + } + + + function &getContentPath($content_id) { + $path = array(); + + $path[] = array('content_id' => $content_id, 'title' => $this->_menu_info[$content_id]['title']); + + $this->getContentPathRecursive($content_id, $path); + + $path = array_reverse($path); + return $path; + } + + + function getContentPathRecursive($content_id, &$path) { + $parent_id = $this->_menu_info[$content_id]['content_parent_id']; + + if ($parent_id > 0) { + $path[] = array('content_id' => $parent_id, 'title' => $this->_menu_info[$parent_id]['title']); + $this->getContentPathRecursive($parent_id, $path); + } + } + + + function addContent($course_id, $content_parent_id, $ordering, $title, $text, $keywords, $related, $formatting, $release_date) { + + if (!authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN) && ($_SESSION['course_id'] != -1)) { + return false; + } + + // shift the new neighbouring content down + $sql = "UPDATE ".TABLE_PREFIX."content SET ordering=ordering+1 WHERE ordering>=$ordering AND content_parent_id=$content_parent_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $this->db); + + /* main topics all have minor_num = 0 */ + $sql = "INSERT INTO ".TABLE_PREFIX."content VALUES (NULL,$course_id, $content_parent_id, $ordering, NOW(), 0, $formatting, '$release_date', '$keywords', '', '$title','$text')"; + + $err = mysql_query($sql, $this->db); + + /* insert the related content */ + $sql = "SELECT LAST_INSERT_ID() AS insert_id"; + $result = mysql_query($sql, $this->db); + $row = mysql_fetch_assoc($result); + $cid = $row['insert_id']; + + $sql = ''; + if (is_array($related)) { + foreach ($related as $x => $related_content_id) { + $related_content_id = intval($related_content_id); + + if ($related_content_id != 0) { + if ($sql != '') { + $sql .= ', '; + } + $sql .= '('.$cid.', '.$related_content_id.')'; + $sql .= ', ('.$related_content_id.', '.$cid.')'; + } + } + + if ($sql != '') { + $sql = 'INSERT INTO '.TABLE_PREFIX.'related_content VALUES '.$sql; + $result = mysql_query($sql, $this->db); + } + } + + return $cid; + } + + + function editContent($content_id, $title, $text, $keywords, $new_content_ordering, $related, $formatting, $new_content_parent_id, $release_date) { + if (!authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN)) { + return FALSE; + } + + /* first get the content to make sure it exists */ + $sql = "SELECT ordering, content_parent_id FROM ".TABLE_PREFIX."content WHERE content_id=$content_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $this->db); + if (!($row = mysql_fetch_assoc($result)) ) { + return FALSE; + } + $old_ordering = $row['ordering']; + $content_parent_id = $row['content_parent_id']; + if (($content_parent_id != $new_content_parent_id) || ($old_ordering != $new_content_ordering)) { + // remove the gap left by the moved content + $sql = "UPDATE ".TABLE_PREFIX."content SET ordering=ordering-1 WHERE ordering>=$old_ordering AND content_parent_id=$content_parent_id AND content_id<>$content_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $this->db); + + // shift the new neighbouring content down + $sql = "UPDATE ".TABLE_PREFIX."content SET ordering=ordering+1 WHERE ordering>=$new_content_ordering AND content_parent_id=$new_content_parent_id AND content_id<>$content_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $this->db); + } + + /* update the title, text of the newly moved (or not) content */ + $sql = "UPDATE ".TABLE_PREFIX."content SET title='$title', text='$text', keywords='$keywords', formatting=$formatting, content_parent_id=$new_content_parent_id, ordering=$new_content_ordering, revision=revision+1, last_modified=NOW(), release_date='$release_date' WHERE content_id=$content_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $this->db); + + /* update the related content */ + $result = mysql_query("DELETE FROM ".TABLE_PREFIX."related_content WHERE content_id=$content_id OR related_content_id=$content_id", $this->db); + $sql = ''; + if (is_array($related)) { + foreach ($related as $x => $related_content_id) { + $related_content_id = intval($related_content_id); + + if ($related_content_id != 0) { + if ($sql != '') { + $sql .= ', '; + } + $sql .= '('.$content_id.', '.$related_content_id.')'; + $sql .= ', ('.$related_content_id.', '.$content_id.')'; + } + } + + if ($sql != '') { + /* delete the old related content */ + $result = mysql_query("DELETE FROM ".TABLE_PREFIX."related_content WHERE content_id=$content_id OR related_content_id=$content_id", $this->db); + + /* insert the new, and the old related content again */ + $sql = 'INSERT INTO '.TABLE_PREFIX.'related_content VALUES '.$sql; + $result = mysql_query($sql, $this->db); + } + } + } + + + function deleteContent($content_id) { + if (!authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN)) { + return false; + } + + /* check if exists */ + $sql = "SELECT ordering, content_parent_id FROM ".TABLE_PREFIX."content WHERE content_id=$content_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $this->db); + if (!($row = @mysql_fetch_assoc($result)) ) { + return false; + } + $ordering = $row['ordering']; + $content_parent_id = $row['content_parent_id']; + + /* check if this content has sub content */ + $children = $this->_menu[$content_id]; + + if (is_array($children) && (count($children)>0) ) { + /* delete its children recursively first*/ + foreach ($children as $x => $info) { + $this->deleteContentRecursive($info['content_id']); + } + } + + /* delete this content page */ + $sql = "DELETE FROM ".TABLE_PREFIX."content WHERE content_id=$content_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $this->db); + + /* delete this content from member tracking page */ + $sql = "DELETE FROM ".TABLE_PREFIX."member_track WHERE content_id=$content_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $this->db); + + $sql = "DELETE FROM ".TABLE_PREFIX."related_content WHERE content_id=$content_id OR related_content_id=$content_id"; + $result = mysql_query($sql, $this->db); + + /* re-order the rest of the content */ + $sql = "UPDATE ".TABLE_PREFIX."content SET ordering=ordering-1 WHERE ordering>=$ordering AND content_parent_id=$content_parent_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $this->db); + /* end moving block */ + + /* remove the "resume" to this page, b/c it was deleted */ + $sql = "UPDATE ".TABLE_PREFIX."course_enrollment SET last_cid=0 WHERE course_id=$_SESSION[course_id] AND last_cid=$content_id"; + $result = mysql_query($sql, $this->db); + + return true; + } + + + /* private. call from deleteContent only. */ + function deleteContentRecursive($content_id) { + /* check if this content has sub content */ + $children = $this->_menu[$content_id]; + + if (is_array($children) && (count($children)>0) ) { + /* delete its children recursively first*/ + foreach ($children as $x => $info) { + $this->deleteContent($info['content_id']); + } + } + + /* delete this content page */ + $sql = "DELETE FROM ".TABLE_PREFIX."content WHERE content_id=$content_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $this->db); + + /* delete this content from member tracking page */ + $sql = "DELETE FROM ".TABLE_PREFIX."member_track WHERE content_id=$content_id"; + $result = mysql_query($sql, $this->db); + + $sql = "DELETE FROM ".TABLE_PREFIX."related_content WHERE content_id=$content_id OR related_content_id=$content_id"; + $result = mysql_query($sql, $this->db); + } + + function & getContentPage($content_id) { + $sql = "SELECT *, DATE_FORMAT(release_date, '%Y-%m-%d %H:%i:00') AS release_date, release_date+0 AS r_date, NOW()+0 AS n_date FROM ".TABLE_PREFIX."content WHERE content_id=$content_id AND course_id=$this->course_id"; + $result = mysql_query($sql, $this->db); + + return $result; + } + + /* @See editor/edit_content.php include/html/dropdowns/related_topics.inc.php include/lib/editor_tabs_functions.inc.php */ + function getRelatedContent($content_id, $all=false) { + if ($content_id == 0) { + return; + } + if ($content_id == '') { + return; + } + $related_content = array(); + + if ($all) { + $sql = "SELECT * FROM ".TABLE_PREFIX."related_content WHERE content_id=$content_id OR related_content_id=$content_id"; + } else { + $sql = "SELECT * FROM ".TABLE_PREFIX."related_content WHERE content_id=$content_id"; + } + $result = mysql_query($sql, $this->db); + + while ($row = mysql_fetch_assoc($result)) { + if ($row['related_content_id'] != $content_id) { + $related_content[] = $row['related_content_id']; + } else { + $related_content[] = $row['content_id']; + } + } + + return $related_content; + } + + + function & cleanOutput($value) { + return stripslashes(htmlspecialchars($value)); + } + + + /* @See include/html/editor_tabs/properties.inc.php */ + /* Access: Public */ + function getNumSections() { + return $this->num_sections; + } + + /* Access: Public */ + function getMaxDepth() { + return $this->max_depth; + } + + /* Access: Public */ + function getContentLength() { + return $this->content_length; + } + + /* @See include/html/dropdowns/local_menu.inc.php */ + function getLocationPositions($parent_id, $content_id) { + $siblings = $this->getContent($parent_id); + for ($i=0;$igetContentPath($content_id); + $parent = 0; + $numbering = ''; + foreach ($path as $page) { + $num = $this->getLocationPositions($parent, $page['content_id']) +1; + $parent = $page['content_id']; + $numbering .= $num.'.'; + } + $numbering = substr($numbering, 0, -1); + + return $numbering; + } + + /* Access: Private */ + function getPreviousContent($content_id, $order=0) { + $myParent = $this->_menu_info[$content_id]['content_parent_id']; + $myOrder = $this->_menu_info[$content_id]['ordering']; + + if (($this->_menu[$myParent][$myOrder-2] != '') && ($order==0)) { + // has sibling: checking if sibling has children + + $mySibling = $this->_menu[$myParent][$myOrder-2]; + + if ( is_array($this->_menu[$mySibling['content_id']]) && ($order==0) ) { + $num_children = count($this->_menu[$mySibling['content_id']]); + + // sibling has $num_children children + + return($this->getPreviousContent($this->_menu[$mySibling[content_id]][$num_children-1]['content_id'], 1)); + + } else { + // sibling has no children. return it + return($this->_menu[$myParent][$myOrder-2]); + } + + } else { + if ($myParent == 0) { + /* we're at the top */ + return ''; + } + + /* No more siblings */ + if ($order == 0) { + return(array('content_id' => $myParent, + 'ordering' => $this->_menu_info[$myParent]['ordering'], + 'title' => $this->_menu_info[$myParent]['title'])); + } else { + if ( is_array($this->_menu[$content_id]) ) { + $num_children = count($this->_menu[$content_id]); + return ($this->getPreviousContent($this->_menu[$content_id][$num_children-1]['content_id'], 1)); + + } else { + /* no children */ + return(array('content_id' => $content_id, + 'ordering' => $this->_menu_info[$content_id]['ordering'], + 'title' => $this->_menu_info[$content_id]['title'])); + } + } + } + } + + /* Access: Private */ + function getNextContent($content_id, $order=0) { + $myParent = $this->_menu_info[$content_id]['content_parent_id']; + $myOrder = $this->_menu_info[$content_id]['ordering']; + + /* if this content has children, then take the first one. */ + if ( is_array($this->_menu[$content_id]) && ($order==0) ) { + /* has children */ + return($this->_menu[$content_id][0]); + } else { + /* no children */ + if ($this->_menu[$myParent][$myOrder] != '') { + /* Has sibling */ + return($this->_menu[$myParent][$myOrder]); + } else { + /* No more siblings */ + if ($myParent != 0) { + return($this->getNextContent($myParent, 1)); + } + } + } + } + + /* @See include/header.inc.php */ + function generateSequenceCrumbs($cid) { + global $_base_path; + + $sequence_links = array(); + + $first = $this->getNextContent(0); // get first + if ($_SESSION['prefs']['PREF_NUMBERING'] && $first) { + $first['title'] = $this->getNumbering($first['content_id']).' '.$first['title']; + } + if ($first) { + $first['url'] = $_base_path.'content.php?cid='.$first['content_id']; + $sequence_links['first'] = $first; + } + + if (!$cid && $_SESSION['s_cid']) { + $resume['title'] = $this->_menu_info[$_SESSION['s_cid']]['title']; + + if ($_SESSION['prefs']['PREF_NUMBERING']) { + $resume['title'] = $this->getNumbering($_SESSION['s_cid']).' ' . $resume['title']; + } + + $resume['url'] = $_base_path.'content.php?cid='.$_SESSION['s_cid']; + + $sequence_links['resume'] = $resume; + } else { + if ($cid) { + $previous = $this->getPreviousContent($cid); + } + $next = $this->getNextContent($cid ? $cid : 0); + + if ($_SESSION['prefs']['PREF_NUMBERING']) { + $previous['title'] = $this->getNumbering($previous['content_id']).' '.$previous['title']; + $next['title'] = $this->getNumbering($next['content_id']).' '.$next['title']; + } + + $next['url'] = $_base_path.'content.php?cid='.$next['content_id']; + $previous['url'] = $_base_path.'content.php?cid='.$previous['content_id']; + + if ($previous['content_id']) { + $sequence_links['previous'] = $previous; + } else if ($cid) { + $previous['url'] = $_base_path . 'index.php'; + $previous['title'] = _AT('home'); + $sequence_links['previous'] = $previous; + } + if ($next['content_id']) { + $sequence_links['next'] = $next; + } + } + + return $sequence_links; + } + + /* @See include/html/dropdowns/menu_menu.inc.php */ + function printMainMenu( ) { + $parent_id = 0; + $depth = 0; + $path = ''; + $children = array(); + $truncate = true; + $ignore_state = false; + + $this->start = true; + $this->printMenu($parent_id, $depth, $path, $children, $truncate, $ignore_state); + } + + /* @See tools/sitemap/index.php */ + function printSiteMapMenu() { + $parent_id = 0; + $depth = 1; + $path = ''; + $children = array(); + $truncate = false; + $ignore_state = true; + + $this->start = true; + $this->printMenu($parent_id, $depth, $path, $children, $truncate, $ignore_state); + } + + /* @See index.php */ + function printTOCMenu($cid, $top_num) { + $parent_id = $cid; + $depth = 1; + $path = $top_num.'.'; + $children = array(); + $truncate = false; + $ignore_state = false; + + $this->start = true; + $this->printMenu($parent_id, $depth, $path, $children, $truncate, $ignore_state); + } + + /* @See index.php include/html/dropdowns/local_menu.inc.php */ + function printSubMenu($cid, $top_num) { + $parent_id = $cid; + $depth = 1; + $path = $top_num.'.'; + $children = array(); + $truncate = true; + $ignore_state = false; + + $this->start = true; + $this->printMenu($parent_id, $depth, $path, $children, $truncate, $ignore_state); + } + + /* @See include/html/menu_menu.inc.php */ + /* Access: PRIVATE */ + function printMenu($parent_id, $depth, $path, $children, $truncate, $ignore_state) { + + global $cid, $_my_uri, $_base_path, $rtl; + static $temp_path; + + if (!isset($temp_path)) { + if ($cid) { + $temp_path = $this->getContentPath($cid); + } else { + $temp_path = $this->getContentPath($_SESSION['s_cid']); + } + } + + $highlighted = array(); + if (is_array($temp_path)) { + foreach ($temp_path as $temp_path_item) { + $_SESSION['menu'][$temp_path_item['content_id']] = 1; + $highlighted[$temp_path_item['content_id']] = true; + } + } + + if ($this->start) { + reset($temp_path); + $this->start = false; + } + + $top_level = $this->_menu[$parent_id]; + + if ( is_array($top_level) ) { + $counter = 1; + $num_items = count($top_level); + foreach ($top_level as $garbage => $content) { + $link = ''; + if (!$ignore_state) { + $link .= ''; + } + + $on = false; + + if ( ($_SESSION['s_cid'] != $content['content_id']) || ($_SESSION['s_cid'] != $cid) ) { + if ($highlighted[$content['content_id']]) { + $link .= ''; + $on = true; + } + + $link .= ' '; + + if ($truncate && (strlen($content['title']) > (28-$depth*4)) ) { + $content['title'] = rtrim(substr($content['title'], 0, (28-$depth*4)-4)).'...'; + } + $link .= $content['title']; + $link .= ''; + if ($on) { + $link .= ''; + } + } else { + $link .= ''._AT('you_are_here').': '.$content['title'].''; + if ($truncate && (strlen($content['title']) > (26-$depth*4)) ) { + $content['title'] = rtrim(substr($content['title'], 0, (26-$depth*4)-4)).'...'; + } + $link .= trim($content['title']).''; + $on = true; + } + + if ($ignore_state) { + $on = true; + } + + if ( is_array($this->_menu[$content['content_id']]) ) { + /* has children */ + for ($i=0; $i<$depth; $i++) { + if ($children[$i] == 1) { + echo ''; + } else { + echo ''; + } + } + + if (($counter == $num_items) && ($depth > 0)) { + echo ''; + $children[$depth] = 0; + } else if ($counter == $num_items) { + echo ''; + $children[$depth] = 0; + } else { + echo ''; + $children[$depth] = 1; + } + + if ($_SESSION['s_cid'] == $content['content_id']) { + if (is_array($this->_menu[$content['content_id']])) { + $_SESSION['menu'][$content['content_id']] = 1; + } + } + + if ($_SESSION['menu'][$content['content_id']] == 1) { + if ($on) { + echo ''._AT('toggle_disabled').''; + + } else { + echo ''; + echo ''._AT('collapse').''; + echo ''; + } + } else { + if ($on) { + echo ''._AT('toggle_disabled').''; + + } else { + echo ''; + echo ''._AT('expand').''; + echo ''; + } + } + + } else { + /* doesn't have children */ + if ($counter == $num_items) { + for ($i=0; $i<$depth; $i++) { + if ($children[$i] == 1) { + echo ''; + } else { + echo ''; + } + } + echo ''; + } else { + for ($i=0; $i<$depth; $i++) { + if ($children[$i] == 1) { + echo ''; + } else { + echo ''; + } + } + echo ''; + } + echo ''; + } + + if ($_SESSION['prefs']['PREF_NUMBERING']) { + echo $path.$counter; + } + + echo $link; + + echo '
    '; + + if ( $ignore_state || ($_SESSION['menu'][$content['content_id']] == 1)) { + + $depth ++; + + $this->printMenu($content['content_id'], + $depth, + $path.$counter.'.', + $children, + $truncate, + $ignore_state); + + + $depth--; + + } + $counter++; + } + } + } + + /* @See include/html/editor_tabs/properties.inc.php */ + function printMoveMenu($menu, $parent_id, $depth, $path, $children) { + + global $cid, $_my_uri, $_base_path, $rtl; + + static $end, $ignore; + + $top_level = $menu[$parent_id]; + + if ( is_array($top_level) ) { + $counter = 1; + $num_items = count($top_level); + foreach ($top_level as $garbage => $content) { + + $link = ' '; + + echo ''; + + if (($parent_id == $_POST['new_pid']) && ($content['ordering'] < $_POST['new_ordering'])) { + $text = _AT('before_topic', $content['title']); + $img = 'before.gif'; + } else if ($parent_id != $_POST['new_pid']) { + $text = _AT('before_topic', $content['title']); + $img = 'before.gif'; + } else { + $text = _AT('after_topic', $content['title']); + $img = 'after.gif'; + } + if ($ignore && ($_POST['cid'] > 0)) { + $buttons = '  '; + } else if ($_POST['new_pid'] == $content['content_id']) { + $buttons = ' '; + } else { + $buttons = ''; + } + + if (( $content['content_id'] == $cid ) || ($content['content_id'] == -1)) { + $ignore = true; + $link .= ''.trim($_POST['title']).' '._AT('current_location').''; + $buttons = ' '; + } else { + $link .= ''.$content['title'].''; + } + + if ( is_array($menu[$content['content_id']]) && !empty($menu[$content['content_id']]) ) { + /* has children */ + + for ($i=0; $i<$depth; $i++) { + if ($children[$i] == 1) { + echo $buttons; + unset($buttons); + if ($end && ($i==0)) { + echo ''; + } else { + echo ''; + } + } else { + echo ''; + } + } + + if (($counter == $num_items) && ($depth > 0)) { + echo ''; + $children[$depth] = 0; + } else { + echo $buttons; + if (($num_items == $counter) && ($parent_id == 0)) { + echo ''; + $end = true; + } else { + echo ''; + } + $children[$depth] = 1; + } + + if ($_SESSION['s_cid'] == $content['content_id']) { + if (is_array($menu[$content['content_id']])) { + $_SESSION['menu'][$content['content_id']] = 1; + } + } + + if ($_SESSION['menu'][$content['content_id']] == 1) { + echo ''._AT('toggle_disabled').''; + + } else { + echo ''._AT('toggle_disabled').''; + } + + } else { + /* doesn't have children */ + if ($counter == $num_items) { + if ($depth) { + echo $buttons; + for ($i=0; $i<$depth; $i++) { + if ($children[$i] == 1) { + if ($end && ($i == 0)) { + echo ''; + } else { + echo ''; + } + } else { + echo ''; + } + } + } else { + echo $buttons; + } + echo ''; + } else { + if ($depth) { + echo $buttons; + $print = false; + for ($i=0; $i<$depth; $i++) { + if ($children[$i] == 1) { + if ($end && !$print) { + $print = true; + echo ''; + } else { + echo ''; + } + } else { + echo ''; + } + } + $print = false; + } else { + echo $buttons; + } + + echo ''; + } + echo ''; + } + + echo ' '.$path.$counter; + + echo $link; + + echo ''; + + $this->printMoveMenu($menu, + $content['content_id'], + ++$depth, + $path.$counter.'.', + $children); + $depth--; + + $counter++; + + if ( $content['content_id'] == $cid ) { + $ignore =false; + } + } + } + } + + + /* returns the timestamp of release if this page has not yet been released, or is under a page that has not been released, true otherwise */ + /* finds the max(timestamp) of all parents and returns that, true if less than now */ + /* Access: public */ + function isReleased($cid) { + if ($this->_menu_info[$cid]['content_parent_id'] == 0) { + // this $cid has no parent, so we check its release date directly + if ($this->_menu_info[$cid]['u_release_date'] <= time()) { + // yup! it's released + return true; + } else { + // nope! not released + return $this->_menu_info[$cid]['u_release_date']; + } + } + // this is a sub page, need to check ALL its parents + $parent = $this->isReleased($this->_menu_info[$cid]['content_parent_id']); // recursion + + if ($parent !== TRUE && $parent > $this->_menu_info[$cid]['u_release_date']) { + return $parent; + } else if ($this->_menu_info[$cid]['u_release_date'] <= time()) { + return true; + } else { + return $this->_menu_info[$cid]['u_release_date']; + } + } +} + +?> \ No newline at end of file diff --git a/include/classes/ErrorHandler/ErrorHandler.class.php b/include/classes/ErrorHandler/ErrorHandler.class.php new file mode 100644 index 000000000..c8043bab8 --- /dev/null +++ b/include/classes/ErrorHandler/ErrorHandler.class.php @@ -0,0 +1,530 @@ +setFlags(); // false by default + set_error_handler(array(&$this, 'ERROR_HOOK')); + $this->container = array(); + + /** + * check first if the log directory is setup, if not then create a logs dir with a+w && a-r + */ + if (!file_exists(AT_CONTENT_DIR . 'logs/') || !realpath(AT_CONTENT_DIR. 'logs/')) { + $this->makeLogDir(); + } else if (!is_dir(AT_CONTENT_DIR .'logs/')) { + $this->makeLogDir(); + } + } + + /** + * The error handling routine set by set_error_handler(). Mimicking and Exception implementation in OOA + * Must be as quick as possible. Note a few: '\n' -> chr(10) - avoids inline translation in php engine + * 'single quotes', avoid translation again + * Ability define custom errors. See case 'VITAL': + * + * eg call from script, trigger_error('VITAL#There was a problem with the database.','E_USER_ERROR'); + * + * @param string $error_type The type of error being handled. + * @param string $error_msg The error message being handled. + * @param string $error_file The file in which the error occurred. + * @param integer $error_ln The line in which the error occurred. + * @param string $error_context The context in which the error occurred. + * @return Boolean + * @access public + */ + function ERROR_HOOK($error_type, $error_msg, $error_file, $error_ln, $error_context) { + if ($error_type == E_NOTICE || $error_type == E_USER_NOTICE) return; + + $val_phpinfo = ''; + $val_phpinfo_foot = ''; + $val_phpinfo_printed = false; // used to track for the scope of this method whether the server + // has been attached to a log file or e-mail buffer previously + + /** + * Only produce the server configuration once per file + */ + if ($this->todayLogFileExists() === false) { + // lets get some info about the system used by all error codes + ob_start(); + + // grab usefull data from php_info + phpinfo(INFO_GENERAL ^ INFO_CONFIGURATION); + $val_phpinfo .= ob_get_contents(); + ob_end_clean(); + + /* + * Parse $val_phpinfo + */ + + // get a substring of the php info to get rid of the html, head, title, etc. + $val_phpinfo = substr($val_phpinfo, 760, -19); + $val_phpinfo = substr($val_phpinfo, 552); + $val_phpinfo = substr($val_phpinfo, strpos($val_phpinfo, 'System')); + $val_phpinfo .= chr(10); + + $msql_str = ''; + if (defined('MYSQL_NUM')) + $msql_str = "Yes"; + else + $msql_str = "No"; + + $val_phpinfo .= 'MySQL installed? ' . $msql_str . '

    '; + + // replace the 's with tabs and the $nbsp;'s with spaces + $val_phpinfo = str_replace( '', ' ', $val_phpinfo); + $val_phpinfo = str_replace( ' ', ' ', $val_phpinfo); + $val_phpinfo = str_replace( '', ' ', $val_phpinfo); + $val_phpinfo = str_replace( '', ' ', $val_phpinfo); + + $val_phpinfo = str_replace('This program makes use of the Zend Scripting Language Engine:
    Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies', '', $val_phpinfo); + + $val_phpinfo_foot .= '$_ENV:' . chr(10) . $this->debug($_ENV) . '

    '; + } + + // Everytime + $val_phpuser = '$_SESSION:' . chr(10) . $this->debug($_SESSION); + $val_phpuser .= '$_REQUEST:' . chr(10) . $this->debug($_REQUEST); + $val_phpuser .= '$_COOKIE:' . chr(10) . $this->debug($_COOKIE); + $val_phpuser .= '$_GET:' . chr(10) . $this->debug($_GET); + $val_phpuser .= '$_POST:' . chr(10) . $this->debug($_POST); + + // replace the 's with tabs and the $nbsp;'s with spaces + $val_phpuser = str_replace( '', ' ', $val_phpuser); + $val_phpuser = str_replace( ' ', ' ', $val_phpuser) . '
    '; + + switch($error_type) { + + case E_ERROR: // caught below + case E_USER_ERROR: + + if (substr_count($error_msg, "#") > 0) { + $_error = explode("#", $error_msg); + } else { + $_error = array('', $error_msg); + } + + /** + * eg call, trigger_error('VITAL;There was a problem with the database.',E_USER_ERROR); + * + * List of custom errors go here and the appropriate action is taken + *@ + */ + switch($_error[0]) { + /** + * Custom errors are not guaranteed to be printed for example in footer.inc.php + * Hanlde on a case-by-case basis + */ + case 'VITAL': // @see vital.inc.php + if ($this->LOG_ERR_TO_FILE) { + if ($val_phhinfo_printed === true) { + $val_phpinfo = ''; + } + $this->log_to_files($val_phpinfo, $val_phpinfo_foot, 'ATutor v' . VERSION . '
    '. 'PHP ERROR MESSAGE:' . '

    ' + . $error_msg . ' (error type ' . $error_type . ' in ' + . $error_file . ' on line ' . $error_ln . ') [context: ' + . $error_context . ']

    ' . chr(10) .chr(10) . $val_phpuser ); + + $val_phpinfo_printed = true; + + } + + $this->printError('ATutor has detected an Error - ' . + $_error[1]); + + exit; // done here + break; + + case 'BKP_MEMBER': // @see TableBackup.class.php + if ($this->LOG_ERR_TO_FILE) { + if ($val_phhinfo_printed === true) { + $val_phpinfo = ''; + } + $this->log_to_files($val_phpinfo, $val_phpinfo_foot, 'ATutor v' . VERSION . '
    '. 'PHP ERROR MESSAGE:' . '

    ' + . $error_msg . ' (error type ' . $error_type . ' in ' + . $error_file . ' on line ' . $error_ln . ') [context: ' + . $error_context . ']

    ' . chr(10) .chr(10) . $val_phpuser ); + + $val_phpinfo_printed = true; + + } + + $this->printError('ATutor has detected an Error - ' . + $_error[1]); + + exit; + break; + + default: // standard user error without custom prefix + if ($this->LOG_ERR_TO_FILE) { + if ($val_phhinfo_printed === true) { + $val_phpinfo = ''; + } + + $this->log_to_files($val_phpinfo, $val_phpinfo_foot, 'ATutor v' . VERSION . '
    '. 'PHP ERROR MESSAGE:' . '

    ' + . $error_msg . ' (error type ' . $error_type . ' in ' + . $error_file . ' on line ' . $error_ln . ') [context: ' + . $error_context . ']

    ' . chr(10) .chr(10) . $val_phpuser); + + $val_phpinfo_printed = true; + } + } + + //$this->printError('ATutor has detected an Error - ' . 'Problem spot: ' . $error_msg . ' in ' + // . $this->stripbase($error_file) . ' on line ' . $error_ln); + array_push($this->container, 'Problem spot: ' . $error_msg . ' in ' . $this->stripbase($error_file) . ' on line ' . $error_ln); + + break; + + case E_WARNING: + case E_USER_WARNING: + if ($this->LOG_WARN_TO_FILE) { + if ($val_phhinfo_printed === true) { + $val_phpinfo = ''; + } + + $this->log_to_files($val_phpinfo, $val_phpinfo_foot, 'ATutor v' . VERSION . '
    '. 'PHP ERROR MESSAGE:' . '

    ' + . $error_msg . ' (error type ' . $error_type . ' in ' + . $error_file . ' on line ' . $error_ln . ') [context: ' + . $error_context . ']

    ' . chr(10) . chr(10) . $val_phpuser); + + $val_phpinfo_printed = true; + } + + //$this->printError('ATutor has detected an Error - ' . 'Problem spot: ' . $error_msg . ' in ' + // . $this->stripbase($error_file) . ' on line ' . $error_ln); + array_push($this->container, 'Problem spot: ' . $error_msg . ' in ' . $this->stripbase($error_file) . ' on line ' . $error_ln); + + break; + default: + } + + return true; + } + + /** +ÊÊ * Dump the current error into a file along with an updated profile for that error +ÊÊ * + * @param string the profile to log + * @param string the bug to log +ÊÊ * @access public +ÊÊ */ + function log_to_files($profile, $profile_foot, $buf) { + + if ($profile == '' || $profile_foor = '' || $buf == '') return; + + /** + * Redundancy control for profile/error log creation + */ + $profile_created = true; + $error_created = true; + + $php_head = '' . chr(10); + + // Lets make a unqiue profile key, strip away circumventors of the md5 hashing algo. @see md5 algo src + $temp = strip_tags($profile); + $temp = stripslashes($temp); + $temp = str_replace('/', ' ', $temp); + $temp = str_replace('\$', ' ', $temp); + $temp = str_replace('$', ' ', $temp); + $temp = str_replace('\&' , ' ', $temp); + $temp = str_replace('&' , ' ', $temp); + $temp = str_replace('*' , ' ', $temp); + $temp = str_replace('~' , ' ', $temp); + $temp = str_replace('.' , ' ', $temp); + $temp = str_replace(';' , ' ', $temp); + $temp = str_replace(':' , ' ', $temp); + $temp = str_replace('-' , ' ', $temp); + $temp = str_replace('_' , ' ', $temp); + $temp = str_replace('\'' , ' ', $temp); + $temp = str_replace(',' , ' ', $temp); + $temp = str_replace('@' , ' ', $temp); + $temp = str_replace('#' , ' ', $temp); + + $profile_key = md5($temp); + + $today = getdate(); + + // Uniqueness assumend to be coupled to epoch timestamp + $timestamp_ = $today['mon'] . '-' . $today['mday'] . '-' . $today['year']; + + /** + * Lets make sure we have a log directory made for today + */ + if (!is_dir(AT_CONTENT_DIR . 'logs/' . $timestamp_)) { // create it + $result = @mkdir(AT_CONTENT_DIR . 'logs/' . $timestamp_, 0771); // r+w for owner + + if ($result == 0) { + $this->printError('Fatal. Could not create /content/logs' . '/' . $timestamp_ . '. Please resolve'); + } + } // else already there + + /** + * Go through all the profiles in our directory and lets try and map our md5 key to one of them, + * if its not found then we must be dealing with a new profile, thus create it + */ + $dir_ = AT_CONTENT_DIR . 'logs/' . $timestamp_; + + if (!($dir = opendir($dir_))) { + $msg->printNoLookupFeedback('Could not access /content/logs/' . $timestamp_ . '. Check that the permission for the Server user are r+w to it'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + + exit; + } + + /** + * Run through the todays logs directory and lets get all the profiles + */ + $use_profile = null; + + // loop through folder todays log folder and try and match a profile to our error profile md5 key + while (($file = readdir($dir)) !== false) { + + /* if the name is not a directory */ + if( ($file == '.') || ($file == '..') || is_dir($file) ) { + continue; + } + + if (strpos($file, 'profile') >= 0) { + $check_key = substr($file, strpos($file, '_') + 1); + $check_key = substr($check_key, 0, strpos($check_key, '.log.php')); + + if ($check_key === $profile_key) { // found! + $use_profile = $file; + $profile_created = true; + break; + } + } + } + closedir($dir); // clean it up + + // if $use_profile == null here then we must create a new profile for this error + if ($use_profile == null) { + $use_profile = 'profile_' . $profile_key . '.log.php'; + if ($file_handle = fopen(AT_CONTENT_DIR . 'logs/' . $timestamp_ . '/' . $use_profile, "w")) { + if (!fwrite($file_handle, $php_head . chr(10) . $profile . $profile_foot)) { $profile_created = false; } + } else { $profile_created = false; } + fclose($file_handle); + } // else just use $use_profile as the profile for this error + + // if the creation of the profile_created = false then creation failed and we didnt have an already + // existant one in the dir, profile must exist + if ($profile_created === false) return; + + $timestamp = $timestamp_ . '_' . $today[0]; + + // create a unique error filename including the epoch timestamp + and the profile mapping + $unique_error_log = $timestamp . '_pr' . $profile_key; + + if (is_file(AT_CONTENT_DIR . 'logs/' . $timestamp_ . '/' . $unique_error_log)) { + $unique_error_log .= rand(); // should be enough + } + + $unique_error_log .= '.log.php'; // append suffix + + /* Create error log file */ + if ($file_handle = fopen(AT_CONTENT_DIR . 'logs/' . $timestamp_ . '/' . $unique_error_log, "w")) { + if (!fwrite($file_handle, $php_head . chr(10) . $buf)) { $error_created = false; } + } else { + $error_created = false; + } + fclose($file_handle); + + // check that we created a profile and its error or used an existing profile and created its error + if ($profile_created === true && $error_created === true) { // ok + chmod(AT_CONTENT_DIR . 'logs/' . $timestamp_ . '/' . $unique_error_log, 0771); + chmod(AT_CONTENT_DIR . 'logs/' . $timestamp_ . '/' . $use_profile, 0771); + } else if ($profile_create === true && $error_created === false) { // remove profile + unlink(AT_CONTENT_DIR . 'logs/' . $timestamp_ . '/' . $use_profile); + } + } + + /** +ÊÊ * Restores the error handler to the default error handler +ÊÊ * +ÊÊ * @return void +ÊÊ * @access public +ÊÊ */ + function restoreOrigHandler() { + restore_error_handler(); + } + + /** +Ê * Returns the error handler to ERROR_HOOK() +Ê * +ÊÊ * @return void +ÊÊ * @access public +ÊÊ */ + function returnHandler() { + set_error_handler(array(&$this, 'ERROR_HOOK')); + } + + /** +ÊÊ * Changes the logging preferences +ÊÊ * + * @param Boolean $error_flag Log errors to file? +ÊÊ * @param Boolean $warning_flag Log warnings to file? +ÊÊ * @return void +ÊÊ * @access public +ÊÊ */ + function setFlags($error_flag = true, $warning_flag = true) { + + $this->LOG_ERR_TO_FILE = $error_flag; + $this->LOG_WARN_TO_FILE = $warning_flag; + } + + /** + * Construct a nicely formatted tree view of a variable + * @param var String is the varialbe to construct the output from + * @access private + */ + function debug($var) { + $str_ = '
    ';
    +		
    +		ob_start();
    +		print_r($var);
    +		$str = ob_get_contents();
    +		ob_end_clean();
    +	
    +		$str = str_replace('<', '<', $str);
    +	
    +		$str = str_replace('[', '[', $str);
    +		$str = str_replace(']', ']', $str);
    +		$str = str_replace('=>', '=>', $str);
    +		$str = str_replace('Array', 'Array', $str);
    +		$str .= '
    '; + + $str = $str_ . $str; + return $str; + } + + /** + * Function which strips the path base off a file URL since it is a security risk + * @param String str is the path string + * @return String only the script filename where the error occured + */ + function stripbase($str) { + + $to_root = $_SERVER["PATH_TRANSLATED"]; + + $pos_last = strrpos($to_root, "/"); + $to_root = substr($to_root, $pos_last + 1); + return $to_root; + } + + /** + * Print the error to the browser, dont use any templates or css sheets for flexibility + * @access private + */ + function printError($str) { + if (!AT_DEVEL) return; + + echo '
    '; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
    '; + echo '

    Internal Error Detected

    '; + echo '
      '; + echo '
    • '. $str .'
    • '; + echo'
    '; + echo '
    '; + echo '
    '; + } + + /** + * Create restricted access logs dir + */ + function makeLogDir() { + + $result = @mkdir(AT_CONTENT_DIR . 'logs', 0771); // r+w for owner + if ($result == 0) { + $this->printError('Fatal. Could not create /content/logs. Please resolve'); + } + + } + + /** + * Determine wheter a log file exists for today + * @access private + */ + function todayLogFileExists() { + $today = getdate(); + + $timestamp = $today['mon'] . '-' . $today['mday'] . '-' . $today['year']; + + return (is_file(AT_CONTENT_DIR . 'logs/' . $timestamp . '.log')); + } + + /** + * Run through $container and print all the errors on this page. + * Used to prevent errors from breaking content on the page + * @access public + */ + function showErrors() { + + foreach($this->container as $elem) { + $this->printError('ATutor has detected an Error - ' . + $elem); + unset($elem); + } + } +} +?> \ No newline at end of file diff --git a/include/classes/FileManager.class.php b/include/classes/FileManager.class.php new file mode 100644 index 000000000..84f3ee299 --- /dev/null +++ b/include/classes/FileManager.class.php @@ -0,0 +1,544 @@ +contentDirectory = AT_CONTENT_DIR . $_SESSION['course_id']; + } + + /** + * Creates a directory recursivelly. + * @access public + * @param string $dir relative path and name of the directory to create. + * dir can be a full path of a dir structure to create. + * @return boolean whether or not the directory was created + * @author Joel Kronenberg + */ + function createDirectory($dir) { + // break $dir into the end part + // check that the path to the new dir is safe + // sanitise the dir name + + // Note: would it be easier to receive the path and directory name separately? + + } + + /** + * Copies a file or directory + * @access public + * @param string $src relative path to the source directory or file + * @param string $dst relative path to the destination directory or file + * @return boolean TRUE or FALSE whether or not the action was successful + * @author Joel Kronenberg + */ + function copy($src, $dst) { + + } + + /** + * Moves a file or directory + * @access public + * @param string $src relative path to the source directory or file + * @param string $dst relative path to the destination directory or file + * @return boolean TRUE or FALSE whether or not the action was successful + * @author Joel Kronenberg + */ + function move($src, $dst) { + + } + + /** + * Rename a file or directory + * @access public + * @param string $old_name relative path and old name of the directory or file to rename + * @param string $new_name relative path and new name of the directory or file to rename + * @return boolean TRUE or FALSE whether or not the action was successful + * @author Joel Kronenberg + */ + function rename($old_name, $new_name) { + + } + + /** + * Delete a file or directory (recusively) + * @access public + * @param string $file relative path and name of the file or directory to delete + * @return boolean TRUE or FALSE whether or not the action was successful + * @author Joel Kronenberg + */ + function delete($file) { + // if it's a dir, then call the $this->_deleteDir($file) private method + // else if it's a file call the $this->_deleteFile($file) private method + } + + /** + * Extracts a zip archive + * @access public + * @param string $archive relative path and name of the zip file to extract + * @param string $dst relative path and name of the directory to extract the files into + * @return boolean TRUE or FALSE whether or not the action was successful + * @author Joel Kronenberg + */ + function extract($archive, $dst) { + + } + + /** + * Saves contents to a file + * @access public + * @param string $file relative path to the file to save to + * @param string $contents the contents of the file to save to + * @param boolean $overwrite whether or not to overwrite the file if it exists + * @return boolean TRUE or FALSE whether or not the action was successful + * @author Joel Kronenberg + */ + function saveFile($file, $contents, $overwrite = FALSE) { + + } + + /** + * Saves an uploded file + * @access public + * @return boolean TRUE or FALSE whether or not the action was successful + * @author Joel Kronenberg + */ + function saveUploadFile( ) { + + } + + /** + * Returns size of a directory (recursively) + * @access public + * @param string $dir relative path to the directory + * @param boolean $recursive whether or not to recurse down directories + * @return int size of directory in Bytes, FALSE on failure + * @author Joel Kronenberg + */ + function getDirectorySize($dir, $recursive = TRUE) { + $dir = $this->_getRealPath($dir); + + if (($dir !== FALSE) && is_dir($dir)) { + $dh = @opendir($dir); + } + if (!$dh) { + return -1; + } + $size = 0; + while (($file = readdir($dh)) !== false) { + if (($file != '.') && ($file != '..')) { + $path = $dir . $file; + if (is_dir($path) && ($recursive === TRUE)) { + $size += $this->getDirectorySize($path . DIRECTORY_SEPARATOR); + } elseif (is_file($path)) { + $size += filesize($path); + } + } + + } + closedir($dh); + return $size; + } + + /** + * Returns listing of files and directories + * @access public + * @param string $dir relative path to the directory + * @return array array of files and directories in $dir + * @author Joel Kronenberg + */ + function getDirectoryListing($dir) { + + } + + /** + * Returns whether or not the $fileName is an editable type of file + * @access public + * @param string $fileName name of the file to check + * @return boolean TRUE if the file can be edited, FALSE otherwise + * @author Joel Kronenberg + */ + function isEditable($fileName) { + // check if $fileName is in the list of editable files + + } + + /** + * Returns whether or not the $fileName is an archive that can be extracted + * @access public + * @param string $fileName name of the file to check + * @return boolean TRUE if the file can be extracted, FALSE otherwise + * @author Joel Kronenberg + */ + function isExtractable($fileName) { + // check if $fileName is in the list of extractable files + + // Note: could possibly call this isArchive() (but that doesn't directly imply extractability) + } + + // -- private methods below + + /** + * Returns a safe to use file or directory name + * @access private + * @param string $file the file or directory name to sanitise + * @return string|boolean the sanitised file/directory name, or FALSE if the result is empty + * @author Joel Kronenberg + */ + function _getCleanName($fileName) { + $fileName = trim($fileName); + $fileName = str_replace(' ', '_', $fileName); + $fileName = str_replace(array(' ', '/', '\\', ':', '*', '?', '"', '<', '>', '|', '\''), '', $fileName); + + return $fileName; + } + + /** + * Returns canonicalized absolute pathname + * @access private + * @param string $file the relative path to a file or directory + * @return string|boolean the canonicalized pathname, or FALSE if the file is not in the content directory + * @author Joel Kronenberg + */ + function _getRealPath($file) { + // determine the real path of the file/directory + $real = realpath($this->contentDirectory . DIRECTORY_SEPARATOR . $file); + + if (!file_exists($real)) { + // the file or directory does not exist + return FALSE; + + } else if (substr($real, 0, strlen($this->contentDirectory)) != $this->contentDirectory) { + // the file or directory is not in the content path + return FALSE; + + } else { + // otherwise return the real path of the file + return $real; + } + } + + /** + * Delete a file + * @access private + * @param string $file relative path and name of the file or directory to delete + * @return boolean TRUE or FALSE whether or not the action was successful + * @author Joel Kronenberg + */ + function _deleteFile($file) { + + } + + /** + * Delete this directory recursively + * @access private + * @param string $dir relative path and name of the directory to delete + * @return boolean TRUE or FALSE whether or not the action was successful + * @author Joel Kronenberg + */ + function _deleteDirectory($dir) { + + } +} + + +/** +* FileManagerFactory +* Class for creating AbstractFileManager Objects +* @access public +* @author Joel Kronenberg +* @package FileManager +*/ +class FileManagerFactory { + + function FileManagerFactory() { } + + function createFileManagerFile($name) { + $obj = new FileManagerFile($name); + if ($obj->isOkay()) { + return $obj; + } + return NULL; + } + function createFileManagerDirectory($name) { + $obj= new FileManagerDirectory($name); + if ($obj->isOkay()) { + return $obj; + } + return NULL; + } + + function open($name) { + if (is_dir($name)) { + $obj = new FileManagerDirectory($name); + } else if (is_file($name)) { + $obj = new FileManagerFile($name); + } else { + // file not found + return NULL; + } + if ($obj->isOkay()) { + return $obj; + } + return NULL; + } +} + +class AbstractFileManager { + var $_type; // private + var $_name; // private + var $_path; // private + var $_filename; // private + var $_exists; // private + + // var $_old_filename; + // var $_old_path; // maybe? + + var $_fp; // private, file/dir pointer + + function AbstractFileManager( ) { + $this->contentDirectory = AT_CONTENT_DIR . $_SESSION['course_id']; + } + + function create() { } + + function isOkay() { + // this is where the important authentication check is done! + echo 'authenticating '.$this->_filename.'
    '; + if (file_exists($this->_path . DIRECTORY_SEPARATOR . $this->_filename)) { + $this->_exists = TRUE; + } + $this->_exists = FALSE; + if ($this->isIllegalType()) { + return FALSE; + } + return TRUE; + } + + function exists() { + return $this->_exists; + } + +} + +class FileManagerFile extends AbstractFileManager { + var $_extension; // private + + function FileManagerFile($file) { + $this->_type = 'file'; + + $pathinfo = pathinfo($file); + $this->_extension = $pathinfo['extension']; + $this->_path = $pathinfo['dirname']; + $this->_filename = $pathinfo['basename']; + + // set whether or not this file/dir is safe. + } + + function rename($newName) { + $return = FALSE; + + $fileManagerFactory = new FileManagerFactory(); + $fileObj = $fileManagerFactory->createFileManagerFile($this->_path . DIRECTORY_SEPARATOR . $newName); + if (($fileObj !== NULL) && !$fileObj->exists()) { + if (@rename($this->_path . DIRECTORY_SEPARATOR . $this->_filename, $this->_path . DIRECTORY_SEPARATOR . $newName)) { + $this->_filename = $newName; + $return = TRUE; + } + } + return $return; + } + + function delete() { + return unlink($this->_path . DIRECTORY_SEPARATOR . $this->_filename); + } + + function isIllegalType($name = '') { + // get file extension + if ($name) { + $pathinfo = pathinfo($name); + $ext = $pathinfo['extension']; + } else { + $ext = $this->_extension; + } + + if (in_array($ext, array('txt', 'html'))) { + return FALSE; + } + return TRUE; + } + + function create($content) { + if (!is_dir($this->_path)) { + $fileManagerFactory = new FileManagerFactory(); + $dirObj = $fileManagerFactory->createFileManagerDirectory($this->_path); + if ($dirObj !== NULL) { + $dirObj->create(0666); + } + } + + // save $contents into $file + $return = FALSE; + if (($fp = @fopen($this->_path . DIRECTORY_SEPARATOR . $this->_filename, 'wb+')) !== FALSE) { + $return = @fwrite($fp, $content, strlen($content)); + @fclose($fp); + } + return $return; + } + +} + +class FileManagerDirectory extends AbstractFileManager { + + function FileManagerDirectory($dir) { + $this->_type = 'directory'; + + $pathinfo = pathinfo($dir); + $this->_path = $pathinfo['dirname']; + $this->_filename = $pathinfo['basename']; + } + + function isIllegalType() { + return FALSE; + } + + function getDirectoryListing() { + + } + + // creates dir + function create($mode = 0666) { + if (is_dir($this->_path)) { + return @mkdir($this->_path . DIRECTORY_SEPARATOR . $this->_filename, $mode); + } else { + $fileManagerFactory = new FileManagerFactory(); + $dirObj = $fileManagerFactory->createFileManagerDirectory($this->_path); + if ($dirObj !== NULL) { + if ($dirObj->create(0666) !== FALSE) { + return @mkdir($this->_path . DIRECTORY_SEPARATOR . $this->_filename, $mode); + } + } + } + } + + function delete() {} + + function getDirectorySize($recursive = TRUE) { + + } + + // private + function _getDirectorySize($recursive = TRUE) { + + } + +} + +$fileManagerFactory = new FileManagerFactory(); + +$fileObj = $fileManagerFactory->createFileManagerFile('/content/meow.txt'); + +if ($fileObj !== NULL) { + $data = 'stuff goes in here'; + if ($fileObj->create($data) !== FALSE) { + echo 'create good: ' . $fileObj->_filename .' in '. $fileObj->_path; + } +} +echo '
    '; + +$fileObj = $fileManagerFactory->open('/content/meow.txt'); +if ($fileObj !== NULL) { + if ($fileObj->rename('cow.txt') !== FALSE) { + echo 'rename good: ' . $fileObj->_filename .' in '. $fileObj->_path; + } +} + +echo '
    '; + +$fileObj = $fileManagerFactory->open('/content/cow.txt'); +if ($fileObj !== NULL) { + if ($fileObj->delete() !== FALSE) { + echo 'delete good: ' . $fileObj->_filename .' in '. $fileObj->_path; + } +} + +echo '
    '; + +$dirObj = $fileManagerFactory->createFileManagerDirectory('/content/test1/test2/test3/test4/'); +if ($dirObj !== NULL) { + if ($dirObj->create(0666) !== FALSE) { + echo 'create good: ' . $dirObj->_filename .' in '. $dirObj->_path; + } else { + echo 'dir exists: ' . $dirObj->_filename .' in '. $dirObj->_path; + } +} + +echo '
    '; + + +$fileObj = $fileManagerFactory->createFileManagerFile('/content/test3/test122/quack.txt'); +if ($fileObj !== NULL) { + $data = 'quack file goes here'; + if ($fileObj->create($data) !== FALSE) { + echo 'create good: ' . $fileObj->_filename .' in '. $fileObj->_path; + } +} + +echo '
    '; + +/* +- create/overwrite file +- move file +- rename file +- delete file +- copy file + + +- create dir +- move dir (and its files) +- rename dir +- delete dir +- copy dir + + +*/ +?> \ No newline at end of file diff --git a/include/classes/Language/Language.class.php b/include/classes/Language/Language.class.php new file mode 100644 index 000000000..7b2f1fe56 --- /dev/null +++ b/include/classes/Language/Language.class.php @@ -0,0 +1,213 @@ +db = $db; + + if (is_array($language_row)) { + $this->code = $language_row['language_code']; + $this->characterSet = $language_row['char_set']; + $this->direction = $language_row['direction']; + $this->regularExpression = $language_row['reg_exp']; + $this->nativeName = $language_row['native_name']; + $this->englishName = $language_row['english_name']; + $this->status = $language_row['status']; + $this->atutor_version = $language_row['version']; + + } else if (is_object($language_row)) { + $this->cloneThis($language_row); + } + } + + // private + // copies the properties from $from to $this Object + function cloneThis($from) { + $vars = get_object_vars($from); + foreach ($vars as $key => $value) { + $this->$key = $value; + } + } + + // returns whether or not the $search_string matches the regular expression + function isMatchHttpAcceptLanguage($search_string) { + return eregi('^(' . $this->regularExpression . ')(;q=[0-9]\\.[0-9])?$', $search_string); + } + + // returns boolean whether or not $search_string is in HTTP_USER_AGENT + function isMatchHttpUserAgent($search_string) { + return eregi('(\(|\[|;[[:space:]])(' . $this->regularExpression . ')(;|\]|\))', $search_string); + + } + + function getCode() { + return $this->code; + } + + function getCharacterSet() { + return $this->characterSet; + } + + function getDirection() { + return $this->direction; + } + + function getRegularExpression() { + return $this->regularExpression; + } + + function getAtutorVersion() { + return $this->atutor_version; + } + + function getTranslatedName() { + if ($this->code == $_SESSION['lang']) { + return $this->nativeName; + } + // this code has to be translated: + return _AT('lang_' . str_replace('-', '_', $this->code)); + } + + function getNativeName() { + return $this->nativeName; + } + + function getEnglishName() { + return $this->englishName; + } + + function getStatus() { + return $this->status; + } + + + // public + function sendContentTypeHeader() { + header('Content-Type: text/html; charset=' . $this->characterSet); + } + + // public + function saveToSession() { + $_SESSION['lang'] = $this->code; + } + + // public + function saveToPreferences($id) { + global $db; + if ($id) { + $sql = "UPDATE ".TABLE_PREFIX."members SET language='".$this->code."', creation_date=creation_date, last_login=last_login WHERE member_id=$id"; + mysql_query($sql,$db); + } + } + + // public + // returns whether or not this language is right-to-left + // possible langues are: arabic, farsi, hebrew, urdo + function isRTL() { + if ($this->direction == 'rtl') { + return true; + } // else: + + return false; + } + + // public + // can be called staticly + function getParentCode($code = '') { + if (!$code && isset($this)) { + $code = $this->code; + } + $peices = explode(AT_LANGUAGE_LOCALE_SEP, $code, 2); + return $peices[0]; + } + + // public + // can be called staticly + function getLocale($code = '') { + if (!$code && isset($this)) { + $code = $this->code; + } + $peices = explode(AT_LANGUAGE_LOCALE_SEP, $code, 2); + return $peices[1]; + } + + + // public + function getTerm($term) { + $sql = "SELECT *, UNIX_TIMESTAMP(L.revised_date) AS revised_date_unix FROM ".TABLE_PREFIX."language_text L WHERE L.language_code='".$this->getCode()."' AND L.variable='_template' AND L.term='$term'"; + + $result = mysql_query($sql, $this->db); + $row = mysql_fetch_assoc($result); + return $row; + } + + function getXML($part=FALSE) { + if (!$part) { + $xml = ' + + + + + + + + + + + + + ]>'; + } + + $xml .= ' + '.VERSION.' + '.$this->characterSet.' + '.$this->direction.' + '.$this->regularExpression.' + '.$this->nativeName.' + '.$this->englishName.' + '.$this->status.' + '; + + return $xml; + } +} +?> \ No newline at end of file diff --git a/include/classes/Language/LanguageEditor.class.php b/include/classes/Language/LanguageEditor.class.php new file mode 100644 index 000000000..97fc4844f --- /dev/null +++ b/include/classes/Language/LanguageEditor.class.php @@ -0,0 +1,436 @@ +msg =& $msg; + + $this->addslashes = $addslashes; + + if (isset($myLang)) { + $this->Language($myLang); + } + $this->missingTerms = array(); + } + + /** + * Inserts a new language def'n into the database. + * @access public + * @param array $row The language def'n fields as an assoc array. + * @return boolean Returns TRUE if the def'n was inserted correctly, + * or FALSE, otherwise. + * call staticly only! + */ + function addLanguage($row, $db) { + global $addslashes; + global $msg; + + $row['code'] = trim($row['code']); + $row['locale'] = trim($row['locale']); + $row['charset'] = trim($row['charset']); + $row['reg_exp'] = trim($row['reg_exp']); + $row['native_name'] = trim($row['native_name']); + $row['english_name'] = trim($row['english_name']); + + $missing_fields = array(); + + if ($row['code'] == '') { + $missing_fields[] = _AT('lang_code'); + } + if ($row['charset'] == '') { + $missing_fields[] = _AT('charset'); + } + if ($row['reg_exp'] == '') { + $missing_fields[] = _AT('reg_exp'); + } + if ($row['native_name'] == '') { + $missing_fields[] = _AT('name_in_language'); + } + if ($row['english_name'] == '') { + $missing_fields[] = _AT('name_in_english'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $row['code'] = $addslashes($row['code']); + $row['locale'] = $addslashes($row['locale']); + $row['charset'] = $addslashes($row['charset']); + $row['direction'] = $addslashes($row['direction']); + $row['reg_exp'] = $addslashes($row['reg_exp']); + $row['native_name'] = $addslashes($row['native_name']); + $row['english_name'] = $addslashes($row['english_name']); + + if (!empty($row['locale'])) { + $row['code'] .= AT_LANGUAGE_LOCALE_SEP . strtolower($row['locale']); + } + + $sql = "INSERT INTO ".TABLE_PREFIX."languages VALUES ('$row[code]', '$row[charset]', '$row[direction]', '$row[reg_exp]', '$row[native_name]', '$row[english_name]', 3)"; + + if (mysql_query($sql, $db)) { + return TRUE; + } else { + return FALSE; + } + } + + return FALSE; + } + + // public + // $row = the language info array + // $new_exists whether the new code+locale exists already + // returns true or false, depending on success if db update + // can be called staticly + function updateLanguage($row, $new_exists) { + $missing_fields = array(); + + if ($row['code'] == '') { + $missing_fields[] = _AT('lang_code'); + } + if ($row['charset'] == '') { + $missing_fields[] = _AT('charset'); + } + if ($row['reg_exp'] == '') { + $missing_fields[] = _AT('reg_exp'); + } + if ($row['native_name'] == '') { + $missing_fields[] = _AT('name_in_language'); + } + if ($row['english_name'] == '') { + $missing_fields[] = _AT('name_in_english'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + + if (!$this->msg->containsErrors()) { + global $addslashes; + global $db; + + $row['code'] = strtolower($addslashes($row['code'])); + if (!empty($row['locale'])) { + $row['code'] .= AT_LANGUAGE_LOCALE_SEP . strtolower($addslashes($row['locale'])); + } + $row['charset'] = strtolower($addslashes($row['charset'])); + $row['direction'] = strtolower($addslashes($row['direction'])); + $row['reg_exp'] = strtolower($addslashes($row['reg_exp'])); + $row['native_name'] = $addslashes($row['native_name']); + $row['english_name'] = $addslashes($row['english_name']); + if (isset($row['status'])) { + $row['status'] = intval($row['status']); + $status_sql = ', status='.$row['status']; + } else { + $status_sql = ''; + } + + if ($row['old_code'] == $row['code']) { + $sql = "UPDATE ".TABLE_PREFIX."languages SET char_set='$row[charset]', direction='$row[direction]', reg_exp='$row[reg_exp]', native_name='$row[native_name]', english_name='$row[english_name]' $status_sql WHERE language_code='$row[code]'"; + mysql_query($sql, $db); + + return TRUE; + } else if ($new_exists) { + $this->msg->addError('LANG_EXISTS'); + return FALSE; + } else { + $sql = "UPDATE ".TABLE_PREFIX."languages SET language_code='$row[code]', char_set='$row[charset]', direction='$row[direction]', reg_exp='$row[reg_exp]', native_name='$row[native_name]', english_name='$row[english_name]' $status_sql WHERE language_code='$row[old_code]'"; + mysql_query($sql, $db); + + $sql = "UPDATE ".TABLE_PREFIX."language_text SET language_code='$row[code]' WHERE language_code='$row[old_code]'"; + mysql_query($sql, $db); + + return TRUE; + } + + } + return FALSE; + } + + function deleteLanguage() { + $sql = "DELETE FROM ".TABLE_PREFIX."languages WHERE language_code='$this->code'"; + mysql_query($sql, $this->db); + + $sql = "DELETE FROM ".TABLE_PREFIX."language_text WHERE language_code='$this->code'"; + mysql_query($sql, $this->db); + + $sql = "UPDATE ".TABLE_PREFIX."members SET language='".DEFAULT_LANGUAGE."', creation_date=creation_date, last_login=last_login WHERE language='$this->code'"; + mysql_query($sql, $this->db); + + $sql = "UPDATE ".TABLE_PREFIX."courses SET primary_language='".DEFAULT_LANGUAGE."' WHERE primary_language='$this->code'"; + mysql_query($sql, $this->db); + + cache_purge('system_langs', 'system_langs'); + } + + // public + function updateTerm($variable, $term, $text) { + $addslashes = $this->addslashes; + + $variable = $addslashes($variable); + $term = $addslashes($term); + $text = $addslashes($text); + $code = $addslashes($this->getCode()); + + $sql = "UPDATE ".TABLE_PREFIX."language_text SET text='$text', revised_date=NOW() WHERE language_code='$code' AND variable='$variable' AND term='$term'"; + + /* + if (mysql_query($sql, $this->db)) { + return TRUE; + } else { + debug(mysql_error($this->db)); + return FALSE; + } + */ + } + + // public + function insertTerm($variable, $key, $text, $context) { + $addslashes = $this->addslashes; + + $variable = $addslashes($variable); + $key = $addslashes($key); + $text = $addslashes($text); + $code = $addslashes($this->getCode()); + $context = $addslashes($context); + + $sql = "INSERT INTO ".TABLE_PREFIX."language_text VALUES('$code', '$variable', '$key', '$text', NOW(), '$context')"; + } + + // public + function showMissingTermsFrame(){ + global $_base_path, $addslashes; + //$terms = array_slice($this->missingTerms, 0, 20); + $terms = $this->missingTerms; + $terms = serialize($terms); + $terms = urlencode($terms); + + echo '
    ';if(features['statusbar']=="yes"){html+='
    ';if(features['resizable']=="yes"){if(this.isGecko)html+='
    ';else html+='
    ';}html+='
    ';}html+='';html+='';html+='';this.createFloatingIFrame(id,features['left'],features['top'],features['width'],features['height'],html);};TinyMCE_Windows.prototype.setDocumentLock=function(state){if(state){var elm=document.getElementById('mcWindowEventBlocker');if(elm==null){elm=document.createElement("div");elm.id="mcWindowEventBlocker";elm.style.position="absolute";elm.style.left="0";elm.style.top="0";document.body.appendChild(elm);}elm.style.display="none";var imgPath=this.getParam("images_path");var width=document.body.clientWidth;var height=document.body.clientHeight;elm.style.width=width;elm.style.height=height;elm.innerHTML='';elm.style.zIndex=mcWindows.zindex-1;elm.style.display="block";}else{var elm=document.getElementById('mcWindowEventBlocker');if(mcWindows.windows.length==0)elm.parentNode.removeChild(elm);else elm.style.zIndex=mcWindows.zindex-1;}};TinyMCE_Windows.prototype.onLoad=function(name){var win=mcWindows.windows[name];var id="mcWindow_"+name;var wrapperIframe=window.frames[id+"_iframe"].frames[0];var wrapperDoc=window.frames[id+"_iframe"].document;var doc=window.frames[id+"_iframe"].document;var winDiv=document.getElementById("mcWindow_"+name+"_div");var realIframe=window.frames[id+"_iframe"].frames[0];win.id="mcWindow_"+name;win.winElement=winDiv;win.bodyElement=doc.getElementById(id+'_body');win.iframeElement=doc.getElementById(id+'_iframe');win.headElement=doc.getElementById(id+'_head');win.titleElement=doc.getElementById(id+'_title');win.resizeElement=doc.getElementById(id+'_resize');win.containerElement=doc.getElementById(id+'_container');win.left=win.features['left'];win.top=win.features['top'];win.frame=window.frames[id+'_iframe'].frames[0];win.wrapperFrame=window.frames[id+'_iframe'];win.wrapperIFrameElement=document.getElementById(id+"_iframe");mcWindows.addEvent(win.headElement,"mousedown",mcWindows.eventDispatcher);if(win.resizeElement!=null)mcWindows.addEvent(win.resizeElement,"mousedown",mcWindows.eventDispatcher);if(mcWindows.isMSIE){mcWindows.addEvent(realIframe.document,"mousemove",mcWindows.eventDispatcher);mcWindows.addEvent(realIframe.document,"mouseup",mcWindows.eventDispatcher);}else{mcWindows.addEvent(realIframe,"mousemove",mcWindows.eventDispatcher);mcWindows.addEvent(realIframe,"mouseup",mcWindows.eventDispatcher);mcWindows.addEvent(realIframe,"focus",mcWindows.eventDispatcher);}for(var i=0;i'; + html += ''; + html += ''; + + html += '
    '; + html += '
    '; + html += '
    '; +// html += ' '; +// html += ' '; + html += '
    '; + html += '
    '; + html += '
    '; + + if (features['statusbar'] == "yes") { + html += '
    '; + + if (features['resizable'] == "yes") { + if (this.isGecko) + html += '
    '; + else + html += '
    '; + } + + html += '
    '; + } + + html += '
    '; + + html += ''; + html += ''; + + // Create iframe + this.createFloatingIFrame(id, features['left'], features['top'], features['width'], features['height'], html); +}; + +// Blocks the document events by placing a image over the whole document +TinyMCE_Windows.prototype.setDocumentLock = function(state) { + if (state) { + var elm = document.getElementById('mcWindowEventBlocker'); + if (elm == null) { + elm = document.createElement("div"); + + elm.id = "mcWindowEventBlocker"; + elm.style.position = "absolute"; + elm.style.left = "0"; + elm.style.top = "0"; + + document.body.appendChild(elm); + } + + elm.style.display = "none"; + + var imgPath = this.getParam("images_path"); + var width = document.body.clientWidth; + var height = document.body.clientHeight; + + elm.style.width = width; + elm.style.height = height; + elm.innerHTML = ''; + + elm.style.zIndex = mcWindows.zindex-1; + elm.style.display = "block"; + } else { + var elm = document.getElementById('mcWindowEventBlocker'); + + if (mcWindows.windows.length == 0) + elm.parentNode.removeChild(elm); + else + elm.style.zIndex = mcWindows.zindex-1; + } +}; + +// Gets called when wrapper iframe is initialized +TinyMCE_Windows.prototype.onLoad = function(name) { + var win = mcWindows.windows[name]; + var id = "mcWindow_" + name; + var wrapperIframe = window.frames[id + "_iframe"].frames[0]; + var wrapperDoc = window.frames[id + "_iframe"].document; + var doc = window.frames[id + "_iframe"].document; + var winDiv = document.getElementById("mcWindow_" + name + "_div"); + var realIframe = window.frames[id + "_iframe"].frames[0]; + + // Set window data + win.id = "mcWindow_" + name; + win.winElement = winDiv; + win.bodyElement = doc.getElementById(id + '_body'); + win.iframeElement = doc.getElementById(id + '_iframe'); + win.headElement = doc.getElementById(id + '_head'); + win.titleElement = doc.getElementById(id + '_title'); + win.resizeElement = doc.getElementById(id + '_resize'); + win.containerElement = doc.getElementById(id + '_container'); + win.left = win.features['left']; + win.top = win.features['top']; + win.frame = window.frames[id + '_iframe'].frames[0]; + win.wrapperFrame = window.frames[id + '_iframe']; + win.wrapperIFrameElement = document.getElementById(id + "_iframe"); + + // Add event handlers + mcWindows.addEvent(win.headElement, "mousedown", mcWindows.eventDispatcher); + + if (win.resizeElement != null) + mcWindows.addEvent(win.resizeElement, "mousedown", mcWindows.eventDispatcher); + + if (mcWindows.isMSIE) { + mcWindows.addEvent(realIframe.document, "mousemove", mcWindows.eventDispatcher); + mcWindows.addEvent(realIframe.document, "mouseup", mcWindows.eventDispatcher); + } else { + mcWindows.addEvent(realIframe, "mousemove", mcWindows.eventDispatcher); + mcWindows.addEvent(realIframe, "mouseup", mcWindows.eventDispatcher); + mcWindows.addEvent(realIframe, "focus", mcWindows.eventDispatcher); + } + + for (var i=0; iutpmhBaYhCPCMFj~25SJyItL8^ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/inlinepopups/images/window_close.gif b/jscripts/tiny_mce/plugins/inlinepopups/images/window_close.gif new file mode 100644 index 0000000000000000000000000000000000000000..3469e5aea1d1594aded9b9fe41dbf66f7db66e5d GIT binary patch literal 110 zcmZ?wbhEHb6ky8EpFaMT6=+Em0o-!%GKPcq}sebpyqLVpV!VJ~` DxTYg8 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/inlinepopups/images/window_minimize.gif b/jscripts/tiny_mce/plugins/inlinepopups/images/window_minimize.gif new file mode 100644 index 0000000000000000000000000000000000000000..94f167a4dd150485a7530bdf5d2c9e4dd42f109a GIT binary patch literal 112 zcmZ?wbhEHb6ky'; + + html += '
    '; + html += '
    '; + html += '
    '; +// html += ' '; +// html += ' '; + html += '
    '; + html += '
    '; + html += '
    '; + html += '
    '; + html += '
    '; + html += '
    '; + html += '
    '; + + html += ''; + html += ''; + + // Create iframe + this.createFloatingIFrame(id, features['left'], features['top'], features['width'], features['height'], html); +}; + +// Gets called when wrapper iframe is initialized +MCWindows.prototype.onLoad = function(name) { + var win = mcWindows.windows[name]; + var id = "mcWindow_" + name; + var wrapperIframe = window.frames[id + "_iframe"].frames[0]; + var wrapperDoc = window.frames[id + "_iframe"].document; + var doc = window.frames[id + "_iframe"].document; + var winDiv = document.getElementById("mcWindow_" + name + "_div"); + var realIframe = window.frames[id + "_iframe"].frames[0]; + + // Set window data + win.id = "mcWindow_" + name + "_iframe"; + win.winElement = winDiv; + win.bodyElement = doc.getElementById(id + '_body'); + win.iframeElement = doc.getElementById(id + '_iframe'); + win.headElement = doc.getElementById(id + '_head'); + win.titleElement = doc.getElementById(id + '_title'); + win.resizeElement = doc.getElementById(id + '_resize'); + win.containerElement = doc.getElementById(id + '_container'); + win.left = win.features['left']; + win.top = win.features['top']; + win.frame = window.frames[id + '_iframe'].frames[0]; + win.wrapperFrame = window.frames[id + '_iframe']; + win.wrapperIFrameElement = document.getElementById(id + "_iframe"); + + // Add event handlers + mcWindows.addEvent(win.headElement, "mousedown", mcWindows.eventDispatcher); + mcWindows.addEvent(win.resizeElement, "mousedown", mcWindows.eventDispatcher); + + if (mcWindows.isMSIE) { + mcWindows.addEvent(realIframe.document, "mousemove", mcWindows.eventDispatcher); + mcWindows.addEvent(realIframe.document, "mouseup", mcWindows.eventDispatcher); + } else { + mcWindows.addEvent(realIframe, "mousemove", mcWindows.eventDispatcher); + mcWindows.addEvent(realIframe, "mouseup", mcWindows.eventDispatcher); + mcWindows.addEvent(realIframe, "focus", mcWindows.eventDispatcher); + } + + for (var i=0; iB%FNo-)U@-!h1l*#K+sgxG=KdOCpWJH7oK&k{F0QClRxK; zUGY6FBdaM3*DEP01;r*^y7l_cpMSIV{WJ1PdiCl@R#_1PZlL&+g^__loIwYq1Y{=z z>zoIweJPpqGFHv=ysdZmz?n>=yO($C_`KCy7oKxXT2e)*CXcnVec1bGEwlY~SW1Ph9k_!1Zx z0ux!;MFks`CnShAGcoZo@HNcp=UBithl#7ca+x@v$Yzn%>>L$UeQJCwVwdu5(%iJ= N=w|H`C)E@gtO1pRV_^UQ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/insertdatetime/images/inserttime.gif b/jscripts/tiny_mce/plugins/insertdatetime/images/inserttime.gif new file mode 100644 index 0000000000000000000000000000000000000000..6dad3b36d0a89c68b8410a2c11e00b077dc5ad8a GIT binary patch literal 239 zcmZ?wbhEHb6k!lyxFX76WEC`h)AdV_{w3zMwypWp*gG$8(xo+PwyZn(@6)$mn-1NI zPRt6b+BALc^7grBje?3!pS^tO*1wXPzTJBdJ$n1|-`{@@o)HYVf#OdVMg|6P1|5(R zkev*yIS*9(QZnadtXh}zI_|<15m)1lhEqd0Rb*G)$UEe%!DfCXB|P(m22;Dr)fEw{ z0$i#>8, + * Carlos C Soto (eclipxe) + * Last Updated : October 17, 2005 + * TinyMCE Version : 2.0RC3 + */ + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%d-%m-%Y', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Insertar fecha', +inserttime_desc : 'Insertar hora', +inserttime_months_long : new Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"), +inserttime_months_short : new Array("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"), +inserttime_day_long : new Array("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"), +inserttime_day_short : new Array("Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/fa.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/fa.js new file mode 100644 index 000000000..5d89b7331 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/fa.js @@ -0,0 +1,13 @@ +// IR lang variables +// Persian (Farsi) language pack (for IRAN) +// By: Morteza Zafari +// Lost@LostLord.com +// http://www.LostLord.com + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +dir : 'rtl', +insertdate_desc : '?????? ?????', +inserttime_desc : '?????? ????' +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/fi.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/fi.js new file mode 100644 index 000000000..3758c96fd --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/fi.js @@ -0,0 +1,12 @@ +// FI lang variables by Tuomo Aura, Ateco.fi + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%d.%m.%Y', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Lisää päivämäärä', +inserttime_desc : 'Lisää kellonaika', +inserttime_months_long : new Array("Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"), +inserttime_months_short : new Array("Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä", "Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu"), +inserttime_day_long : new Array("Sunnuntai", "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai"), +inserttime_day_short : new Array("Su", "Ma", "Ti", "Ke", "To", "Pe", "La") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/fr.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/fr.js new file mode 100644 index 000000000..81e5b7e0a --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/fr.js @@ -0,0 +1,12 @@ +// Traduit par Normand Lamoureux le 2005-11-12 + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Insérer la date', +inserttime_desc : 'Insérer l\'heure', +inserttime_months_long : new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"), +inserttime_months_short : new Array("Jan", "Fév", "Mar", "Avr", "Mai", "Jun", "Jul", "Aoû", "Sep", "Oct", "Nov", "Déc"), +inserttime_day_long : new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"), +inserttime_day_short : new Array("Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/fr_ca.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/fr_ca.js new file mode 100644 index 000000000..72a076c34 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/fr_ca.js @@ -0,0 +1,10 @@ +// Canadian French lang variables by Virtuelcom + +tinyMCE.addToLang('',{ +insertdate_desc : 'Insérer la date', +inserttime_desc : 'Insérer l\'heure', +inserttime_months_long : new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"), +inserttime_months_short : new Array("Jan", "Fev", "Mar", "Avr", "Mai", "Juin", "Juil", "Aout", "Sep", "Oct", "Nov", "Dec"), +inserttime_day_long : new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"), +inserttime_day_short : new Array("Lun", "Mar", "Mer", "Jeu", "Thu", "Ven", "Sam", "Dim") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/he.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/he.js new file mode 100644 index 000000000..95663e604 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/he.js @@ -0,0 +1,12 @@ +// HE lang variables by Liron Newman, http://eesh.net + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'äëðñ úàøéê', +inserttime_desc : 'äëðñ ùòä', +inserttime_months_long : new Array("éðåàø", "ôáøåàø", "îøõ", "àôøéì", "îàé", "éåðé", "éåìé", "àåëåñè", "ñôèîáø", "àå÷èåáø", "ðåáîáø", "ãöîáø"), +inserttime_months_short : new Array("éðå", "ôáø", "îøõ", "àôø", "îàé", "éåð", "éåì", "àåâ", "ñôè", "àå÷", "ðåá", "ãöî"), +inserttime_day_long : new Array("éåí øàùåï", "éåí ùðé", "éåí ùìéùé", "éåí øáéòé", "éåí çîéùé", "éåí ùéùé", "éåí ùáú", "éåí øàùåï"), +inserttime_day_short : new Array("à'", "á'", "â'", "ã'", "ä'", "å'", "ù'", "à'") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/hu.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/hu.js new file mode 100644 index 000000000..52c909fd9 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/hu.js @@ -0,0 +1,12 @@ +// HU lang variables + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Dátum beszúrása', +inserttime_desc : 'Idõ beszúrása', +inserttime_months_long : new Array("Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"), +inserttime_months_short : new Array("Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"), +inserttime_day_long : new Array("Vasárnap", "Hétfõ", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"), +inserttime_day_short : new Array("Vas", "Hé", "Ke", "Sze", "Csü", "Pén", "Szo", "Vas") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/is.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/is.js new file mode 100644 index 000000000..c54397632 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/is.js @@ -0,0 +1,12 @@ +// Iceland lang variables by Johannes Birgir Jensson + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%d. %m. %Y', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Setja inn dagsetningu', +inserttime_desc : 'Setja inn tíma', +inserttime_months_long : new Array("Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"), +inserttime_months_short : new Array("Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"), +inserttime_day_long : new Array("Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"), +inserttime_day_short : new Array("Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/it.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/it.js new file mode 100644 index 000000000..365fc28d8 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/it.js @@ -0,0 +1,12 @@ +// IT lang variables + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Inserisci data', +inserttime_desc : 'Inserisci ora', +inserttime_months_long : new Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"), +inserttime_months_short : new Array("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"), +inserttime_day_long : new Array("Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"), +inserttime_day_short : new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/ko.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/ko.js new file mode 100644 index 000000000..007f08cc6 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/ko.js @@ -0,0 +1,12 @@ +// KO lang variables + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : '³¯Â¥ ³Ö±â', +inserttime_desc : '½Ã°£ ³Ö±â', +inserttime_months_long : new Array("1¿ù", "2¿ù", "3¿ù", "4¿ù", "5¿ù", "6¿ù", "7¿ù", "8¿ù", "9¿ù", "10¿ù", "11¿ù", "12¿ù"), +inserttime_months_short : new Array("1¿ù", "2¿ù", "3¿ù", "4¿ù", "5¿ù", "6¿ù", "7¿ù", "8¿ù", "9¿ù", "10¿ù", "11¿ù", "12¿ù"), +inserttime_day_long : new Array("ÀÏ¿äÀÏ", "¿ù¿äÀÏ", "È­¿äÀÏ", "¼ö¿äÀÏ", "¸ñ¿äÀÏ", "±Ý¿äÀÏ", "Åä¿äÀÏ", "ÀÏ¿äÀÏ"), +inserttime_day_short : new Array("ÀÏ", "¿ù", "È­", "¼ö", "¸ñ", "±Ý", "Åä", "ÀÏ") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/nb.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/nb.js new file mode 100644 index 000000000..b52c4f9a4 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/nb.js @@ -0,0 +1,12 @@ +// nb = Norwegian (bokmål) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Lim inn dato', +inserttime_desc : 'Lim inn tid', +inserttime_months_long : new Array("Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"), +inserttime_months_short : new Array("Jan","Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"), +inserttime_day_long : new Array("Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"), +inserttime_day_short : new Array("Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/nl.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/nl.js new file mode 100644 index 000000000..375ae4b1f --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/nl.js @@ -0,0 +1,12 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%d-%m-%Y', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Datum invoegen', +inserttime_desc : 'Tijd invoegen', +inserttime_months_long : new Array("januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"), +inserttime_months_short : new Array("jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "oct", "nov", "dec"), +inserttime_day_long : new Array("zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag", "zondag"), +inserttime_day_short : new Array("zo", "ma", "di", "wo", "do", "vr", "za", "zo") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/nn.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/nn.js new file mode 100644 index 000000000..244e335da --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/nn.js @@ -0,0 +1,12 @@ +// nn = Norwegian (nynorsk) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Lim inn dato', +inserttime_desc : 'Lim inn tid', +inserttime_months_long : new Array("Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"), +inserttime_months_short : new Array("Jan","Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"), +inserttime_day_long : new Array("Sundag", "Mandag", "Tysdag", "Onsdag", "Torsdag", "Fredag", "Laurdag", "Sundag"), +inserttime_day_short : new Array("Sun", "Man", "Tys", "Ons", "Tor", "Fre", "Laur", "Sun") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/pl.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/pl.js new file mode 100644 index 000000000..160002a6e --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/pl.js @@ -0,0 +1,15 @@ +// PL lang variables +// fixed by Wooya +// http://www.mfusion.prv.pl +// fixed by lemiel 14.11.2005 + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Wstaw aktualn± datê', +inserttime_desc : 'Wstaw aktualny czas', +inserttime_months_long : new Array("Styczeñ", "Luty", "Marzec", "Kwiecieñ", "Maj", "Czerwiec", "Lipiec", "Sierpieñ", "Wrzesieñ", "Pa¼dziernik", "Listopad", "Grudzieñ"), +inserttime_months_short : new Array("Sty", "Lut", "Mar", "Kwi", "Maj", "Czer", "Lip", "Sier", "Wrze", "Pa¼", "List", "Grudz"), +inserttime_day_long : new Array("Niedziela", "Poniedzia³ek", "Wtorek", "¦roda", "Czwartek", "Pi±tek", "Sobota", "Niedziela"), +inserttime_day_short : new Array("Nie", "Pon", "Wto", "¦ro", "Czw", "Pi±", "Sob", "Nie") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/pt_br.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/pt_br.js new file mode 100644 index 000000000..27fb439b0 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/pt_br.js @@ -0,0 +1,20 @@ +/** + * pt_br lang variables + * Brazilian Portuguese + * + * Authors : ???? + * Revision and modifications: + * Marcio Barbosa (mpg) + * Last Updated : November 26, 2005 + * TinyMCE Version : 2.0RC4 + */ +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%d/%m/%y', +inserttime_def_fmt : '%H:%M:%S hs', +insertdate_desc : 'Inserir data', +inserttime_desc : 'Inserir hora', +inserttime_months_long : new Array("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"), +inserttime_months_short : new Array("Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"), +inserttime_day_long : new Array("Domingo", "Segunda-Feira", "Terça-Feira", "Quarta-Feira", "Quinta-Feira", "Sexta-Feira", "Sábado", "Domingo"), +inserttime_day_short : new Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab", "Dom") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/ru.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/ru.js new file mode 100644 index 000000000..cfebf25dd --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/ru.js @@ -0,0 +1,12 @@ +// RU lang variables cp1251 + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%d %m %Y', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Âñòàâèòü äàòó', +inserttime_desc : 'Âñòàâèòü âðåìÿ', +inserttime_months_long : new Array("ÿíâàðÿ", "ôåâðàëÿ", "ìàðòà", "àïðåëÿ", "ìàÿ", "èþíÿ", "èþëÿ", "àâãóñòà", "ñåíòÿáðÿ", "îêòÿáðÿ", "íîÿáðÿ", "äåêàáðÿ"), +inserttime_months_short : new Array("ÿíâ", "ôåâ", "ìàðò", "àïð", "ìàé", "èþíü", "èþëü", "àâã", "ñåíò", "îêò", "íáð", "äåê"), +inserttime_day_long : new Array("âîñêðåñåíüå", "ïîíåäåëüíèê", "âòîðíèê", "ñðåäà", "÷åòâåðã", "ïÿòíèöà", "ñóááîòà", "âîñêðåñåíüå"), +inserttime_day_short : new Array("âñê", "ïí", "âò", "ñð", "÷òâ", "ïòí", "ñá", "âñê") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/ru_KOI8-R.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/ru_KOI8-R.js new file mode 100644 index 000000000..0bce11978 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/ru_KOI8-R.js @@ -0,0 +1,12 @@ +// RU lang variables KOI8-R + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%d %m %Y', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : '÷ÓÔÁ×ÉÔØ ÄÁÔÕ', +inserttime_desc : '÷ÓÔÁ×ÉÔØ ×ÒÅÍÑ', +inserttime_months_long : new Array("ÑÎ×ÁÒÑ", "ÆÅ×ÒÁÌÑ", "ÍÁÒÔÁ", "ÁÐÒÅÌÑ", "ÍÁÑ", "ÉÀÎÑ", "ÉÀÌÑ", "Á×ÇÕÓÔÁ", "ÓÅÎÔÑÂÒÑ", "ÏËÔÑÂÒÑ", "ÎÏÑÂÒÑ", "ÄÅËÁÂÒÑ"), +inserttime_months_short : new Array("ÑÎ×", "ÆÅ×", "ÍÁÒÔ", "ÁÐÒ", "ÍÁÊ", "ÉÀÎØ", "ÉÀÌØ", "Á×Ç", "ÓÅÎÔ", "ÏËÔ", "ÎÂÒ", "ÄÅË"), +inserttime_day_long : new Array("×ÏÓËÒÅÓÅÎØÅ", "ÐÏÎÅÄÅÌØÎÉË", "×ÔÏÒÎÉË", "ÓÒÅÄÁ", "ÞÅÔ×ÅÒÇ", "ÐÑÔÎÉÃÁ", "ÓÕÂÂÏÔÁ", "×ÏÓËÒÅÓÅÎØÅ"), +inserttime_day_short : new Array("×ÓË", "ÐÎ", "×Ô", "ÓÒ", "ÞÔ×", "ÐÔÎ", "ÓÂ", "×ÓË") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/ru_UTF-8.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/ru_UTF-8.js new file mode 100644 index 000000000..bbf4596c1 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/ru_UTF-8.js @@ -0,0 +1,12 @@ +// RU lang variables UTF-8 + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%d %m %Y', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Вставить дату', +inserttime_desc : 'Вставить время', +inserttime_months_long : new Array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"), +inserttime_months_short : new Array("янв", "фев", "март", "апр", "май", "июнь", "июль", "авг", "сент", "окт", "нбр", "дек"), +inserttime_day_long : new Array("воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"), +inserttime_day_short : new Array("вск", "пн", "вт", "ср", "чтв", "птн", "сб", "вск") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/sk.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/sk.js new file mode 100644 index 000000000..6060b5502 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/sk.js @@ -0,0 +1,20 @@ +/** + * Slovak lang variables + * encoding: utf-8 + * + * @author Vladimir VASIL vvasil@post.sk + * + * $Id: sk.js,v 1.1 2005/11/22 20:56:44 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'VložiÅ¥ dátum', +inserttime_desc : 'VložiÅ¥ čas', +inserttime_months_long : new Array('Január','Február','Marec','Apríl','Máj','Jún','Júl','August','September','Október','November','December'), +inserttime_months_short : new Array('Jan','Feb','Mar','Apr','Máj','Jún','Júl','Aug','Sep','Okt','Nov','Dec'), +inserttime_day_long : new Array('Nedeľa','Pondelok','Utorok','Streda','Å tvrtok','Piatok','Sobota','Nedeľa'), +inserttime_day_short : new Array('Ne','Po','Ut','St','Å t','Pi','So','Ne') +}); + diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/sv.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/sv.js new file mode 100644 index 000000000..39f0e8fa7 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/sv.js @@ -0,0 +1,12 @@ +// SE lang variables + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : 'Klistra in datum', +inserttime_desc : 'Klistra in tid', +inserttime_months_long : new Array("Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"), +inserttime_months_short : new Array("Jan","Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"), +inserttime_day_long : new Array("Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"), +inserttime_day_short : new Array("Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/zh_cn.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/zh_cn.js new file mode 100644 index 000000000..ead7dd217 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/zh_cn.js @@ -0,0 +1,12 @@ +// Simplified Chinese lang variables contributed by tom_cat (thomaswangyang@gmail.com) + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : '²åÈ뵱ǰÈÕÆÚ', +inserttime_desc : '²åÈ뵱ǰʱ¼ä', +inserttime_months_long : new Array("Ò»Ô·Ý", "¶þÔ·Ý", "ÈýÔ·Ý", "ËÄÔ·Ý", "ÎåÔ·Ý", "ÁùÔ·Ý", "ÆßÔ·Ý", "°ËÔ·Ý", "¾ÅÔ·Ý", "ʮԷÝ", "ʮһÔ·Ý", "Ê®¶þÔ·Ý"), +inserttime_months_short : new Array("Ò»ÔÂ", "¶þÔÂ", "ÈýÔÂ", "ËÄÔÂ", "ÎåÔÂ", "ÁùÔÂ", "ÆßÔÂ", "°ËÔÂ", "¾ÅÔÂ", "Ê®ÔÂ", "ʮһÔÂ", "Ê®¶þÔÂ"), +inserttime_day_long : new Array("ÐÇÆÚÈÕ", "ÐÇÆÚÒ»", "ÐÇÆÚ¶þ", "ÐÇÆÚÈý", "ÐÇÆÚËÄ", "ÐÇÆÚÎå", "ÐÇÆÚÁù", "ÐÇÆÚÈÕ"), +inserttime_day_short : new Array("ÐÇÆÚÈÕ", "ÐÇÆÚÒ»", "ÐÇÆÚ¶þ", "ÐÇÆÚÈý", "ÐÇÆÚËÄ", "ÐÇÆÚÎå", "ÐÇÆÚÁù", "ÐÇÆÚÈÕ") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/zh_tw.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/zh_tw.js new file mode 100644 index 000000000..f9cd497a8 --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/zh_tw.js @@ -0,0 +1,13 @@ +// Traditional Chinese BIG-5; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// ÁcÅ餤¤å BIG-5 ¡F¼Æ¦ìÀ³¥Î§{»s§@¡F twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y-%m-%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : '´¡¤J¤é´Á', +inserttime_desc : '´¡¤J®É¶¡', +inserttime_months_long : new Array("¤@¤ë", "¤G¤ë", "¤T¤ë", "¥|¤ë", "¤­¤ë", "¤»¤ë", "¤C¤ë", "¤K¤ë", "¤E¤ë", "¤Q¤ë", "¤Q¤@¤ë", "¤Q¤G¤ë"), +inserttime_months_short : new Array("¤@", "¤G", "¤T", "¥|", "¤­", "¤»", "¤C", "¤K", "¤E", "¤Q", "¤Q¤@", "¤Q¤G"), +inserttime_day_long : new Array("¬P´Á¤é", "¬P´Á¤@", "¬P´Á¤G", "¬P´Á¤T", "¬P´Á¥|", "¬P´Á¤­", "¬P´Á¤»", "¬P´Á¤é"), +inserttime_day_short : new Array("¤é", "¤@", "¤G", "¤T", "¥|", "¤­", "¤»", "¤é") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/langs/zh_tw_utf8.js b/jscripts/tiny_mce/plugins/insertdatetime/langs/zh_tw_utf8.js new file mode 100644 index 000000000..df9af306e --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/langs/zh_tw_utf8.js @@ -0,0 +1,13 @@ +// Traditional Chinese UTF-8; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// 繁體中文 UTF-8 ;數位應用坊製作; twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +insertdate_def_fmt : '%Y/%m/%d', +inserttime_def_fmt : '%H:%M:%S', +insertdate_desc : '插入日期', +inserttime_desc : '插入時間', +inserttime_months_long : new Array("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"), +inserttime_months_short : new Array("一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"), +inserttime_day_long : new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"), +inserttime_day_short : new Array("日", "一", "二", "三", "四", "五", "六", "日") +}); diff --git a/jscripts/tiny_mce/plugins/insertdatetime/readme.txt b/jscripts/tiny_mce/plugins/insertdatetime/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/jscripts/tiny_mce/plugins/insertdatetime/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/jscripts/tiny_mce/plugins/layer/editor_plugin.js b/jscripts/tiny_mce/plugins/layer/editor_plugin.js new file mode 100644 index 000000000..b8b9ee9d4 --- /dev/null +++ b/jscripts/tiny_mce/plugins/layer/editor_plugin.js @@ -0,0 +1 @@ +tinyMCE.importPluginLanguagePack('layer','en');var TinyMCE_LayerPlugin={getInfo:function(){return{longname:'Layer',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_layer.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},initInstance:function(inst){if(tinyMCE.isMSIE&&!tinyMCE.isOpera)inst.getDoc().execCommand('2D-Position');},handleEvent:function(e){var inst=tinyMCE.selectedInstance,self=TinyMCE_LayerPlugin;var w=inst.getWin(),le=inst._lastStyleElm,e;if(tinyMCE.isGecko){e=self._getParentLayer(inst.getFocusElement());if(e){if(!inst._lastStyleElm){e.style.overflow='auto';inst._lastStyleElm=e;}}else if(le){le=inst._lastStyleElm;le.style.width=le.scrollWidth+'px';le.style.height=le.scrollHeight+'px';le.style.overflow='';inst._lastStyleElm=null;}}return true;},handleVisualAid:function(el,deep,state,inst){var nl=inst.getDoc().getElementsByTagName("div"),i;for(i=0;i-1){nl[ci].style.zIndex=z[fi];nl[fi].style.zIndex=z[ci];}else{if(z[ci]>0)nl[ci].style.zIndex=z[ci]-1;}}else{for(i=0;iz[ci]){fi=i;break;}}if(fi>-1){nl[ci].style.zIndex=z[fi];nl[fi].style.zIndex=z[ci];}else nl[ci].style.zIndex=z[ci]+1;}inst.repaint();},_getParentLayer:function(n){return tinyMCE.getParentNode(n,function(n){return n.nodeType==1&&new RegExp('absolute|relative|static','gi').test(n.style.position);});},_insertLayer:function(){var inst=tinyMCE.selectedInstance;var e=tinyMCE.getParentElement(inst.getFocusElement());var p=tinyMCE.getAbsPosition(e);var d=inst.getDoc();var ne=d.createElement('div');var h=inst.selection.getSelectedHTML();ne.style.position='absolute';ne.style.left=p.absLeft+'px';ne.style.top=(p.absTop>20?p.absTop:20)+'px';ne.style.width='100px';ne.style.height='100px';ne.className='mceVisualAid';if(!h)h=tinyMCE.getLang('lang_layer_content');ne.innerHTML=h;d.body.appendChild(ne);},_toggleAbsolute:function(){var inst=tinyMCE.selectedInstance,self=TinyMCE_LayerPlugin;var le=self._getParentLayer(inst.getFocusElement());if(le==null)le=tinyMCE.getParentElement(inst.getFocusElement(),'div,p,img');if(le){if(le.style.position.toLowerCase()=="absolute"){le.style.position="";le.style.left="";le.style.top="";}else{le.style.position="absolute";if(le.style.left=="")le.style.left=20+'px';if(le.style.top=="")le.style.top=20+'px';if(le.style.width=="")le.style.width=le.width?(le.width+'px'):'100px';if(le.style.height=="")le.style.height=le.height?(le.height+'px'):'100px';tinyMCE.handleVisualAid(inst.getBody(),true,inst.visualAid,inst);}inst.repaint();tinyMCE.triggerNodeChange();}}};tinyMCE.addPlugin("layer",TinyMCE_LayerPlugin); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js b/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js new file mode 100644 index 000000000..af4934010 --- /dev/null +++ b/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js @@ -0,0 +1,252 @@ +/** + * $RCSfile: editor_plugin_src.js,v $ + * $Revision: 1.2 $ + * $Date: 2006/05/03 14:12:12 $ + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +/* Import plugin specific language pack */ +tinyMCE.importPluginLanguagePack('layer', 'en'); + +var TinyMCE_LayerPlugin = { + getInfo : function() { + return { + longname : 'Layer', + author : 'Moxiecode Systems', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_layer.html', + version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion + }; + }, + + initInstance : function(inst) { + if (tinyMCE.isMSIE && !tinyMCE.isOpera) + inst.getDoc().execCommand('2D-Position'); + }, + + handleEvent : function(e) { + var inst = tinyMCE.selectedInstance, self = TinyMCE_LayerPlugin; + var w = inst.getWin(), le = inst._lastStyleElm, e; + + if (tinyMCE.isGecko) { + e = self._getParentLayer(inst.getFocusElement()); + + if (e) { + if (!inst._lastStyleElm) { + e.style.overflow = 'auto'; + inst._lastStyleElm = e; + } + } else if (le) { + le = inst._lastStyleElm; + le.style.width = le.scrollWidth + 'px'; + le.style.height = le.scrollHeight + 'px'; + le.style.overflow = ''; + inst._lastStyleElm = null; + } + } + + return true; + }, + + handleVisualAid : function(el, deep, state, inst) { + var nl = inst.getDoc().getElementsByTagName("div"), i; + + for (i=0; i -1) { + nl[ci].style.zIndex = z[fi]; + nl[fi].style.zIndex = z[ci]; + } else { + if (z[ci] > 0) + nl[ci].style.zIndex = z[ci] - 1; + } + } else { + // Move forward + + // Try find a higher one + for (i=0; i z[ci]) { + fi = i; + break; + } + } + + if (fi > -1) { + nl[ci].style.zIndex = z[fi]; + nl[fi].style.zIndex = z[ci]; + } else + nl[ci].style.zIndex = z[ci] + 1; + } + + inst.repaint(); + }, + + _getParentLayer : function(n) { + return tinyMCE.getParentNode(n, function(n) { + return n.nodeType == 1 && new RegExp('absolute|relative|static', 'gi').test(n.style.position); + }); + }, + + _insertLayer : function() { + var inst = tinyMCE.selectedInstance; + var e = tinyMCE.getParentElement(inst.getFocusElement()); + var p = tinyMCE.getAbsPosition(e); + var d = inst.getDoc(); + var ne = d.createElement('div'); + var h = inst.selection.getSelectedHTML(); + + // Move div + ne.style.position = 'absolute'; + ne.style.left = p.absLeft + 'px'; + ne.style.top = (p.absTop > 20 ? p.absTop : 20) + 'px'; + ne.style.width = '100px'; + ne.style.height = '100px'; + ne.className = 'mceVisualAid'; + + if (!h) + h = tinyMCE.getLang('lang_layer_content'); + + ne.innerHTML = h; + + // Add it + d.body.appendChild(ne); + }, + + _toggleAbsolute : function() { + var inst = tinyMCE.selectedInstance, self = TinyMCE_LayerPlugin; + var le = self._getParentLayer(inst.getFocusElement()); + + if (le == null) + le = tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img'); + + if (le) { + if (le.style.position.toLowerCase() == "absolute") { + le.style.position = ""; + le.style.left = ""; + le.style.top = ""; + } else { + le.style.position = "absolute"; + + if (le.style.left == "") + le.style.left = 20 + 'px'; + + if (le.style.top == "") + le.style.top = 20 + 'px'; + + if (le.style.width == "") + le.style.width = le.width ? (le.width + 'px') : '100px'; + + if (le.style.height == "") + le.style.height = le.height ? (le.height + 'px') : '100px'; + + tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst); + } + + inst.repaint(); + tinyMCE.triggerNodeChange(); + } + } +}; + +tinyMCE.addPlugin("layer", TinyMCE_LayerPlugin); diff --git a/jscripts/tiny_mce/plugins/layer/images/absolute.gif b/jscripts/tiny_mce/plugins/layer/images/absolute.gif new file mode 100644 index 0000000000000000000000000000000000000000..72cffddc3246c84e1e93ced3f36539b2c6b5a834 GIT binary patch literal 209 zcmZ?wbhEHb6k!lyIKlt||NsBrvE$~A8$VvW_+c2freNxeg1(Es<>zOtII&{KjT1M1 z1Qx9~&)gH)ez{}Ci5o9|y!i2hk&zLo3#^*}q4<-9k%2*&K?kG`WG4fw-vgDtl+1Y< ztJdjgZGFZ)*+}PZ#a%DA`|^CpyTmobL^~EL3Umr^FtKI7Y;h3cy{71}fp0^UUdjd! ckqEw4rGs^I!ui-1U(~pf{$o#_JQIU804$73O#lD@ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/layer/images/backward.gif b/jscripts/tiny_mce/plugins/layer/images/backward.gif new file mode 100644 index 0000000000000000000000000000000000000000..466b1586561bb96767cd6bd4e40dc525ac9c642b GIT binary patch literal 360 zcmZ?wbhEHb6k!lyxXQrr@mlYS70bWBnRw#FiAx)T@(YV*%;}gpW5$XVJ67!2F}Wpw z!^)OVXM;OBX7|llQIqEfl(=!@MowjadB@a_j*gQPOalS~Uc7jI;>L{=CvJS$mfSI8 zdTFTJ_fHqzY_nf6qvQL#4Lf)4(6I3Nbg}UN|Njis28usf7#SE;7<51egZ#w6*6J{+ zz(Yr>|HP7_lRA20^E0j_1ZarMP7qUJ=;1nbew($F-~ms=={au7M`Pc61Q*I5WvEnY zY_O0L7II@_N>%3J6c?0WR#a4KF5;2n5M=IEfmBzv%Dj+$7k#V*Q7b`!%j2Pbx lMMn1Jp1gfa*+sT^2yfgZBE8#PNa^UYL%t_ZopNNb1_0&MbUFY4 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/layer/images/forward.gif b/jscripts/tiny_mce/plugins/layer/images/forward.gif new file mode 100644 index 0000000000000000000000000000000000000000..e8b7a5a11f152a85f78f846a11567f88962823c0 GIT binary patch literal 358 zcmZ?wbhEHb6k!lyxT?hP@mlYS70XXfFnzPl{`;GW`GrN7HU!O>(@~S>H@PK0ATZ$5 z+2ENoW^7p5Vq|QXQ`z4E0<+6IruNNP@nKu?iWNI{_eq{Oal%wfvSY^d@1HJ|hPvsB zi|^dIW5tY)@9#EfSonOpSor_{e+JqB#h)yU3=B#PIw0dgeqvy2c9>Y;p(E9QVoA|S z9W$wU8D9!KG^A(se{*JN;qp4aO`1#cfT!W~95>~ovH2ZJ1@cE3ekLh6_$UeSyRoyR zDpuEUiOb3=G*>ZCWa8@)?Q`W!V`F2QD>j9Zak>j9D+h-(7Z;y|j4UJ1Vo$-Ig**bA aJcQP75RlyI&aZIz$N}HuCr&srSOWm*-)g7; literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/layer/images/insert_layer.gif b/jscripts/tiny_mce/plugins/layer/images/insert_layer.gif new file mode 100644 index 0000000000000000000000000000000000000000..bc29af07663334e74e4ebe5b076302db2bc03ec2 GIT binary patch literal 264 zcmZ?wbhEHb6k!lyI3mw*;l_s#AO1gh@L|D*3kOa-n6O~O{~!M^Jos?n!h;P59xT{# zVZnw22QC2Bd|0sJzyuJw&@kh|h7%7O7F<}c;zB?|!vr8>$Ag552>}rWAAbCQ@Zy7k zM}oAW`+qP{{K>+|z#z|{!vF*zI~iD8AE@`GWX{W2H7_=N+j{G5T}C?IuPx38A6U|u z?xDkHsMfl11t*7*+QUo98C(|2j&8bngF_%9s5^o;=NuCQqlOg!>F3N06B4?)-lxeN zaNs$lQXwT3%T!d$BG91B8WY#f!XhNrU0%$=!pSMlEFvH*I8|3vW~q$svZZBZ@@v*; MZ`im=U6H{W01ozf?f?J) literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/layer/langs/en.js b/jscripts/tiny_mce/plugins/layer/langs/en.js new file mode 100644 index 000000000..cdd8c22b2 --- /dev/null +++ b/jscripts/tiny_mce/plugins/layer/langs/en.js @@ -0,0 +1,9 @@ +// UK lang variables + +tinyMCE.addToLang('layer',{ +insertlayer_desc : 'Insert new layer', +forward_desc : 'Move forward', +backward_desc : 'Move backward', +absolute_desc : 'Toggle absolute positioning', +content : 'New layer...' +}); diff --git a/jscripts/tiny_mce/plugins/layer/readme.txt b/jscripts/tiny_mce/plugins/layer/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/jscripts/tiny_mce/plugins/layer/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/jscripts/tiny_mce/plugins/noneditable/css/noneditable.css b/jscripts/tiny_mce/plugins/noneditable/css/noneditable.css new file mode 100644 index 000000000..a50621425 --- /dev/null +++ b/jscripts/tiny_mce/plugins/noneditable/css/noneditable.css @@ -0,0 +1,17 @@ +/* This is the CSS file for the noneditable elements plugin */ + +.mceEditable { + /*border: 1px dotted #0000cc;*/ + -moz-user-focus: none; + -moz-user-input: auto; + -moz-user-modify: auto; + -moz-user-select: text; +} + +.mceNonEditable { + /*border: 1px dotted #cc0000;*/ + -moz-user-focus: ignore; + /*-moz-user-input: disabled;*/ + -moz-user-modify: read-only; + -moz-user-select: all; +} diff --git a/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js b/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js new file mode 100644 index 000000000..f1e031cf6 --- /dev/null +++ b/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js @@ -0,0 +1 @@ +var TinyMCE_NonEditablePlugin={getInfo:function(){return{longname:'Non editable elements',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_noneditable.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},initInstance:function(inst){tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/noneditable/css/noneditable.css");if(tinyMCE.isMSIE5_0)tinyMCE.settings['plugins']=tinyMCE.settings['plugins'].replace(/noneditable/gi,'Noneditable');if(tinyMCE.isGecko){tinyMCE.addEvent(inst.getDoc(),"keyup",TinyMCE_NonEditablePlugin._fixKeyUp);}},cleanup:function(type,content,inst){switch(type){case"insert_to_editor_dom":var nodes=tinyMCE.getNodeTree(content,new Array(),1);var editClass=tinyMCE.getParam("noneditable_editable_class","mceEditable");var nonEditClass=tinyMCE.getParam("noneditable_noneditable_class","mceNonEditable");for(var i=0;i + + blank_page + + + + + + + + + diff --git a/jscripts/tiny_mce/plugins/paste/css/blank.css b/jscripts/tiny_mce/plugins/paste/css/blank.css new file mode 100644 index 000000000..eca411a42 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/css/blank.css @@ -0,0 +1,13 @@ +body { + background-color: #FFFFFF; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + scrollbar-3dlight-color: #F0F0EE; + scrollbar-arrow-color: #676662; + scrollbar-base-color: #F0F0EE; + scrollbar-darkshadow-color: #DDDDDD; + scrollbar-face-color: #E0E0DD; + scrollbar-highlight-color: #F0F0EE; + scrollbar-shadow-color: #F0F0EE; + scrollbar-track-color: #F5F5F5; +} diff --git a/jscripts/tiny_mce/plugins/paste/css/pasteword.css b/jscripts/tiny_mce/plugins/paste/css/pasteword.css new file mode 100644 index 000000000..b3be6270b --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/css/pasteword.css @@ -0,0 +1,3 @@ +.sourceIframe { + border: 1px solid #808080; +} diff --git a/jscripts/tiny_mce/plugins/paste/editor_plugin.js b/jscripts/tiny_mce/plugins/paste/editor_plugin.js new file mode 100644 index 000000000..42f95b901 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/editor_plugin.js @@ -0,0 +1 @@ +tinyMCE.importPluginLanguagePack('paste','en,tr,sv,cs,zh_cn,fr_ca,da,he,nb,de,hu,ru,ru_KOI8-R,ru_UTF-8,nn,fi,es,cy,is,pl,nl,fr,pt_br');var TinyMCE_PastePlugin={getInfo:function(){return{longname:'Paste text/word',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_paste.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},initInstance:function(inst){if(tinyMCE.isMSIE&&tinyMCE.getParam("paste_auto_cleanup_on_paste",false))tinyMCE.addEvent(inst.getBody(),"paste",TinyMCE_PastePlugin._handlePasteEvent);},getControlHTML:function(cn){switch(cn){case"pastetext":return tinyMCE.getButtonHTML(cn,'lang_paste_text_desc','{$pluginurl}/images/pastetext.gif','mcePasteText',true);case"pasteword":return tinyMCE.getButtonHTML(cn,'lang_paste_word_desc','{$pluginurl}/images/pasteword.gif','mcePasteWord',true);case"selectall":return tinyMCE.getButtonHTML(cn,'lang_selectall_desc','{$pluginurl}/images/selectall.gif','mceSelectAll',true);}return'';},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mcePasteText":if(user_interface){if((tinyMCE.isMSIE&&!tinyMCE.isOpera)&&!tinyMCE.getParam('paste_use_dialog',false))TinyMCE_PastePlugin._insertText(clipboardData.getData("Text"),true);else{var template=new Array();template['file']='../../plugins/paste/pastetext.htm';template['width']=450;template['height']=400;var plain_text="";tinyMCE.openWindow(template,{editor_id:editor_id,plain_text:plain_text,resizable:"yes",scrollbars:"no",inline:"yes",mceDo:'insert'});}}else TinyMCE_PastePlugin._insertText(value['html'],value['linebreaks']);return true;case"mcePasteWord":if(user_interface){if((tinyMCE.isMSIE&&!tinyMCE.isOpera)&&!tinyMCE.getParam('paste_use_dialog',false)){var html=TinyMCE_PastePlugin._clipboardHTML();if(html&&html.length>0)TinyMCE_PastePlugin._insertWordContent(html);}else{var template=new Array();template['file']='../../plugins/paste/pasteword.htm';template['width']=450;template['height']=400;var plain_text="";tinyMCE.openWindow(template,{editor_id:editor_id,plain_text:plain_text,resizable:"yes",scrollbars:"no",inline:"yes",mceDo:'insert'});}}else TinyMCE_PastePlugin._insertWordContent(value);return true;case"mceSelectAll":tinyMCE.execInstanceCommand(editor_id,'selectall');return true;}return false;},_handlePasteEvent:function(e){switch(e.type){case"paste":var html=TinyMCE_PastePlugin._clipboardHTML();var r,inst=tinyMCE.selectedInstance;if(inst&&(r=inst.getRng())&&r.text.length>0)tinyMCE.execCommand('delete');if(html&&html.length>0)tinyMCE.execCommand('mcePasteWord',false,html);tinyMCE.cancelEvent(e);return false;}return true;},_insertText:function(content,bLinebreaks){if(content&&content.length>0){if(bLinebreaks){if(tinyMCE.getParam("paste_create_paragraphs",true)){var rl=tinyMCE.getParam("paste_replace_list",'\u2122,TM,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');for(var i=0;i

    ","gi");content=tinyMCE.regexpReplace(content,"\r\r","

    ","gi");content=tinyMCE.regexpReplace(content,"\n\n","

    ","gi");if((pos=content.indexOf('

    '))!=-1){tinyMCE.execCommand("Delete");var node=tinyMCE.selectedInstance.getFocusElement();var breakElms=new Array();do{if(node.nodeType==1){if(node.nodeName=="TD"||node.nodeName=="BODY")break;breakElms[breakElms.length]=node;}}while(node=node.parentNode);var before="",after="

    ";before+=content.substring(0,pos);for(var i=0;i";after+="<"+breakElms[(breakElms.length-1)-i].nodeName+">";}before+="

    ";content=before+content.substring(pos+7)+after;}}if(tinyMCE.getParam("paste_create_linebreaks",true)){content=tinyMCE.regexpReplace(content,"\r\n","
    ","gi");content=tinyMCE.regexpReplace(content,"\r","
    ","gi");content=tinyMCE.regexpReplace(content,"\n","
    ","gi");}}tinyMCE.execCommand("mceInsertRawHTML",false,content);}},_insertWordContent:function(content){if(content&&content.length>0){var bull=String.fromCharCode(8226);var middot=String.fromCharCode(183);var cb;if((cb=tinyMCE.getParam("paste_insert_word_content_callback",""))!="")content=eval(cb+"('before', content)");var rl=tinyMCE.getParam("paste_replace_list",'\u2122,TM,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');for(var i=0;i(.*?)<\/p>','gi'),'

    $1

    ');}content=content.replace(new RegExp('tab-stops: list [0-9]+.0pt">','gi'),'">'+"--list--");content=content.replace(new RegExp(bull+"(.*?)
    ","gi"),"

    "+middot+"$1

    ");content=content.replace(new RegExp('','gi'),""+bull);content=content.replace(/<\/o:p>/gi,"");content=content.replace(new RegExp('
    ]*>/gi,"");if(tinyMCE.getParam("paste_remove_styles",true))content=content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)','gi'),"<$1$3");content=content.replace(/<\/?font[^>]*>/gi,"");switch(tinyMCE.getParam("paste_strip_class_attributes","all")){case"all":content=content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi,"<$1$3");break;case"mso":content=content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)','gi'),"<$1$3");break;}content=content.replace(new RegExp('href="?'+TinyMCE_PastePlugin._reEscape(""+document.location)+'','gi'),'href="'+tinyMCE.settings['document_base_url']);content=content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi,"<$1$3");content=content.replace(/<\\?\?xml[^>]*>/gi,"");content=content.replace(/<\/?\w+:[^>]*>/gi,"");content=content.replace(/-- page break --\s*

     <\/p>/gi,"");content=content.replace(/-- page break --/gi,"");if(!tinyMCE.settings['force_p_newlines']){content=content.replace('','','gi');content=content.replace('

    ','

    ','gi');}if(!tinyMCE.isMSIE&&!tinyMCE.settings['force_p_newlines']){content=content.replace(/<\/?p[^>]*>/gi,"");}content=content.replace(/<\/?div[^>]*>/gi,"");if(tinyMCE.getParam("paste_convert_middot_lists",true)){var div=document.createElement("div");div.innerHTML=content;var className=tinyMCE.getParam("paste_unindented_list_class","unIndentedList");while(TinyMCE_PastePlugin._convertMiddots(div,"--list--"));while(TinyMCE_PastePlugin._convertMiddots(div,middot,className));while(TinyMCE_PastePlugin._convertMiddots(div,bull));content=div.innerHTML;}if(tinyMCE.getParam("paste_convert_headers_to_strong",false)){content=content.replace(/ <\/h[1-6]>/gi,'

      

    ');content=content.replace(//gi,'

    ');content=content.replace(/<\/h[1-6]>/gi,'

    ');content=content.replace(/ <\/b>/gi,'  ');content=content.replace(/^( )*/gi,'');}content=content.replace(/--list--/gi,"");if((cb=tinyMCE.getParam("paste_insert_word_content_callback",""))!="")content=eval(cb+"('after', content)");tinyMCE.execCommand("mceInsertContent",false,content);window.setTimeout('tinyMCE.execCommand("mceCleanup");',1);}},_reEscape:function(s){var l="?.\\*[](){}+^$:";var o="";for(var i=0;i 0) + TinyMCE_PastePlugin._insertWordContent(html); + } else { + var template = new Array(); + template['file'] = '../../plugins/paste/pasteword.htm'; // Relative to theme + template['width'] = 450; + template['height'] = 400; + var plain_text = ""; + tinyMCE.openWindow(template, {editor_id : editor_id, plain_text: plain_text, resizable : "yes", scrollbars : "no", inline : "yes", mceDo : 'insert'}); + } + } else + TinyMCE_PastePlugin._insertWordContent(value); + + return true; + + case "mceSelectAll": + tinyMCE.execInstanceCommand(editor_id, 'selectall'); + return true; + + } + + // Pass to next handler in chain + return false; + }, + + // Private plugin internal methods + + _handlePasteEvent : function(e) { + switch (e.type) { + case "paste": + var html = TinyMCE_PastePlugin._clipboardHTML(); + var r, inst = tinyMCE.selectedInstance; + + // Removes italic, strong etc, the if was needed due to bug #1437114 + if (inst && (r = inst.getRng()) && r.text.length > 0) + tinyMCE.execCommand('delete'); + + if (html && html.length > 0) + tinyMCE.execCommand('mcePasteWord', false, html); + + tinyMCE.cancelEvent(e); + return false; + } + + return true; + }, + + _insertText : function(content, bLinebreaks) { + if (content && content.length > 0) { + if (bLinebreaks) { + // Special paragraph treatment + if (tinyMCE.getParam("paste_create_paragraphs", true)) { + var rl = tinyMCE.getParam("paste_replace_list", '\u2122,TM,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(','); + for (var i=0; i

    ", "gi"); + content = tinyMCE.regexpReplace(content, "\r\r", "

    ", "gi"); + content = tinyMCE.regexpReplace(content, "\n\n", "

    ", "gi"); + + // Has paragraphs + if ((pos = content.indexOf('

    ')) != -1) { + tinyMCE.execCommand("Delete"); + + var node = tinyMCE.selectedInstance.getFocusElement(); + + // Get list of elements to break + var breakElms = new Array(); + + do { + if (node.nodeType == 1) { + // Don't break tables and break at body + if (node.nodeName == "TD" || node.nodeName == "BODY") + break; + + breakElms[breakElms.length] = node; + } + } while(node = node.parentNode); + + var before = "", after = "

    "; + before += content.substring(0, pos); + + for (var i=0; i"; + after += "<" + breakElms[(breakElms.length-1)-i].nodeName + ">"; + } + + before += "

    "; + content = before + content.substring(pos+7) + after; + } + } + + if (tinyMCE.getParam("paste_create_linebreaks", true)) { + content = tinyMCE.regexpReplace(content, "\r\n", "
    ", "gi"); + content = tinyMCE.regexpReplace(content, "\r", "
    ", "gi"); + content = tinyMCE.regexpReplace(content, "\n", "
    ", "gi"); + } + } + + tinyMCE.execCommand("mceInsertRawHTML", false, content); + } + }, + + _insertWordContent : function(content) { + if (content && content.length > 0) { + // Cleanup Word content + var bull = String.fromCharCode(8226); + var middot = String.fromCharCode(183); + var cb; + + if ((cb = tinyMCE.getParam("paste_insert_word_content_callback", "")) != "") + content = eval(cb + "('before', content)"); + + var rl = tinyMCE.getParam("paste_replace_list", '\u2122,TM,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(','); + for (var i=0; i(.*?)<\/p>', 'gi'), '

    $1

    '); + } + + content = content.replace(new RegExp('tab-stops: list [0-9]+.0pt">', 'gi'), '">' + "--list--"); + content = content.replace(new RegExp(bull + "(.*?)
    ", "gi"), "

    " + middot + "$1

    "); + content = content.replace(new RegExp('', 'gi'), "" + bull); // Covert to bull list + content = content.replace(/<\/o:p>/gi, ""); + content = content.replace(new RegExp('
    ]*>/gi, ""); + + if (tinyMCE.getParam("paste_remove_styles", true)) + content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3"); + + content = content.replace(/<\/?font[^>]*>/gi, ""); + + // Strips class attributes. + switch (tinyMCE.getParam("paste_strip_class_attributes", "all")) { + case "all": + content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3"); + break; + + case "mso": + content = content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)', 'gi'), "<$1$3"); + break; + } + + content = content.replace(new RegExp('href="?' + TinyMCE_PastePlugin._reEscape("" + document.location) + '', 'gi'), 'href="' + tinyMCE.settings['document_base_url']); + content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3"); + content = content.replace(/<\\?\?xml[^>]*>/gi, ""); + content = content.replace(/<\/?\w+:[^>]*>/gi, ""); + content = content.replace(/-- page break --\s*

     <\/p>/gi, ""); // Remove pagebreaks + content = content.replace(/-- page break --/gi, ""); // Remove pagebreaks + + // content = content.replace(/\/? */gi, "");   + // content = content.replace(/

     <\/p>/gi, ''); + + if (!tinyMCE.settings['force_p_newlines']) { + content = content.replace('', '' ,'gi'); + content = content.replace('

    ', '

    ' ,'gi'); + } + + if (!tinyMCE.isMSIE && !tinyMCE.settings['force_p_newlines']) { + content = content.replace(/<\/?p[^>]*>/gi, ""); + } + + content = content.replace(/<\/?div[^>]*>/gi, ""); + + // Convert all middlot lists to UL lists + if (tinyMCE.getParam("paste_convert_middot_lists", true)) { + var div = document.createElement("div"); + div.innerHTML = content; + + // Convert all middot paragraphs to li elements + var className = tinyMCE.getParam("paste_unindented_list_class", "unIndentedList"); + + while (TinyMCE_PastePlugin._convertMiddots(div, "--list--")) ; // bull + while (TinyMCE_PastePlugin._convertMiddots(div, middot, className)) ; // Middot + while (TinyMCE_PastePlugin._convertMiddots(div, bull)) ; // bull + + content = div.innerHTML; + } + + // Replace all headers with strong and fix some other issues + if (tinyMCE.getParam("paste_convert_headers_to_strong", false)) { + content = content.replace(/ <\/h[1-6]>/gi, '

      

    '); + content = content.replace(//gi, '

    '); + content = content.replace(/<\/h[1-6]>/gi, '

    '); + content = content.replace(/ <\/b>/gi, '  '); + content = content.replace(/^( )*/gi, ''); + } + + content = content.replace(/--list--/gi, ""); // Remove --list-- + + if ((cb = tinyMCE.getParam("paste_insert_word_content_callback", "")) != "") + content = eval(cb + "('after', content)"); + + // Insert cleaned content + tinyMCE.execCommand("mceInsertContent", false, content); + window.setTimeout('tinyMCE.execCommand("mceCleanup");', 1); // Do normal cleanup detached from this thread + } + }, + + _reEscape : function(s) { + var l = "?.\\*[](){}+^$:"; + var o = ""; + + for (var i=0; i0ondXNk%w1VH5xq0Mrx!1_B0_axV75Hbzor!NSXCdX{^Irr^|uM>8k3npWTE z_STXHS!s#*>!gx|Yo@ZsW>!X~or(6f8HSR!`Stns%~QLpkDHB#_S}MbXH&+{=9Zzh z?#yQR^0wxx1^@s6A^8LW0018VEC2ui02BZe000G};3tk`X`X1RuAgN^Z0kBrb7aot zpjKB$4aY6Okz`JhPDhA2R1%QD;%Mpx9h=D{J24ar3{>0WqA)oAG#Wz^+%kwxLXub< z?1lt;BzPh$atCz>8V3d!dm?>*9R(B<6dDo(2@MAWZAKl9j~5yS02%-jm?It;n*|UH x69x?u000uCBpwzJxT_PPyBcT!B@7V}4-dX-X}~EO7|jFE1FA&_VoEyR91$H zhF*o+yUXv_-t_+d{r~^~A^8LW000jFEC2ui02BZe000Df@X1N5y*TU5>o7+Heg`=$ zM>Vb`J5+6XI1YlG<>HNl6DSIVBbTDA90dXakZ|A{FcP9bO8^|GhK^#QC9Oj(LshaR z2ng_D!6;5z$V3ouMKH9x8G>#F1jS?n3^ffjGze^C6ft%K2nKhF0(nntVhjR`9h;n; H5)lA9u4PUG literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/paste/jscripts/pastetext.js b/jscripts/tiny_mce/plugins/paste/jscripts/pastetext.js new file mode 100644 index 000000000..927745b17 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/jscripts/pastetext.js @@ -0,0 +1,34 @@ +function saveContent() { + if (document.forms[0].htmlSource.value == '') { + tinyMCEPopup.close(); + return false; + } + + tinyMCEPopup.execCommand('mcePasteText', false, { + html : document.forms[0].htmlSource.value, + linebreaks : document.forms[0].linebreaks.checked + }); + + tinyMCEPopup.close(); +} + +function onLoadInit() { + tinyMCEPopup.resizeToInnerSize(); + + resizeInputs(); +} + +var wHeight=0, wWidth=0, owHeight=0, owWidth=0; + +function resizeInputs() { + if (!tinyMCE.isMSIE) { + wHeight = self.innerHeight-80; + wWidth = self.innerWidth-17; + } else { + wHeight = document.body.clientHeight-80; + wWidth = document.body.clientWidth-17; + } + + document.forms[0].htmlSource.style.height = Math.abs(wHeight) + 'px'; + document.forms[0].htmlSource.style.width = Math.abs(wWidth) + 'px'; +} diff --git a/jscripts/tiny_mce/plugins/paste/jscripts/pasteword.js b/jscripts/tiny_mce/plugins/paste/jscripts/pasteword.js new file mode 100644 index 000000000..c56ea81c7 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/jscripts/pasteword.js @@ -0,0 +1,46 @@ +function saveContent() { + var html = document.getElementById("frmData").contentWindow.document.body.innerHTML; + + if (html == ''){ + tinyMCEPopup.close(); + return false; + } + + tinyMCEPopup.execCommand('mcePasteWord', false, html); + tinyMCEPopup.close(); +} + +function onLoadInit() { + tinyMCEPopup.resizeToInnerSize(); + + // Fix for endless reloading in FF + window.setTimeout('createIFrame();', 10); +} + +function createIFrame() { + document.getElementById('iframecontainer').innerHTML = ''; +} + +var wHeight=0, wWidth=0, owHeight=0, owWidth=0; + +function initIframe(doc) { + var dir = tinyMCE.selectedInstance.settings['directionality']; + doc.body.dir = dir; + resizeInputs(); +} + +function resizeInputs() { + if (!tinyMCE.isMSIE) { + wHeight = self.innerHeight - 80; + wWidth = self.innerWidth - 18; + } else { + wHeight = document.body.clientHeight - 80; + wWidth = document.body.clientWidth - 18; + } + + var elm = document.getElementById('frmData'); + if (elm) { + elm.style.height = Math.abs(wHeight) + 'px'; + elm.style.width = Math.abs(wWidth) + 'px'; + } +} diff --git a/jscripts/tiny_mce/plugins/paste/langs/cs.js b/jscripts/tiny_mce/plugins/paste/langs/cs.js new file mode 100644 index 000000000..081aa6b60 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/cs.js @@ -0,0 +1,16 @@ +/** + * Czech lang variables + * encoding: utf-8 + * + * $Id: cs.js,v 1.4 2005/10/18 13:59:43 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +paste_text_desc : 'Vložit neformátovaný text', +paste_text_title : 'Použij CTRL + V na klávesnici pro vložení textu do okna.', +paste_text_linebreaks : 'Nechej přeruÅ¡ení řádků', +paste_word_desc : 'Vložit text z aplikace Word', +paste_word_title : 'Použij CTRL + V na klávesnici pro vložení textu do okna.', +selectall_desc : 'Označit vÅ¡e' +}); + diff --git a/jscripts/tiny_mce/plugins/paste/langs/cy.js b/jscripts/tiny_mce/plugins/paste/langs/cy.js new file mode 100644 index 000000000..a4f6f5241 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/cy.js @@ -0,0 +1,10 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +paste_text_desc : 'Gludo fel Testun Plaen', +paste_text_title : 'Defnyddia CTRL+V ar dy fysellfwrdd i ludo\'r testun i fewn i\'r ffenest.', +paste_text_linebreaks : 'Cadw toriadau llinell', +paste_word_desc : 'Gludo o Word', +paste_word_title : 'Defnyddia CTRL+V ar dy fysellfwrdd i ludo\'r testun i fewn i\'r ffenest.', +selectall_desc : 'Dewis Popeth' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/da.js b/jscripts/tiny_mce/plugins/paste/langs/da.js new file mode 100644 index 000000000..54b5288a0 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/da.js @@ -0,0 +1,10 @@ +// DK lang variables contributed by Jan Moelgaard + +tinyMCE.addToLang('',{ +paste_text_desc : 'Indsæt som ren tekst', +paste_text_title : 'Brug CTRL+V på tastaturett indsætte teksten i vinduet.', +paste_text_linebreaks : 'Behold linjebrud', +paste_word_desc : 'Indsæt fra Word', +paste_word_title : 'Brug CTRL+V på tastaturett indsætte teksten i vinduet.', +selectall_desc : 'Vælg alt' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/de.js b/jscripts/tiny_mce/plugins/paste/langs/de.js new file mode 100644 index 000000000..de3497913 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/de.js @@ -0,0 +1,10 @@ +// DE lang variables + +tinyMCE.addToLang('',{ +paste_text_desc : 'Als unformatierten Text einfügen', +paste_text_title : 'Benutzen Sie Strg+V/Apfel-V auf Ihrer Tastatur, um Text in das Fenster einzufügen.', +paste_text_linebreaks : 'Zeilenumbrüche beibehalten', +paste_word_desc : 'Microsoft Word-Text einfügen', +paste_word_title : 'Benutzen Sie Strg+V/Apfel-V auf Ihrer Tastatur, um Text in das Fenster einzufügen.', +selectall_desc : 'Alles auswählen' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/en.js b/jscripts/tiny_mce/plugins/paste/langs/en.js new file mode 100644 index 000000000..b125d5119 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/en.js @@ -0,0 +1,10 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +paste_text_desc : 'Paste as Plain Text', +paste_text_title : 'Use CTRL+V on your keyboard to paste the text into the window.', +paste_text_linebreaks : 'Keep linebreaks', +paste_word_desc : 'Paste from Word', +paste_word_title : 'Use CTRL+V on your keyboard to paste the text into the window.', +selectall_desc : 'Select All' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/es.js b/jscripts/tiny_mce/plugins/paste/langs/es.js new file mode 100644 index 000000000..2f5acf40b --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/es.js @@ -0,0 +1,12 @@ +// ES lang variables by Alvaro Velasco and Adolfo Sanz De Diego (asanzdiego) +// Last Updated : October 2005 +// TinyMCE Version : 2.0RC3 + +tinyMCE.addToLang('',{ +paste_text_desc : 'Pegar como texto plano', +paste_text_title : 'Use CTRL+V para pegar el texto en la ventana.', +paste_text_linebreaks : 'Mantener saltos de linea', +paste_word_desc : 'Pegar desde Word', +paste_word_title : 'Use CTRL+V para pegar el texto en la ventana.', +selectall_desc : 'Seleccionar todo' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/fi.js b/jscripts/tiny_mce/plugins/paste/langs/fi.js new file mode 100644 index 000000000..49c373eca --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/fi.js @@ -0,0 +1,10 @@ +// FI lang variables by Tuomo Aura, Ateco.fi + +tinyMCE.addToLang('',{ +paste_text_desc : 'Liitä tavallisena tekstinä', +paste_text_title : 'Paina CTRL+V liittääksesi leikkaamasi/kopioimasi tekstin ikkunaan.', +paste_text_linebreaks : 'Säilytä rivinvaihdot', +paste_word_desc : 'Liitä Wordista', +paste_word_title : 'Paina CTRL+V liittääksesi leikkaamasi/kopioimasi tekstin ikkunaan.', +selectall_desc : 'Valitse kaikki' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/fr.js b/jscripts/tiny_mce/plugins/paste/langs/fr.js new file mode 100644 index 000000000..3406ea657 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/fr.js @@ -0,0 +1,10 @@ +// Traduit par Normand Lamoureux le 2005-11-12 + +tinyMCE.addToLang('',{ +paste_text_desc : 'Coller comme du texte', +paste_text_title : 'Faites CTRL+V pour coller le texte dans la fenêtre.', +paste_text_linebreaks : 'Conserver les retours à la ligne', +paste_word_desc : 'Coller depuis Word', +paste_word_title : 'Faites CTRL+V pour coller le texte dans la fenêtre.', +selectall_desc : 'Sélectionner tout' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/fr_ca.js b/jscripts/tiny_mce/plugins/paste/langs/fr_ca.js new file mode 100644 index 000000000..14d611d9e --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/fr_ca.js @@ -0,0 +1,10 @@ +// Canadian French lang variables by Virtuelcom last modification: 2005-06-15 + +tinyMCE.addToLang('',{ +paste_text_desc : 'Coller texte seulement', +paste_text_title : 'Utilisez CTRL+V sur votre clavier pour coller le texte dans la fenêtre.', +paste_text_linebreaks : 'Garder les sauts de ligne', +paste_word_desc : 'Coller à partir de Word', +paste_word_title : 'Utilisez CTRL+V sur votre clavier pour coller le texte dans la fenêtre.', +selectall_desc : 'Selectionner tout' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/he.js b/jscripts/tiny_mce/plugins/paste/langs/he.js new file mode 100644 index 000000000..d660e43f2 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/he.js @@ -0,0 +1,10 @@ +// HE lang variables by Liron Newman, http://eesh.net + +tinyMCE.addToLang('',{ +paste_text_desc : 'äãá÷ ëè÷ñè øâéì', +paste_text_title : 'äùúîù á-CTRL+V ùòì äî÷ìãú ùìê ëãé ìäãáé÷ àú äè÷ñè ìçìåï.', +paste_text_linebreaks : 'ùîåø òì îòáøé ùåøä', +paste_word_desc : 'äãá÷ î-Word', +paste_word_title : 'äùúîù á-CTRL+V ùòì äî÷ìãú ùìê ëãé ìäãáé÷ àú äè÷ñè ìçìåï.', +selectall_desc : 'áçø äëì' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/hu.js b/jscripts/tiny_mce/plugins/paste/langs/hu.js new file mode 100644 index 000000000..09d6f825d --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/hu.js @@ -0,0 +1,10 @@ +// HU lang variables + +tinyMCE.addToLang('',{ +paste_text_desc : 'Beillesztés sima szövegként', +paste_text_title : 'Használd a CTRL+V -t a billentyûzeten a szöveg beillesztéséhez az ablakba.', +paste_text_linebreaks : 'Keep linebreaks', +paste_word_desc : 'Beillesztés Word-bõl', +paste_word_title : 'Használd a CTRL+V -t a billentyûzeten a szöveg beillesztéséhez az ablakba.', +selectall_desc : 'Mindet kijelöl' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/is.js b/jscripts/tiny_mce/plugins/paste/langs/is.js new file mode 100644 index 000000000..28c540399 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/is.js @@ -0,0 +1,10 @@ +// Iceland lang variables by Johannes Birgir Jensson + +tinyMCE.addToLang('',{ +paste_text_desc : 'Skeyta texta eingöngu', +paste_text_title : 'Notaðu CTRL+V á lyklaborðinu til að skeyta textanum í gluggann.', +paste_text_linebreaks : 'Halda línubilum', +paste_word_desc : 'Skeyta úr Word', +paste_word_title : 'Notaðu CTRL+V á lyklaborðinu til að skeyta textanum í gluggann.', +selectall_desc : 'Velja allt' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/nb.js b/jscripts/tiny_mce/plugins/paste/langs/nb.js new file mode 100644 index 000000000..446aeae0f --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/nb.js @@ -0,0 +1,10 @@ +// nb = Norwegian (bokmål) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +paste_text_desc : 'Lim inn som vanlig tekst', +paste_text_title : 'Bruk CTRL+V på tastaturet ditt for å lime inn i dette vinduet.', +paste_text_linebreaks : 'Spar linjebrudd', +paste_word_desc : 'Lim inn fra Office (Word)', +paste_word_title : 'Bruk CTRL+V på tastaturet ditt for å lime inn i dette vinduet.', +selectall_desc : 'Velg alt' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/nl.js b/jscripts/tiny_mce/plugins/paste/langs/nl.js new file mode 100644 index 000000000..642e0122a --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/nl.js @@ -0,0 +1,10 @@ +// NL lang variables + +tinyMCE.addToLang('',{ +paste_text_desc : 'Plakken als platte tekst', +paste_text_title : 'Gebruik CTRL+V op uw toetsenbord om de tekst in het venster te plakken.', +paste_text_linebreaks : 'Behoud regeleinden', +paste_word_desc : 'Plakken uit Word', +paste_word_title : 'Gebruik CTRL+V op uw toetsenbord om de tekst in het venster te plakken.', +selectall_desc : 'Alles selecteren' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/nn.js b/jscripts/tiny_mce/plugins/paste/langs/nn.js new file mode 100644 index 000000000..9084597ef --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/nn.js @@ -0,0 +1,10 @@ +// nn = Norwegian (nynorsk) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +paste_text_desc : 'Lim inn som vanleg tekst', +paste_text_title : 'Bruk CTRL+V på tastaturet ditt for å lime inn i dette vindauget.', +paste_text_linebreaks : 'Spar linjebrudd', +paste_word_desc : 'Lim inn frå Office (Word)', +paste_word_title : 'Bruk CTRL+V på tastaturet ditt for å lime inn i dette vindauget.', +selectall_desc : 'Velg alt' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/pl.js b/jscripts/tiny_mce/plugins/paste/langs/pl.js new file mode 100644 index 000000000..65e0cda42 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/pl.js @@ -0,0 +1,12 @@ +// PL lang variables +// fixed by Wooya +// http://www.mfusion.prv.pl + +tinyMCE.addToLang('',{ +paste_text_desc : 'Wklej jako czysty tekst', +paste_text_title : 'U¿yj CTRL+V na klawiaturze, aby wkleiæ tekst do okna.', +paste_text_linebreaks : 'Zachowaj ³amanie linii', +paste_word_desc : 'Wklej z Worda', +paste_word_title : 'U¿yj CTRL+V na klawiaturze, aby wkleiæ tekst do okna.', +selectall_desc : 'Zaznacz wszystko' +}); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/paste/langs/pt_br.js b/jscripts/tiny_mce/plugins/paste/langs/pt_br.js new file mode 100644 index 000000000..bf777460d --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/pt_br.js @@ -0,0 +1,17 @@ +/** + * pt_br lang variables + * Brazilian Portuguese + * + * Authors : + * Marcio Barbosa (mpg) + * Last Updated : November 26, 2005 + * TinyMCE Version : 2.0RC4 + */ +tinyMCE.addToLang('',{ +paste_text_desc : 'Colar um texto simples', +paste_text_title : 'Use CTRL+V no seu teclado para colar o texto dentro da janela.', +paste_text_linebreaks : 'Manter quebras de linha', +paste_word_desc : 'Colar do Word', +paste_word_title : 'Use CTRL+V no seu teclado para colar o texto dentro da janela.', +selectall_desc : 'Selecionar tudo' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/ru.js b/jscripts/tiny_mce/plugins/paste/langs/ru.js new file mode 100644 index 000000000..c720cb66f --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/ru.js @@ -0,0 +1,10 @@ +// RU cp1251 lang variables + +tinyMCE.addToLang('',{ +paste_text_desc : 'Âñòàâèòü êàê ïðîñòîé òåêñò', +paste_text_title : 'Èñïîëüçóéòå CTRL+V äëÿ âñòàâêè òåêñòà â îêîøêî.', +paste_text_linebreaks : 'Ñîõðàíèòü ïåðåíîñû ñòðîê', +paste_word_desc : 'Âñòàâèòü èç Word', +paste_word_title : 'Èñïîëüçóéòå CTRL+V äëÿ âñòàâêè òåêñòà â îêîøêî.', +selectall_desc : 'Âûäåëèòü âñ¸' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/ru_KOI8-R.js b/jscripts/tiny_mce/plugins/paste/langs/ru_KOI8-R.js new file mode 100644 index 000000000..be754855a --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/ru_KOI8-R.js @@ -0,0 +1,10 @@ +// RU KOI8-R lang variables + +tinyMCE.addToLang('',{ +paste_text_desc : '÷ÓÔÁ×ÉÔØ ËÁË ÐÒÏÓÔÏÊ ÔÅËÓÔ', +paste_text_title : 'éÓÐÏÌØÚÕÊÔÅ CTRL+V ÄÌÑ ×ÓÔÁ×ËÉ ÔÅËÓÔÁ × ÏËÏÛËÏ.', +paste_text_linebreaks : 'óÏÈÒÁÎÉÔØ ÐÅÒÅÎÏÓÙ ÓÔÒÏË', +paste_word_desc : '÷ÓÔÁ×ÉÔØ ÉÚ Word', +paste_word_title : 'éÓÐÏÌØÚÕÊÔÅ CTRL+V ÄÌÑ ×ÓÔÁ×ËÉ ÔÅËÓÔÁ × ÏËÏÛËÏ.', +selectall_desc : '÷ÙÄÅÌÉÔØ ×Ó£' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/ru_UTF-8.js b/jscripts/tiny_mce/plugins/paste/langs/ru_UTF-8.js new file mode 100644 index 000000000..c5dc2cfaf --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/ru_UTF-8.js @@ -0,0 +1,10 @@ +// RU UTF-8 lang variables + +tinyMCE.addToLang('',{ +paste_text_desc : 'Вставить как простой текст', +paste_text_title : 'Используйте CTRL+V для вставки текста в окошко.', +paste_text_linebreaks : 'Сохранить переносы строк', +paste_word_desc : 'Вставить из Word', +paste_word_title : 'Используйте CTRL+V для вставки текста в окошко.', +selectall_desc : 'Выделить всё' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/sk.js b/jscripts/tiny_mce/plugins/paste/langs/sk.js new file mode 100644 index 000000000..a92ee19a0 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/sk.js @@ -0,0 +1,18 @@ +/** + * Slovak lang variables + * encoding: utf-8 + * + * @author Vladimir VASIL vvasil@post.sk + * + * $Id: sk.js,v 1.1 2005/11/22 20:56:44 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +paste_text_desc : 'VložiÅ¥ neformatovaný text', +paste_text_title : 'Použi CTRL + V na klávesnici pre vloženie textu do okna.', +paste_text_linebreaks : 'Nechaj preruÅ¡enie riadkov', +paste_word_desc : 'VložiÅ¥ text s aplikáce Word', +paste_word_title : 'Použi CTRL + V na klávesnici pre vloženie textu do okna.', +selectall_desc : 'OznačiÅ¥ vÅ¡etko' +}); + diff --git a/jscripts/tiny_mce/plugins/paste/langs/sv.js b/jscripts/tiny_mce/plugins/paste/langs/sv.js new file mode 100644 index 000000000..c005c9435 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/sv.js @@ -0,0 +1,10 @@ +// SV lang variables + +tinyMCE.addToLang('',{ +paste_text_desc : 'Klistra in som vanlig text', +paste_text_title : 'Använd CTRL+V på ditt tangentbord för att klistra in i detta fönster.', +paste_text_linebreaks : 'Spara radbrytningar', +paste_word_desc : 'Klistra in från Word', +paste_word_title : 'Använd CTRL+V på ditt tangentbord för att klistra in i detta fönster.', +selectall_desc : 'Select All' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/zh_cn.js b/jscripts/tiny_mce/plugins/paste/langs/zh_cn.js new file mode 100644 index 000000000..0c2bb0f12 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/zh_cn.js @@ -0,0 +1,10 @@ +// Simplified Chinese lang variables contributed by tom_cat (thomaswangyang@gmail.com) + +tinyMCE.addToLang('',{ +paste_text_desc : '×÷Ϊ´¿Îı¾Õ³Ìù', +paste_text_title : 'ʹÓÿì½Ý¼ü CTRL+V ½«Îı¾±¾Õ³Ìùµ½ÒÔÏ´°¿ÚÖÐ', +paste_text_linebreaks : '±£Áô»»Ðзû', +paste_word_desc : '´ÓWordÕ³Ìù', +paste_word_title : 'ʹÓÿì½Ý¼ü CTRL+V ½«Îı¾Õ³Ìùµ½ÒÔÏ´°¿Ú', +selectall_desc : 'È«Ñ¡' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/zh_tw.js b/jscripts/tiny_mce/plugins/paste/langs/zh_tw.js new file mode 100644 index 000000000..ecbcc7be1 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/zh_tw.js @@ -0,0 +1,11 @@ +// Traditional Chinese BIG-5; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// ÁcÅ餤¤å BIG-5 ¡F¼Æ¦ìÀ³¥Î§{»s§@¡F twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +paste_text_desc : '±Ä¯Â¤å¦r¼Ò¦¡¶K¤W', +paste_text_title : '¨Ï¥ÎÁä½L¤Wªº CTRL+V ²Õ¦XÁä±N¤å¦r¶K¤J§@·~°Ï¤¤', +paste_text_linebreaks : '«O¯d´«¦æ²Å¸¹', +paste_word_desc : '¦Û Word ¤ºÂà¶K', +paste_word_title : '¨Ï¥ÎÁä½L¤Wªº CTRL+V ²Õ¦XÁä±N¤å¦r¶K¤J§@·~°Ï¤¤', +selectall_desc : '¥þ¿ï' +}); diff --git a/jscripts/tiny_mce/plugins/paste/langs/zh_tw_utf8.js b/jscripts/tiny_mce/plugins/paste/langs/zh_tw_utf8.js new file mode 100644 index 000000000..04b60d514 --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/langs/zh_tw_utf8.js @@ -0,0 +1,11 @@ +// Traditional Chinese UTF-8; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// 繁體中文 UTF-8 ;數位應用坊製作; twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +paste_text_desc : '採純文字模式貼上', +paste_text_title : '使用鍵盤上的 CTRL+V 組合鍵將文字貼入作業區中', +paste_text_linebreaks : '保留換行符號', +paste_word_desc : '自 Word 內轉貼', +paste_word_title : '使用鍵盤上的 CTRL+V 組合鍵將文字貼入作業區中', +selectall_desc : '全選' +}); diff --git a/jscripts/tiny_mce/plugins/paste/pastetext.htm b/jscripts/tiny_mce/plugins/paste/pastetext.htm new file mode 100644 index 000000000..63ff0007b --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/pastetext.htm @@ -0,0 +1,34 @@ + + + {$lang_paste_text_desc} + + + + + + +
    +
    {$lang_paste_text_desc}
    + +
    + +
    + +
    + +
    {$lang_paste_text_title}
    + + + +
    +
    + +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/paste/pasteword.htm b/jscripts/tiny_mce/plugins/paste/pasteword.htm new file mode 100644 index 000000000..7acc7f78f --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/pasteword.htm @@ -0,0 +1,29 @@ + + + + {$lang_paste_word_desc} + + + + + + +
    +
    {$lang_paste_word_desc}
    + +
    {$lang_paste_word_title}
    + +
    + +
    +
    + +
    + +
    + +
    +
    +
    + + diff --git a/jscripts/tiny_mce/plugins/paste/readme.txt b/jscripts/tiny_mce/plugins/paste/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/jscripts/tiny_mce/plugins/paste/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/jscripts/tiny_mce/plugins/preview/editor_plugin.js b/jscripts/tiny_mce/plugins/preview/editor_plugin.js new file mode 100644 index 000000000..39059865a --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/editor_plugin.js @@ -0,0 +1 @@ +tinyMCE.importPluginLanguagePack('preview','en,tr,cs,de,el,fr_ca,it,ko,pt,sv,zh_cn,fa,fr,pl,pt_br,nl,da,he,nb,hu,ru,ru_KOI8-R,ru_UTF-8,nn,es,cy,is,zh_tw,zh_tw_utf8,sk');var TinyMCE_PreviewPlugin={getInfo:function(){return{longname:'Preview',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_preview.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},getControlHTML:function(cn){switch(cn){case"preview":return tinyMCE.getButtonHTML(cn,'lang_preview_desc','{$pluginurl}/images/preview.gif','mcePreview');}return"";},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mcePreview":var previewPage=tinyMCE.getParam("plugin_preview_pageurl",null);var previewWidth=tinyMCE.getParam("plugin_preview_width","550");var previewHeight=tinyMCE.getParam("plugin_preview_height","600");if(previewPage){var template=new Array();template['file']=previewPage;template['width']=previewWidth;template['height']=previewHeight;tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"yes",inline:"yes",content:tinyMCE.getContent(),content_css:tinyMCE.getParam("content_css")});}else{var win=window.open("","mcePreview","menubar=no,toolbar=no,scrollbars=yes,resizable=yes,left=20,top=20,width="+previewWidth+",height="+previewHeight);var html="";var c=tinyMCE.getContent();var pos=c.indexOf('',pos);pos2=c.lastIndexOf('');c=c.substring(pos+1,pos2);}html+=tinyMCE.getParam('doctype');html+='';html+='';html+=''+tinyMCE.getLang('lang_preview_desc')+'';html+='';html+='';html+='';html+='';html+='';html+=c;html+='';html+='';win.document.write(html);win.document.close();}return true;}return false;}};tinyMCE.addPlugin("preview",TinyMCE_PreviewPlugin); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js b/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js new file mode 100644 index 000000000..cd7e5e47b --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js @@ -0,0 +1,92 @@ +/** + * $RCSfile: editor_plugin_src.js,v $ + * $Revision: 1.23 $ + * $Date: 2006/03/20 12:03:44 $ + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +/* Import plugin specific language pack */ +tinyMCE.importPluginLanguagePack('preview', 'en,tr,cs,de,el,fr_ca,it,ko,pt,sv,zh_cn,fa,fr,pl,pt_br,nl,da,he,nb,hu,ru,ru_KOI8-R,ru_UTF-8,nn,es,cy,is,zh_tw,zh_tw_utf8,sk'); + +var TinyMCE_PreviewPlugin = { + getInfo : function() { + return { + longname : 'Preview', + author : 'Moxiecode Systems', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_preview.html', + version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion + }; + }, + + /** + * Returns the HTML contents of the preview control. + */ + getControlHTML : function(cn) { + switch (cn) { + case "preview": + return tinyMCE.getButtonHTML(cn, 'lang_preview_desc', '{$pluginurl}/images/preview.gif', 'mcePreview'); + } + + return ""; + }, + + /** + * Executes the mcePreview command. + */ + execCommand : function(editor_id, element, command, user_interface, value) { + // Handle commands + switch (command) { + case "mcePreview": + var previewPage = tinyMCE.getParam("plugin_preview_pageurl", null); + var previewWidth = tinyMCE.getParam("plugin_preview_width", "550"); + var previewHeight = tinyMCE.getParam("plugin_preview_height", "600"); + + // Use a custom preview page + if (previewPage) { + var template = new Array(); + + template['file'] = previewPage; + template['width'] = previewWidth; + template['height'] = previewHeight; + + tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "yes", inline : "yes", content : tinyMCE.getContent(), content_css : tinyMCE.getParam("content_css")}); + } else { + var win = window.open("", "mcePreview", "menubar=no,toolbar=no,scrollbars=yes,resizable=yes,left=20,top=20,width=" + previewWidth + ",height=" + previewHeight); + var html = ""; + var c = tinyMCE.getContent(); + var pos = c.indexOf('', pos); + pos2 = c.lastIndexOf(''); + c = c.substring(pos + 1, pos2); + } + + html += tinyMCE.getParam('doctype'); + html += ''; + html += ''; + html += '' + tinyMCE.getLang('lang_preview_desc') + ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += ''; + html += c; + html += ''; + html += ''; + + win.document.write(html); + win.document.close(); + } + + return true; + } + + return false; + } +}; + +tinyMCE.addPlugin("preview", TinyMCE_PreviewPlugin); diff --git a/jscripts/tiny_mce/plugins/preview/example.html b/jscripts/tiny_mce/plugins/preview/example.html new file mode 100644 index 000000000..19ebead45 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/example.html @@ -0,0 +1,13 @@ + + + +Example of a custom preview page + + + + +Editor contents:
    +{$content} + + + diff --git a/jscripts/tiny_mce/plugins/preview/images/preview.gif b/jscripts/tiny_mce/plugins/preview/images/preview.gif new file mode 100644 index 0000000000000000000000000000000000000000..318936eaac98edd0d40334abcd2f7c1c10abaec9 GIT binary patch literal 286 zcmV+(0pb2fNk%w1VH5xq0MrctLNX#=n%>{t-ZHm6e~^^jl|5qG(t>VEt(9$;rn0=h z!9sF^Hceyu{Qa@O*@D`dO0sseucF4-?uW03pRULFzFJ~vZ(3SX#mU#gdO|Xil9ZX3 zZ+Cy;3tk`X`blmtgJ&}spvFxO)+pf z*Yu0)Jeq<*Oi>zw$YY{tU??18WAZRSAc+luBS5_%gFt}U=_CkVMPL9SG->9@i6RJS z282$nbL>vSb9vQ6%F(nbX9-_S>5dgx&$jBi8JKA7wKL7v# literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/preview/langs/cs.js b/jscripts/tiny_mce/plugins/preview/langs/cs.js new file mode 100644 index 000000000..3cd7d4e8f --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/cs.js @@ -0,0 +1,11 @@ +/** + * Czech lang variables + * encoding: utf-8 + * + * $Id: cs.js,v 1.4 2005/10/18 13:59:43 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +preview_desc : 'Náhled' +}); + diff --git a/jscripts/tiny_mce/plugins/preview/langs/cy.js b/jscripts/tiny_mce/plugins/preview/langs/cy.js new file mode 100644 index 000000000..01d4201d5 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/cy.js @@ -0,0 +1,5 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +preview_desc : 'Rhagolwg' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/da.js b/jscripts/tiny_mce/plugins/preview/langs/da.js new file mode 100644 index 000000000..07b7662a0 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/da.js @@ -0,0 +1,5 @@ +// DK lang variables contributed by Jan Moelgaard + +tinyMCE.addToLang('',{ +preview_desc : 'Se siden' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/de.js b/jscripts/tiny_mce/plugins/preview/langs/de.js new file mode 100644 index 000000000..c8bc6b12b --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/de.js @@ -0,0 +1,5 @@ +// DE lang variables + +tinyMCE.addToLang('',{ +preview_desc : 'Vorschau' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/el.js b/jscripts/tiny_mce/plugins/preview/langs/el.js new file mode 100644 index 000000000..6e5f8ae7e --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/el.js @@ -0,0 +1,5 @@ +// Greek lang variables by Jacaranda Bill + +tinyMCE.addToLang('',{ +preview_desc : 'Ðñïåðéóêüðçóç éóôïóåëßäáò' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/en.js b/jscripts/tiny_mce/plugins/preview/langs/en.js new file mode 100644 index 000000000..b68b6751d --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/en.js @@ -0,0 +1,5 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +preview_desc : 'Preview' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/es.js b/jscripts/tiny_mce/plugins/preview/langs/es.js new file mode 100644 index 000000000..a305521b4 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/es.js @@ -0,0 +1,7 @@ +// ES lang variables by Alvaro Velasco and Adolfo Sanz De Diego (asanzdiego) +// Last Updated : October 2005 +// TinyMCE Version : 2.0RC3 + +tinyMCE.addToLang('',{ +preview_desc : 'Vista previa' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/fa.js b/jscripts/tiny_mce/plugins/preview/langs/fa.js new file mode 100644 index 000000000..d9a965810 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/fa.js @@ -0,0 +1,10 @@ +// IR lang variables +// Persian (Farsi) language pack (for IRAN) +// By: Morteza Zafari +// Lost@LostLord.com +// http://www.LostLord.com + +tinyMCE.addToLang('',{ +dir : 'rtl', +preview_desc : '??? ?????' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/fr.js b/jscripts/tiny_mce/plugins/preview/langs/fr.js new file mode 100644 index 000000000..ac8675a94 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/fr.js @@ -0,0 +1,6 @@ +// French lang variables by Laurent Dran +// Modifié par Normand Lamoureux le 2005-11-12 + +tinyMCE.addToLang('',{ +preview_desc : 'Prévisualisation' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/fr_ca.js b/jscripts/tiny_mce/plugins/preview/langs/fr_ca.js new file mode 100644 index 000000000..1f687d696 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/fr_ca.js @@ -0,0 +1,5 @@ +// Canadian French lang variables by Virtuelcom last modification: 2005-06-15 + +tinyMCE.addToLang('',{ +preview_desc : 'Prévisualisation' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/he.js b/jscripts/tiny_mce/plugins/preview/langs/he.js new file mode 100644 index 000000000..6fd7262dc --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/he.js @@ -0,0 +1,5 @@ +// HE lang variables by Liron Newman, http://eesh.net + +tinyMCE.addToLang('',{ +preview_desc : 'úöåâä î÷ãéîä' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/hu.js b/jscripts/tiny_mce/plugins/preview/langs/hu.js new file mode 100644 index 000000000..94e83b9c6 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/hu.js @@ -0,0 +1,5 @@ +// HU lang variables + +tinyMCE.addToLang('',{ +preview_desc : 'Elõnézet' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/is.js b/jscripts/tiny_mce/plugins/preview/langs/is.js new file mode 100644 index 000000000..d20b485b2 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/is.js @@ -0,0 +1,5 @@ +// Iceland lang variables by Johannes Birgir Jensson + +tinyMCE.addToLang('',{ +preview_desc : 'Forskoða' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/it.js b/jscripts/tiny_mce/plugins/preview/langs/it.js new file mode 100644 index 000000000..f63d43032 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/it.js @@ -0,0 +1,5 @@ +// IT lang variables + +tinyMCE.addToLang('',{ +preview_desc : 'Anteprima' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/ko.js b/jscripts/tiny_mce/plugins/preview/langs/ko.js new file mode 100644 index 000000000..2759a082a --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/ko.js @@ -0,0 +1,5 @@ +// KO lang variables + +tinyMCE.addToLang('',{ +preview_desc : '¹Ì¸®º¸±â' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/nb.js b/jscripts/tiny_mce/plugins/preview/langs/nb.js new file mode 100644 index 000000000..231f1ba30 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/nb.js @@ -0,0 +1,5 @@ +// nb = Norwegian (bokmål) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +preview_desc : 'Forhåndsvisning' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/nl.js b/jscripts/tiny_mce/plugins/preview/langs/nl.js new file mode 100644 index 000000000..ec66d32a1 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/nl.js @@ -0,0 +1,5 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +preview_desc : 'Voorbeeld' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/nn.js b/jscripts/tiny_mce/plugins/preview/langs/nn.js new file mode 100644 index 000000000..e273a271a --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/nn.js @@ -0,0 +1,5 @@ +// nn = Norwegian (nynorsk) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +preview_desc : 'Forhåndsvisning' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/pl.js b/jscripts/tiny_mce/plugins/preview/langs/pl.js new file mode 100644 index 000000000..2e3f90191 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/pl.js @@ -0,0 +1,7 @@ +// PL lang variables +// fixed by Wooya +// http://www.musion.prv.pl + +tinyMCE.addToLang('',{ +preview_desc : 'Podgl±d' +}); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/preview/langs/pt.js b/jscripts/tiny_mce/plugins/preview/langs/pt.js new file mode 100644 index 000000000..6256c4739 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/pt.js @@ -0,0 +1,5 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +preview_desc : 'Pré-visualização' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/pt_br.js b/jscripts/tiny_mce/plugins/preview/langs/pt_br.js new file mode 100644 index 000000000..3cbf43047 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/pt_br.js @@ -0,0 +1,13 @@ +/** + * pt_br lang variables + * Brazilian Portuguese + * + * Authors : ???? + * Revision and modifications: + * Marcio Barbosa (mpg) + * Last Updated : November 26, 2005 + * TinyMCE Version : 2.0RC4 + */ +tinyMCE.addToLang('',{ +preview_desc : 'Visualizar' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/ru.js b/jscripts/tiny_mce/plugins/preview/langs/ru.js new file mode 100644 index 000000000..994bb57be --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/ru.js @@ -0,0 +1,5 @@ +// RU lang variables cp1251 + +tinyMCE.addToLang('',{ +preview_desc : 'Ïðåäâàðèòåëüíûé ïðîñìîòð' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/ru_KOI8-R.js b/jscripts/tiny_mce/plugins/preview/langs/ru_KOI8-R.js new file mode 100644 index 000000000..5de38b6aa --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/ru_KOI8-R.js @@ -0,0 +1,5 @@ +// RU lang variables KOI8-R + +tinyMCE.addToLang('',{ +preview_desc : 'ðÒÅÄ×ÁÒÉÔÅÌØÎÙÊ ÐÒÏÓÍÏÔÒ' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/ru_UTF-8.js b/jscripts/tiny_mce/plugins/preview/langs/ru_UTF-8.js new file mode 100644 index 000000000..dda8c81db --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/ru_UTF-8.js @@ -0,0 +1,5 @@ +// RU lang variables UTF-8 + +tinyMCE.addToLang('',{ +preview_desc : 'Предварительный просмотр' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/sk.js b/jscripts/tiny_mce/plugins/preview/langs/sk.js new file mode 100644 index 000000000..7a1971f40 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/sk.js @@ -0,0 +1,13 @@ +/** + * Slovak lang variables + * encoding: utf-8 + * + * @author Vladimir VASIL vvasil@post.sk + * + * $Id: sk.js,v 1.1 2005/11/22 20:56:44 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +preview_desc : 'Náhľad' +}); + diff --git a/jscripts/tiny_mce/plugins/preview/langs/sv.js b/jscripts/tiny_mce/plugins/preview/langs/sv.js new file mode 100644 index 000000000..cb2bbf87e --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/sv.js @@ -0,0 +1,5 @@ +// SE lang variables + +tinyMCE.addToLang('',{ +preview_desc : 'Förhandsgranska' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/zh_cn.js b/jscripts/tiny_mce/plugins/preview/langs/zh_cn.js new file mode 100644 index 000000000..b5b6d0696 --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/zh_cn.js @@ -0,0 +1,5 @@ +// Simplified Chinese lang variables contributed by cube316 (cube316@etang.com) + +tinyMCE.addToLang('',{ +preview_desc : 'Ô¤ÀÀ' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/zh_tw.js b/jscripts/tiny_mce/plugins/preview/langs/zh_tw.js new file mode 100644 index 000000000..f15e5515f --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/zh_tw.js @@ -0,0 +1,6 @@ +// Traditional Chinese BIG-5; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// ÁcÅ餤¤å BIG-5 ¡F¼Æ¦ìÀ³¥Î§{»s§@¡F twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +preview_desc : '¹wÄý' +}); diff --git a/jscripts/tiny_mce/plugins/preview/langs/zh_tw_utf8.js b/jscripts/tiny_mce/plugins/preview/langs/zh_tw_utf8.js new file mode 100644 index 000000000..9d5e7378a --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/langs/zh_tw_utf8.js @@ -0,0 +1,6 @@ +// Traditional Chinese UTF-8; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// 繁體中文 UTF-8 ;數位應用坊製作; twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +preview_desc : '預覽' +}); diff --git a/jscripts/tiny_mce/plugins/preview/readme.txt b/jscripts/tiny_mce/plugins/preview/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/jscripts/tiny_mce/plugins/preview/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/jscripts/tiny_mce/plugins/print/editor_plugin.js b/jscripts/tiny_mce/plugins/print/editor_plugin.js new file mode 100644 index 000000000..5ea391cb8 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/editor_plugin.js @@ -0,0 +1 @@ +tinyMCE.importPluginLanguagePack('print','en,tr,sv,zh_cn,fa,fr_ca,fr,de,pl,pt_br,cs,nl,da,he,nb,hu,ru,ru_KOI8-R,ru_UTF-8,nn,fi,es,cy,is,zh_tw,zh_tw_utf8,sk');var TinyMCE_PrintPlugin={getInfo:function(){return{longname:'Print',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_print.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},getControlHTML:function(cn){switch(cn){case"print":return tinyMCE.getButtonHTML(cn,'lang_print_desc','{$pluginurl}/images/print.gif','mcePrint');}return"";},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mcePrint":tinyMCE.getInstanceById(editor_id).contentWindow.print();return true;}return false;}};tinyMCE.addPlugin("print",TinyMCE_PrintPlugin); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/print/editor_plugin_src.js b/jscripts/tiny_mce/plugins/print/editor_plugin_src.js new file mode 100644 index 000000000..aa2d4eea4 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/editor_plugin_src.js @@ -0,0 +1,49 @@ +/** + * $RCSfile: editor_plugin_src.js,v $ + * $Revision: 1.19 $ + * $Date: 2006/02/10 16:29:40 $ + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +/* Import theme specific language pack */ +tinyMCE.importPluginLanguagePack('print', 'en,tr,sv,zh_cn,fa,fr_ca,fr,de,pl,pt_br,cs,nl,da,he,nb,hu,ru,ru_KOI8-R,ru_UTF-8,nn,fi,es,cy,is,zh_tw,zh_tw_utf8,sk'); + +var TinyMCE_PrintPlugin = { + getInfo : function() { + return { + longname : 'Print', + author : 'Moxiecode Systems', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_print.html', + version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion + }; + }, + + getControlHTML : function(cn) { + switch (cn) { + case "print": + return tinyMCE.getButtonHTML(cn, 'lang_print_desc', '{$pluginurl}/images/print.gif', 'mcePrint'); + } + + return ""; + }, + + /** + * Executes the search/replace commands. + */ + execCommand : function(editor_id, element, command, user_interface, value) { + // Handle commands + switch (command) { + case "mcePrint": + tinyMCE.getInstanceById(editor_id).contentWindow.print(); + return true; + } + + // Pass to next handler in chain + return false; + } +}; + +tinyMCE.addPlugin("print", TinyMCE_PrintPlugin); diff --git a/jscripts/tiny_mce/plugins/print/images/print.gif b/jscripts/tiny_mce/plugins/print/images/print.gif new file mode 100644 index 0000000000000000000000000000000000000000..72104d177b7fb10164fe2dcd5c11833af420ed0d GIT binary patch literal 211 zcmV;^04)DUNk%w1VH5xq0K*3W0-^$glB?9%;yO@jtF_9q{sK~CfBXCW68-|a#?oSO ziL%e~l%llZ>Gg7ing9R*A^8LW000jFEC2ui02BZe000Dl@X1N5y*TUrMEc;T3BqBT z4PgiwVSWT5C`y(zC#n*d;5M+t%)nq+5`;vqkun5Sl>{S3U<4crgF(S?7%GgM_|OPs zD* +// Last Updated : October 2005 +// TinyMCE Version : 2.0RC3 + +tinyMCE.addToLang('',{ +print_desc : 'Imprimir' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/fa.js b/jscripts/tiny_mce/plugins/print/langs/fa.js new file mode 100644 index 000000000..81e6df015 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/fa.js @@ -0,0 +1,10 @@ +// IR lang variables +// Persian (Farsi) language pack (for IRAN) +// By: Morteza Zafari +// Lost@LostLord.com +// http://www.LostLord.com + +tinyMCE.addToLang('',{ +dir : 'rtl', +print_desc : '???' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/fi.js b/jscripts/tiny_mce/plugins/print/langs/fi.js new file mode 100644 index 000000000..e97d9abae --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/fi.js @@ -0,0 +1,5 @@ +// FI lang variables by Tuomo Aura, Ateco.fi + +tinyMCE.addToLang('',{ +print_desc : 'Tulosta' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/fr.js b/jscripts/tiny_mce/plugins/print/langs/fr.js new file mode 100644 index 000000000..9979dc636 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/fr.js @@ -0,0 +1,5 @@ +// French lang variables by Laurent Dran + +tinyMCE.addToLang('',{ +print_desc : 'Imprimer' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/fr_ca.js b/jscripts/tiny_mce/plugins/print/langs/fr_ca.js new file mode 100644 index 000000000..c98cc74ff --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/fr_ca.js @@ -0,0 +1,5 @@ +// Canadian French lang variables by Virtuelcom last modification: 2005-06-15 + +tinyMCE.addToLang('',{ +print_desc : 'Imprimer' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/he.js b/jscripts/tiny_mce/plugins/print/langs/he.js new file mode 100644 index 000000000..de55f38f5 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/he.js @@ -0,0 +1,5 @@ +// HE lang variables by Liron Newman, http://eesh.net + +tinyMCE.addToLang('',{ +print_desc : 'äãôñ' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/hu.js b/jscripts/tiny_mce/plugins/print/langs/hu.js new file mode 100644 index 000000000..8e1ec6a29 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/hu.js @@ -0,0 +1,5 @@ +// HU lang variables + +tinyMCE.addToLang('',{ +print_desc : 'Nyomtatás' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/is.js b/jscripts/tiny_mce/plugins/print/langs/is.js new file mode 100644 index 000000000..df67cae81 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/is.js @@ -0,0 +1,5 @@ +// Iceland lang variables by Johannes Birgir Jensson + +tinyMCE.addToLang('',{ +print_desc : 'Prenta' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/nb.js b/jscripts/tiny_mce/plugins/print/langs/nb.js new file mode 100644 index 000000000..e2dba3bd8 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/nb.js @@ -0,0 +1,5 @@ +// nb = Norwegian (bokmål) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +print_desc : 'Skriv ut' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/nl.js b/jscripts/tiny_mce/plugins/print/langs/nl.js new file mode 100644 index 000000000..7b120259b --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/nl.js @@ -0,0 +1,5 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +print_desc : 'Afdrukken' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/nn.js b/jscripts/tiny_mce/plugins/print/langs/nn.js new file mode 100644 index 000000000..4e2fdec2e --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/nn.js @@ -0,0 +1,5 @@ +// nn = Norwegian (nynorsk) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +print_desc : 'Skriv ut' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/pl.js b/jscripts/tiny_mce/plugins/print/langs/pl.js new file mode 100644 index 000000000..d13f09ce5 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/pl.js @@ -0,0 +1,5 @@ +// PL lang variables + +tinyMCE.addToLang('',{ +print_desc : 'Drukuj' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/pt_br.js b/jscripts/tiny_mce/plugins/print/langs/pt_br.js new file mode 100644 index 000000000..28052e411 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/pt_br.js @@ -0,0 +1,13 @@ +/** + * pt_br lang variables + * Brazilian Portuguese + * + * Authors : ???? + * Revision and modifications: + * Marcio Barbosa (mpg) + * Last Updated : November 26, 2005 + * TinyMCE Version : 2.0RC4 + */ +tinyMCE.addToLang('',{ +print_desc : 'Imprimir' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/ru.js b/jscripts/tiny_mce/plugins/print/langs/ru.js new file mode 100644 index 000000000..edc826b74 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/ru.js @@ -0,0 +1,5 @@ +// RU lang variables cp1251 + +tinyMCE.addToLang('',{ +print_desc : 'Ðàñïå÷àòàòü' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/ru_KOI8-R.js b/jscripts/tiny_mce/plugins/print/langs/ru_KOI8-R.js new file mode 100644 index 000000000..038375ccc --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/ru_KOI8-R.js @@ -0,0 +1,5 @@ +// RU lang variables KOI8-R + +tinyMCE.addToLang('',{ +print_desc : 'òÁÓÐÅÞÁÔÁÔØ' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/ru_UTF-8.js b/jscripts/tiny_mce/plugins/print/langs/ru_UTF-8.js new file mode 100644 index 000000000..a7185f8bc --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/ru_UTF-8.js @@ -0,0 +1,5 @@ +// RU lang variables UTF-8 + +tinyMCE.addToLang('',{ +print_desc : 'Распечатать' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/sk.js b/jscripts/tiny_mce/plugins/print/langs/sk.js new file mode 100644 index 000000000..995476327 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/sk.js @@ -0,0 +1,13 @@ +/** + * Slovak lang variables + * encoding: utf-8 + * + * @author Vladimir VASIL vvasil@post.sk + * + * $Id: sk.js,v 1.1 2005/11/22 20:56:44 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +print_desc : 'Tlač' +}); + diff --git a/jscripts/tiny_mce/plugins/print/langs/sv.js b/jscripts/tiny_mce/plugins/print/langs/sv.js new file mode 100644 index 000000000..34484379e --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/sv.js @@ -0,0 +1,5 @@ +// SE lang variables + +tinyMCE.addToLang('',{ +print_desc : 'Skriv ut' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/zh_cn.js b/jscripts/tiny_mce/plugins/print/langs/zh_cn.js new file mode 100644 index 000000000..957512c88 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/zh_cn.js @@ -0,0 +1,6 @@ +// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com) +//Çë·ÃÎÊ http://www.cube316.net/ ÒÔ»ñÈ¡TinyMCEµÄÖÐÎÄÖ§³Ö + +tinyMCE.addToLang('',{ +print_desc : '´òÓ¡' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/zh_tw.js b/jscripts/tiny_mce/plugins/print/langs/zh_tw.js new file mode 100644 index 000000000..6dc26a60d --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/zh_tw.js @@ -0,0 +1,6 @@ +// Traditional Chinese BIG-5; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// ÁcÅ餤¤å BIG-5 ¡F¼Æ¦ìÀ³¥Î§{»s§@¡F twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +print_desc : '¦C¦L' +}); diff --git a/jscripts/tiny_mce/plugins/print/langs/zh_tw_utf8.js b/jscripts/tiny_mce/plugins/print/langs/zh_tw_utf8.js new file mode 100644 index 000000000..c0615a738 --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/langs/zh_tw_utf8.js @@ -0,0 +1,6 @@ +// Traditional Chinese UTF-8; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// 繁體中文 UTF-8 ;數位應用坊製作; twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +print_desc : '列印' +}); diff --git a/jscripts/tiny_mce/plugins/print/readme.txt b/jscripts/tiny_mce/plugins/print/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/jscripts/tiny_mce/plugins/print/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/jscripts/tiny_mce/plugins/readme.txt b/jscripts/tiny_mce/plugins/readme.txt new file mode 100644 index 000000000..b694fdb6b --- /dev/null +++ b/jscripts/tiny_mce/plugins/readme.txt @@ -0,0 +1 @@ +This is the location you place TinyMCE plugins. diff --git a/jscripts/tiny_mce/plugins/save/editor_plugin.js b/jscripts/tiny_mce/plugins/save/editor_plugin.js new file mode 100644 index 000000000..d299c2322 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/editor_plugin.js @@ -0,0 +1 @@ +tinyMCE.importPluginLanguagePack('save','en,tr,sv,zh_cn,cs,fa,fr_ca,fr,de,pl,pt_br,nl,he,nb,hu,ru,ru_KOI8-R,ru_UTF-8,nn,fi,da,es,cy,is,zh_tw,zh_tw_utf8,sk');var TinyMCE_SavePlugin={getInfo:function(){return{longname:'Save',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_save.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},initInstance:function(inst){inst.addShortcut('ctrl','s','lang_save_desc','mceSave');},getControlHTML:function(cn){switch(cn){case"save":return tinyMCE.getButtonHTML(cn,'lang_save_desc','{$pluginurl}/images/save.gif','mceSave');}return"";},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceSave":if(tinyMCE.getParam("fullscreen_is_enabled"))return true;var inst=tinyMCE.selectedInstance;var formObj=inst.formElement.form;if(tinyMCE.getParam("save_enablewhendirty")&&!inst.isDirty())return true;if(formObj){tinyMCE.triggerSave();var os;if((os=tinyMCE.getParam("save_onsavecallback"))){if(eval(os+'(inst);')){inst.startContent=tinyMCE.trim(inst.getBody().innerHTML);tinyMCE.triggerNodeChange(false,true);}return true;}for(var i=0;iy!E|{0<7#0>aHWEL6BndDU8;y+&e4jmm66%_}QC6xvn4h#bW3={_x jpoxPV4gmok9t#w=ts@#{Ko1AM7r_@1E5*jg#vuSZ^a*OP literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/save/langs/cs.js b/jscripts/tiny_mce/plugins/save/langs/cs.js new file mode 100644 index 000000000..0f7d2b587 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/cs.js @@ -0,0 +1,11 @@ +/** + * Czech lang variables + * encoding: utf-8 + * + * $Id: cs.js,v 1.4 2005/10/18 13:59:43 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +save_desc : 'Uložit' +}); + diff --git a/jscripts/tiny_mce/plugins/save/langs/cy.js b/jscripts/tiny_mce/plugins/save/langs/cy.js new file mode 100644 index 000000000..9bb3cdcce --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/cy.js @@ -0,0 +1,5 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +save_desc : 'Cadw' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/da.js b/jscripts/tiny_mce/plugins/save/langs/da.js new file mode 100644 index 000000000..a0bad1f74 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/da.js @@ -0,0 +1,5 @@ +// DK lang variables contributed by Jan Moelgaard + +tinyMCE.addToLang('',{ +save_desc : 'Gem' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/de.js b/jscripts/tiny_mce/plugins/save/langs/de.js new file mode 100644 index 000000000..b10979755 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/de.js @@ -0,0 +1,5 @@ +// DE lang variables + +tinyMCE.addToLang('',{ +save_desc : 'Speichern' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/en.js b/jscripts/tiny_mce/plugins/save/langs/en.js new file mode 100644 index 000000000..2c56b4b88 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/en.js @@ -0,0 +1,5 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +save_desc : 'Save' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/es.js b/jscripts/tiny_mce/plugins/save/langs/es.js new file mode 100644 index 000000000..42d76af04 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/es.js @@ -0,0 +1,7 @@ +// ES lang variables by Alvaro Velasco and Adolfo Sanz De Diego (asanzdiego) +// Last Updated : October 2005 +// TinyMCE Version : 2.0RC3 + +tinyMCE.addToLang('',{ +save_desc : 'Salvar' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/fa.js b/jscripts/tiny_mce/plugins/save/langs/fa.js new file mode 100644 index 000000000..e99e4362a --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/fa.js @@ -0,0 +1,11 @@ +// IR lang variables +// Persian (Farsi) language pack (for IRAN) +// By: Morteza Zafari +// Lost@LostLord.com +// http://www.LostLord.com + +tinyMCE.addToLang('',{ +dir : 'rtl', +save_desc : '???' +}); + \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/save/langs/fi.js b/jscripts/tiny_mce/plugins/save/langs/fi.js new file mode 100644 index 000000000..fbffbe3ef --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/fi.js @@ -0,0 +1,5 @@ +// FI lang variables by Tuomo Aura, Ateco.fi + +tinyMCE.addToLang('',{ +save_desc : 'Tallenna' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/fr.js b/jscripts/tiny_mce/plugins/save/langs/fr.js new file mode 100644 index 000000000..20433454f --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/fr.js @@ -0,0 +1,6 @@ +// French lang variables by Laurent Dran +// Modifié par Normand Lamoureux le 2005-11-12 + +tinyMCE.addToLang('',{ +save_desc : 'Enregistrer' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/fr_ca.js b/jscripts/tiny_mce/plugins/save/langs/fr_ca.js new file mode 100644 index 000000000..4d6e912a9 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/fr_ca.js @@ -0,0 +1,6 @@ +// Canadian French lang variables by Virtuelcom last modification: 2005-06-15 + +tinyMCE.addToLang('',{ +save_desc : 'Enregistrer' +}); +, \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/save/langs/he.js b/jscripts/tiny_mce/plugins/save/langs/he.js new file mode 100644 index 000000000..fb08bb8f9 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/he.js @@ -0,0 +1,5 @@ +// HE lang variables by Liron Newman, http://eesh.net + +tinyMCE.addToLang('',{ +save_desc : 'ùîåø' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/hu.js b/jscripts/tiny_mce/plugins/save/langs/hu.js new file mode 100644 index 000000000..54b152a6e --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/hu.js @@ -0,0 +1,5 @@ +// HU lang variables + +tinyMCE.addToLang('',{ +save_desc : 'Mentés' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/is.js b/jscripts/tiny_mce/plugins/save/langs/is.js new file mode 100644 index 000000000..21ae8ce27 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/is.js @@ -0,0 +1,5 @@ +// Iceland lang variables by Johannes Birgir Jensson + +tinyMCE.addToLang('',{ +save_desc : 'Vista' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/nb.js b/jscripts/tiny_mce/plugins/save/langs/nb.js new file mode 100644 index 000000000..c599d94a3 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/nb.js @@ -0,0 +1,5 @@ +// nb = Norwegian (bokmål) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('save',{ +desc : 'Lagre' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/nl.js b/jscripts/tiny_mce/plugins/save/langs/nl.js new file mode 100644 index 000000000..7368988f4 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/nl.js @@ -0,0 +1,5 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +save_desc : 'Opslaan' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/nn.js b/jscripts/tiny_mce/plugins/save/langs/nn.js new file mode 100644 index 000000000..b6bc7ecf5 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/nn.js @@ -0,0 +1,5 @@ +// nn = Norwegian (nynorsk) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('save',{ +desc : 'Lagre' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/pl.js b/jscripts/tiny_mce/plugins/save/langs/pl.js new file mode 100644 index 000000000..96c1a7fc4 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/pl.js @@ -0,0 +1,5 @@ +// PL lang variables + +tinyMCE.addToLang('',{ +save_desc : 'Zachowaj' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/pt_br.js b/jscripts/tiny_mce/plugins/save/langs/pt_br.js new file mode 100644 index 000000000..c96f55805 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/pt_br.js @@ -0,0 +1,13 @@ +/** + * pt_br lang variables + * Brazilian Portuguese + * + * Authors : ???? + * Revision and modifications: + * Marcio Barbosa (mpg) + * Last Updated : November 26, 2005 + * TinyMCE Version : 2.0RC4 + */ +tinyMCE.addToLang('',{ +save_desc : 'Salvar' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/ru.js b/jscripts/tiny_mce/plugins/save/langs/ru.js new file mode 100644 index 000000000..c3f2c97cf --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/ru.js @@ -0,0 +1,5 @@ +// RU lang variables cp1251 + +tinyMCE.addToLang('',{ +save_desc : 'Ñîõðàíèòü' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/ru_KOI8-R.js b/jscripts/tiny_mce/plugins/save/langs/ru_KOI8-R.js new file mode 100644 index 000000000..fbd0459b3 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/ru_KOI8-R.js @@ -0,0 +1,5 @@ +// RU lang variables KOI8-R + +tinyMCE.addToLang('',{ +save_desc : 'óÏÈÒÁÎÉÔØ' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/ru_UTF-8.js b/jscripts/tiny_mce/plugins/save/langs/ru_UTF-8.js new file mode 100644 index 000000000..67600d714 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/ru_UTF-8.js @@ -0,0 +1,5 @@ +// RU lang variables UTF-8 + +tinyMCE.addToLang('',{ +save_desc : 'Сохранить' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/sk.js b/jscripts/tiny_mce/plugins/save/langs/sk.js new file mode 100644 index 000000000..7218863a4 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/sk.js @@ -0,0 +1,13 @@ +/** + * Slovak lang variables + * encoding: utf-8 + * + * @author Vladimir VASIL vvasil@post.sk + * + * $Id: sk.js,v 1.1 2005/11/22 20:56:44 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +save_desc : 'UložiÅ¥' +}); + diff --git a/jscripts/tiny_mce/plugins/save/langs/sv.js b/jscripts/tiny_mce/plugins/save/langs/sv.js new file mode 100644 index 000000000..3ddfb1f79 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/sv.js @@ -0,0 +1,5 @@ +// SV lang variables + +tinyMCE.addToLang('save',{ +desc : 'Spara' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/zh_cn.js b/jscripts/tiny_mce/plugins/save/langs/zh_cn.js new file mode 100644 index 000000000..e71cb85dd --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/zh_cn.js @@ -0,0 +1,7 @@ +// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com) +//Çë·ÃÎÊ http://www.cube316.net/ ÒÔ»ñÈ¡TinyMCEµÄÖÐÎÄÖ§³Ö + +tinyMCE.addToLang('',{ +save_desc : '±£´æ' +}); + \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/save/langs/zh_tw.js b/jscripts/tiny_mce/plugins/save/langs/zh_tw.js new file mode 100644 index 000000000..e7d9594a2 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/zh_tw.js @@ -0,0 +1,6 @@ +// Traditional Chinese BIG-5; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// ÁcÅ餤¤å BIG-5 ¡F¼Æ¦ìÀ³¥Î§{»s§@¡F twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +save_desc : '¦sÀÉ' +}); diff --git a/jscripts/tiny_mce/plugins/save/langs/zh_tw_utf8.js b/jscripts/tiny_mce/plugins/save/langs/zh_tw_utf8.js new file mode 100644 index 000000000..7a692a7c3 --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/langs/zh_tw_utf8.js @@ -0,0 +1,6 @@ +// Traditional Chinese UTF-8; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// 繁體中文 UTF-8 ;數位應用坊製作; twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +save_desc : '存檔' +}); diff --git a/jscripts/tiny_mce/plugins/save/readme.txt b/jscripts/tiny_mce/plugins/save/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/jscripts/tiny_mce/plugins/save/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js b/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js new file mode 100644 index 000000000..a78b35e06 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js @@ -0,0 +1 @@ +tinyMCE.importPluginLanguagePack('searchreplace','en,tr,sv,zh_cn,fa,fr_ca,fr,de,pl,pt_br,cs,nl,da,he,nb,hu,ru,ru_KOI8-R,ru_UTF-8,nn,fi,cy,es,is,zh_tw,zh_tw_utf8,sk');var TinyMCE_SearchReplacePlugin={getInfo:function(){return{longname:'Search/Replace',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_searchreplace.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},initInstance:function(inst){inst.addShortcut('ctrl','f','lang_searchreplace_search_desc','mceSearch',true);},getControlHTML:function(cn){switch(cn){case"search":return tinyMCE.getButtonHTML(cn,'lang_searchreplace_search_desc','{$pluginurl}/images/search.gif','mceSearch',true);case"replace":return tinyMCE.getButtonHTML(cn,'lang_searchreplace_replace_desc','{$pluginurl}/images/replace.gif','mceSearchReplace',true);}return"";},execCommand:function(editor_id,element,command,user_interface,value){var instance=tinyMCE.getInstanceById(editor_id);function defValue(key,default_value){value[key]=typeof(value[key])=="undefined"?default_value:value[key];}function replaceSel(search_str,str,back){instance.execCommand('mceInsertContent',false,str);}if(!value)value=new Array();defValue("editor_id",editor_id);defValue("searchstring","");defValue("replacestring",null);defValue("replacemode","none");defValue("casesensitive",false);defValue("backwards",false);defValue("wrap",false);defValue("wholeword",false);defValue("inline","yes");switch(command){case"mceResetSearch":tinyMCE.lastSearchRng=null;return true;case"mceSearch":if(user_interface){var template=new Array();if(value['replacestring']!=null){template['file']='../../plugins/searchreplace/replace.htm';template['width']=320;template['height']=100+(tinyMCE.isNS7?20:0);template['width']+=tinyMCE.getLang('lang_searchreplace_replace_delta_width',0);template['height']+=tinyMCE.getLang('lang_searchreplace_replace_delta_height',0);}else{template['file']='../../plugins/searchreplace/search.htm';template['width']=310;template['height']=105+(tinyMCE.isNS7?25:0);template['width']+=tinyMCE.getLang('lang_searchreplace_search_delta_width',0);template['height']+=tinyMCE.getLang('lang_searchreplace_replace_delta_height',0);}instance.execCommand('SelectAll');if(tinyMCE.isMSIE){var r=instance.selection.getRng();r.collapse(true);r.select();}else instance.selection.getSel().collapseToStart();tinyMCE.openWindow(template,value);}else{var win=tinyMCE.getInstanceById(editor_id).contentWindow;var doc=tinyMCE.getInstanceById(editor_id).contentWindow.document;var body=tinyMCE.getInstanceById(editor_id).contentWindow.document.body;if(body.innerHTML==""){alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true;}if(value['replacemode']=="current"){replaceSel(value['string'],value['replacestring'],value['backwards']);value['replacemode']="none";tinyMCE.execInstanceCommand(editor_id,'mceSearch',user_interface,value,false);return true;}if(tinyMCE.isMSIE){var rng=tinyMCE.lastSearchRng?tinyMCE.lastSearchRng:doc.selection.createRange();var flags=0;if(value['wholeword'])flags=flags|2;if(value['casesensitive'])flags=flags|4;if(!rng.findText){alert('This operation is currently not supported by this browser.');return true;}if(value['replacemode']=="all"){while(rng.findText(value['string'],value['backwards']?-1:1,flags)){rng.scrollIntoView();rng.select();rng.collapse(false);replaceSel(value['string'],value['replacestring'],value['backwards']);}alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));return true;}if(rng.findText(value['string'],value['backwards']?-1:1,flags)){rng.scrollIntoView();rng.select();rng.collapse(value['backwards']);tinyMCE.lastSearchRng=rng;}else alert(tinyMCE.getLang('lang_searchreplace_notfound'));}else{if(value['replacemode']=="all"){while(win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false))replaceSel(value['string'],value['replacestring'],value['backwards']);alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));return true;}if(!win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false))alert(tinyMCE.getLang('lang_searchreplace_notfound'));}}return true;case"mceSearchReplace":value['replacestring']="";tinyMCE.execInstanceCommand(editor_id,'mceSearch',user_interface,value,false);return true;}return false;}};tinyMCE.addPlugin("searchreplace",TinyMCE_SearchReplacePlugin); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js b/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js new file mode 100644 index 000000000..eed96db9e --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js @@ -0,0 +1,185 @@ +/** + * $RCSfile: editor_plugin_src.js,v $ + * $Revision: 1.27 $ + * $Date: 2006/02/13 15:09:28 $ + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +/* Import theme specific language pack */ +tinyMCE.importPluginLanguagePack('searchreplace', 'en,tr,sv,zh_cn,fa,fr_ca,fr,de,pl,pt_br,cs,nl,da,he,nb,hu,ru,ru_KOI8-R,ru_UTF-8,nn,fi,cy,es,is,zh_tw,zh_tw_utf8,sk'); + +var TinyMCE_SearchReplacePlugin = { + getInfo : function() { + return { + longname : 'Search/Replace', + author : 'Moxiecode Systems', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_searchreplace.html', + version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion + }; + }, + + initInstance : function(inst) { + inst.addShortcut('ctrl', 'f', 'lang_searchreplace_search_desc', 'mceSearch', true); + }, + + getControlHTML : function(cn) { + switch (cn) { + case "search": + return tinyMCE.getButtonHTML(cn, 'lang_searchreplace_search_desc', '{$pluginurl}/images/search.gif', 'mceSearch', true); + case "replace": + return tinyMCE.getButtonHTML(cn, 'lang_searchreplace_replace_desc', '{$pluginurl}/images/replace.gif', 'mceSearchReplace', true); + } + return ""; + }, + + /** + * Executes the search/replace commands. + */ + execCommand : function(editor_id, element, command, user_interface, value) { + var instance = tinyMCE.getInstanceById(editor_id); + + function defValue(key, default_value) { + value[key] = typeof(value[key]) == "undefined" ? default_value : value[key]; + } + + function replaceSel(search_str, str, back) { + instance.execCommand('mceInsertContent', false, str); + } + + if (!value) + value = new Array(); + + // Setup defualt values + defValue("editor_id", editor_id); + defValue("searchstring", ""); + defValue("replacestring", null); + defValue("replacemode", "none"); + defValue("casesensitive", false); + defValue("backwards", false); + defValue("wrap", false); + defValue("wholeword", false); + defValue("inline", "yes"); + + // Handle commands + switch (command) { + case "mceResetSearch": + tinyMCE.lastSearchRng = null; + return true; + + case "mceSearch": + if (user_interface) { + // Open search dialog + var template = new Array(); + + if (value['replacestring'] != null) { + template['file'] = '../../plugins/searchreplace/replace.htm'; // Relative to theme + template['width'] = 320; + template['height'] = 100 + (tinyMCE.isNS7 ? 20 : 0); + template['width'] += tinyMCE.getLang('lang_searchreplace_replace_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_searchreplace_replace_delta_height', 0); + } else { + template['file'] = '../../plugins/searchreplace/search.htm'; // Relative to theme + template['width'] = 310; + template['height'] = 105 + (tinyMCE.isNS7 ? 25 : 0); + template['width'] += tinyMCE.getLang('lang_searchreplace_search_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_searchreplace_replace_delta_height', 0); + } + + instance.execCommand('SelectAll'); + + if (tinyMCE.isMSIE) { + var r = instance.selection.getRng(); + r.collapse(true); + r.select(); + } else + instance.selection.getSel().collapseToStart(); + + tinyMCE.openWindow(template, value); + } else { + var win = tinyMCE.getInstanceById(editor_id).contentWindow; + var doc = tinyMCE.getInstanceById(editor_id).contentWindow.document; + var body = tinyMCE.getInstanceById(editor_id).contentWindow.document.body; + + // Whats the point + if (body.innerHTML == "") { + alert(tinyMCE.getLang('lang_searchreplace_notfound')); + return true; + } + + // Handle replace current + if (value['replacemode'] == "current") { + replaceSel(value['string'], value['replacestring'], value['backwards']); + + // Search next one + value['replacemode'] = "none"; + tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value, false); + + return true; + } + + if (tinyMCE.isMSIE) { + var rng = tinyMCE.lastSearchRng ? tinyMCE.lastSearchRng : doc.selection.createRange(); + var flags = 0; + + if (value['wholeword']) + flags = flags | 2; + + if (value['casesensitive']) + flags = flags | 4; + + if (!rng.findText) { + alert('This operation is currently not supported by this browser.'); + return true; + } + + // Handle replace all mode + if (value['replacemode'] == "all") { + while (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) { + rng.scrollIntoView(); + rng.select(); + rng.collapse(false); + replaceSel(value['string'], value['replacestring'], value['backwards']); + } + + alert(tinyMCE.getLang('lang_searchreplace_allreplaced')); + return true; + } + + if (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) { + rng.scrollIntoView(); + rng.select(); + rng.collapse(value['backwards']); + tinyMCE.lastSearchRng = rng; + } else + alert(tinyMCE.getLang('lang_searchreplace_notfound')); + } else { + if (value['replacemode'] == "all") { + while (win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false)) + replaceSel(value['string'], value['replacestring'], value['backwards']); + + alert(tinyMCE.getLang('lang_searchreplace_allreplaced')); + return true; + } + + if (!win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false)) + alert(tinyMCE.getLang('lang_searchreplace_notfound')); + } + } + return true; + + case "mceSearchReplace": + value['replacestring'] = ""; + + tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value, false); + return true; + } + + // Pass to next handler in chain + return false; + } +}; + +tinyMCE.addPlugin("searchreplace", TinyMCE_SearchReplacePlugin); diff --git a/jscripts/tiny_mce/plugins/searchreplace/images/replace.gif b/jscripts/tiny_mce/plugins/searchreplace/images/replace.gif new file mode 100644 index 0000000000000000000000000000000000000000..784c73e2a9bb6cf369146a5ea6b1300262376eed GIT binary patch literal 125 zcmZ?wbhEHb6k!ly*u=`<>+5Tf@nG4qWeF2LOxW<@_Kk}SV4(Pug^_`QjX?**1F23Thj{dMSt5;y`fuDmH}Uz$g$9N~Xo|, + * Carlos C Soto (eclipxe) + * Last Updated : October 17, 2005 + * TinyMCE Version : 2.0RC3 + */ + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Buscar', +searchreplace_searchnext_desc : 'Buscar de nuevo', +searchreplace_replace_desc : 'Buscar/Replazar', +searchreplace_notfound : 'La búsqueda ha terminado. No se ha encontrado el elemento buscado.', +searchreplace_search_title : 'Buscar', +searchreplace_replace_title : 'Buscar/Replazar', +searchreplace_allreplaced : 'Todas las ocurrencias del elemento buscado han sido remplazadas.', +searchreplace_findwhat : 'Buscar', +searchreplace_replacewith : 'Replazar con', +searchreplace_direction : 'Dirección', +searchreplace_up : 'Arriba', +searchreplace_down : 'Abajo', +searchreplace_case : 'Búsqueda exacta (mayúsculas y minúsculas)', +searchreplace_findnext : 'Buscar siguiente', +searchreplace_replace : 'Replazar', +searchreplace_replaceall : 'Replazar todo', +searchreplace_cancel : 'Cancelar', +searchreplace_replace_delta_width : 70 +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/fa.js b/jscripts/tiny_mce/plugins/searchreplace/langs/fa.js new file mode 100644 index 000000000..4aa5cc852 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/fa.js @@ -0,0 +1,26 @@ +// IR lang variables +// Persian (Farsi) language pack (for IRAN) +// By: Morteza Zafari +// Lost@LostLord.com +// http://www.LostLord.com + +tinyMCE.addToLang('',{ +dir : 'rtl', +searchreplace_search_desc : '?????', +searchreplace_searchnext_desc : '?????? ????', +searchreplace_replace_desc : '?????/????????', +searchreplace_notfound : '????? ????? ????. ??? ????? ???? ???.', +searchreplace_search_title : '?????', +searchreplace_replace_title : '?????/????????', +searchreplace_allreplaced : '??? ????? ??????? ?????.', +searchreplace_findwhat : '????? ?? ?????', +searchreplace_replacewith : '???????? ??', +searchreplace_direction : '??? ?????', +searchreplace_up : '?? ??? ????', +searchreplace_down : '?? ??? ?????', +searchreplace_case : '????? ???? ???? ? ????', +searchreplace_findnext : '????-????', +searchreplace_replace : '???????-??', +searchreplace_replaceall : '????????-???', +searchreplace_cancel : '??????' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/fi.js b/jscripts/tiny_mce/plugins/searchreplace/langs/fi.js new file mode 100644 index 000000000..2462e3e3b --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/fi.js @@ -0,0 +1,21 @@ +// FI lang variables by Tuomo Aura, Ateco.fi + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Etsi', +searchreplace_searchnext_desc : 'Etsi uudelleen', +searchreplace_replace_desc : 'Etsi/Korvaa', +searchreplace_notfound : 'Haku on päättynyt. Haettua merkkijonoa ei löytynyt.', +searchreplace_search_title : 'Etsi', +searchreplace_replace_title : 'Etsi/Korvaa', +searchreplace_allreplaced : 'Kaikki esiintyneet hakutermit korvattiin.', +searchreplace_findwhat : 'Etsittävä', +searchreplace_replacewith : 'Korvaava', +searchreplace_direction : 'Suunta', +searchreplace_up : 'Ylös', +searchreplace_down : 'Alas', +searchreplace_case : 'Sama kirjainkoko', +searchreplace_findnext : 'Etsi seuraava', +searchreplace_replace : 'Korvaa', +searchreplace_replaceall : 'Korvaa kaikki', +searchreplace_cancel : 'Peruuta' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/fr.js b/jscripts/tiny_mce/plugins/searchreplace/langs/fr.js new file mode 100644 index 000000000..2aa3d110e --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/fr.js @@ -0,0 +1,22 @@ +// Franch lang variables by Laurent Dran +// Modifié par Normand Lamoureux le 2005-11-12 + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Rehercher', +searchreplace_searchnext_desc : 'Rehercher suivant', +searchreplace_replace_desc : 'Rechercher/Remplacer', +searchreplace_notfound : 'Recherche complétée. La fin du document a été atteinte.', +searchreplace_search_title : 'Rechercher', +searchreplace_replace_title : 'Rechercher/Remplacer', +searchreplace_allreplaced : 'Action terminée avec succès. Les remplacements\nont été faits dans l\'ensemble du document.', +searchreplace_findwhat : 'Trouver le mot', +searchreplace_replacewith : 'Remplacer avec', +searchreplace_direction : 'Direction', +searchreplace_up : 'Vers le haut', +searchreplace_down : 'Vers le bas', +searchreplace_case : 'Respecter la casse', +searchreplace_findnext : 'Suivant', +searchreplace_replace : 'Remplacer', +searchreplace_replaceall : 'Remplacer tout', +searchreplace_cancel : 'Annuler' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/fr_ca.js b/jscripts/tiny_mce/plugins/searchreplace/langs/fr_ca.js new file mode 100644 index 000000000..09485ca09 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/fr_ca.js @@ -0,0 +1,21 @@ +// Canadian French lang variables by Virtuelcom last modification: 2005-06-15 + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Chercher', +searchreplace_searchnext_desc : 'Chercher suivant', +searchreplace_replace_desc : 'Chercher/Remplacer', +searchreplace_notfound : 'La recherche est terminée. Aucune occurence trouvée.', +searchreplace_search_title : 'Chercher', +searchreplace_replace_title : 'Chercher/Remplacer', +searchreplace_allreplaced : 'Toutes les occurences ont été remplacées.', +searchreplace_findwhat : 'Chercher quoi', +searchreplace_replacewith : 'Remplacer par', +searchreplace_direction : 'Direction', +searchreplace_up : 'Monter', +searchreplace_down : 'Descendre', +searchreplace_case : 'Sensible à la case', +searchreplace_findnext : 'Chercher ,suivant', +searchreplace_replace : 'Remplacer', +searchreplace_replaceall : 'Remplacer ,tous', +searchreplace_cancel : 'Annuler' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/he.js b/jscripts/tiny_mce/plugins/searchreplace/langs/he.js new file mode 100644 index 000000000..fdac48d0e --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/he.js @@ -0,0 +1,21 @@ +// HE lang variables by Liron Newman, http://eesh.net + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'çôù', +searchreplace_searchnext_desc : 'çôù ùåá', +searchreplace_replace_desc : 'çôù/äçìó', +searchreplace_notfound : 'äçéôåù äåùìí. îçøåæú äçéôåù ìà ðîöàä.', +searchreplace_search_title : 'çôù', +searchreplace_replace_title : 'çôù/äçìó', +searchreplace_allreplaced : 'îçøåæú äçéôåù äåçìôä áëì î÷åí áå äéà ðîöàä.', +searchreplace_findwhat : 'îä ìçôù', +searchreplace_replacewith : 'ìäçìéó á-', +searchreplace_direction : 'ëéååï', +searchreplace_up : 'ìîòìä', +searchreplace_down : 'ìîèä', +searchreplace_case : 'äúàí âåãì àåúéåú', +searchreplace_findnext : 'îöà àú äáà', +searchreplace_replace : 'äçìó', +searchreplace_replaceall : 'äçìó äëì', +searchreplace_cancel : 'áèì' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/hu.js b/jscripts/tiny_mce/plugins/searchreplace/langs/hu.js new file mode 100644 index 000000000..0b4690d7a --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/hu.js @@ -0,0 +1,21 @@ +// HU lang variables + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Keresés', +searchreplace_searchnext_desc : 'Újra keresés', +searchreplace_replace_desc : 'Keres/Cserél', +searchreplace_notfound : 'A keresés elkészült. A keresési szöveg nem található.', +searchreplace_search_title : 'Keres', +searchreplace_replace_title : 'Keres/Cserél', +searchreplace_allreplaced : 'A kereséséi szöveg minden elõfordulása cserélve lett.', +searchreplace_findwhat : 'Mit keres', +searchreplace_replacewith : 'Mire cserél', +searchreplace_direction : 'Hatókör', +searchreplace_up : 'Fel', +searchreplace_down : 'Le', +searchreplace_case : 'Teljes szó', +searchreplace_findnext : 'Következõt keres', +searchreplace_replace : 'Cserél', +searchreplace_replaceall : 'Mindent cserél', +searchreplace_cancel : 'Mégse' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/is.js b/jscripts/tiny_mce/plugins/searchreplace/langs/is.js new file mode 100644 index 000000000..d7ab67241 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/is.js @@ -0,0 +1,22 @@ +// Iceland lang variables by Johannes Birgir Jensson + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Finna', +searchreplace_searchnext_desc : 'Finna aftur', +searchreplace_replace_desc : 'Finna/skipta', +searchreplace_notfound : 'Leit er lokið. Leitarorð fannst ekki.', +searchreplace_search_title : 'Finna', +searchreplace_replace_title : 'Finna/skipta', +searchreplace_allreplaced : 'Skipt var um öll tilvik.', +searchreplace_findwhat : 'Finna hvar', +searchreplace_replacewith : 'Skipta út fyrir ', +searchreplace_direction : 'Átt', +searchreplace_up : 'Upp', +searchreplace_down : 'Niður', +searchreplace_case : 'Passa há-/lágstafi', +searchreplace_findnext : 'Finna næst', +searchreplace_replace : 'Skipta', +searchreplace_replaceall : 'Skipta öllum', +searchreplace_cancel : 'Hætta við', +searchreplace_replace_delta_width : 30 +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/nb.js b/jscripts/tiny_mce/plugins/searchreplace/langs/nb.js new file mode 100644 index 000000000..91109471d --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/nb.js @@ -0,0 +1,21 @@ +// nb = Norwegian (bokmål) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Søk', +searchreplace_searchnext_desc : 'Søk igjen', +searchreplace_replace_desc : 'Søk/Erstatt', +searchreplace_notfound : 'Søkingen avsluttet. Fant ikke søkestrengen.', +searchreplace_search_title : 'Søk', +searchreplace_replace_title : 'Søk/Erstatt', +searchreplace_allreplaced : 'Alle treff på søkestrengen erstattes', +searchreplace_findwhat : 'Søk på', +searchreplace_replacewith : 'Erstatt med', +searchreplace_direction : 'Søkeretning', +searchreplace_up : 'Oppover', +searchreplace_down : 'Nedover', +searchreplace_case : 'Skill mellom store og små tegn', +searchreplace_findnext : 'Neste søk', +searchreplace_replace : 'Erstatt', +searchreplace_replaceall : 'Erstatt alle', +searchreplace_cancel : 'Avbryt' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/nl.js b/jscripts/tiny_mce/plugins/searchreplace/langs/nl.js new file mode 100644 index 000000000..b3fe53760 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/nl.js @@ -0,0 +1,21 @@ +// NL lang variables + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Zoeken', +searchreplace_searchnext_desc : 'Opnieuw zoeken', +searchreplace_replace_desc : 'Zoeken/Vervangen', +searchreplace_notfound : 'Het doorzoeken van document is voltooid. De gezochte tekst is niet gevonden.', +searchreplace_search_title : 'Zoeken', +searchreplace_replace_title : 'Zoeken/Vervangen', +searchreplace_allreplaced : 'Alle zoekargumenten werden vervangen.', +searchreplace_findwhat : 'Zoeken naar', +searchreplace_replacewith : 'Vervangen door', +searchreplace_direction : 'Richting', +searchreplace_up : 'Omhoog', +searchreplace_down : 'Omlaag', +searchreplace_case : 'Identieke hoofdletters/kleine letters', +searchreplace_findnext : 'Volgende zoeken', +searchreplace_replace : 'Vervangen', +searchreplace_replaceall : 'Alles vervangen', +searchreplace_cancel : 'Annuleren' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/nn.js b/jscripts/tiny_mce/plugins/searchreplace/langs/nn.js new file mode 100644 index 000000000..626e940ac --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/nn.js @@ -0,0 +1,21 @@ +// nn = Norwegian (nynorsk) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Søk', +searchreplace_searchnext_desc : 'Søk igjen', +searchreplace_replace_desc : 'Søk/Erstatt', +searchreplace_notfound : 'Søkingen avsluttet. Fant ikkje søkestrengen.', +searchreplace_search_title : 'Søk', +searchreplace_replace_title : 'Søk/Erstatt', +searchreplace_allreplaced : 'Alle treff på søkestrengen erstattes', +searchreplace_findwhat : 'Søk på', +searchreplace_replacewith : 'Erstatt med', +searchreplace_direction : 'Søkeretning', +searchreplace_up : 'Oppover', +searchreplace_down : 'Nedover', +searchreplace_case : 'Skill mellom store og små tegn', +searchreplace_findnext : 'Neste søk', +searchreplace_replace : 'Erstatt', +searchreplace_replaceall : 'Erstatt alle', +searchreplace_cancel : 'Avbryt' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/pl.js b/jscripts/tiny_mce/plugins/searchreplace/langs/pl.js new file mode 100644 index 000000000..5f4dae2ef --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/pl.js @@ -0,0 +1,23 @@ +// PL lang variables +// fixed by Wooya +// http://www.mfusion.prv.pl + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Znajd¼', +searchreplace_searchnext_desc : 'Znajd¼ ponownie', +searchreplace_replace_desc : 'Znajd¼/Zast±p', +searchreplace_notfound : 'Ukoñczono wyszukiwanie. Poszukiwana fraza nie zosta³a odnaleziona.', +searchreplace_search_title : 'Znajd¼', +searchreplace_replace_title : 'Znajd¼/Zast±p', +searchreplace_allreplaced : 'Wszystkie wyst±pienia poszukiwanej frazy zosta³y zast±pione. ', +searchreplace_findwhat : 'Znajd¼', +searchreplace_replacewith : 'Zast±p', +searchreplace_direction : 'Kierunek', +searchreplace_up : 'Do góry', +searchreplace_down : 'Do do³u', +searchreplace_case : 'Wielko¶æ liter', +searchreplace_findnext : 'Znajd¼ nastêpny', +searchreplace_replace : 'Zast±p', +searchreplace_replaceall : 'Zast±p wszystkie', +searchreplace_cancel : 'Wyjd¼' +}); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/pt_br.js b/jscripts/tiny_mce/plugins/searchreplace/langs/pt_br.js new file mode 100644 index 000000000..d30fd1cb2 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/pt_br.js @@ -0,0 +1,29 @@ +/** + * pt_br lang variables + * Brazilian Portuguese + * + * Authors : ???? + * Revision and modifications: + * Marcio Barbosa (mpg) + * Last Updated : November 26, 2005 + * TinyMCE Version : 2.0RC4 + */ +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Procurar', +searchreplace_searchnext_desc : 'Procurar novamente', +searchreplace_replace_desc : 'Procurar/Substituir', +searchreplace_notfound : 'A procura foi concluída. A expressão procurada não foi encontrada.', +searchreplace_search_title : 'Procurar', +searchreplace_replace_title : 'Procurar/Substituir', +searchreplace_allreplaced : 'Todas as ocorrências encontradas foram substituídas.', +searchreplace_findwhat : 'Procurar por', +searchreplace_replacewith : 'Substituir com', +searchreplace_direction : 'Direção', +searchreplace_up : 'Acima', +searchreplace_down : 'Abaixo', +searchreplace_case : 'Procurar exatamente', +searchreplace_findnext : 'Procurar ,próxima', +searchreplace_replace : 'Substituir', +searchreplace_replaceall : 'Substituir ,tudo', +searchreplace_cancel : 'Cancelar' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/ru.js b/jscripts/tiny_mce/plugins/searchreplace/langs/ru.js new file mode 100644 index 000000000..22fbd597e --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/ru.js @@ -0,0 +1,22 @@ +// RU cp1251 lang variables + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Íàéòè', +searchreplace_searchnext_desc : 'Íàéòè îïÿòü', +searchreplace_replace_desc : 'Íàéòè/Çàìåíèòü', +searchreplace_notfound : 'Ïîèñê çàâåðø¸í. Èñêîìîå âûðàæåíèå íå íàéäåíî.', +searchreplace_search_title : 'Íàéòè', +searchreplace_replace_title : 'Íàéòè/Çàìåíèòü', +searchreplace_allreplaced : 'Çàìåíà áûëà âûïîëíåíà âî âñåõ ñëó÷àÿõ ñîâïàäåíèÿ èñêîìîãî âûðàæåíèÿ.', +searchreplace_findwhat : 'Íàéòè ÷òî', +searchreplace_replacewith : 'Çàìåíèòü ÷åì', +searchreplace_direction : 'Íàïðàâëåíèå', +searchreplace_up : 'Ââåðõ', +searchreplace_down : 'Âíèç', +searchreplace_case : 'Ñ ó÷¸òîì ðåãèñòðà', +searchreplace_findnext : 'Íàéòè ñëåäóþùåå', +searchreplace_replace : 'Çàìåíèòü', +searchreplace_replaceall : 'Çàìåíèòü âåçäå', +searchreplace_cancel : 'Îòìåíèòü', +searchreplace_replace_delta_width : 150 +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/ru_KOI8-R.js b/jscripts/tiny_mce/plugins/searchreplace/langs/ru_KOI8-R.js new file mode 100644 index 000000000..01b0ac361 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/ru_KOI8-R.js @@ -0,0 +1,21 @@ +// RU KOI8-R lang variables + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'îÁÊÔÉ', +searchreplace_searchnext_desc : 'îÁÊÔÉ ÏÐÑÔØ', +searchreplace_replace_desc : 'îÁÊÔÉ/úÁÍÅÎÉÔØ', +searchreplace_notfound : 'ðÏÉÓË ÚÁ×ÅÒÛ£Î. éÓËÏÍÏÅ ×ÙÒÁÖÅÎÉÅ ÎÅ ÎÁÊÄÅÎÏ.', +searchreplace_search_title : 'îÁÊÔÉ', +searchreplace_replace_title : 'îÁÊÔÉ/úÁÍÅÎÉÔØ', +searchreplace_allreplaced : 'úÁÍÅÎÁ ÂÙÌÁ ×ÙÐÏÌÎÅÎÁ ×Ï ×ÓÅÈ ÓÌÕÞÁÑÈ ÓÏ×ÐÁÄÅÎÉÑ ÉÓËÏÍÏÇÏ ×ÙÒÁÖÅÎÉÑ.', +searchreplace_findwhat : 'îÁÊÔÉ ÞÔÏ', +searchreplace_replacewith : 'úÁÍÅÎÉÔØ ÞÅÍ', +searchreplace_direction : 'îÁÐÒÁ×ÌÅÎÉÅ', +searchreplace_up : '÷×ÅÒÈ', +searchreplace_down : '÷ÎÉÚ', +searchreplace_case : 'ó ÕÞ£ÔÏÍ ÒÅÇÉÓÔÒÁ', +searchreplace_findnext : 'îÁÊÔÉ ÓÌÅÄÕÀÝÅÅ', +searchreplace_replace : 'úÁÍÅÎÉÔØ', +searchreplace_replaceall : 'úÁÍÅÎÉÔØ ×ÅÚÄÅ', +searchreplace_cancel : 'ïÔÍÅÎÉÔØ' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/ru_UTF-8.js b/jscripts/tiny_mce/plugins/searchreplace/langs/ru_UTF-8.js new file mode 100644 index 000000000..cf78f42b0 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/ru_UTF-8.js @@ -0,0 +1,21 @@ +// RU UTF-8 lang variables + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Найти', +searchreplace_searchnext_desc : 'Найти опять', +searchreplace_replace_desc : 'Найти/Заменить', +searchreplace_notfound : 'Поиск завершён. Искомое выражение не найдено.', +searchreplace_search_title : 'Найти', +searchreplace_replace_title : 'Найти/Заменить', +searchreplace_allreplaced : 'Замена была выполнена во всех случаях совпадения искомого выражения.', +searchreplace_findwhat : 'Найти что', +searchreplace_replacewith : 'Заменить чем', +searchreplace_direction : 'Направление', +searchreplace_up : 'Вверх', +searchreplace_down : 'Вниз', +searchreplace_case : 'С учётом регистра', +searchreplace_findnext : 'Найти ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÐµÐµ', +searchreplace_replace : 'Заменить', +searchreplace_replaceall : 'Заменить Ð²ÐµÐ·Ð´Ðµ', +searchreplace_cancel : 'Отменить' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/sk.js b/jscripts/tiny_mce/plugins/searchreplace/langs/sk.js new file mode 100644 index 000000000..87ade05ce --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/sk.js @@ -0,0 +1,29 @@ +/** + * Slovak lang variables + * encoding: utf-8 + * + * @author Vladimir VASIL vvasil@post.sk + * + * $Id: sk.js,v 1.1 2005/11/22 20:56:44 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Nájdi', +searchreplace_searchnext_desc : 'Nájdi znova', +searchreplace_replace_desc : 'Nájdi/NahradiÅ¥', +searchreplace_notfound : 'Vyhľadávanie ukončené. ReÅ¥azec nemusel byÅ¥ nájdený.', +searchreplace_search_title : 'Nájdi', +searchreplace_replace_title : 'Nájdi/NahradiÅ¥', +searchreplace_allreplaced : 'VÅ¡etky výskyty reÅ¥azca boly zmenené.', +searchreplace_findwhat : 'NájsÅ¥', +searchreplace_replacewith : 'NahradiÅ¥', +searchreplace_direction : 'Smer', +searchreplace_up : 'Nahor', +searchreplace_down : 'Dole', +searchreplace_case : 'Presná shoda', +searchreplace_findnext : 'Nájdi Äalší', +searchreplace_replace : 'NahradiÅ¥', +searchreplace_replaceall : 'NahradiÅ¥ vÅ¡etko', +searchreplace_cancel : 'ZruÅ¡iÅ¥' +}); + diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/sv.js b/jscripts/tiny_mce/plugins/searchreplace/langs/sv.js new file mode 100644 index 000000000..f69f44af9 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/sv.js @@ -0,0 +1,21 @@ +// SE lang variables + +tinyMCE.addToLang('',{ +searchreplace_search_desc : 'Sök', +searchreplace_searchnext_desc : 'Sök igen', +searchreplace_replace_desc : 'Sök/Ersätt', +searchreplace_notfound : 'Sökningen är slutförd. Söksträngen kunde inte hittas.', +searchreplace_search_title : 'Sök', +searchreplace_replace_title : 'Sök/Ersätt', +searchreplace_allreplaced : 'Alla träffar på söksträngen ersattes', +searchreplace_findwhat : 'Sök på', +searchreplace_replacewith : 'Ersätt med', +searchreplace_direction : 'Sökriktning', +searchreplace_up : 'Uppåt', +searchreplace_down : 'Neråt', +searchreplace_case : 'Matcha gemener/VERSALER', +searchreplace_findnext : 'Sök nästa', +searchreplace_replace : 'Ersätt', +searchreplace_replaceall : 'Ersätt alla', +searchreplace_cancel : 'Avbryt' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/zh_cn.js b/jscripts/tiny_mce/plugins/searchreplace/langs/zh_cn.js new file mode 100644 index 000000000..28be76c7e --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/zh_cn.js @@ -0,0 +1,21 @@ +// Simplified Chinese lang variables contributed by tom_cat (thomaswangyang@gmail.com) + +tinyMCE.addToLang('',{ +searchreplace_search_desc : '²éÕÒ', +searchreplace_searchnext_desc : 'ÔٴβéÕÒ', +searchreplace_replace_desc : '²éÕÒ/Ìæ»»', +searchreplace_notfound : 'ËÑË÷Íê±Ï£¬Ã»ÓÐÕÒµ½Òª²éÕÒµÄ×Ö·û´®¡£', +searchreplace_search_title : '²éÕÒ', +searchreplace_replace_title : '²éÕÒ/Ìæ»»', +searchreplace_allreplaced : 'ËùÓзûºÏÌõ¼þµÄ×Ö·û´®ÒÑÌæ»»Íê±Ï¡£', +searchreplace_findwhat : '²éÕÒ', +searchreplace_replacewith : 'Ì滻Ϊ', +searchreplace_direction : '·½Ïò', +searchreplace_up : 'ÏòÉÏ', +searchreplace_down : 'ÏòÏÂ', +searchreplace_case : 'Æ¥Åä´óСд', +searchreplace_findnext : '²éÕÒÏÂÒ»¸ö', +searchreplace_replace : 'Ìæ»»', +searchreplace_replaceall : 'È«²¿Ìæ»»', +searchreplace_cancel : 'È¡Ïû' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/zh_tw.js b/jscripts/tiny_mce/plugins/searchreplace/langs/zh_tw.js new file mode 100644 index 000000000..282046304 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/zh_tw.js @@ -0,0 +1,22 @@ +// Traditional Chinese BIG-5; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// ÁcÅ餤¤å BIG-5 ¡F¼Æ¦ìÀ³¥Î§{»s§@¡F twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +searchreplace_search_desc : '¬d¸ß', +searchreplace_searchnext_desc : '¦A¦¸¬d¸ß', +searchreplace_replace_desc : '¬d¸ß©Î´À´«', +searchreplace_notfound : '¤w§¹¦¨¬d¸ß¡C¨S§ä¨ì«ü©wªº¦r¦ê¡C', +searchreplace_search_title : '¬d¸ß', +searchreplace_replace_title : '¬d¸ß©Î´À´«', +searchreplace_allreplaced : '©Ò¦³§ä¨ìªº¦r¦ê¤w§¹¦¨´À´«', +searchreplace_findwhat : '§ä¤°»ò', +searchreplace_replacewith : '´À´«¦¨', +searchreplace_direction : '¤è¦V', +searchreplace_up : '©¹¤W', +searchreplace_down : '¦V¤U', +searchreplace_case : '¬Û²Åµ²ªG', +searchreplace_findnext : '¬d¸ß¤U­Ó', +searchreplace_replace : '´À´«', +searchreplace_replaceall : '¥þ³¡´À´«', +searchreplace_cancel : '¨ú®ø' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/langs/zh_tw_utf8.js b/jscripts/tiny_mce/plugins/searchreplace/langs/zh_tw_utf8.js new file mode 100644 index 000000000..91376f359 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/langs/zh_tw_utf8.js @@ -0,0 +1,22 @@ +// Traditional Chinese UTF-8; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// 繁體中文 UTF-8 ;數位應用坊製作; twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +searchreplace_search_desc : '查詢', +searchreplace_searchnext_desc : '再次查詢', +searchreplace_replace_desc : '查詢或替換', +searchreplace_notfound : '已完成查詢。沒找到指定的字串。', +searchreplace_search_title : '查詢', +searchreplace_replace_title : '查詢或替換', +searchreplace_allreplaced : '所有找到的字串已完成替換', +searchreplace_findwhat : '找什麼', +searchreplace_replacewith : '替換成', +searchreplace_direction : '方向', +searchreplace_up : '往上', +searchreplace_down : '向下', +searchreplace_case : '相符結果', +searchreplace_findnext : '查詢下個', +searchreplace_replace : '替換', +searchreplace_replaceall : '全部替換', +searchreplace_cancel : '取消' +}); diff --git a/jscripts/tiny_mce/plugins/searchreplace/readme.txt b/jscripts/tiny_mce/plugins/searchreplace/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/jscripts/tiny_mce/plugins/searchreplace/replace.htm b/jscripts/tiny_mce/plugins/searchreplace/replace.htm new file mode 100644 index 000000000..0629da334 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/replace.htm @@ -0,0 +1,49 @@ + + + {$lang_searchreplace_replace_title} + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + + +
    +
    + + diff --git a/jscripts/tiny_mce/plugins/searchreplace/search.htm b/jscripts/tiny_mce/plugins/searchreplace/search.htm new file mode 100644 index 000000000..fe9055ed5 --- /dev/null +++ b/jscripts/tiny_mce/plugins/searchreplace/search.htm @@ -0,0 +1,42 @@ + + + {$lang_searchreplace_search_title} + + + + + +
    + + + + + + + + + + +
     
    + + + + + + + +
    + + + + +
    + + + + + +
    +
    + + diff --git a/jscripts/tiny_mce/plugins/style/css/props.css b/jscripts/tiny_mce/plugins/style/css/props.css new file mode 100644 index 000000000..3b2e33d77 --- /dev/null +++ b/jscripts/tiny_mce/plugins/style/css/props.css @@ -0,0 +1,63 @@ +#text_font { + width: 250px; +} + +#text_size { + width: 70px; +} + +.mceAddSelectValue { + background-color: #DDDDDD; +} + +select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left { + width: 70px; +} + +#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex { + width: 70px; +} + +#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left { + width: 70px; +} + +#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left { + width: 70px; +} + +.panel_wrapper div.current { + padding-top: 10px; + height: 230px; +} + +.delim { + b2ackground-color: #DDDDDD; + border-left: 1px solid gray; +} + +.tdelim { + border-bottom: 1px solid gray; +} + +#block_display { + width: 145px; +} + +#list_type { + width: 115px; +} + +.disabled { + background-color: #EEEEEE; +} + +#apply { + font-weight: bold; + width: 78px; + height: 21px; + border: 0; + background-image: url('../images/apply_button_bg.gif'); + cursor: pointer; +} + diff --git a/jscripts/tiny_mce/plugins/style/editor_plugin.js b/jscripts/tiny_mce/plugins/style/editor_plugin.js new file mode 100644 index 000000000..e5a33dc9d --- /dev/null +++ b/jscripts/tiny_mce/plugins/style/editor_plugin.js @@ -0,0 +1 @@ +tinyMCE.importPluginLanguagePack('style','en');var TinyMCE_StylePlugin={getInfo:function(){return{longname:'Style',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_style.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},getControlHTML:function(cn){switch(cn){case"styleprops":return tinyMCE.getButtonHTML(cn,'lang_style_styleinfo_desc','{$pluginurl}/images/style_info.gif','mceStyleProps',true);}return"";},execCommand:function(editor_id,element,command,user_interface,value){var e,inst;switch(command){case"mceStyleProps":TinyMCE_StylePlugin._styleProps();return true;case"mceSetElementStyle":inst=tinyMCE.getInstanceById(editor_id);e=inst.selection.getFocusElement();if(e){e.style.cssText=value;inst.repaint();}return true;}return false;},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){},_styleProps:function(){var e=tinyMCE.selectedInstance.selection.getFocusElement();if(!e)return;tinyMCE.openWindow({file:'../../plugins/style/props.htm',width:480+tinyMCE.getLang('lang_style_props_delta_width',0),height:320+tinyMCE.getLang('lang_style_props_delta_height',0)},{editor_id:tinyMCE.selectedInstance.editorId,inline:"yes",style_text:e.style.cssText});}};tinyMCE.addPlugin("style",TinyMCE_StylePlugin); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/style/editor_plugin_src.js b/jscripts/tiny_mce/plugins/style/editor_plugin_src.js new file mode 100644 index 000000000..27ba20ee8 --- /dev/null +++ b/jscripts/tiny_mce/plugins/style/editor_plugin_src.js @@ -0,0 +1,81 @@ +/** + * $RCSfile: editor_plugin_src.js,v $ + * $Revision: 1.1 $ + * $Date: 2006/05/03 10:46:42 $ + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +/* Import plugin specific language pack */ +tinyMCE.importPluginLanguagePack('style', 'en'); + +var TinyMCE_StylePlugin = { + getInfo : function() { + return { + longname : 'Style', + author : 'Moxiecode Systems', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_style.html', + version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion + }; + }, + + getControlHTML : function(cn) { + switch (cn) { + case "styleprops": + return tinyMCE.getButtonHTML(cn, 'lang_style_styleinfo_desc', '{$pluginurl}/images/style_info.gif', 'mceStyleProps', true); + } + + return ""; + }, + + execCommand : function(editor_id, element, command, user_interface, value) { + var e, inst; + + // Handle commands + switch (command) { + case "mceStyleProps": + TinyMCE_StylePlugin._styleProps(); + return true; + + case "mceSetElementStyle": + inst = tinyMCE.getInstanceById(editor_id); + e = inst.selection.getFocusElement(); + + if (e) { + e.style.cssText = value; + inst.repaint(); + } + + return true; + } + + // Pass to next handler in chain + return false; + }, + + handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { + }, + + // Private plugin specific methods + + _styleProps : function() { + var e = tinyMCE.selectedInstance.selection.getFocusElement(); + + if (!e) + return; + + tinyMCE.openWindow({ + file : '../../plugins/style/props.htm', + width : 480 + tinyMCE.getLang('lang_style_props_delta_width', 0), + height : 320 + tinyMCE.getLang('lang_style_props_delta_height', 0) + }, { + editor_id : tinyMCE.selectedInstance.editorId, + inline : "yes", + style_text : e.style.cssText + }); + } +}; + +tinyMCE.addPlugin("style", TinyMCE_StylePlugin); diff --git a/jscripts/tiny_mce/plugins/style/images/apply_button_bg.gif b/jscripts/tiny_mce/plugins/style/images/apply_button_bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..979e868abb3562f59ac89b3d24bbd47b7aeab075 GIT binary patch literal 1096 zcmbVJ>rYc>7(b;zfmJ-?wr()j!YnFv3Ye{gec-Zik*muxba8BjW=sl1wz)XMNNKs0 zDIgZ1Fu57Ta+9J26^MZ%r9mvzs1d4apDL` zD&mW*A_&|v*=ajY5IBy}G;Oy-2my{^w4G)!k|OOi4Yo`GP&mQBINUZ7H~|5qND^+% z0SIvn2M}O5W`}mLHiqFiqd^h`u;{3TPH2ZT?I1{koT+x~=+n@4pM2a3Z8Koy7HPUj z&eQ;_o-nG2$x^@wQh+q69S)jViXy3{UVg!h^cb0 zIZZJ}E5qRBEy~CyrNQ7^~bsM`KM|x)Lm59Uuvk&Y;3MoaD5K>AY8PAi~OlZ zQKYZGucNQ`5Zcv+MhQQx?NdZ0JzRKZ{&sQp zScXFMB}c~L@Yph*>_?f^V6z!sTX(bl{r}kwH~iR~J;%km7pw}->Z42HxMdtU^0(;t zQ(auv9TvM?hjvD@n``;8CB?*GOG2G6t>@&4FzL~T4_&VEVuUPjmNf8-sF(8K4_NNG z9>_EGY+8#{?wK+ku1^n3SNff?94S@yMth5^M|`D6`{uacfu^tm z$8t=0WMje7XyLl`c}T`5%cG~2XVI@F-WLVfRzy%%mkV5rwd zhW5K?MOo-d)nKOFYa?g5lqJ-*7u(zu_7r^+AW(UPp6187N~CfDhv$dJ@v`KEgyo`o zAy5TZ91E;k>EKx^`NP^Q)!~Y>SE>asPONwtL*6U@^fVVuC})28W0R0R|Hi92Rt@TyRKOkUHsIbJ&FfhYbM* z2Mi)6q;|iX)O29!tczha2j}(Pm{M_}X%TkuRk78abfk^(@VG9TDj)r zyxLn`bvrs2U5s(;Y*_Ga!R(^}6$jjMH%;$6wR*)xgMbME4G(54KbarCa^?1`i#A>f zE#FoXzHRoJ+W`gz`4e9icx+g`;z~ong`}1XCGMM+Z#r8u|7OF2CrdY9Pq0`}5O83{ zvU3wwJ`FHvDDXJ&|Nno6p$rs%vM@3*I56mdJOPRm2KN32ho 1) + return a[i]; + + return ""; +} + +function setValue(f, n, v) { + if (f.elements[n].type == "text") + f.elements[n].value = v; + else + selectByValue(f, n, v, true, true); +} + +function setupBox(f, ce, fp, pr, sf, b) { + if (typeof(b) == "undefined") + b = new Array('Top', 'Right', 'Bottom', 'Left'); + + if (isSame(ce, pr, sf, b)) { + f.elements[fp + "_same"].checked = true; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + f.elements[fp + "_right"].value = ""; + f.elements[fp + "_right"].disabled = true; + f.elements[fp + "_bottom"].value = ""; + f.elements[fp + "_bottom"].disabled = true; + f.elements[fp + "_left"].value = ""; + f.elements[fp + "_left"].disabled = true; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + f.elements[fp + "_left_measurement"].disabled = true; + f.elements[fp + "_bottom_measurement"].disabled = true; + f.elements[fp + "_right_measurement"].disabled = true; + } + } else { + f.elements[fp + "_same"].checked = false; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf])); + f.elements[fp + "_right"].disabled = false; + + setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf])); + f.elements[fp + "_bottom"].disabled = false; + + setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left"].disabled = false; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf])); + selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf])); + selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left_measurement"].disabled = false; + f.elements[fp + "_bottom_measurement"].disabled = false; + f.elements[fp + "_right_measurement"].disabled = false; + } + } +} + +function isSame(e, pr, sf, b) { + var a = new Array(), i, x; + + if (typeof(b) == "undefined") + b = new Array('Top', 'Right', 'Bottom', 'Left'); + + if (typeof(sf) == "undefined" || sf == null) + sf = ""; + + a[0] = e.style[pr + b[0] + sf]; + a[1] = e.style[pr + b[1] + sf]; + a[2] = e.style[pr + b[2] + sf]; + a[3] = e.style[pr + b[3] + sf]; + + for (i=0; i 0 ? s.substring(1) : s; + + if (f.text_none.checked) + s = "none"; + + ce.style.textDecoration = s; + + // Build background styles + + ce.style.backgroundColor = f.background_color.value; + ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : ""; + ce.style.backgroundRepeat = f.background_repeat.value; + ce.style.backgroundAttachment = f.background_attachment.value; + + if (f.background_hpos.value != "") { + s = ""; + s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " "; + s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : ""); + ce.style.backgroundPosition = s; + } + + // Build block styles + + ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : ""); + ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : ""); + ce.style.verticalAlign = f.block_vertical_alignment.value; + ce.style.textAlign = f.block_text_align.value; + ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : ""); + ce.style.whiteSpace = f.block_whitespace.value; + ce.style.display = f.block_display.value; + + // Build box styles + + ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : ""); + ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : ""); + ce.style.styleFloat = f.box_float.value; + + if (tinyMCE.isGecko) + ce.style.cssFloat = f.box_float.value; + + ce.style.clear = f.box_clear.value; + + if (!f.box_padding_same.checked) { + ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : ""); + ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : ""); + ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : ""); + } else + ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + + if (!f.box_margin_same.checked) { + ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : ""); + ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : ""); + ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : ""); + } else + ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + + // Build border styles + + if (!f.border_style_same.checked) { + ce.style.borderTopStyle = f.border_style_top.value; + ce.style.borderRightStyle = f.border_style_right.value; + ce.style.borderBottomStyle = f.border_style_bottom.value; + ce.style.borderLeftStyle = f.border_style_left.value; + } else + ce.style.borderStyle = f.border_style_top.value; + + if (!f.border_width_same.checked) { + ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); + ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : ""); + ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : ""); + ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : ""); + } else + ce.style.borderWidth = f.border_width_top.value; + + if (!f.border_color_same.checked) { + ce.style.borderTopColor = f.border_color_top.value; + ce.style.borderRightColor = f.border_color_right.value; + ce.style.borderBottomColor = f.border_color_bottom.value; + ce.style.borderLeftColor = f.border_color_left.value; + } else + ce.style.borderColor = f.border_color_top.value; + + // Build list styles + + ce.style.listStyleType = f.list_type.value; + ce.style.listStylePosition = f.list_position.value; + ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : ""; + + // Build positioning styles + + ce.style.position = f.positioning_type.value; + ce.style.visibility = f.positioning_visibility.value; + + if (ce.style.width == "") + ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : ""); + + if (ce.style.height == "") + ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : ""); + + ce.style.zIndex = f.positioning_zindex.value; + ce.style.overflow = f.positioning_overflow.value; + + if (!f.positioning_placement_same.checked) { + ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : ""); + ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : ""); + ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : ""); + } else { + s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.top = s; + ce.style.right = s; + ce.style.bottom = s; + ce.style.left = s; + } + + if (!f.positioning_clip_same.checked) { + s = "rect("; + s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto"); + s += ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } else { + s = "rect("; + t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto"; + s += t + " "; + s += t + " "; + s += t + " "; + s += t + ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } + + ce.style.cssText = tinyMCE.serializeStyle(tinyMCE.parseStyle(ce.style.cssText)); +} + +function isNum(s) { + return new RegExp('[0-9]+', 'g').test(s); +} + +function showDisabledControls() { + var f = document.forms, i, a; + + for (i=0; i 1) { + addSelectValue(f, s, p[0], p[1]); + + if (se) + selectByValue(f, s, p[1]); + } else { + addSelectValue(f, s, p[0], p[0]); + + if (se) + selectByValue(f, s, p[0]); + } + } +} + +function toggleSame(ce, pre) { + var el = document.forms[0].elements, i; + + if (ce.checked) { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = true; + el[pre + "_bottom"].disabled = true; + el[pre + "_left"].disabled = true; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = true; + el[pre + "_bottom_measurement"].disabled = true; + el[pre + "_left_measurement"].disabled = true; + } + } else { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = false; + el[pre + "_bottom"].disabled = false; + el[pre + "_left"].disabled = false; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = false; + el[pre + "_bottom_measurement"].disabled = false; + el[pre + "_left_measurement"].disabled = false; + } + } + + showDisabledControls(); +} + +function synch(fr, to) { + var f = document.forms[0]; + + f.elements[to].value = f.elements[fr].value; + + if (f.elements[fr + "_measurement"]) + selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value); +} diff --git a/jscripts/tiny_mce/plugins/style/langs/en.js b/jscripts/tiny_mce/plugins/style/langs/en.js new file mode 100644 index 000000000..97132decd --- /dev/null +++ b/jscripts/tiny_mce/plugins/style/langs/en.js @@ -0,0 +1,60 @@ +// UK lang variables + +tinyMCE.addToLang('style',{ +title : 'Edit CSS Style', +styleinfo_desc : 'Edit CSS Style', +text_tab : 'Text', +background_tab : 'Background', +block_tab : 'Block', +box_tab : 'Box', +border_tab : 'Border', +list_tab : 'List', +positioning_tab : 'Positioning', +text_props : 'Text', +text_font : 'Font', +text_size : 'Size', +text_weight : 'Weight', +text_style : 'Style', +text_variant : 'Variant', +text_lineheight : 'Line height', +text_case : 'Case', +text_color : 'Color', +text_decoration : 'Decoration', +background_color : 'Background color', +background_image : 'Background image', +background_repeat : 'Repeat', +background_attachment : 'Attachment', +background_hpos : 'Horizontal position', +background_vpos : 'Vertical position', +block_wordspacing : 'Word spacing', +block_letterspacing : 'Letter spacing', +block_vertical_alignment : 'Vertical alignment', +block_text_align : 'Text align', +block_text_indent : 'Text indent', +block_whitespace : 'Whitespace', +block_display : 'Display', +box_width : 'Width', +box_height : 'Height', +box_float : 'Float', +box_clear : 'Clear', +padding : 'Padding', +same : 'Same for all', +top : 'Top', +right : 'Right', +bottom : 'Bottom', +left : 'Left', +margin : 'Margin', +style : 'Style', +width : 'Width', +height : 'Height', +color : 'Color', +list_type : 'Type', +bullet_image : 'Bullet image', +position : 'Position', +positioning_type : 'Type', +visibility : 'Visibility', +zindex : 'Z-index', +overflow : 'Overflow', +placement : 'Placement', +clip : 'Clip' +}); diff --git a/jscripts/tiny_mce/plugins/style/props.htm b/jscripts/tiny_mce/plugins/style/props.htm new file mode 100644 index 000000000..cd2788236 --- /dev/null +++ b/jscripts/tiny_mce/plugins/style/props.htm @@ -0,0 +1,580 @@ + + + {$lang_style_title} + + + + + + + + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
      +
    +
    + +
    + + + +
    +
    + +   +
    +
    + +
    + + + + + +
     
    +
    {$lang_style_text_decoration} + + + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
     
    +
    + +
      +
    +
    + +
      +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
      +
    +
    + +
      +
    +
    + +
      +
    +
    +
    + +
    + + + + + + + + + + + + + + +
    + +
      +
    +
       
    + +
      +
    +
       
    +
    +
    + {$lang_style_padding} + + + + + + + + + + + + + + + + + + + + + + +
     
    + +
      +
    +
    + +
      +
    +
    + +
      +
    +
    + +
      +
    +
    +
    +
    +
    +
    + {$lang_style_margin} + + + + + + + + + + + + + + + + + + + + + + +
     
    + +
      +
    +
    + +
      +
    +
    + +
      +
    +
    + +
      +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      {$lang_style_style} {$lang_style_width} {$lang_style_color}
          
    {$lang_style_top}   + + +
      +
    +
      + + + + +
     
    +
    {$lang_style_right}   + + +
      +
    +
      + + + + +
     
    +
    {$lang_style_bottom}   + + +
      +
    +
      + + + + +
     
    +
    {$lang_style_left}   + + +
      +
    +
      + + + + +
     
    +
    +
    + +
    + + + + + + + + + + + + + + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
       
    + +
      +
    +
       
    + +
      +
    +
       
    + +
    +
    + {$lang_style_placement} + + + + + + + + + + + + + + + + + + + + + + +
     
    {$lang_style_top} + +
      +
    +
    {$lang_style_right} + +
      +
    +
    {$lang_style_bottom} + +
      +
    +
    {$lang_style_left} + +
      +
    +
    +
    +
    +
    +
    + {$lang_style_clip} + + + + + + + + + + + + + + + + + + + + + + +
     
    {$lang_style_top} + +
      +
    +
    {$lang_style_right} + +
      +
    +
    {$lang_style_bottom} + +
      +
    +
    {$lang_style_left} + +
      +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
     
    +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    + + diff --git a/jscripts/tiny_mce/plugins/style/readme.txt b/jscripts/tiny_mce/plugins/style/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/jscripts/tiny_mce/plugins/style/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/jscripts/tiny_mce/plugins/table/cell.htm b/jscripts/tiny_mce/plugins/table/cell.htm new file mode 100644 index 000000000..7171d4faa --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/cell.htm @@ -0,0 +1,182 @@ + + + {$lang_table_cell_title} + + + + + + + + +
    + + +
    +
    +
    + {$lang_table_general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + +
    + +
    +
    +
    + +
    +
    + {$lang_table_advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + + + + + +
     
    +
    + + + + + +
     
    +
    + + + + + +
     
    +
    +
    +
    +
    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + + diff --git a/jscripts/tiny_mce/plugins/table/css/cell.css b/jscripts/tiny_mce/plugins/table/css/cell.css new file mode 100644 index 000000000..a067ecdfe --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/css/cell.css @@ -0,0 +1,17 @@ +/* CSS file for cell dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#class { + width: 150px; +} \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/table/css/row.css b/jscripts/tiny_mce/plugins/table/css/row.css new file mode 100644 index 000000000..1f7755daf --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/css/row.css @@ -0,0 +1,25 @@ +/* CSS file for row dialog in the table plugin */ + +.panel_wrapper div.current { + height: 200px; +} + +.advfield { + width: 200px; +} + +#action { + margin-bottom: 3px; +} + +#rowtype,#align,#valign,#class,#height { + width: 150px; +} + +#height { + width: 50px; +} + +.col2 { + padding-left: 20px; +} diff --git a/jscripts/tiny_mce/plugins/table/css/table.css b/jscripts/tiny_mce/plugins/table/css/table.css new file mode 100644 index 000000000..804f766ee --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/css/table.css @@ -0,0 +1,13 @@ +/* CSS file for table dialog in the table plugin */ + +.panel_wrapper div.current { + height: 220px; +} + +.advfield { + width: 200px; +} + +#class { + width: 150px; +} diff --git a/jscripts/tiny_mce/plugins/table/editor_plugin.js b/jscripts/tiny_mce/plugins/table/editor_plugin.js new file mode 100644 index 000000000..2e0fd012b --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/editor_plugin.js @@ -0,0 +1 @@ +tinyMCE.importPluginLanguagePack('table','en,tr,ar,cs,da,de,el,es,fi,fr_ca,hu,it,ja,ko,nl,nb,pl,pt,pt_br,sv,tw,zh_cn,fr,de,he,nb,ru,ru_KOI8-R,ru_UTF-8,nn,cy,is,zh_tw,zh_tw_utf8,sk');var TinyMCE_TablePlugin={getInfo:function(){return{longname:'Tables',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_table.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},initInstance:function(inst){if(tinyMCE.isGecko){var doc=inst.getDoc();tinyMCE.addEvent(doc,"mouseup",TinyMCE_TablePlugin._mouseDownHandler);}inst.tableRowClipboard=null;},getControlHTML:function(control_name){var controls=new Array(['table','table.gif','lang_table_desc','mceInsertTable',true],['delete_col','table_delete_col.gif','lang_table_delete_col_desc','mceTableDeleteCol'],['delete_row','table_delete_row.gif','lang_table_delete_row_desc','mceTableDeleteRow'],['col_after','table_insert_col_after.gif','lang_table_col_after_desc','mceTableInsertColAfter'],['col_before','table_insert_col_before.gif','lang_table_col_before_desc','mceTableInsertColBefore'],['row_after','table_insert_row_after.gif','lang_table_row_after_desc','mceTableInsertRowAfter'],['row_before','table_insert_row_before.gif','lang_table_row_before_desc','mceTableInsertRowBefore'],['row_props','table_row_props.gif','lang_table_row_desc','mceTableRowProps',true],['cell_props','table_cell_props.gif','lang_table_cell_desc','mceTableCellProps',true],['split_cells','table_split_cells.gif','lang_table_split_cells_desc','mceTableSplitCells',true],['merge_cells','table_merge_cells.gif','lang_table_merge_cells_desc','mceTableMergeCells',true]);for(var i=0;i4?but[4]:false)+(but.length>5?', \''+but[5]+'\'':'')+');return false;';if(but[0]==control_name)return tinyMCE.getButtonHTML(control_name,but[2],'{$pluginurl}/images/'+but[1],but[3],(but.length>4?but[4]:false));}if(control_name=="tablecontrols"){var html="";html+=tinyMCE.getControlHTML("table");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("row_props");html+=tinyMCE.getControlHTML("cell_props");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("row_before");html+=tinyMCE.getControlHTML("row_after");html+=tinyMCE.getControlHTML("delete_row");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("col_before");html+=tinyMCE.getControlHTML("col_after");html+=tinyMCE.getControlHTML("delete_col");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("split_cells");html+=tinyMCE.getControlHTML("merge_cells");return html;}return"";},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceInsertTable":case"mceTableRowProps":case"mceTableCellProps":case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":case"mceTableDelete":var inst=tinyMCE.getInstanceById(editor_id);inst.execCommand('mceBeginUndoLevel');TinyMCE_TablePlugin._doExecCommand(editor_id,element,command,user_interface,value);inst.execCommand('mceEndUndoLevel');return true;}return false;},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){var colspan="1",rowspan="1";var inst=tinyMCE.getInstanceById(editor_id);tinyMCE.switchClass(editor_id+'_table','mceButtonNormal');tinyMCE.switchClass(editor_id+'_row_props','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_cell_props','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_before','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_after','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_delete_row','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_col_before','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_col_after','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_delete_col','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_split_cells','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_merge_cells','mceButtonDisabled');if(tdElm=tinyMCE.getParentElement(node,"td,th")){tinyMCE.switchClass(editor_id+'_cell_props','mceButtonSelected');tinyMCE.switchClass(editor_id+'_row_before','mceButtonNormal');tinyMCE.switchClass(editor_id+'_row_after','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_row','mceButtonNormal');tinyMCE.switchClass(editor_id+'_col_before','mceButtonNormal');tinyMCE.switchClass(editor_id+'_col_after','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_col','mceButtonNormal');colspan=tinyMCE.getAttrib(tdElm,"colspan");rowspan=tinyMCE.getAttrib(tdElm,"rowspan");colspan=colspan==""?"1":colspan;rowspan=rowspan==""?"1":rowspan;if(colspan!="1"||rowspan!="1")tinyMCE.switchClass(editor_id+'_split_cells','mceButtonNormal');}if(tinyMCE.getParentElement(node,"tr"))tinyMCE.switchClass(editor_id+'_row_props','mceButtonSelected');if(tinyMCE.getParentElement(node,"table")){tinyMCE.switchClass(editor_id+'_table','mceButtonSelected');tinyMCE.switchClass(editor_id+'_merge_cells','mceButtonNormal');}},_mouseDownHandler:function(e){var elm=tinyMCE.isMSIE?event.srcElement:e.target;var focusElm=tinyMCE.selectedInstance.getFocusElement();if(elm.nodeName=="BODY"&&(focusElm.nodeName=="TD"||focusElm.nodeName=="TH"||(focusElm.parentNode&&focusElm.parentNode.nodeName=="TD")||(focusElm.parentNode&&focusElm.parentNode.nodeName=="TH"))){window.setTimeout(function(){var tableElm=tinyMCE.getParentElement(focusElm,"table");tinyMCE.handleVisualAid(tableElm,true,tinyMCE.settings['visual'],tinyMCE.selectedInstance);},10);}},_doExecCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id);var focusElm=inst.getFocusElement();var trElm=tinyMCE.getParentElement(focusElm,"tr");var tdElm=tinyMCE.getParentElement(focusElm,"td,th");var tableElm=tinyMCE.getParentElement(focusElm,"table");var doc=inst.contentWindow.document;var tableBorder=tableElm?tableElm.getAttribute("border"):"";if(trElm&&tdElm==null)tdElm=trElm.cells[0];function inArray(ar,v){for(var i=0;i0&&inArray(ar[i],v))return true;if(ar[i]==v)return true;}return false;}function makeTD(){var newTD=doc.createElement("td");newTD.innerHTML=" ";}function getColRowSpan(td){var colspan=tinyMCE.getAttrib(td,"colspan");var rowspan=tinyMCE.getAttrib(td,"rowspan");colspan=colspan==""?1:parseInt(colspan);rowspan=rowspan==""?1:parseInt(rowspan);return{colspan:colspan,rowspan:rowspan};}function getCellPos(grid,td){for(var y=0;y1){for(var i=x;i1)td.rowSpan=sd.rowspan+1;lastElm=td;}deleteMarked(tableElm);}}function prevElm(node,name){while((node=node.previousSibling)!=null){if(node.nodeName==name)return node;}return null;}function nextElm(node,names){var namesAr=names.split(',');while((node=node.nextSibling)!=null){for(var i=0;i1){do{var nexttd=nextElm(td,"TD,TH");if(td._delete)td.parentNode.removeChild(td);}while((td=nexttd)!=null);}}while((tr=next)!=null);}function addRows(td_elm,tr_elm,rowspan){td_elm.rowSpan=1;var trNext=nextElm(tr_elm,"TR");for(var i=1;i1){var newTD=cells[x].cloneNode(true);var sd=getColRowSpan(cells[x]);newTD.rowSpan=sd.rowspan-1;var nextTD=nextTR.cells[x];if(nextTD==null)nextTR.appendChild(newTD);else nextTR.insertBefore(newTD,nextTD);}}var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd.rowspan>1){tdElm.rowSpan=sd.rowspan-1;}else{trElm=tdElm.parentNode;if(trElm.parentNode)trElm._delete=true;}lastTDElm=tdElm;}}deleteMarked(tableElm);cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;inst.selection.selectNode(getCell(grid,cpos.rowindex,0),true,true);break;case"mceTableInsertColBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);newTD.innerHTML=" ";newTD.rowSpan=tdElm.rowSpan;tdElm.parentNode.insertBefore(newTD,tdElm);}else tdElm.colSpan++;lastTDElm=tdElm;}}break;case"mceTableInsertColAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);newTD.innerHTML=" ";newTD.rowSpan=tdElm.rowSpan;var nextTD=nextElm(tdElm,"TD,TH");if(nextTD==null)tdElm.parentNode.appendChild(newTD);else nextTD.parentNode.insertBefore(newTD,nextTD);}else tdElm.colSpan++;lastTDElm=tdElm;}}break;case"mceTableDeleteCol":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;if(grid.length>1&&grid[0].length<=1){tableElm.parentNode.removeChild(tableElm);return true;}for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']>1)tdElm.colSpan=sd['colspan']-1;else{if(tdElm.parentNode)tdElm.parentNode.removeChild(tdElm);}lastTDElm=tdElm;}}cpos.cellindex--;if(cpos.cellindex<0)cpos.cellindex=0;inst.selection.selectNode(getCell(grid,0,cpos.cellindex),true,true);break;case"mceTableSplitCells":if(!trElm||!tdElm)return true;var spandata=getColRowSpan(tdElm);var colspan=spandata["colspan"];var rowspan=spandata["rowspan"];if(colspan>1||rowspan>1){tdElm.colSpan=1;for(var i=1;i1)addRows(newTD,trElm,rowspan);}addRows(tdElm,trElm,rowspan);}tableElm=tinyMCE.getParentElement(inst.getFocusElement(),"table");break;case"mceTableMergeCells":var rows=new Array();var sel=inst.getSel();var grid=getTableGrid(tableElm);if(tinyMCE.isMSIE||sel.rangeCount==1){if(user_interface){var template=new Array();var sp=getColRowSpan(tdElm);template['file']='../../plugins/table/merge_cells.htm';template['width']=250;template['height']=105+(tinyMCE.isNS7?25:0);template['width']+=tinyMCE.getLang('lang_table_merge_cells_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_merge_cells_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes",action:"update",numcols:sp.colspan,numrows:sp.rowspan});return true;}else{var numRows=parseInt(value['numrows']);var numCols=parseInt(value['numcols']);var cpos=getCellPos(grid,tdElm);if((""+numRows)=="NaN")numRows=1;if((""+numCols)=="NaN")numCols=1;var tRows=tableElm.rows;for(var y=cpos.rowindex;y0)rows[rows.length]=rowCells;}}}else{var cells=new Array();var sel=inst.getSel();var lastTR=null;var curRow=null;var x1=-1,y1=-1,x2,y2;if(sel.rangeCount<2)return true;for(var i=0;i0)rows[rows.length]=rowCells;}var curRow=new Array();var lastTR=null;for(var y=0;ycolSpan)colSpan=rowColSpan;lastRowSpan=-1;}var lastColSpan=-1;for(var x=0;xrowSpan)rowSpan=colRowSpan;lastColSpan=-1;}tdElm=rows[0][0];tdElm.rowSpan=rowSpan;tdElm.colSpan=colSpan;for(var y=0;y0))tdElm.innerHTML+=html;if(rows[y][x]!=tdElm&&!rows[y][x]._deleted){var cpos=getCellPos(grid,rows[y][x]);var tr=rows[y][x].parentNode;tr.removeChild(rows[y][x]);rows[y][x]._deleted=true;if(!tr.hasChildNodes()){tr.parentNode.removeChild(tr);var lastCell=null;for(var x=0;cellElm=getCell(grid,cpos.rowindex,x);x++){if(cellElm!=lastCell&&cellElm.rowSpan>1)cellElm.rowSpan--;lastCell=cellElm;}if(tdElm.rowSpan>1)tdElm.rowSpan--;}}}}break;}tableElm=tinyMCE.getParentElement(inst.getFocusElement(),"table");tinyMCE.handleVisualAid(tableElm,true,tinyMCE.settings['visual'],tinyMCE.selectedInstance);tinyMCE.triggerNodeChange();inst.repaint();}return true;}return false;}};tinyMCE.addPlugin("table",TinyMCE_TablePlugin); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/table/editor_plugin_src.js b/jscripts/tiny_mce/plugins/table/editor_plugin_src.js new file mode 100644 index 000000000..4b512b42b --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/editor_plugin_src.js @@ -0,0 +1,1054 @@ +/** + * $RCSfile: editor_plugin_src.js,v $ + * $Revision: 1.38 $ + * $Date: 2006/02/11 18:53:51 $ + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +/* Import plugin specific language pack */ +tinyMCE.importPluginLanguagePack('table', 'en,tr,ar,cs,da,de,el,es,fi,fr_ca,hu,it,ja,ko,nl,nb,pl,pt,pt_br,sv,tw,zh_cn,fr,de,he,nb,ru,ru_KOI8-R,ru_UTF-8,nn,cy,is,zh_tw,zh_tw_utf8,sk'); + +var TinyMCE_TablePlugin = { + getInfo : function() { + return { + longname : 'Tables', + author : 'Moxiecode Systems', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_table.html', + version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion + }; + }, + + initInstance : function(inst) { + if (tinyMCE.isGecko) { + var doc = inst.getDoc(); + tinyMCE.addEvent(doc, "mouseup", TinyMCE_TablePlugin._mouseDownHandler); + } + + inst.tableRowClipboard = null; + }, + + /** + * Returns the HTML contents of the table control. + */ + getControlHTML : function(control_name) { + var controls = new Array( + ['table', 'table.gif', 'lang_table_desc', 'mceInsertTable', true], + ['delete_col', 'table_delete_col.gif', 'lang_table_delete_col_desc', 'mceTableDeleteCol'], + ['delete_row', 'table_delete_row.gif', 'lang_table_delete_row_desc', 'mceTableDeleteRow'], + ['col_after', 'table_insert_col_after.gif', 'lang_table_col_after_desc', 'mceTableInsertColAfter'], + ['col_before', 'table_insert_col_before.gif', 'lang_table_col_before_desc', 'mceTableInsertColBefore'], + ['row_after', 'table_insert_row_after.gif', 'lang_table_row_after_desc', 'mceTableInsertRowAfter'], + ['row_before', 'table_insert_row_before.gif', 'lang_table_row_before_desc', 'mceTableInsertRowBefore'], + ['row_props', 'table_row_props.gif', 'lang_table_row_desc', 'mceTableRowProps', true], + ['cell_props', 'table_cell_props.gif', 'lang_table_cell_desc', 'mceTableCellProps', true], + ['split_cells', 'table_split_cells.gif', 'lang_table_split_cells_desc', 'mceTableSplitCells', true], + ['merge_cells', 'table_merge_cells.gif', 'lang_table_merge_cells_desc', 'mceTableMergeCells', true]); + + // Render table control + for (var i=0; i 4 ? but[4] : false) + (but.length > 5 ? ', \'' + but[5] + '\'' : '') + ');return false;'; + + if (but[0] == control_name) + return tinyMCE.getButtonHTML(control_name, but[2], '{$pluginurl}/images/'+ but[1], but[3], (but.length > 4 ? but[4] : false)); + } + + // Special tablecontrols + if (control_name == "tablecontrols") { + var html = ""; + + html += tinyMCE.getControlHTML("table"); + html += tinyMCE.getControlHTML("separator"); + html += tinyMCE.getControlHTML("row_props"); + html += tinyMCE.getControlHTML("cell_props"); + html += tinyMCE.getControlHTML("separator"); + html += tinyMCE.getControlHTML("row_before"); + html += tinyMCE.getControlHTML("row_after"); + html += tinyMCE.getControlHTML("delete_row"); + html += tinyMCE.getControlHTML("separator"); + html += tinyMCE.getControlHTML("col_before"); + html += tinyMCE.getControlHTML("col_after"); + html += tinyMCE.getControlHTML("delete_col"); + html += tinyMCE.getControlHTML("separator"); + html += tinyMCE.getControlHTML("split_cells"); + html += tinyMCE.getControlHTML("merge_cells"); + + return html; + } + + return ""; + }, + + /** + * Executes the table commands. + */ + execCommand : function(editor_id, element, command, user_interface, value) { + // Is table command + switch (command) { + case "mceInsertTable": + case "mceTableRowProps": + case "mceTableCellProps": + case "mceTableSplitCells": + case "mceTableMergeCells": + case "mceTableInsertRowBefore": + case "mceTableInsertRowAfter": + case "mceTableDeleteRow": + case "mceTableInsertColBefore": + case "mceTableInsertColAfter": + case "mceTableDeleteCol": + case "mceTableCutRow": + case "mceTableCopyRow": + case "mceTablePasteRowBefore": + case "mceTablePasteRowAfter": + case "mceTableDelete": + var inst = tinyMCE.getInstanceById(editor_id); + + inst.execCommand('mceBeginUndoLevel'); + TinyMCE_TablePlugin._doExecCommand(editor_id, element, command, user_interface, value); + inst.execCommand('mceEndUndoLevel'); + + return true; + } + + // Pass to next handler in chain + return false; + }, + + handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { + var colspan = "1", rowspan = "1"; + + var inst = tinyMCE.getInstanceById(editor_id); + + // Reset table controls + tinyMCE.switchClass(editor_id + '_table', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_row_props', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_cell_props', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_row_before', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_row_after', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_delete_row', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_col_before', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_col_after', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_delete_col', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_split_cells', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_merge_cells', 'mceButtonDisabled'); + + // Within a td element + if (tdElm = tinyMCE.getParentElement(node, "td,th")) { + tinyMCE.switchClass(editor_id + '_cell_props', 'mceButtonSelected'); + tinyMCE.switchClass(editor_id + '_row_before', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_row_after', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_delete_row', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_col_before', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_col_after', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_delete_col', 'mceButtonNormal'); + + colspan = tinyMCE.getAttrib(tdElm, "colspan"); + rowspan = tinyMCE.getAttrib(tdElm, "rowspan"); + + colspan = colspan == "" ? "1" : colspan; + rowspan = rowspan == "" ? "1" : rowspan; + + if (colspan != "1" || rowspan != "1") + tinyMCE.switchClass(editor_id + '_split_cells', 'mceButtonNormal'); + } + + // Within a tr element + if (tinyMCE.getParentElement(node, "tr")) + tinyMCE.switchClass(editor_id + '_row_props', 'mceButtonSelected'); + + // Within table + if (tinyMCE.getParentElement(node, "table")) { + tinyMCE.switchClass(editor_id + '_table', 'mceButtonSelected'); + tinyMCE.switchClass(editor_id + '_merge_cells', 'mceButtonNormal'); + } + }, + + // Private plugin internal methods + + _mouseDownHandler : function(e) { + var elm = tinyMCE.isMSIE ? event.srcElement : e.target; + var focusElm = tinyMCE.selectedInstance.getFocusElement(); + + // If press on special Mozilla create TD/TR thingie + if (elm.nodeName == "BODY" && (focusElm.nodeName == "TD" || focusElm.nodeName == "TH" || (focusElm.parentNode && focusElm.parentNode.nodeName == "TD") ||(focusElm.parentNode && focusElm.parentNode.nodeName == "TH") )) { + window.setTimeout(function() { + var tableElm = tinyMCE.getParentElement(focusElm, "table"); + tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual'], tinyMCE.selectedInstance); + }, 10); + } + }, + + /** + * Executes the table commands. + */ + _doExecCommand : function(editor_id, element, command, user_interface, value) { + var inst = tinyMCE.getInstanceById(editor_id); + var focusElm = inst.getFocusElement(); + var trElm = tinyMCE.getParentElement(focusElm, "tr"); + var tdElm = tinyMCE.getParentElement(focusElm, "td,th"); + var tableElm = tinyMCE.getParentElement(focusElm, "table"); + var doc = inst.contentWindow.document; + var tableBorder = tableElm ? tableElm.getAttribute("border") : ""; + + // Get first TD if no TD found + if (trElm && tdElm == null) + tdElm = trElm.cells[0]; + + // ------- Inner functions --------- + function inArray(ar, v) { + for (var i=0; i 0 && inArray(ar[i], v)) + return true; + + // Found value + if (ar[i] == v) + return true; + } + + return false; + } + + function makeTD() { + var newTD = doc.createElement("td"); + newTD.innerHTML = " "; + } + + function getColRowSpan(td) { + var colspan = tinyMCE.getAttrib(td, "colspan"); + var rowspan = tinyMCE.getAttrib(td, "rowspan"); + + colspan = colspan == "" ? 1 : parseInt(colspan); + rowspan = rowspan == "" ? 1 : parseInt(rowspan); + + return {colspan : colspan, rowspan : rowspan}; + } + + function getCellPos(grid, td) { + for (var y=0; y 1) { // Remove due to colspan + for (var i=x; i 1) + td.rowSpan = sd.rowspan + 1; + + lastElm = td; + } + + deleteMarked(tableElm); + } + } + + function prevElm(node, name) { + while ((node = node.previousSibling) != null) { + if (node.nodeName == name) + return node; + } + + return null; + } + + function nextElm(node, names) { + var namesAr = names.split(','); + + while ((node = node.nextSibling) != null) { + for (var i=0; i 1) { + do { + var nexttd = nextElm(td, "TD,TH"); + + if (td._delete) + td.parentNode.removeChild(td); + } while ((td = nexttd) != null); + } + } while ((tr = next) != null); + } + + function addRows(td_elm, tr_elm, rowspan) { + // Add rows + td_elm.rowSpan = 1; + var trNext = nextElm(tr_elm, "TR"); + for (var i=1; i 1) { + var newTD = cells[x].cloneNode(true); + var sd = getColRowSpan(cells[x]); + + newTD.rowSpan = sd.rowspan - 1; + + var nextTD = nextTR.cells[x]; + + if (nextTD == null) + nextTR.appendChild(newTD); + else + nextTR.insertBefore(newTD, nextTD); + } + } + + // Delete cells + var lastTDElm = null; + for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) { + if (tdElm != lastTDElm) { + var sd = getColRowSpan(tdElm); + + if (sd.rowspan > 1) { + tdElm.rowSpan = sd.rowspan - 1; + } else { + trElm = tdElm.parentNode; + + if (trElm.parentNode) + trElm._delete = true; + } + + lastTDElm = tdElm; + } + } + + deleteMarked(tableElm); + + cpos.rowindex--; + if (cpos.rowindex < 0) + cpos.rowindex = 0; + + inst.selection.selectNode(getCell(grid, cpos.rowindex, 0), true, true); + break; + + case "mceTableInsertColBefore": + if (!trElm || !tdElm) + return true; + + var grid = getTableGrid(tableElm); + var cpos = getCellPos(grid, tdElm); + var lastTDElm = null; + + for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) { + if (tdElm != lastTDElm) { + var sd = getColRowSpan(tdElm); + + if (sd['colspan'] == 1) { + var newTD = doc.createElement(tdElm.nodeName); + + newTD.innerHTML = " "; + newTD.rowSpan = tdElm.rowSpan; + + tdElm.parentNode.insertBefore(newTD, tdElm); + } else + tdElm.colSpan++; + + lastTDElm = tdElm; + } + } + break; + + case "mceTableInsertColAfter": + if (!trElm || !tdElm) + return true; + + var grid = getTableGrid(tableElm); + var cpos = getCellPos(grid, tdElm); + var lastTDElm = null; + + for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) { + if (tdElm != lastTDElm) { + var sd = getColRowSpan(tdElm); + + if (sd['colspan'] == 1) { + var newTD = doc.createElement(tdElm.nodeName); + + newTD.innerHTML = " "; + newTD.rowSpan = tdElm.rowSpan; + + var nextTD = nextElm(tdElm, "TD,TH"); + if (nextTD == null) + tdElm.parentNode.appendChild(newTD); + else + nextTD.parentNode.insertBefore(newTD, nextTD); + } else + tdElm.colSpan++; + + lastTDElm = tdElm; + } + } + break; + + case "mceTableDeleteCol": + if (!trElm || !tdElm) + return true; + + var grid = getTableGrid(tableElm); + var cpos = getCellPos(grid, tdElm); + var lastTDElm = null; + + // Only one col, remove whole table + if (grid.length > 1 && grid[0].length <= 1) { + tableElm.parentNode.removeChild(tableElm); + return true; + } + + // Delete cells + for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) { + if (tdElm != lastTDElm) { + var sd = getColRowSpan(tdElm); + + if (sd['colspan'] > 1) + tdElm.colSpan = sd['colspan'] - 1; + else { + if (tdElm.parentNode) + tdElm.parentNode.removeChild(tdElm); + } + + lastTDElm = tdElm; + } + } + + cpos.cellindex--; + if (cpos.cellindex < 0) + cpos.cellindex = 0; + + inst.selection.selectNode(getCell(grid, 0, cpos.cellindex), true, true); + break; + + case "mceTableSplitCells": + if (!trElm || !tdElm) + return true; + + var spandata = getColRowSpan(tdElm); + + var colspan = spandata["colspan"]; + var rowspan = spandata["rowspan"]; + + // Needs splitting + if (colspan > 1 || rowspan > 1) { + // Generate cols + tdElm.colSpan = 1; + for (var i=1; i 1) + addRows(newTD, trElm, rowspan); + } + + addRows(tdElm, trElm, rowspan); + } + + // Apply visual aids + tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table"); + break; + + case "mceTableMergeCells": + var rows = new Array(); + var sel = inst.getSel(); + var grid = getTableGrid(tableElm); + + if (tinyMCE.isMSIE || sel.rangeCount == 1) { + if (user_interface) { + // Setup template + var template = new Array(); + var sp = getColRowSpan(tdElm); + + template['file'] = '../../plugins/table/merge_cells.htm'; + template['width'] = 250; + template['height'] = 105 + (tinyMCE.isNS7 ? 25 : 0); + + // Language specific width and height addons + template['width'] += tinyMCE.getLang('lang_table_merge_cells_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_table_merge_cells_delta_height', 0); + + // Open window + tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes", action : "update", numcols : sp.colspan, numrows : sp.rowspan}); + + return true; + } else { + var numRows = parseInt(value['numrows']); + var numCols = parseInt(value['numcols']); + var cpos = getCellPos(grid, tdElm); + + if (("" + numRows) == "NaN") + numRows = 1; + + if (("" + numCols) == "NaN") + numCols = 1; + + // Get rows and cells + var tRows = tableElm.rows; + for (var y=cpos.rowindex; y 0) + rows[rows.length] = rowCells; + } + + //return true; + } + } else { + var cells = new Array(); + var sel = inst.getSel(); + var lastTR = null; + var curRow = null; + var x1 = -1, y1 = -1, x2, y2; + + // Only one cell selected, whats the point? + if (sel.rangeCount < 2) + return true; + + // Get all selected cells + for (var i=0; i 0) + rows[rows.length] = rowCells; + } + + // Find selected cells in grid and box + var curRow = new Array(); + var lastTR = null; + for (var y=0; y colSpan) + colSpan = rowColSpan; + + lastRowSpan = -1; + } + + // Validate vertical and get total rowspan + var lastColSpan = -1; + for (var x=0; x rowSpan) + rowSpan = colRowSpan; + + lastColSpan = -1; + } + + // Setup td + tdElm = rows[0][0]; + tdElm.rowSpan = rowSpan; + tdElm.colSpan = colSpan; + + // Merge cells + for (var y=0; y 0)) + tdElm.innerHTML += html; + + // Not current cell + if (rows[y][x] != tdElm && !rows[y][x]._deleted) { + var cpos = getCellPos(grid, rows[y][x]); + var tr = rows[y][x].parentNode; + + tr.removeChild(rows[y][x]); + rows[y][x]._deleted = true; + + // Empty TR, remove it + if (!tr.hasChildNodes()) { + tr.parentNode.removeChild(tr); + + var lastCell = null; + for (var x=0; cellElm = getCell(grid, cpos.rowindex, x); x++) { + if (cellElm != lastCell && cellElm.rowSpan > 1) + cellElm.rowSpan--; + + lastCell = cellElm; + } + + if (tdElm.rowSpan > 1) + tdElm.rowSpan--; + } + } + } + } + + break; + } + + tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table"); + tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual'], tinyMCE.selectedInstance); + tinyMCE.triggerNodeChange(); + inst.repaint(); + } + + return true; + } + + // Pass to next handler in chain + return false; + } +}; + +tinyMCE.addPlugin("table", TinyMCE_TablePlugin); diff --git a/jscripts/tiny_mce/plugins/table/images/buttons.gif b/jscripts/tiny_mce/plugins/table/images/buttons.gif new file mode 100644 index 0000000000000000000000000000000000000000..bfc1568bec918f0cf2bde452fef29209a1e61525 GIT binary patch literal 1356 zcmV-S1+)4`Nk%w1VcY-|0OcA00s;bJdYt0o;zD}j5-wV@rB|ZD`$A%pt)rr{m{M|^ z?4q;6^5T-Ra$LmEvd;aJx&CE;vtx3ExVyl2kFwauX!7^|v%b=Tul`br@G?qb*N1K5 z@BTtna-z1<($(ams=|Vr!lJtJa)6VPqOuYa5>jS@f~xXTaihYrdV-Ro)X>XflI}8A zjQ{`uA^8LW002J#EC2ui0Nel+000L6z@KnPEEEW}ShMmH zLSse*1u6y*D>iMKi)UoZGCNB|=E|2jXvR$WmSxy!L4NqlWbwjvnpUz7e`~d0{f+^@}fWQTQ*$^9hNYD^L2ZJb) zODGn3g~M~-J&~ai8#;miOJe~<5#AFE!0^C{C_cag4-cTAS~w;?FwKfBzW757|J6qy z2nJxV(_!_bBm#i-2?!(+C88(*0va?|qY^YI(1sGgRA?bsBTOWbhFfyjr4tQ3^u&jc zIT1rLXr`IW0=D3o(mKir&={LVxG92g#2M#<2Z-1i;7B3JQYT9fXfT2c0La+_ok`Hp z0|gXN2TKSzC?KT@m@?QQ6PpgvsS=)j)LGLeCrsK#JR1}wpeLt`AMS_G>#;THf$ zK7^1$1&GiZ0Db~?w5ut!YA^w7u*%wKVxl4uYN$36QG#VR5VixePfSZgwcBCqL}igo zCd9K()BwW-6QH2~E*z_5V2iovPSdU_HHe@aj|Sx6kq;>-AOa%w-W#m0{qkA_yy>pX zE;rN(@o5r@pp!%mjkT}>#SS%GRK*u_%&9L`3PVI@anvB*5=NzjLM{s^a)P@?q^!Zp zb2*n{-~KVbcY!SYp;z>-j#Ir7xiUj4jtk6mGB;Ip^^U`N6#0a4} zUa^=?to_g2~h3+KzIM(yqDEw{v33+VWCfYLcq*{{H^LvU=X>{iCqL z#mds6qN19*_y7O^A^8LW0018VEC2ui02BZe000G?;3tk`X`X1B5)?(KB@00mJQCSN zE9B*0hM>X2$p{t>MWmN#dOXbs;)npedOjg>x~OhU6O8zQIdH3l0a%P7cOqTD;bAdt z9{7i*gQ;>J6LlpUY-9lzat#_A1ttt^9EFODjU@vQ92^px5)&Jr43#7UY!VHM8yXcA lp(dna6O$XO2?L@dmz|!U8w?Bswyp)k#Kpum$jK!k06V*Ud_@2N literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/table/images/table_cell_props.gif b/jscripts/tiny_mce/plugins/table/images/table_cell_props.gif new file mode 100644 index 0000000000000000000000000000000000000000..bee7ed652f83476471ca0c0cfa5f2b72c6f98fc8 GIT binary patch literal 189 zcmV;u07CyqNk%w1VH5xq0K*6XGD>2SrMS}4+=8g`!qMXL>f*A!(w4mb{r>)O6%hbCQiN7b literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/table/images/table_delete.gif b/jscripts/tiny_mce/plugins/table/images/table_delete.gif new file mode 100644 index 0000000000000000000000000000000000000000..2a00e6ad66aa907381ff742dfcb6aa2e2ec3df17 GIT binary patch literal 372 zcmZ?wbhEHb6k!lyxXJ(m|NsC0^y%lMRiD=FywtS()2v-TmLL0b@8#d4r!Jkk_37m0 zM~gQcGWJTIwCYe$T-JmI8#W!fv~uABRt5$QCMID*=gj%{@86?GkAPN#oj^XJ z_>+Z^fkBHw2V?}uPYi4m9i|p|=t%XSSWnQADz=v_wHnRY+F7p1ZrJmz#y(t)Zk*lZk_e*Nv}? zvvK;2S*`-yoScFy1X+02@GWu?C=+Cw&cngQwa#s0G0Os;9qa<@otLayy@rR6PvG!w R-U}BmUG%+r&B>9$8UT)8gMR=3 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/table/images/table_delete_col.gif b/jscripts/tiny_mce/plugins/table/images/table_delete_col.gif new file mode 100644 index 0000000000000000000000000000000000000000..91f53af02aacbe33b04f782efb164560887d3bfe GIT binary patch literal 163 zcmV;U09^k^Nk%w1VH5xq0K*Fa0s;azZ{ony{xV8pTyKn*qO$Jn>V2Z^b%c^$j^>)S z^85Syjgq3Ovcf`IasU7TA^8LW000jFEC2ui02BZe000C~@X1N5y*TU5Yg=F;j03m~ z*9S7AQZ5E+6`;WiE*xJ4;S4OrVLD zq^HC5lAo_~pYs0x{r~^~A^8LW000jFEC2ui02BZe000D7@X1N5y*TU5>G|Nna879^ z3V9~RxRnWO7y-xJIHT+-78`=#Vo@mc9)Jo^FeDZl1O#9@r7(*PC}E43Bq@Wics$6M ZU5s;*CQxUf_d3_{csz*D~813(lGjTD@2z{n9^mxAJO7)Ys5OF}UnY`dU@qbmky T#N$E3kp`{PZ$%b~i~s;TfG0;) literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/table/images/table_insert_row_after.gif b/jscripts/tiny_mce/plugins/table/images/table_insert_row_after.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9c14466138007454958671320914d9a7d8a6db5 GIT binary patch literal 163 zcmV;U09^k^Nk%w1VH5xq0K*Od0s;b3hwZ}J{xV8pU2lbto3eVM^5XCQa(@5FN<(eWPqQV3Ig1XGua#QiUNM~QhRb*u41x>1^iLw6v{&bt_E>x1D!Tyq@xq`0#T6LwOvdL|b z(z4F}lDPhYn!-Y4ng9R*A^8LW000jFEC2ui02BZe000DY@X1N5y*TU5Y5HK87$oTl zLW8cziUMcq3atxINz(*;fcy>zVR(}yP=SSVxhOap#m7;QWHz6J=oGb%7 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/table/images/table_row_props.gif b/jscripts/tiny_mce/plugins/table/images/table_row_props.gif new file mode 100644 index 0000000000000000000000000000000000000000..e5c7cc37aaded685d68a6f1d0f5f204415258489 GIT binary patch literal 187 zcmV;s07U;sNk%w1VH5xq0K*CZGD>2SrMS}5-GZj_!qMXH@&2N=(w4mbqOihJVuJnt z{^sQ3lB)8xz|uleasU7TA^8LW000jFEC2ui02BZe000DN@X1N5y*TU5EBnkKj-9KxjG%0%ik9LBwDPfF*DxWw(Ncc#J3` p0@_Nzrf3x2h<5?KWxL^Wx|%>X2mX2#XaIzThJ+o7ii;Hy06QxAQu6=+ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/table/images/table_split_cells.gif b/jscripts/tiny_mce/plugins/table/images/table_split_cells.gif new file mode 100644 index 0000000000000000000000000000000000000000..8ccb1b5f89d35619c9fe7a81957305c93f3ed8fc GIT binary patch literal 210 zcmV;@04@JVNk%w1VH5xq0K)FI0=7!2VKkqmrb#i?scsvdKbY znlMRZVtuQCnZ&Zr{r~^~A^8LW000jFEC2ui02BZe000Dk@X1N5y*TU5Y5HK893<%p zLW8c%iY{mB3dRgiNz(*8!x#pIfU#7qN5Q2I~2E2l>h($ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/plugins/table/jscripts/cell.js b/jscripts/tiny_mce/plugins/table/jscripts/cell.js new file mode 100644 index 000000000..436eaad17 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/jscripts/cell.js @@ -0,0 +1,249 @@ +function init() { + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor') + + var inst = tinyMCE.selectedInstance; + var tdElm = tinyMCE.getParentElement(inst.getFocusElement(), "td,th"); + var formObj = document.forms[0]; + var st = tinyMCE.parseStyle(tinyMCE.getAttrib(tdElm, "style")); + + // Get table cell data + var celltype = tdElm.nodeName.toLowerCase(); + var align = tinyMCE.getAttrib(tdElm, 'align'); + var valign = tinyMCE.getAttrib(tdElm, 'valign'); + var width = trimSize(getStyle(tdElm, 'width', 'width')); + var height = trimSize(getStyle(tdElm, 'height', 'height')); + var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor')); + var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor')); + var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tdElm, 'class'), false); + var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");; + var id = tinyMCE.getAttrib(tdElm, 'id'); + var lang = tinyMCE.getAttrib(tdElm, 'lang'); + var dir = tinyMCE.getAttrib(tdElm, 'dir'); + var scope = tinyMCE.getAttrib(tdElm, 'scope'); + + // Setup form + addClassesToList('class', 'table_cell_styles'); + formObj.bordercolor.value = bordercolor; + formObj.bgcolor.value = bgcolor; + formObj.backgroundimage.value = backgroundimage; + formObj.width.value = width; + formObj.height.value = height; + formObj.id.value = id; + formObj.lang.value = lang; + formObj.style.value = tinyMCE.serializeStyle(st); + selectByValue(formObj, 'align', align); + selectByValue(formObj, 'valign', valign); + selectByValue(formObj, 'class', className); + selectByValue(formObj, 'celltype', celltype); + selectByValue(formObj, 'dir', dir); + selectByValue(formObj, 'scope', scope); + + // Resize some elements + if (isVisible('backgroundimagebrowser')) + document.getElementById('backgroundimage').style.width = '180px'; + + updateColor('bordercolor_pick', 'bordercolor'); + updateColor('bgcolor_pick', 'bgcolor'); +} + +function updateAction() { + tinyMCEPopup.restoreSelection(); + + var inst = tinyMCE.selectedInstance; + var tdElm = tinyMCE.getParentElement(inst.getFocusElement(), "td,th"); + var trElm = tinyMCE.getParentElement(inst.getFocusElement(), "tr"); + var tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table"); + var formObj = document.forms[0]; + + inst.execCommand('mceBeginUndoLevel'); + + switch (getSelectValue(formObj, 'action')) { + case "cell": + var celltype = getSelectValue(formObj, 'celltype'); + var scope = getSelectValue(formObj, 'scope'); + + if (tinyMCE.getParam("accessibility_warnings")) { + if (celltype == "th" && scope == "") + var answer = confirm(tinyMCE.getLang('lang_table_missing_scope', '', true)); + else + var answer = true; + + if (!answer) + return; + } + + updateCell(tdElm); + break; + + case "row": + var cell = trElm.firstChild; + + if (cell.nodeName != "TD" && cell.nodeName != "TH") + cell = nextCell(cell); + + do { + cell = updateCell(cell, true); + } while ((cell = nextCell(cell)) != null); + + break; + + case "all": + var rows = tableElm.getElementsByTagName("tr"); + + for (var i=0; i colLimit) { + alert(tinyMCE.getLang('lang_table_col_limit', '', true, {cols : colLimit})); + return false; + } else if (rowLimit && rows > rowLimit) { + alert(tinyMCE.getLang('lang_table_row_limit', '', true, {rows : rowLimit})); + return false; + } else if (cellLimit && cols * rows > cellLimit) { + alert(tinyMCE.getLang('lang_table_cell_limit', '', true, {cells : cellLimit})); + return false; + } + + // Update table + if (action == "update") { + inst.execCommand('mceBeginUndoLevel'); + + tinyMCE.setAttrib(elm, 'cellPadding', cellpadding, true); + tinyMCE.setAttrib(elm, 'cellSpacing', cellspacing, true); + tinyMCE.setAttrib(elm, 'border', border, true); + tinyMCE.setAttrib(elm, 'align', align); + tinyMCE.setAttrib(elm, 'class', className); + tinyMCE.setAttrib(elm, 'style', style); + tinyMCE.setAttrib(elm, 'id', id); + tinyMCE.setAttrib(elm, 'summary', summary); + tinyMCE.setAttrib(elm, 'dir', dir); + tinyMCE.setAttrib(elm, 'lang', lang); + + // Not inline styles + if (!tinyMCE.getParam("inline_styles")) + tinyMCE.setAttrib(elm, 'width', width, true); + + // Remove these since they are not valid XHTML + tinyMCE.setAttrib(elm, 'borderColor', ''); + tinyMCE.setAttrib(elm, 'bgColor', ''); + tinyMCE.setAttrib(elm, 'background', ''); + tinyMCE.setAttrib(elm, 'height', ''); + + if (background != '') + elm.style.backgroundImage = "url('" + background + "')"; + else + elm.style.backgroundImage = ''; + + if (tinyMCE.getParam("inline_styles")) + elm.style.borderWidth = border + "px"; + + if (tinyMCE.getParam("inline_styles")) { + if (width != '') + elm.style.width = getCSSSize(width); + } + + if (bordercolor != "") { + elm.style.borderColor = bordercolor; + elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle; + elm.style.borderWidth = border == "" ? "1px" : border; + } else + elm.style.borderColor = ''; + + elm.style.backgroundColor = bgcolor; + elm.style.height = getCSSSize(height); + + tinyMCE.handleVisualAid(tinyMCE.tableElm, false, inst.visualAid, inst); + + // Fix for stange MSIE align bug + tinyMCE.tableElm.outerHTML = tinyMCE.tableElm.outerHTML; + + tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst); + tinyMCE.triggerNodeChange(); + inst.execCommand('mceEndUndoLevel'); + + // Repaint if dimensions changed + if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight) + inst.repaint(); + + tinyMCEPopup.close(); + return true; + } + + // Create new table + html += '/g, '>'); + + return ' ' + attrib + '="' + value + '"'; +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); + document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); + document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); + + var cols = 2, rows = 2, border = 0, cellpadding = "", cellspacing = ""; + var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = ""; + var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = ""; + var inst = tinyMCE.selectedInstance; + var formObj = document.forms[0]; + var elm = tinyMCE.getParentElement(inst.getFocusElement(), "table"); + + tinyMCE.tableElm = elm; + action = tinyMCE.getWindowArg('action'); + if (action == null) + action = tinyMCE.tableElm ? "update" : "insert"; + + if (tinyMCE.tableElm && action != "insert") { + var rowsAr = tinyMCE.tableElm.rows; + var cols = 0; + for (var i=0; i cols) + cols = rowsAr[i].cells.length; + + cols = cols; + rows = rowsAr.length; + + st = tinyMCE.parseStyle(tinyMCE.getAttrib(tinyMCE.tableElm, "style")); + border = trimSize(getStyle(elm, 'border', 'borderWidth')); + cellpadding = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellpadding', ""); + cellspacing = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellspacing', ""); + width = trimSize(getStyle(elm, 'width', 'width')); + height = trimSize(getStyle(elm, 'height', 'height')); + bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor')); + bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor')); + align = tinyMCE.getAttrib(tinyMCE.tableElm, 'align', align); + className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tinyMCE.tableElm, 'class'), false); + id = tinyMCE.getAttrib(tinyMCE.tableElm, 'id'); + summary = tinyMCE.getAttrib(tinyMCE.tableElm, 'summary'); + style = tinyMCE.serializeStyle(st); + dir = tinyMCE.getAttrib(tinyMCE.tableElm, 'dir'); + lang = tinyMCE.getAttrib(tinyMCE.tableElm, 'lang'); + background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + + orgTableWidth = width; + orgTableHeight = height; + + action = "update"; + } + + addClassesToList('class', "table_styles"); + + // Update form + selectByValue(formObj, 'align', align); + selectByValue(formObj, 'class', className); + formObj.cols.value = cols; + formObj.rows.value = rows; + formObj.border.value = border; + formObj.cellpadding.value = cellpadding; + formObj.cellspacing.value = cellspacing; + formObj.width.value = width; + formObj.height.value = height; + formObj.bordercolor.value = bordercolor; + formObj.bgcolor.value = bgcolor; + formObj.id.value = id; + formObj.summary.value = summary; + formObj.style.value = style; + formObj.dir.value = dir; + formObj.lang.value = lang; + formObj.backgroundimage.value = background; + formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); + + updateColor('bordercolor_pick', 'bordercolor'); + updateColor('bgcolor_pick', 'bgcolor'); + + // Resize some elements + if (isVisible('backgroundimagebrowser')) + document.getElementById('backgroundimage').style.width = '180px'; + + // Disable some fields in update mode + if (action == "update") { + formObj.cols.disabled = true; + formObj.rows.disabled = true; + } +} + +function changedSize() { + var formObj = document.forms[0]; + var st = tinyMCE.parseStyle(formObj.style.value); + + var width = formObj.width.value; + if (width != "") + st['width'] = tinyMCE.getParam("inline_styles") ? getCSSSize(width) : ""; + else + st['width'] = ""; + + var height = formObj.height.value; + if (height != "") + st['height'] = getCSSSize(height); + else + st['height'] = ""; + + formObj.style.value = tinyMCE.serializeStyle(st); +} + +function changedBackgroundImage() { + var formObj = document.forms[0]; + var st = tinyMCE.parseStyle(formObj.style.value); + + st['background-image'] = "url('" + formObj.backgroundimage.value + "')"; + + formObj.style.value = tinyMCE.serializeStyle(st); +} + +function changedBorder() { + var formObj = document.forms[0]; + var st = tinyMCE.parseStyle(formObj.style.value); + + // Update border width if the element has a color + if (formObj.border.value != "" && formObj.bordercolor.value != "") + st['border-width'] = formObj.border.value + "px"; + + formObj.style.value = tinyMCE.serializeStyle(st); +} + +function changedColor() { + var formObj = document.forms[0]; + var st = tinyMCE.parseStyle(formObj.style.value); + + st['background-color'] = formObj.bgcolor.value; + + if (formObj.bordercolor.value != "") { + st['border-color'] = formObj.bordercolor.value; + + // Add border-width if it's missing + if (!st['border-width']) + st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px"; + } + + formObj.style.value = tinyMCE.serializeStyle(st); +} + +function changedStyle() { + var formObj = document.forms[0]; + var st = tinyMCE.parseStyle(formObj.style.value); + + if (st['background-image']) + formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + else + formObj.backgroundimage.value = ''; + + if (st['width']) + formObj.width.value = trimSize(st['width']); + + if (st['height']) + formObj.height.value = trimSize(st['height']); + + if (st['background-color']) { + formObj.bgcolor.value = st['background-color']; + updateColor('bgcolor_pick','bgcolor'); + } + + if (st['border-color']) { + formObj.bordercolor.value = st['border-color']; + updateColor('bordercolor_pick','bordercolor'); + } +} diff --git a/jscripts/tiny_mce/plugins/table/langs/ar.js b/jscripts/tiny_mce/plugins/table/langs/ar.js new file mode 100644 index 000000000..478ece66f --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/ar.js @@ -0,0 +1,43 @@ +// Arabic lang variables + +tinyMCE.addToLang('',{ +table_desc : 'إدراج/تحرير جدول', +table_insert_row_before_desc : 'Insert row before', +table_insert_row_after_desc : 'Insert row after', +table_delete_row_desc : 'حذف صفوف', +table_insert_col_before_desc : 'Insert column before', +table_insert_col_after_desc : 'Insert column after', +table_delete_col_desc : 'حذف أعمدة', +insert_table_title : 'إدراج/تحرير جدول', +insert_table_width : 'العرض', +insert_table_height : 'الارتفاع', +insert_table_cols : 'أعمدة', +insert_table_rows : 'صفوف', +insert_table_cellspacing : 'تباعد الخلايا', +insert_table_cellpadding : 'المسافة البادئة', +insert_table_border : 'سمك الحدود', +insert_table_align : 'المحاذاة', +insert_table_align_default : 'Default', +insert_table_align_left : 'يسار', +insert_table_align_right : 'يمين', +insert_table_align_middle : 'وسط', +insert_table_class : 'Class', +table_row_title : 'Table row properties', +table_cell_title : 'Table cell properties', +table_row_desc : 'Table row properties', +table_cell_desc : 'Table cell properties', +insert_table_valign : 'Vertical alignment', +insert_table_align_top : 'Top', +insert_table_align_bottom : 'Bottom', +table_props_desc : 'Table properties', +table_bordercolor : 'Border color', +table_bgcolor : 'Bg color', +table_merge_cells_title : 'Merge table cells', +table_split_cells_desc : 'Split table cells', +table_merge_cells_desc : 'Merge table cells', +table_cut_row_desc : 'Cut table row', +table_copy_row_desc : 'Copy table row', +table_paste_row_before_desc : 'Paste table row before', +table_paste_row_after_desc : 'Paste table row after', +table_insert_desc : 'Insert a new table' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/cs.js b/jscripts/tiny_mce/plugins/table/langs/cs.js new file mode 100644 index 000000000..81979bb55 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/cs.js @@ -0,0 +1,49 @@ +/** + * Czech lang variables + * encoding: utf-8 + * + * $Id: cs.js,v 1.10 2005/10/18 13:59:43 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +table_desc : 'Vložit novou tabulku', +table_insert_row_before_desc : 'Vložit řádek před', +table_insert_row_after_desc : 'Vložit řádek po', +table_delete_row_desc : 'Smazat řádek', +table_insert_col_before_desc : 'Vložit sloupec před', +table_insert_col_after_desc : 'Vložit sloupec po', +table_delete_col_desc : 'Odstranit sloupec', +insert_table_title : 'Vložit/upravit tabulku', +insert_table_width : 'Šířka', +insert_table_height : 'Výška', +insert_table_cols : 'Sloupce', +insert_table_rows : 'Řádky', +insert_table_cellspacing : 'Vnější okraj buněk', +insert_table_cellpadding : 'Vnitřní okraj buněk', +insert_table_border : 'Rámeček', +insert_table_align : 'Zarovnání', +insert_table_align_default : 'Výchozí', +insert_table_align_left : 'Vlevo', +insert_table_align_right : 'Vpravo', +insert_table_align_middle : 'Na střed', +insert_table_class : 'Třída', +table_row_title : 'Vlastnosti řádku', +table_cell_title : 'Vlastnosti buňky', +table_row_desc : 'Vlastnosti řádku', +table_cell_desc : 'Vlastnosti řádku', +insert_table_valign : 'Vertikální zarovnání', +insert_table_align_top : 'Nahoru', +insert_table_align_bottom : 'Dolů', +table_props_desc : 'Vlastnosti tabulky', +table_bordercolor : 'Barva rámečku', +table_bgcolor : 'Barva pozadí', +table_merge_cells_title : 'Sloučit buňky', +table_split_cells_desc : 'Rozdělit buňky', +table_merge_cells_desc : 'Sloučit buňky', +table_cut_row_desc : 'Vyjmout řádek', +table_copy_row_desc : 'Kopírovat řádek', +table_paste_row_before_desc : 'Vložit řádek před', +table_paste_row_after_desc : 'Vložit řádek za', +table_insert_desc : 'Vložit tabulku' +}); + diff --git a/jscripts/tiny_mce/plugins/table/langs/cy.js b/jscripts/tiny_mce/plugins/table/langs/cy.js new file mode 100644 index 000000000..8b54687ef --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/cy.js @@ -0,0 +1,76 @@ +// UK lang variables + +tinyMCE.addToLang('table',{ +general_tab : 'Cyffredinol', +advanced_tab : 'Uwch', +general_props : 'Priodoleddau cyffredinol', +advanced_props : 'Priodoleddau uwch', +desc : 'Mewnosod tabl newydd', +row_before_desc : 'Mewnosod rhes cyn', +row_after_desc : 'Mewnosod rhes ar ôl', +delete_row_desc : 'Dileu rhes', +col_before_desc : 'Mewnosod colofn cyn', +col_after_desc : 'Mewnosod colofn ar ôl', +delete_col_desc : 'Dileu colofn', +rowtype : 'Rhan tabl y rhes', +title : 'Mewnosod/golygu tabl', +width : 'Lled', +height : 'Uchder', +cols : 'Colofnau', +rows : 'Rhesi', +cellspacing : 'Bylchu celloedd', +cellpadding : 'Padio celliodd', +border : 'Ffin', +align : 'Unioni', +align_default : 'Arferol', +align_left : 'Chwith', +align_right : 'Dde', +align_middle : 'Canol', +row_title : 'Priodoleddau rhes tabl', +cell_title : 'Priodoleddau cell tabl', +cell_type : 'Math cell', +row_desc : 'Priodoleddau rhes tabl', +cell_desc : 'Priodoleddau cell tabl', +valign : 'Unioni fertigol', +align_top : 'Brig', +align_bottom : 'Gwaelod', +props_desc : 'Priodoleddau tabl', +bordercolor : 'Lliw ffin', +bgcolor : 'Lliw cefndir', +merge_cells_title : 'Uno celloedd tabl', +split_cells_desc : 'Rhannu celloedd tabl', +merge_cells_desc : 'Uno celloedd tabl', +cut_row_desc : 'Torri rhes tabl', +copy_row_desc : 'Copïo rhes tabl', +paste_row_before_desc : 'Gludo rhes tabl cyn', +paste_row_after_desc : 'Gludo rhes tabl ar ôl', +id : 'Id', +style: 'Arddull', +langdir : 'Cyfeiriad iaith', +langcode : 'Côd iaith', +mime : 'Math MIME y targed', +ltr : 'Chwith i\'r dde', +rtl : 'Dde i\'r chwith', +bgimage : 'Delwedd cefndir', +summary : 'Crynodeb', +td : "Data", +th : "Pennawd", +cell_cell : 'Diweddaru\'r gell bresennoll', +cell_row : 'Diweddaru holl gelloedd y rhes', +cell_all : 'Diweddaru holl gelloedd y tabl', +row_row : 'Diweddaru\'r rhes presennol', +row_odd : 'Diweddaru rhesi odrif y tabl', +row_even : 'Diweddaru rhesi eilrif y tabl', +row_all : 'Diweddaru holl rhesi\'r tabl', +thead : 'Pennawd Tabl', +tbody : 'Corff Tabl', +tfoot : 'Troedyn Tabl', +del : 'Dileu tabl', +scope : 'Maes', +row : 'Rhes', +col : 'Colofn', +rowgroup : 'Grŵp Rhesi', +colgroup : 'Grŵp Colofnau', +missing_scope: 'Wyt ti\'n sicr eisiau parhau heb gynnwys maes ar gyfer y cell pennawd tabl hwn? Heb un, gallai fod yn anodd i rai defnyddwyr gydag anableddau ddeall cynnwys neu ddata y tabl.', +cellprops_delta_width : 50 +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/da.js b/jscripts/tiny_mce/plugins/table/langs/da.js new file mode 100644 index 000000000..5cef2e857 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/da.js @@ -0,0 +1,69 @@ +// DK lang variables contributed by Jan Moelgaard + +tinyMCE.addToLang('table',{ +general_tab : 'Generelt', +advanced_tab : 'Avanceret', +general_props : 'Generelle egenskaber', +advanced_props : 'Avancerede egenskaber', +desc : 'Indsætter ny tabel', +row_before_desc : 'Indsæt række foran', +row_after_desc : 'Indsæt række efter', +delete_row_desc : 'Slet række', +col_before_desc : 'Indsæt kolonne foran', +col_after_desc : 'Indsæt kolonner efter', +delete_col_desc : 'Fjern kolonne', +rowtype : 'Række i tabeldelen', +title : 'Indsæt eller rediger tabel', +width : 'Bredde', +height : 'Højde', +cols : 'Kolonner', +rows : 'Rækker', +cellspacing : 'Cellemargin', +cellpadding : 'Indvendig margin', +border : 'Kant', +align : 'Justering', +align_default : 'Standard', +align_left : 'Venstre', +align_right : 'Højre', +align_middle : 'Centreret', +row_title : 'Rækkeegenskaber', +cell_title : 'Celleegenskaber', +cell_type : 'Celletype', +row_desc : 'Rækkeegenskaber', +cell_desc : 'Celleegenskaber', +valign : 'Vertikal justering', +align_top : 'Top', +align_bottom : 'Bund', +props_desc : 'Tabelegenskaber', +bordercolor : 'Kantfarve', +bgcolor : 'Baaggrundfarve', +merge_cells_title : 'Flet celler', +split_cells_desc : 'Del celler', +merge_cells_desc : 'Flet celler', +cut_row_desc : 'Del kolonne', +copy_row_desc : 'Kopier kolonne', +paste_row_before_desc : 'Indsæt kolonne foran', +paste_row_after_desc : 'Indsæt kolonne efter', +id : 'Tabel-Id', +style: 'Style', +langdir : 'Tekstretning', +langcode : 'Sprogkode', +mime : 'Target MIME type', +ltr : 'Venstre til højre', +rtl : 'Højre til venstre', +bgimage : 'Baggrundbillede', +summary : 'Opsummering', +td : "Data", +th : "Overskrift", +cell_cell : 'Opdater aktuel celle', +cell_row : 'Opdater alle celler i kolonnen', +cell_all : 'Opdater alle celler i tabellen', +row_row : 'Opdater aktuel kolonne', +row_odd : 'Opdater ulige kolonner i tabellen', +row_even : 'Opdater lige kolonner i tabellen', +row_all : 'Opdater alle kolonner i tabellen', +thead : 'Tabeloverskrift', +tbody : 'Tabelindhold', +tfoot : 'Tabelfodnote', +del : 'Slet tabel' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/de.js b/jscripts/tiny_mce/plugins/table/langs/de.js new file mode 100644 index 000000000..5465f4a24 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/de.js @@ -0,0 +1,76 @@ +// DE lang variables + +tinyMCE.addToLang('table',{ +general_tab : 'Allgemein', +advanced_tab : 'Erweitert', +general_props : 'Allgemeine Eigenschaften', +advanced_props : 'Erweiterte Eigenschaften', +desc : 'Neue Tabelle einfügen', +row_before_desc : 'Zeile oberhalb einfügen', +row_after_desc : 'Zeile unterhalb einfügen', +delete_row_desc : 'Zeile löschen', +col_before_desc : 'Spalte nach links einfügen', +col_after_desc : 'Spalte nach rechts einfügen', +delete_col_desc : 'Spalte löschen', +rowtype : 'Zeile in Tabellen-Teil', +title : 'Tabelle hinzufügen/bearbeiten', +width : 'Breite', +height : 'Höhe', +cols : 'Spalten', +rows : 'Zeilen', +cellspacing : 'Zellenabstand', +cellpadding : 'Zellenauffüllung', +border : 'Rahmen', +align : 'Ausrichtung', +align_default : 'Standard', +align_left : 'Links', +align_right : 'Rechts', +align_middle : 'Zentriert', +row_title : 'Zeileneigenschaften', +cell_title : 'Zelleneigenschaften', +cell_type : 'Zellentyp', +row_desc : 'Zeileneigenschaften', +cell_desc : 'Zelleneigenschaften', +valign : 'Vertikale Ausrichtung', +align_top : 'Oben', +align_bottom : 'Unten', +props_desc : 'Tabelleneigenschaften', +bordercolor : 'Rahmenfarbe', +bgcolor : 'Hintergrundfarbe', +merge_cells_title : 'Zellen zusammenfügen', +split_cells_desc : 'Zelle teilen', +merge_cells_desc : 'Zellen zusammenfügen', +cut_row_desc : 'Zeile ausschneiden', +copy_row_desc : 'Zeile kopieren', +paste_row_before_desc : 'Zeile oberhalb einfügen', +paste_row_after_desc : 'Zeile unterhalb einfügen', +id : 'ID', +style: 'CSS-Stil', +langdir : 'Sprachrichtung', +langcode : 'Sprachcode', +mime : 'MIME-Typ', +ltr : 'Von links nach rechts', +rtl : 'Von rechts nach links', +bgimage : 'Hintergrundfarbe', +summary : 'Zusammenfassung', +td : "Daten", +th : "Kopfzeile", +cell_cell : 'Diese Zelle aktualisieren', +cell_row : 'Alle Zellen in dieser Zeile aktualisieren', +cell_all : 'Alle Zellen in dieser Tabelle aktualisieren', +row_row : 'Diese Zeile aktualisieren', +row_odd : 'Ungerade Zeilen aktualisieren', +row_even : 'Gerade Zeilen aktualisieren', +row_all : 'Alle Zeilen in dieser Tabelle aktualisieren', +thead : 'Tabellenkopf', +tbody : 'Tabellenkörper', +tfoot : 'Tabellenfuß', +del : 'Tabelle löschen', +scope : 'Scope', +row : 'Row', +col : 'Col', +rowgroup : 'Row Group', +colgroup : 'Col Group', +missing_scope: 'Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.', +table_delta_width : 45 +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/el.js b/jscripts/tiny_mce/plugins/table/langs/el.js new file mode 100644 index 000000000..7b329245f --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/el.js @@ -0,0 +1,43 @@ +// Greek lang variables by Jacaranda Bill + +tinyMCE.addToLang('',{ +table_desc : 'ÅéóáãùãÞ ðßíáêá', +table_insert_row_before_desc : 'ÅéóáãùãÞ ãñáììÞò åðÜíù', +table_insert_row_after_desc : 'ÅéóáãùãÞ ãñáììÞò êÜôù', +table_delete_row_desc : 'ÄéáãñáöÞ ãñáììÞò', +table_insert_col_before_desc : 'ÅéóáãùãÞ óôÞëçò áñéóôåñÜ', +table_insert_col_after_desc : 'ÅéóáãùãÞ óôÞëçò äåîéÜ', +table_delete_col_desc : 'ÄéáãñáöÞ óôÞëçò', +insert_table_title : 'ÅéóáãùãÞ/Äéüñèùóç ðßíáêá', +insert_table_width : 'ÐëÜôïò', +insert_table_height : '¾øïò', +insert_table_cols : 'ÓôÞëåò', +insert_table_rows : 'ÃñáììÝò', +insert_table_cellspacing : 'ÄéÜóôé÷ï', +insert_table_cellpadding : 'ÃÝìéóìá', +insert_table_border : 'Ðåñßãñáììá', +insert_table_align : 'Óôïß÷éóç', +insert_table_align_default : 'Ðñïêáè.', +insert_table_align_left : 'ÁñéóôåñÜ', +insert_table_align_right : 'ÄåîéÜ', +insert_table_align_middle : 'Óôï êÝíôñï', +insert_table_class : 'ÊëÜóç', +table_row_title : 'Table row properties', +table_cell_title : 'Table cell properties', +table_row_desc : 'Table row properties', +table_cell_desc : 'Table cell properties', +insert_table_valign : 'Vertical alignment', +insert_table_align_top : 'Top', +insert_table_align_bottom : 'Bottom', +table_props_desc : 'Table properties', +table_bordercolor : 'Border color', +table_bgcolor : 'Bg color', +table_merge_cells_title : 'Merge table cells', +table_split_cells_desc : 'Split table cells', +table_merge_cells_desc : 'Merge table cells', +table_cut_row_desc : 'Cut table row', +table_copy_row_desc : 'Copy table row', +table_paste_row_before_desc : 'Paste table row before', +table_paste_row_after_desc : 'Paste table row after', +table_insert_desc : 'Insert a new table' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/en.js b/jscripts/tiny_mce/plugins/table/langs/en.js new file mode 100644 index 000000000..108d6afb1 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/en.js @@ -0,0 +1,78 @@ +// UK lang variables + +tinyMCE.addToLang('table',{ +general_tab : 'General', +advanced_tab : 'Advanced', +general_props : 'General properties', +advanced_props : 'Advanced properties', +desc : 'Inserts a new table', +row_before_desc : 'Insert row before', +row_after_desc : 'Insert row after', +delete_row_desc : 'Delete row', +col_before_desc : 'Insert column before', +col_after_desc : 'Insert column after', +delete_col_desc : 'Remove column', +rowtype : 'Row in table part', +title : 'Insert/Modify table', +width : 'Width', +height : 'Height', +cols : 'Columns', +rows : 'Rows', +cellspacing : 'Cellspacing', +cellpadding : 'Cellpadding', +border : 'Border', +align : 'Alignment', +align_default : 'Default', +align_left : 'Left', +align_right : 'Right', +align_middle : 'Center', +row_title : 'Table row properties', +cell_title : 'Table cell properties', +cell_type : 'Cell type', +row_desc : 'Table row properties', +cell_desc : 'Table cell properties', +valign : 'Vertical alignment', +align_top : 'Top', +align_bottom : 'Bottom', +props_desc : 'Table properties', +bordercolor : 'Border color', +bgcolor : 'Background color', +merge_cells_title : 'Merge table cells', +split_cells_desc : 'Split table cells', +merge_cells_desc : 'Merge table cells', +cut_row_desc : 'Cut table row', +copy_row_desc : 'Copy table row', +paste_row_before_desc : 'Paste table row before', +paste_row_after_desc : 'Paste table row after', +id : 'Id', +style: 'Style', +langdir : 'Language direction', +langcode : 'Language code', +mime : 'Target MIME type', +ltr : 'Left to right', +rtl : 'Right to left', +bgimage : 'Background image', +summary : 'Summary', +td : "Data", +th : "Header", +cell_cell : 'Update current cell', +cell_row : 'Update all cells in row', +cell_all : 'Update all cells in table', +row_row : 'Update current row', +row_odd : 'Update odd rows in table', +row_even : 'Update even rows in table', +row_all : 'Update all rows in table', +thead : 'Table Head', +tbody : 'Table Body', +tfoot : 'Table Foot', +del : 'Delete table', +scope : 'Scope', +row : 'Row', +col : 'Col', +rowgroup : 'Row Group', +colgroup : 'Col Group', +col_limit : 'You\'ve exceeded the maximum number of columns of {$cols}.', +row_limit : 'You\'ve exceeded the maximum number of rows of {$rows}.', +cell_limit : 'You\'ve exceeded the maximum number of cells of {$cells}.', +missing_scope: 'Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/es.js b/jscripts/tiny_mce/plugins/table/langs/es.js new file mode 100644 index 000000000..8efb025b8 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/es.js @@ -0,0 +1,84 @@ +/** + * ES lang variables + * + * Authors : Alvaro Velasco, + * Adolfo Sanz De Diego (asanzdiego) , + * Carlos C Soto (eclipxe) + * Last Updated : October 17, 2005 + * TinyMCE Version : 2.0RC3 + */ + +tinyMCE.addToLang('table',{ +general_tab : 'General', +advanced_tab : 'Avanzado', +general_props : 'Propiedades generales', +advanced_props : 'Propiedades avanzadas', +desc : 'Insertar/Modificar tabla', +row_before_desc : 'Insertar una fila antes', +row_after_desc : 'Insert una fila después', +delete_row_desc : 'Eliminar fila', +col_before_desc : 'Insertar una columna antes', +col_after_desc : 'Insertar una columna después', +delete_col_desc : 'Eliminar columna', +rowtype : 'File en parte de tabla', +title : 'Insertar/Modificar tabla', +width : 'Ancho', +height : 'ALto', +cols : 'Columnas', +rows : 'Filas', +cellspacing : 'Espacio entre celdas', +cellpadding : 'Borde interior de las celdas', +border : 'Borde', +align : 'Alineación horizontal', +align_default : 'Defecto', +align_left : 'Izquierda', +align_right : 'Derecha', +align_middle : 'Centrado', +row_title : 'Propiedades de la fila', +cell_title : 'Propiedades de la celda', +cell_type : 'Tipo de celda', +row_desc : 'Propiedades de la fila', +cell_desc : 'Propiedades de la celda', +valign : 'Alineación vertical', +align_top : 'Arriba', +align_bottom : 'Abajo', +props_desc : 'Propiedades de la tabla', +bordercolor : 'Color del borde', +bgcolor : 'Color del fondo', +merge_cells_title : 'Combinar celdas', +split_cells_desc : 'Dividir celdas', +merge_cells_desc : 'Combinar celdas', +cut_row_desc : 'Cortar fila', +copy_row_desc : 'Copiar fila', +paste_row_before_desc : 'Pegar fila antes', +paste_row_after_desc : 'Pegar fila después', +id : 'Id', +style: 'Estilo', +langdir : 'Dirección del texto', +langcode : 'Código del idioma', +mime : 'Tipo MIME del target', +ltr : 'De izquierda a derecha', +rtl : 'De derecha a izquierda', +bgimage : 'Imagen de fondo', +summary : 'Resumen', +td : "Datos", +th : "Cabecera", +cell_cell : 'Actualizar la celda actual', +cell_row : 'Actualizar todas las celdas de la fila', +cell_all : 'Actualizar todas las celdas de la tabla', +row_row : 'Actualizar la fila actual', +row_odd : 'Actualizar las filas impares de la tabla', +row_even : 'Actualizar las filas pares de la tabla', +row_all : 'Actualizar todas las filas de la tabla', +thead : 'Cabecera de la tabla', +tbody : 'Cuerpo de la tabla', +tfoot : 'Pie de la tabla', +del : 'Eliminar tabla', +scope : 'Alcance', +row : 'Fila', +col : 'Columna', +rowgroup : 'Grupo de filas', +colgroup : 'Grupo de columnas', +missing_scope: '¿Estás seguro que quieres continuar sin especificar el alcance para esta celda de tipo cabecera? Sin ello, puede dificultar a algunos usuarios con discapacidades el poder entender el contenido o los datos mostrados en la tabla.', +cellprops_delta_width : 55 +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/fa.js b/jscripts/tiny_mce/plugins/table/langs/fa.js new file mode 100644 index 000000000..101519fc4 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/fa.js @@ -0,0 +1,47 @@ +// IR lang variables +// Persian (Farsi) language pack (for IRAN) +// By: Morteza Zafari +// Lost@LostLord.com +// http://www.LostLord.com + +tinyMCE.addToLang('',{ +table_desc : '??? ???? ????', +table_insert_row_before_desc : '??? ??? ???? ??? ?? ??? ????', +table_insert_row_after_desc : '??? ??? ???? ?? ?? ??? ????', +table_delete_row_desc : '??? ???', +table_insert_col_before_desc : '??? ???? ???? ??? ?? ???? ????', +table_insert_col_after_desc : '??? ???? ???? ?? ?? ???? ????', +table_delete_col_desc : '??? ????', +insert_table_title : '??? ? ?????? ????', +insert_table_width : '???', +insert_table_height : '??????', +insert_table_cols : '????? ??????', +insert_table_rows : '????? ?????', +insert_table_cellspacing : '????? ?? ???? ????', +insert_table_cellpadding : '????? ??? ?? ?????? ????', +insert_table_border : '?????', +insert_table_align : '??? ???? ????', +insert_table_align_default : '??? ???', +insert_table_align_left : '??', +insert_table_align_right : '????', +insert_table_align_middle : '???', +insert_table_class : '????', +table_row_title : 'Table row properties', +table_cell_title : 'Table cell properties', +table_row_desc : 'Table row properties', +table_cell_desc : 'Table cell properties', +insert_table_valign : 'Vertical alignment', +insert_table_align_top : 'Top', +insert_table_align_bottom : 'Bottom', +table_props_desc : 'Table properties', +table_bordercolor : 'Border color', +table_bgcolor : 'Bg color', +table_merge_cells_title : 'Merge table cells', +table_split_cells_desc : 'Split table cells', +table_merge_cells_desc : 'Merge table cells', +table_cut_row_desc : 'Cut table row', +table_copy_row_desc : 'Copy table row', +table_paste_row_before_desc : 'Paste table row before', +table_paste_row_after_desc : 'Paste table row after', +table_insert_desc : 'Insert a new table' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/fi.js b/jscripts/tiny_mce/plugins/table/langs/fi.js new file mode 100644 index 000000000..1c144e366 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/fi.js @@ -0,0 +1,77 @@ +// FI lang variables by Urho Konttori from Absolutions +// Updated by Tuomo Aura, Ateco.fi + +tinyMCE.addToLang('table',{ +general_tab : 'Yleiset', +advanced_tab : 'Edistyneemmät', +general_props : 'Yleisasetukset', +advanced_props : 'Edistyneemmät asetukset', +desc : 'Lisää uusi taulukko', +row_before_desc : 'Lisää rivi edelle', +row_after_desc : 'Lisää rivi jälkeen', +delete_row_desc : 'Poista rivi', +col_before_desc : 'Lisää sarake edelle', +col_after_desc : 'Lisää sarake jälkeen', +delete_col_desc : 'Poista sarake', +rowtype : 'Row in table part', +title : 'Lisää/Muokkaa taulukkoa', +width : 'Leveys', +height : 'Korkeus', +cols : 'Saraketta', +rows : 'Riviä', +cellspacing : 'Cellspacing', +cellpadding : 'Cellpadding', +border : 'Reuna', +align : 'Asettelu', +align_default : 'Oletus', +align_left : 'Vasen', +align_right : 'Oikea', +align_middle : 'Keskelle', +row_title : 'Rivin ominaisuudet', +cell_title : 'Sarakkeen ominaisuudet', +cell_type : 'Solun tyyppi', +row_desc : 'Rivin ominaisuudet', +cell_desc : 'Solun ominaisuudet', +valign : 'Pystysuora asettelu', +align_top : 'Yläreuna', +align_bottom : 'Alareuna', +props_desc : 'Taulukon ominaisuudet', +bordercolor : 'Reunan väri', +bgcolor : 'Taustaväri', +merge_cells_title : 'Yhdistä taulukon solut', +split_cells_desc : 'Erota taulukon solut', +merge_cells_desc : 'Yhdistä taulukon solut', +cut_row_desc : 'Leikkaa taulukon rivi', +copy_row_desc : 'Kopioi taulukon rivi', +paste_row_before_desc : 'Liitä taulukon rivi edelle', +paste_row_after_desc : 'Liitä taulukon rivi jälkeen', +id : 'Id', +style: 'Tyyli', +langdir : 'Kielen suunta', +langcode : 'Kielikoodi', +mime : 'Kohteen MIME-tyyppi', +ltr : 'Vasemmalta oikealle', +rtl : 'Oikealta vasemmalle', +bgimage : 'Taustakuva', +summary : 'Yhteenveto', +td : "Data", +th : "Otsikko", +cell_cell : 'Päivitä kyseinen solu', +cell_row : 'Päivitä kaikki solut rivissä', +cell_all : 'Päivitä kaikki solut taulukossa', +row_row : 'Päivitä kyseinen rivi', +row_odd : 'Päivitä parittomat rivit', +row_even : 'Päivitä parilliset rivit', +row_all : 'Päivitä kaikki rivit', +thead : 'Table Head', +tbody : 'Table Body', +tfoot : 'Table Foot', +del : 'Poista taulukko', +scope : 'Scope', +row : 'Rivi', +col : 'Sarake', +rowgroup : 'Riviryhmä', +colgroup : 'Sarakeryhmä', +missing_scope: 'Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.', +cellprops_delta_width : 50 +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/fr.js b/jscripts/tiny_mce/plugins/table/langs/fr.js new file mode 100644 index 000000000..f788aac26 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/fr.js @@ -0,0 +1,77 @@ +// French lang variables by Laurent Dran +// Modifié par Normand Lamoureux le 2005-11-12 + +tinyMCE.addToLang('table',{ +general_tab : 'Général', +advanced_tab : 'Avancé', +general_props : 'Propriétés générales', +advanced_props : 'Propriétés avancées', +desc : 'Insérer/Modifier un tableau', +row_before_desc : 'Insérer une rangée avant', +row_after_desc : 'Insérer une rangée après', +delete_row_desc : 'Effacer la rangée', +col_before_desc : 'Insérer une colonne avant', +col_after_desc : 'Insérer une colonne après', +delete_col_desc : 'Effacer la colonne', +rowtype : 'Type de rangée', +title : 'Gestionnaire de tableau', +width : 'Largeur', +height : 'Hauteur', +cols : 'Colonnes', +rows : 'Rangées', +cellspacing : 'Entre les cellules', +cellpadding : 'Marges intérieures', +border : 'Bordures', +align : 'Alignement horizontal', +align_default : 'Par défault', +align_left : 'À gauche', +align_right : 'À droite', +align_middle : 'Centré', +row_title : 'Propriétés des rangées', +cell_title : 'Propriétés des cellules', +cell_type : 'Type', +row_desc : 'Propriétés des rangées', +cell_desc : 'Propriétés des cellules', +valign : 'Alignement vertical', +align_top : 'Haut', +align_bottom : 'Bas', +props_desc : 'Propriétés du tableau', +bordercolor : 'Couleur des bordures', +bgcolor : 'Couleur d\'arrière-plan', +merge_cells_title : 'Fusionner les cellules', +split_cells_desc : 'Scinder les cellules', +merge_cells_desc : 'Fusionner les cellules', +cut_row_desc : 'Éliminer la rangée', +copy_row_desc : 'Copier la rangée', +paste_row_before_desc : 'Coller la rangée avant', +paste_row_after_desc : 'Coller la rangée après', +id : 'Id', +style: 'Style en ligne', +langdir : 'Sens d\'écriture', +langcode : 'Code de langue', +mime : 'Type MIME de la cible', +ltr : 'Vers la droite', +rtl : 'Vers la gauche', +bgimage : 'Image d\'arrière-plan', +summary : 'Descriptif', +td : "Donnée", +th : "En-tête", +cell_cell : 'Appliquer à la cellule', +cell_row : 'Appliquer à toute la rangée', +cell_all : 'Appliquer à tout le tableau', +row_row : 'Appliquer à la rangée', +row_odd : 'Appliquer aux rangées pair', +row_even : 'Appliquer aux rangées impair', +row_all : 'Appliquer à toutes les rangées', +thead : 'En-tête', +tbody : 'Corps', +tfoot : 'Pied', +del : 'Effacer le tableau', +scope : 'Attribut scope', +row : 'Rangée', +col : 'Colonne', +rowgroup : 'Groupe de rangées', +colgroup : 'Groupe de colonnes', +missing_scope: 'Les attributs scope rendraient votre tableau de données plus\naccessible à certains groupes d\'utilisateurs.\n\nÊtes-vous sûr de ne pas vouloir spécifier\nd\'attribut scope aux cellules d\'en-tête ?\n\n', +cellprops_delta_width : 50 +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/fr_ca.js b/jscripts/tiny_mce/plugins/table/langs/fr_ca.js new file mode 100644 index 000000000..282034c05 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/fr_ca.js @@ -0,0 +1,43 @@ +// Canadian French lang variables by Virtuelcom last modification: 2005-06-15 + +tinyMCE.addToLang('',{ +table_desc : 'Insérer un nouveau tableau', +table_insert_row_before_desc : 'Insérer une ligne avant', +table_insert_row_after_desc : 'Insérer une ligne après', +table_delete_row_desc : 'Supprimer la ligne', +table_insert_col_before_desc : 'Insérer une colonne avant', +table_insert_col_after_desc : 'Insérer une colonne après', +table_delete_col_desc : 'Supprimer la colonne', +insert_table_title : 'Insérer/Modifier le tableau', +insert_table_width : 'Largeur', +insert_table_height : 'Hauteur', +insert_table_cols : 'Colonnes', +insert_table_rows : 'Lignes', +insert_table_cellspacing : 'Cellspacing', +insert_table_cellpadding : 'Cellpadding', +insert_table_border : 'Bordure', +insert_table_align : 'Alignement', +insert_table_align_default : 'Défaut', +insert_table_align_left : 'Gauche', +insert_table_align_right : 'Droit', +insert_table_align_middle : 'Milieu', +insert_table_class_name : 'Classe CSS', +table_row_title : 'Propriétés de ligne', +table_cell_title : 'Propriétés de cellule', +table_row_desc : 'Propriétés de ligne', +table_cell_desc : 'Propriétés de cellule', +insert_table_valign : 'Alignement vertical', +insert_table_align_top : 'Haut', +insert_table_align_bottom : 'Bas', +table_props_desc : 'Table properties', +table_bordercolor : 'Border color', +table_bgcolor : 'Bg color', +table_merge_cells_title : 'Merge table cells', +table_split_cells_desc : 'Split table cells', +table_merge_cells_desc : 'Merge table cells', +table_cut_row_desc : 'Cut table row', +table_copy_row_desc : 'Copy table row', +table_paste_row_before_desc : 'Paste table row before', +table_paste_row_after_desc : 'Paste table row after', +table_insert_desc : 'Insert a new table' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/he.js b/jscripts/tiny_mce/plugins/table/langs/he.js new file mode 100644 index 000000000..a68f6c077 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/he.js @@ -0,0 +1,75 @@ +// HE lang variables + +tinyMCE.addToLang('table',{ +general_tab : 'ëììé', +advanced_tab : 'îú÷ãí', +general_props : 'îàôééðéí ëììééí', +advanced_props : 'îàôééðéí îú÷ãîéí', +desc : 'îëðéñ èáìä çãùä', +row_before_desc : 'äëðñ ùåøä ìôðé', +row_after_desc : 'äëðñ ùåøä àçøé', +delete_row_desc : 'îç÷ ùåøä', +col_before_desc : 'äëðñ èåø ìôðé', +col_after_desc : 'äëðñ èåø àçøé', +delete_col_desc : 'îç÷ èåø', +rowtype : 'ùåøä áçì÷ ùì äèáìä', +title : 'äëðñ/ùðä èáìä', +width : 'øåçá', +height : 'âåáä', +cols : 'èåøéí', +rows : 'ùåøåú', +cellspacing : 'øéååç áéï úàéí', +cellpadding : 'øéôåã úàéí', +border : 'âáåì', +align : 'éùåø', +align_default : 'áøéøú îçãì', +align_left : 'ùîàì', +align_right : 'éîéï', +align_middle : 'îøëæ', +row_title : 'îàôééðé ùåøä áèáìä', +cell_title : 'îàôééðé úà áèáìä', +cell_type : 'ñåâ úà', +row_desc : 'îàôééðé ùåøä áèáìä', +cell_desc : 'îàôééðé úà áèáìä', +valign : 'éùåø àðëé', +align_top : 'ìîòìä', +align_bottom : 'ìîèä', +props_desc : 'îàôééðé èáìä', +bordercolor : 'öáò âáåì', +bgcolor : 'öáò ø÷ò', +merge_cells_title : 'îæâ úàéí áèáìä', +split_cells_desc : 'ôöì úàéí áèáìä', +merge_cells_desc : 'îæâ úàéí áèáìä', +cut_row_desc : 'âæåø ùåøä îäèáìä', +copy_row_desc : 'äòú÷ ùåøä îäèáìä', +paste_row_before_desc : 'äãá÷ ùåøä ìôðé', +paste_row_after_desc : 'äãá÷ ùåøä àçøé', +id : 'Id', +style: 'ñâðåï', +langdir : 'ëéååï ùôä', +langcode : '÷åã ùôä', +mime : 'ñåâ MIME ùì äéòã', +ltr : 'ùîàì ìéîéï', +rtl : 'éîéï ìùîàì', +bgimage : 'úîåðú ø÷ò', +summary : 'ñéëåí', +td : "îéãò", +th : "ëåúøú", +cell_cell : 'òãëï úà ðåëçé', +cell_row : 'òãëï àú ëì äúàéí áùåøä', +cell_all : 'òãëï àú ëì äúàéí áèáìä', +row_row : 'òãëï ùåøä ðåëçéú', +row_odd : 'òãëï ùåøåú àé-æåâéåú áèáìä', +row_even : 'òãëï ùåøåú æåâéåú áèáìä', +row_all : 'òãëï àú ëì äùåøåú áèáìä', +thead : 'ëåúøú äèáìä', +tbody : 'âåó äèáìä', +tfoot : 'ñéëåí äèáìä', +del : 'îç÷ èáìä', +scope : 'úçåí', +row : 'ùåøä', +col : 'èåø', +rowgroup : '÷áåöú ùåøåú', +colgroup : '÷áåöú èåøéí', +missing_scope: 'äàí àúä áèåç ùáøöåðê ìäîùéê îáìé ìöééï àú úçåí äëåúøú ùì äèáìä? áìé ëåúøú îåâãøú, éúëï ëé îùúîùéí áòìé îåâáìåéåú éú÷ùå ìäáéï àú äúåëï àå äîéãò äîåöâéí áèáìä.' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/hu.js b/jscripts/tiny_mce/plugins/table/langs/hu.js new file mode 100644 index 000000000..a649eb72b --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/hu.js @@ -0,0 +1,75 @@ +// HU lang variables + +tinyMCE.addToLang('table',{ +general_tab : 'Általános', +advanced_tab : 'Haladó', +general_props : 'Általános beállítások', +advanced_props : 'Haladó beállítások', +desc : 'Új táblázat beszúrása', +row_before_desc : 'Sor beszúrása elé', +row_after_desc : 'Sor beszúrása mögé', +delete_row_desc : 'Sor törlése', +col_before_desc : 'Oszlop beszúrása elé', +col_after_desc : 'Oszlop beszúrása mögé', +delete_col_desc : 'Oszlop törlése', +rowtype : 'Sor a táblázatrészben', +title : 'Táblázat beszúrása/módosítása', +width : 'Hosszúság', +height : 'Szélesség', +cols : 'Oszlopok', +rows : 'Sorok', +cellspacing : 'Cellaköz', +cellpadding : 'Cellakitöltés', +border : 'Keret', +align : 'Elhelyezkedés', +align_default : 'alapértelmezett', +align_left : 'Bal', +align_right : 'Jobb', +align_middle : 'Közép', +row_title : 'Táblázat sor tulajdonságai', +cell_title : 'Táblázat cella tulajdonságai', +cell_type : 'Cella típus', +row_desc : 'Táblázat sor tulajdonságai', +cell_desc : 'Táblázat cella tulajdonságai', +valign : 'Függõleges elhelyezkedés', +align_top : 'Felül', +align_bottom : 'Alul', +props_desc : 'Táblázat tulajdonságai', +bordercolor : 'Keret szín', +bgcolor : 'Háttér szín', +merge_cells_title : 'Tábla celláinak egyesítése', +split_cells_desc : 'Tábla celláinak felosztása', +merge_cells_desc : 'Tábla celláinak egyesítése', +cut_row_desc : 'Táblázat sor kivágása', +copy_row_desc : 'Táblázat sor másolása', +paste_row_before_desc : 'Táblázat sor beillesztése elé', +paste_row_after_desc : 'Táblázat sor beillesztése mögé', +id : 'Azonodító', +style: 'Stílus', +langdir : 'Szövegpozíció', +langcode : 'Szöveg kód', +mime : 'Cél MIME típus', +ltr : 'Balról jobbra', +rtl : 'Jobbról balra', +bgimage : 'Háttérkép', +summary : 'Összefoglaló', +td : "Adat", +th : "Fejléc", +cell_cell : 'Aktuális cella frissítése', +cell_row : 'Minden cella frissítése a sorban', +cell_all : 'Minden cella frissítése a táblában', +row_row : 'Aktuális sor frissítése', +row_odd : 'Páratlan sorok frissítése a táblában', +row_even : 'páros sorok frissítése a táblában', +row_all : 'Minden sor frissítése a táblában', +thead : 'Táblázat fejléc', +tbody : 'Táblázat test', +tfoot : 'Tálázat lábléc', +del : 'Tábla törlése', +scope : 'Scope', +row : 'Row', +col : 'Col', +rowgroup : 'Row Group', +colgroup : 'Col Group', +missing_scope: 'Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/is.js b/jscripts/tiny_mce/plugins/table/langs/is.js new file mode 100644 index 000000000..9b23d65c0 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/is.js @@ -0,0 +1,76 @@ +// Iceland lang variables by Johannes Birgir Jensson + +tinyMCE.addToLang('table',{ +general_tab : 'Almennt', +advanced_tab : 'Sértækt', +general_props : 'Almennar stillingar', +advanced_props : 'Sértækar stillingar', +desc : 'Setja inn nýja töflu', +row_before_desc : 'Bæta röð við fyrir framan', +row_after_desc : 'Bæta röð við fyrir aftan', +delete_row_desc : 'Eyða röð', +col_before_desc : 'Bæta dálk við fyrir framan', +col_after_desc : 'Bæta dálk við fyrir aftan', +delete_col_desc : 'Eyða dálki', +rowtype : 'Röð í töfluhluta', +title : 'Bæta við/breyta töflu', +width : 'Breidd', +height : 'Hæð', +cols : 'Dálkar', +rows : 'Raðir', +cellspacing : 'Reitabil', +cellpadding : 'Reitabólstrun', +border : 'Rammi', +align : 'Textastilling', +align_default : 'Sjálfgild', +align_left : 'Vinstri', +align_right : 'Hægri', +align_middle : 'Miðja', +row_title : 'Stillingar töfluraðar', +cell_title : 'Stillingar töfludálks', +cell_type : 'Reitartegund', +row_desc : 'Stillingar töfluraðar', +cell_desc : 'Stillingar töflureits', +valign : 'Lóðrétt stilling', +align_top : 'Efst', +align_bottom : 'Neðst', +props_desc : 'Stillingar töflu', +bordercolor : 'Rammalitur', +bgcolor : 'Bakgrunnslitur', +merge_cells_title : 'Sameina töflureiti', +split_cells_desc : 'Tvístra töflureitum', +merge_cells_desc : 'Sameina töflureiti', +cut_row_desc : 'Klippa töfluröð', +copy_row_desc : 'Afrita töfluröð', +paste_row_before_desc : 'Skeyta töfluröð fyrir ofan', +paste_row_after_desc : 'Skeyta töfluröð fyrir neðan', +id : 'Id', +style: 'Stíll', +langdir : 'Ritháttur tungumáls', +langcode : 'Tungumálskenni', +mime : 'MIME-tegund tengils', +ltr : 'Vinstri til hægri', +rtl : 'Hægri til vinstri', +bgimage : 'Bakgrunnsmynd', +summary : 'Samantekt', +td : "Gögn", +th : "Haus", +cell_cell : 'Uppfæra núverandi reit', +cell_row : 'Uppfæra alla reiti í röðinni', +cell_all : 'Uppfæra alla reiti töflunnar', +row_row : 'Uppfæra núverandi röð', +row_odd : 'Uppfæra oddatöluraðir', +row_even : 'Uppfæra jafntöluraðir', +row_all : 'Uppfæra allar raðir', +thead : 'Haus töflu', +tbody : 'Meginmál töflu', +tfoot : 'Fótur töflu', +del : 'Eyða töflu', +scope : 'Gildissvið', +row : 'Röð', +col : 'Dálkur', +rowgroup : 'Raðahópur', +colgroup : 'Dálkahópur', +missing_scope: 'Viltu halda áfram án þess að tilgreina gildissvið fyrir haus töflu? Án þess gæti það valdið sumum notendum, til dæmis sjónskertum, vandkvæðum við að skilja innihald töflunnar.', +cellprops_delta_width : 55 +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/it.js b/jscripts/tiny_mce/plugins/table/langs/it.js new file mode 100644 index 000000000..b9166adc6 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/it.js @@ -0,0 +1,43 @@ +// Variabili di lingua IT - fabrix.xm@lombardiacom.it + +tinyMCE.addToLang('',{ +table_desc : 'Inserisci una nuova tabella', +table_insert_row_before_desc : 'Inserisci una riga prima', +table_insert_row_after_desc : 'Inserisci una riga dopo', +table_delete_row_desc : 'Cancella riga', +table_insert_col_before_desc : 'Inserisci colonna prima', +table_insert_col_after_desc : 'Inserisci colonna dopo', +table_delete_col_desc : 'Rimuovi colonna', +insert_table_title : 'Inserisci/modifica tabella', +insert_table_width : 'Larghezza', +insert_table_height : 'Altezza', +insert_table_cols : 'Colonne', +insert_table_rows : 'Righe', +insert_table_cellspacing : 'Cellspacing', +insert_table_cellpadding : 'Cellpadding', +insert_table_border : 'Bordo', +insert_table_align : 'Allineamento', +insert_table_align_default : 'Default', +insert_table_align_left : 'Sinistra', +insert_table_align_right : 'Destra', +insert_table_align_middle : 'Centro', +insert_table_class : 'Classe', +table_row_title : 'Proprietà della riga', +table_cell_title : 'Proprietà della cella', +table_row_desc : 'Proprietà della riga', +table_cell_desc : 'Proprietà della cella', +insert_table_valign : 'Allineamento verticale', +insert_table_align_top : 'In alto', +insert_table_align_bottom : 'In basso', +table_props_desc : 'Proprietà della tabella', +table_bordercolor : 'Colore bordo', +table_bgcolor : 'Colore sfondo', +table_merge_cells_title : 'Unisci celle', +table_split_cells_desc : 'Dividi celle', +table_merge_cells_desc : 'Unisci le celle', +table_cut_row_desc : 'Taglia riga', +table_copy_row_desc : 'Copia riga', +table_paste_row_before_desc : 'Incolla riga prima', +table_paste_row_after_desc : 'Incolla riga dopo', +table_insert_desc : 'Inserisci una nuova tabella' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/ja.js b/jscripts/tiny_mce/plugins/table/langs/ja.js new file mode 100644 index 000000000..17e308883 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/ja.js @@ -0,0 +1,43 @@ +// JP lang variables + +tinyMCE.addToLang('',{ +table_desc : '$B%F!<%V%k(B', +table_insert_row_before_desc : '$B9TA^F~(B($BA0(B)', +table_insert_row_after_desc : '$B9TA^F~(B($B8e(B)', +table_delete_row_desc : '$B9T:o=|(B', +table_insert_col_before_desc : '$BNsA^F~(B($BA0(B)', +table_insert_col_after_desc : '$BNsA^F~(B($B8e(B)', +table_delete_col_desc : '$BNs:o=|(B', +insert_table_title : '$B%F!<%V%k$NA^F~(B/$BJT=8(B', +insert_table_cols : '$BNs?t(B', +insert_table_rows : '$B9T?t(B', +insert_table_cellspacing : '$B%;%kM>Gr(B', +insert_table_cellpadding : '$B%;%k5M$a(B', +insert_table_align : '$B0LCVD4@0(B', +insert_table_align_default : '$B0EL[(B', +insert_table_align_left : '$B:85M$a(B', +insert_table_align_right : '$B1&5M$a(B', +insert_table_align_middle : '$BCf1{4s$;(B', +insert_table_width : '$BI}(B', +insert_table_height : '$B9b$5(B', +insert_table_border : '$B6-3&@~(B', +insert_table_class : '$B%/%i%9(B', +table_row_title : 'Table row properties', +table_cell_title : 'Table cell properties', +table_row_desc : 'Table row properties', +table_cell_desc : 'Table cell properties', +insert_table_valign : 'Vertical alignment', +insert_table_align_top : 'Top', +insert_table_align_bottom : 'Bottom', +table_props_desc : 'Table properties', +table_bordercolor : 'Border color', +table_bgcolor : 'Bg color', +table_merge_cells_title : 'Merge table cells', +table_split_cells_desc : 'Split table cells', +table_merge_cells_desc : 'Merge table cells', +table_cut_row_desc : 'Cut table row', +table_copy_row_desc : 'Copy table row', +table_paste_row_before_desc : 'Paste table row before', +table_paste_row_after_desc : 'Paste table row after', +table_insert_desc : 'Insert a new table' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/ko.js b/jscripts/tiny_mce/plugins/table/langs/ko.js new file mode 100644 index 000000000..bd8b30e90 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/ko.js @@ -0,0 +1,43 @@ +// KO lang variables + +tinyMCE.addToLang('',{ +table_desc : 'Ç¥ ³Ö±â', +table_insert_row_before_desc : '¾Õ¿¡ Çà ³Ö±â', +table_insert_row_after_desc : 'µÚ¿¡ Çà ³Ö±â', +table_delete_row_desc : 'Çà Áö¿ì±â', +table_insert_col_before_desc : '¾Õ¿¡ ¿­ ³Ö±â', +table_insert_col_after_desc : 'µÚ¿¡ ¿­ ³Ö±â', +table_delete_col_desc : '¿­ Áö¿ì±â', +insert_table_title : 'Ç¥ ³Ö±â/°íÄ¡±â', +insert_table_width : '³Êºñ', +insert_table_height : '³ôÀÌ', +insert_table_cols : 'Çà', +insert_table_rows : '¿­', +insert_table_cellspacing : '¼¿ °£°Ý', +insert_table_cellpadding : '¼¿ ¿©¹é', +insert_table_border : 'Å׵θ®', +insert_table_align : 'Á¤·Ä', +insert_table_align_default : '±âº»°ª', +insert_table_align_left : '¿ÞÂÊ', +insert_table_align_right : '¿À¸¥ÂÊ', +insert_table_align_middle : '°¡¿îµ¥', +insert_table_class : 'Ŭ·¡½º', +table_row_title : 'Table row properties', +table_cell_title : 'Table cell properties', +table_row_desc : 'Table row properties', +table_cell_desc : 'Table cell properties', +insert_table_valign : 'Vertical alignment', +insert_table_align_top : 'Top', +insert_table_align_bottom : 'Bottom', +table_props_desc : 'Table properties', +table_bordercolor : 'Border color', +table_bgcolor : 'Bg color', +table_merge_cells_title : 'Merge table cells', +table_split_cells_desc : 'Split table cells', +table_merge_cells_desc : 'Merge table cells', +table_cut_row_desc : 'Cut table row', +table_copy_row_desc : 'Copy table row', +table_paste_row_before_desc : 'Paste table row before', +table_paste_row_after_desc : 'Paste table row after', +table_insert_desc : 'Insert a new table' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/nb.js b/jscripts/tiny_mce/plugins/table/langs/nb.js new file mode 100644 index 000000000..422017ea3 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/nb.js @@ -0,0 +1,75 @@ +// nb = Norwegian (bokmål) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('table',{ +general_tab : 'Generelt', +advanced_tab : 'Avansert', +general_props : 'Generelle egenskaper', +advanced_props : 'Avanserte egenskaper', +desc : 'Opprett/endre tabell', +row_before_desc : 'Opprett rad foran', +row_after_desc : 'Opprett rad etter', +delete_row_desc : 'Fjern rad', +col_before_desc : 'Opprett kolonne foran', +col_after_desc : 'Opprett kolonne etter', +delete_col_desc : 'Fjern kolonne', +rowtype : 'Rad i tabell', +title : 'Opprett/endre tabell', +width : 'Bredde', +height : 'Høyde', +cols : 'Kolonner', +rows : 'Rader', +cellspacing : 'Celle mellomrom', +cellpadding : 'Celle fylling', +border : 'Rammebredde', +align : 'Justering', +align_default : 'Ingen', +align_left : 'Venstre', +align_right : 'Høyre', +align_middle : 'Midtstilt', +row_title : 'tabell rad egenskaper', +cell_title : 'tabell celle egenskaper', +cell_type : 'Celle type', +row_desc : 'tabell rad egenskaper', +cell_desc : 'tabell celle egenskaper', +valign : 'Vertikal justering', +align_top : 'Topp', +align_bottom : 'Bunn', +props_desc : 'tabell egenskaper', +bordercolor : 'Rammefarge', +bgcolor : 'Bakgrunnsfarge', +merge_cells_title : 'Slå sammen tabell celler', +split_cells_desc : 'Splitt tabell celler', +merge_cells_desc : 'Slå sammen tabell celler', +cut_row_desc : 'Fjern tabell rad', +copy_row_desc : 'Kopier tabell rad', +paste_row_before_desc : 'Lim inn tabell rad foran', +paste_row_after_desc : 'Lim inn tabell rad etter', +id : 'Id', +style: 'Stil', +langdir : 'Språk retning', +langcode : 'Språk kode', +mime : 'Målets MIME type', +ltr : 'Venstre mot høyre', +rtl : 'Høyre mot venstre', +bgimage : 'Bakgrunnsbilde', +summary : 'Sum', +td : "Data", +th : "Overskrift", +cell_cell : 'Oppdater valgt celle', +cell_row : 'Oppdater alle celler i raden', +cell_all : 'Oppdater alle celler i tabellen', +row_row : 'Oppdater valgt rad', +row_odd : 'Oppdater ulike rader i tabellen', +row_even : 'Oppdater like rader i tabellen', +row_all : 'Oppdater alle rader i tabellen', +thead : 'Tabell Hode', +tbody : 'Tabell Kropp', +tfoot : 'Tabell Fot', +del : 'Slett tabell', +scope : 'Hensikt', +row : 'Rad', +col : 'Kolonne', +rowgroup : 'Rad gruppe', +colgroup : 'Kolonne gruppe', +missing_scope: 'Er du sikker på at du vil fortsette uten å oppgi hensikten med denne tabellens hode celle.' +}); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/table/langs/nl.js b/jscripts/tiny_mce/plugins/table/langs/nl.js new file mode 100644 index 000000000..503388b66 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/nl.js @@ -0,0 +1,75 @@ +// NL lang variables + +tinyMCE.addToLang('table',{ +general_tab : 'Algemeen', +advanced_tab : 'Geavanceerd', +general_props : 'Algemene eigenschappen', +advanced_props : 'Geavanceerde eigenschappen', +desc : 'Nieuwe tabel invoegen', +row_before_desc : 'Rij boven invoegen', +row_after_desc : 'Rij onder invoegen', +delete_row_desc : 'Rij verwijderen', +col_before_desc : 'Kolom links invoegen', +col_after_desc : 'Kolom rechts invoegen', +delete_col_desc : 'Kolom verwijderen', +rowtype : 'Row in table part', +title : 'Tabel invoegen/bewerken', +width : 'Breedte', +height : 'Hoogte', +cols : 'Kolommen', +rows : 'Rijen', +cellspacing : 'Ruimte om cel', +cellpadding : 'Ruimte in cel', +border : 'Rand', +align : 'Uitlijning', +align_default : 'Standaard', +align_left : 'Links', +align_right : 'Rechts', +align_middle : 'Centreren', +row_title : 'Tabelrij-eigenschappen', +cell_title : 'Tabelcel-eigenschappen', +cell_type : 'Celtype', +row_desc : 'Tabelrij-eigenschappen', +cell_desc : 'Tabelcel-eigenschappen', +valign : 'Verticale uitlijning', +align_top : 'Boven', +align_bottom : 'Onder', +props_desc : 'Tabeleigenschappen', +bordercolor : 'Randkleur', +bgcolor : 'Achtergrondkleur', +merge_cells_title : 'Tabelcellen samenvoegen', +split_cells_desc : 'Tabelcellen splitsen', +merge_cells_desc : 'Tabelcellen samenvoegen', +cut_row_desc : 'Tabelrij knippen', +copy_row_desc : 'Tebelrij kopiëren', +paste_row_before_desc : 'Tabelrij boven plakken', +paste_row_after_desc : 'tabelrij onder plakken', +id : 'Id', +style: 'Stijl', +langdir : 'Taalrichting', +langcode : 'Taalcode', +mime : 'MIME type', +ltr : 'Links naar rechts', +rtl : 'Rechts naar links', +bgimage : 'Achtergrondafbeelding', +summary : 'Samenvatting', +td : "Data", +th : "Kop", +cell_cell : 'Huidige cel bijwerken', +cell_row : 'Alle cellen in rij bijwerken', +cell_all : 'Alle cellen in tabel bijwerken', +row_row : 'Huidige rij bijwerken', +row_odd : 'Oneven rijen in tabel bijwerken', +row_even : 'Even rijen in tabel bijwerken', +row_all : 'Alle rijen in tabel bijwerken', +thead : 'Tabel-kop', +tbody : 'Tabel-body', +tfoot : 'Tabel-voet', +del : 'Tabel verwijderen', +scope : 'Bereik', +row : 'Rij', +col : 'Kolom', +rowgroup : 'Rijgroep', +colgroup : 'Kolomgroep', +missing_scope: 'Zonder een bereik van een tabelkop, is het moeilijk voor mensen met een visuele handicap deze pagina te begrijpen. Weet u zeker dat u zonder bereik verder wilt gaan?' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/nn.js b/jscripts/tiny_mce/plugins/table/langs/nn.js new file mode 100644 index 000000000..642ab23da --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/nn.js @@ -0,0 +1,76 @@ +// nn = Norwegian (nynorsk) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('table',{ +general_tab : 'Generelt', +advanced_tab : 'Avansert', +general_props : 'Generelle egenskaper', +advanced_props : 'Avanserte egenskaper', +desc : 'Opprett/endre tabell', +row_before_desc : 'Opprett rad foran', +row_after_desc : 'Opprett rad etter', +delete_row_desc : 'Fjern rad', +col_before_desc : 'Opprett kolonne foran', +col_after_desc : 'Opprett kolonne etter', +delete_col_desc : 'Fjern kolonne', +rowtype : 'Rad i tabell', +title : 'Opprett/endre tabell', +width : 'Bredde', +height : 'Høgde', +cols : 'Kolonner', +rows : 'Rader', +cellspacing : 'Celle mellomrom', +cellpadding : 'Celle fylling', +border : 'Rammebredde', +align : 'Justering', +align_default : 'Ingen', +align_left : 'Venstre', +align_right : 'Høgre', +align_middle : 'Midtstilt', +row_title : 'tabell rad egenskaper', +cell_title : 'tabell celle egenskaper', +cell_type : 'Celle type', +row_desc : 'tabell rad egenskaper', +cell_desc : 'tabell celle egenskaper', +valign : 'Vertikal justering', +align_top : 'Topp', +align_bottom : 'Bunn', +props_desc : 'tabell egenskaper', +bordercolor : 'Rammefarge', +bgcolor : 'Bakgrunnsfarge', +merge_cells_title : 'Slå sammen tabell celler', +split_cells_desc : 'Splitt tabell celler', +merge_cells_desc : 'Slå sammen tabell celler', +cut_row_desc : 'Fjern tabell rad', +copy_row_desc : 'Kopier tabell rad', +paste_row_before_desc : 'Lim inn tabell rad foran', +paste_row_after_desc : 'Lim inn tabell rad etter', +id : 'Id', +style: 'Stil', +langdir : 'Språk retning', +langcode : 'Språk kode', +mime : 'Målets MIME type', +ltr : 'Venstre mot høgre', +rtl : 'Høgre mot venstre', +bgimage : 'Bakgrunnsbilde', +summary : 'Sum', +td : "Data", +th : "Overskrift", +cell_cell : 'Oppdater valgt celle', +cell_row : 'Oppdater alle celler i raden', +cell_all : 'Oppdater alle celler i tabellen', +row_row : 'Oppdater valgt rad', +row_odd : 'Oppdater ulike rader i tabellen', +row_even : 'Oppdater like rader i tabellen', +row_all : 'Oppdater alle rader i tabellen', +thead : 'Tabell Hode', +tbody : 'Tabell Kropp', +tfoot : 'Tabell Fot', +del : 'Slett tabell', +scope : 'Hensikt', +row : 'Rad', +col : 'Kolonne', +rowgroup : 'Rad gruppe', +colgroup : 'Kolonne gruppe', +missing_scope: 'Er du sikker på at du vil fortsette uten å oppgi hensikten med denne tabellens hode celle.', +cellprops_delta_width : 30 +}); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/table/langs/pl.js b/jscripts/tiny_mce/plugins/table/langs/pl.js new file mode 100644 index 000000000..b9f0050a2 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/pl.js @@ -0,0 +1,78 @@ +// PL lang variables +// fixed by Wooya +// http://www.mfusion.prv.pl + +tinyMCE.addToLang('table',{ +general_tab : 'G³ówne ustawienia', +advanced_tab : 'Zaawansowane', +general_props : 'G³ówne ustawienia', +advanced_props : 'Zaawansowane ustawienia', +desc : 'Wstawia now± tabelê', +row_before_desc : 'Wstaw wiersz przed', +row_after_desc : 'Wstaw wiersz za', +delete_row_desc : 'Usuñ wiersz', +col_before_desc : 'Wstaw kolumnê przed', +col_after_desc : 'Wstaw kolumnê za', +delete_col_desc : 'Usuñ kolumnê', +rowtype : 'Wiersz w czê¶ci tabeli', +title : 'Wstaw/Zmieñ tabelê', +width : 'Szeroko¶æ', +height : 'Wysoko¶æ', +cols : 'Kolumn', +rows : 'Wierszy', +cellspacing : 'Odstêpy miêdzy komórkami', +cellpadding : 'Margines wewn±trz komórek', +border : 'Ramka', +align : 'Wyrównanie', +align_default : 'Domy¶lne', +align_left : 'Lewo', +align_right : 'Prawo', +align_middle : '¦rodek', +row_title : 'W³a¶ciwo¶ci wiersza', +cell_title : 'W³a¶ciwo¶ci komórki', +cell_type : 'Typ komórki', +row_desc : 'W³a¶ciwo¶ci wiersza', +cell_desc : 'W³a¶ciwo¶ci komórki', +valign : 'Wyrównanie pionowe', +align_top : 'Do góry', +align_bottom : 'Do do³u', +props_desc : 'W³a¶ciwo¶ci tabeli', +bordercolor : 'Kolor ramki', +bgcolor : 'Kolor t³a', +merge_cells_title : 'Po³±cz komórki', +split_cells_desc : 'Rozdziel komórki', +merge_cells_desc : 'Po³±cz komórki', +cut_row_desc : 'Wytnij wiersz', +copy_row_desc : 'Kopiuj wiersz', +paste_row_before_desc : 'Wklej wiersz przed', +paste_row_after_desc : 'Wklej wiersz za', +id : 'Id', +style: 'Styl', +langdir : 'Kierunek tekstu', +langcode : 'Kod jêzyka', +mime : 'Docelowy typ MIME', +ltr : 'Lewy do prawego', +rtl : 'Prawy do lewego', +bgimage : 'Obrazek t³a', +summary : 'Podsumowanie', +td : "Dane", +th : "Nag³ówek", +cell_cell : 'Aktualizuj bie¿±c± komórkê', +cell_row : 'Aktualizuj wszystkie komórki w wierszu', +cell_all : 'Aktualizuj wszystkie komórki w tabeli', +row_row : 'Aktualizuj bierz±c± komórkê', +row_odd : 'Aktualizuj nieparzyste komórki w tabeli', +row_even : 'Aktualizuj parzyste komórki w tabeli', +row_all : 'Aktualizuj wszystkie komórki w tabeli', +thead : 'Nag³ówek tabeli', +tbody : 'Cia³o tabeli', +tfoot : 'Stopka tabeli', +del : 'Usuñ tabelê', +scope : 'Zasiêg', +row : 'Wiersz', +col : 'Kolumna', +rowgroup : 'Grupa wiersza', +colgroup : 'Grupa kolumny', +missing_scope: 'Czy jeste¶ pewien, ¿e chcesz kontynuowaæ bez sprecyzowania zasiêgu dla nag³ówka tej tabeli? Bez tego, niektórzy u¿ytkownicy mog± mieæ problem ze zrozumieniem zawarto¶ci tej tabeli, je¿eli maj± w³±czone jakie¶ ograniczenia w przegl±darkach.', +cellprops_delta_width : 70 +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/pt.js b/jscripts/tiny_mce/plugins/table/langs/pt.js new file mode 100644 index 000000000..65d68c674 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/pt.js @@ -0,0 +1,84 @@ +/** + * pt_br lang variables + * Brazilian Portuguese + * + * Authors : + * Marcio Barbosa (mpg) + * Last Updated : November 26, 2005 + * TinyMCE Version : 2.0RC4 + */ +tinyMCE.addToLang('table',{ +general_tab : 'Geral', +advanced_tab : 'Avançado', +general_props : 'Propriedades Gerais', +advanced_props : 'Propriedades Avançadas', +desc : 'Inserir uma nova tabela', +row_before_desc : 'Inserir uma linha antes', +row_after_desc : 'Inserir uma linha depois', +delete_row_desc : 'Apagar linha', +col_before_desc : 'Inserir uma coluna antes', +col_after_desc : 'Inserir uma coluna depois', +delete_col_desc : 'Remover coluna', +rowtype : 'Linhas na tabela parcial', +title : 'Inserir/Modificar Tabela', +width : 'Largura', +height : 'Altura', +cols : 'Colunas', +rows : 'Linhas', +cellspacing : 'Espaçamento das células', +cellpadding : 'Margem interna', +border : 'Borda', +align : 'Alinhamento', +align_default : 'Padrão', +align_left : 'Esquerda', +align_right : 'Direita', +align_middle : 'Centrado', +row_title : 'Propriedades das linha', +cell_title : 'Propriedades da célula', +cell_type : 'Tipo de célula', +row_desc : 'Propriedades das linhas', +cell_desc : 'Propriedades da célula', +valign : 'Alinhamento vertical', +align_top : 'Superior', +align_bottom : 'Inferior', +props_desc : 'Propriedades da tabela', +bordercolor : 'Côr da borda', +bgcolor : 'Côr do fundo', +merge_cells_title : 'Juntar células', +merge_cells_desc : 'Juntar células da tabela', +split_cells_title : 'Separar células', +split_cells_desc : 'Separar células', +cut_row_desc : 'Apagar linha', +copy_row_desc : 'Copiar linha', +paste_row_before_desc : 'Colar linha antes', +paste_row_after_desc : 'Colar linha depois', +id : 'Id', +style: 'Estilo', +langdir : 'Direção do texto', +langcode : 'Código do idioma', +mime : 'Tipo de MIME do objeto', +ltr : 'Esquerda para direita', +rtl : 'Direita para esquerda', +bgimage : 'Imagem de fundo', +summary : 'Sumário', +td : "Dados", +th : "Cabeçalho", +cell_cell : 'Atulizar célula atual', +cell_row : 'Atualizar todas as cédulas na linha', +cell_all : 'Atualizar todas as cédulas da tabela', +row_row : 'Atualizar linha atual', +row_odd : 'Atualizar linhas ímpares na tabela', +row_even : 'Atualizar linhas pares na tabela', +row_all : 'Atualizar todas as linhas na tabela', +thead : 'Cabeçalho da tabela', +tbody : 'Corpo da tabela', +tfoot : 'Rodapé da tabela', +del : 'Apagar tabela', +dir : 'Direção', +scope : 'Escopo', +row : 'Linha', +col : 'Coluna', +rowgroup : 'Grupo de linhas', +colgroup : 'Grupo de colunas', +missing_scope: 'Tem certeza que deseja continuar sem especificar um escopo para este célula de cabeçalho. Sem isso talvez seja difícil para alguns usuários especiais entender ou conteúdo ou visualizar a tabela.' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/pt_br.js b/jscripts/tiny_mce/plugins/table/langs/pt_br.js new file mode 100644 index 000000000..4736fd648 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/pt_br.js @@ -0,0 +1,85 @@ +/** + * pt_br lang variables + * Brazilian Portuguese + * + * Authors : + * Marcio Barbosa (mpg) + * Last Updated : November 26, 2005 + * TinyMCE Version : 2.0RC4 + */ +tinyMCE.addToLang('table',{ +general_tab : 'Geral', +advanced_tab : 'Avançado', +general_props : 'Propriedades Gerais', +advanced_props : 'Propriedades Avançadas', +desc : 'Inserir uma nova tabela', +row_before_desc : 'Inserir uma linha antes', +row_after_desc : 'Inserir uma linha depois', +delete_row_desc : 'Apagar linha', +col_before_desc : 'Inserir uma coluna antes', +col_after_desc : 'Inserir uma coluna depois', +delete_col_desc : 'Remover coluna', +rowtype : 'Linhas na tabela parcial', +title : 'Inserir/Modificar Tabela', +width : 'Largura', +height : 'Altura', +cols : 'Colunas', +rows : 'Linhas', +cellspacing : 'Espaçamento das células', +cellpadding : 'Margem interna', +border : 'Borda', +align : 'Alinhamento', +align_default : 'Padrão', +align_left : 'Esquerda', +align_right : 'Direita', +align_middle : 'Centrado', +row_title : 'Propriedades das linha', +cell_title : 'Propriedades da célula', +cell_type : 'Tipo de célula', +row_desc : 'Propriedades das linhas', +cell_desc : 'Propriedades da célula', +valign : 'Alinhamento vertical', +align_top : 'Superior', +align_bottom : 'Inferior', +props_desc : 'Propriedades da tabela', +bordercolor : 'Côr da borda', +bgcolor : 'Côr do fundo', +merge_cells_title : 'Juntar células', +merge_cells_desc : 'Juntar células da tabela', +split_cells_title : 'Separar células', +split_cells_desc : 'Separar células', +cut_row_desc : 'Apagar linha', +copy_row_desc : 'Copiar linha', +paste_row_before_desc : 'Colar linha antes', +paste_row_after_desc : 'Colar linha depois', +id : 'Id', +style: 'Estilo', +langdir : 'Direção do texto', +langcode : 'Código do idioma', +mime : 'Tipo de MIME do objeto', +ltr : 'Esquerda para direita', +rtl : 'Direita para esquerda', +bgimage : 'Imagem de fundo', +summary : 'Sumário', +td : "Dados", +th : "Cabeçalho", +cell_cell : 'Atulizar célula atual', +cell_row : 'Atualizar todas as cédulas na linha', +cell_all : 'Atualizar todas as cédulas da tabela', +row_row : 'Atualizar linha atual', +row_odd : 'Atualizar linhas ímpares na tabela', +row_even : 'Atualizar linhas pares na tabela', +row_all : 'Atualizar todas as linhas na tabela', +thead : 'Cabeçalho da tabela', +tbody : 'Corpo da tabela', +tfoot : 'Rodapé da tabela', +del : 'Apagar tabela', +dir : 'Direção', +scope : 'Escopo', +row : 'Linha', +col : 'Coluna', +rowgroup : 'Grupo de linhas', +colgroup : 'Grupo de colunas', +missing_scope: 'Tem certeza que deseja continuar sem especificar um escopo para este célula de cabeçalho. Sem isso talvez seja difícil para alguns usuários especiais entender ou conteúdo ou visualizar a tabela.', +cellprops_delta_width : 55 +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/readme.txt b/jscripts/tiny_mce/plugins/table/langs/readme.txt new file mode 100644 index 000000000..ef48d2ba4 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/readme.txt @@ -0,0 +1,4 @@ +Theme specific language packs. + +The language pack codes are based on ISO-639-2 +http://www.loc.gov/standards/iso639-2/englangn.html diff --git a/jscripts/tiny_mce/plugins/table/langs/ru.js b/jscripts/tiny_mce/plugins/table/langs/ru.js new file mode 100644 index 000000000..e2243851e --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/ru.js @@ -0,0 +1,77 @@ +// RU cp1251 lang variables + +tinyMCE.addToLang('table',{ +general_tab : 'Îñíîâíûå', +advanced_tab : 'Ðàñøèðåííûå', +general_props : 'Îñíîâíûå ñâîéñòâà', +advanced_props : 'Ðàñøèðåííûå ñâîéñòâà', +desc : 'Âñòàâèòü íîâóþ òàáëèöó', +row_before_desc : 'Âñòàâèòü ñòðîêó ïåðåä', +row_after_desc : 'Âñòàâèòü ñòðîêó ïîñëå', +delete_row_desc : 'Óäàëèòü ñòðîêó', +col_before_desc : 'Âñòàâèòü êîëîíêó ïåðåä', +col_after_desc : 'Âñòàâèòü êîëîíêó ïîñëå', +delete_col_desc : 'Óäàëèòü êîëîíêó', +rowtype : 'Ñòðîêà â ÷àñòè òàáëèöû', +title : 'Âñòàâèòü/Èçìåíèòü òàáëèöó', +width : 'Øèðèíà', +height : 'Âûñîòà', +cols : 'Êîëîíêè', +rows : 'Ñòðîêè', +cellspacing : 'Ðàññòîÿíèå ìåæäó ÿ÷åéêàìè', +cellpadding : 'Îòñòóï â ÿ÷åéêàõ', +border : 'Ãðàíèöà', +align : 'Âûðàâíèâàíèå', +align_default : 'Ïî-óìîë÷àíèþ', +align_left : 'Âñåâî', +align_right : 'Âïðàâî', +align_middle : 'Ïî öåíòðó', +row_title : 'Ñâîéñòâà ñòðîêè òàáëèöû', +cell_title : 'Ñâîéñòâà ÿ÷åéêè òàáëèöû', +cell_type : 'Òèï ÿ÷åéêè', +row_desc : 'Ñâîéñòâà ñòðîêè òàáëèöû', +cell_desc : 'Ñâîéñòâà ÿ÷åéêè òàáëèöû', +valign : 'Âåðòèêàëüíîå âûðàâíèâàíèå', +align_top : 'Ïî âåðõó', +align_bottom : 'Ïî íèçó', +props_desc : 'Ñâîéñòâà òàáëèöû', +bordercolor : 'Öâåò ðàìêè', +bgcolor : 'Öâåò ôîíà', +merge_cells_title : 'Îáúåäèíèòü ÿ÷åéêè òàáëèöû', +split_cells_desc : 'Ðàçäåëèòü ÿ÷åéêè òàáëèöû', +merge_cells_desc : 'Îáúåäèíèòü ÿ÷åéêè òàáëèöû', +cut_row_desc : 'Âûëåçàòü ñòðîêó òàáëèöû', +copy_row_desc : 'Ñêîïèðîâàòü ñòðîêó òàáëèöû', +paste_row_before_desc : 'Âñòàâèòü ñòðîêó òàáëèöû ïåðåä', +paste_row_after_desc : 'Âñòàâèòü ñòðîêó òàáëèöû ïîñëå', +id : 'Id', +style: 'Ñòèëü', +langdir : 'Îïèñàíèå ÿçûêà', +langcode : 'Êîä ÿçûêà', +mime : 'Öåëåâîé MIME òèï', +ltr : 'Ñëåâà íàïðàâî', +rtl : 'Ñïðàâà íàëåâî', +bgimage : 'Ôîíîâîå èçîáðàæåíèå', +summary : 'Êðàòêîå îïèñàíèå', +td : "Òåëî", +th : "Çàãîëîâîê", +cell_cell : 'Îáíîâèòü òåêóùóþ ÿ÷åéêó', +cell_row : 'Îáíîâèòü òåêóùóþ ñòðîêó', +cell_all : 'Îáíîâèòü âñå ÿ÷åéêè â òàáëèöå', +row_row : 'Îáíîâèòü òåêóùóþ ñòðîêó', +row_odd : 'Update odd rows in table', +row_even : 'Update even rows in table', +row_all : 'Îáíîâèòü âñå ñòðîêè â òàáëèöå', +thead : 'Çàãîëîâîê òàáëèöû', +tbody : 'Òåëî òàáëèöû', +tfoot : 'Ôóòåð òàáëèöû', +del : 'Óäàëèòü òàáëèöó', +scope : 'Ãðàíèöû', +row : 'Ñòðîêà', +col : 'Êîëîíêà', +rowgroup : 'Ãðóïïà ñòðîê', +colgroup : 'Ãðóïïà êîëîíîê', +missing_scope: 'Âû óâåðåíû, ÷òî õîòèòå ïðîäîëæàòü íå îáîçíà÷èâ ãðàíèöû ÿ÷ååê øàïêè òàáëèöû? Áåç ýòîãî, âîçìîæíî, íåêîòîðûì ïîëüçîâàòåëÿì áóäåò çàòðóäíèòåëüíî ïîíÿòü, ÷òî çà äàííûå íàõîäÿòñÿ â òàáëèöå.', +table_delta_width : 30, +cellprops_delta_width : 130 +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/ru_KOI8-R.js b/jscripts/tiny_mce/plugins/table/langs/ru_KOI8-R.js new file mode 100644 index 000000000..62ad5dd10 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/ru_KOI8-R.js @@ -0,0 +1,75 @@ +// RU KOI8-R lang variables + +tinyMCE.addToLang('table',{ +general_tab : 'ïÓÎÏ×ÎÙÅ', +advanced_tab : 'òÁÓÛÉÒÅÎÎÙÅ', +general_props : 'ïÓÎÏ×ÎÙÅ Ó×ÏÊÓÔ×Á', +advanced_props : 'òÁÓÛÉÒÅÎÎÙÅ Ó×ÏÊÓÔ×Á', +desc : '÷ÓÔÁ×ÉÔØ ÎÏ×ÕÀ ÔÁÂÌÉÃÕ', +row_before_desc : '÷ÓÔÁ×ÉÔØ ÓÔÒÏËÕ ÐÅÒÅÄ', +row_after_desc : '÷ÓÔÁ×ÉÔØ ÓÔÒÏËÕ ÐÏÓÌÅ', +delete_row_desc : 'õÄÁÌÉÔØ ÓÔÒÏËÕ', +col_before_desc : '÷ÓÔÁ×ÉÔØ ËÏÌÏÎËÕ ÐÅÒÅÄ', +col_after_desc : '÷ÓÔÁ×ÉÔØ ËÏÌÏÎËÕ ÐÏÓÌÅ', +delete_col_desc : 'õÄÁÌÉÔØ ËÏÌÏÎËÕ', +rowtype : 'óÔÒÏËÁ × ÞÁÓÔÉ ÔÁÂÌÉÃÙ', +title : '÷ÓÔÁ×ÉÔØ/éÚÍÅÎÉÔØ ÔÁÂÌÉÃÕ', +width : 'ûÉÒÉÎÁ', +height : '÷ÙÓÏÔÁ', +cols : 'ëÏÌÏÎËÉ', +rows : 'óÔÒÏËÉ', +cellspacing : 'òÁÓÓÔÏÑÎÉÅ ÍÅÖÄÕ ÑÞÅÊËÁÍÉ', +cellpadding : 'ïÔÓÔÕÐ × ÑÞÅÊËÁÈ', +border : 'çÒÁÎÉÃÁ', +align : '÷ÙÒÁ×ÎÉ×ÁÎÉÅ', +align_default : 'ðÏ-ÕÍÏÌÞÁÎÉÀ', +align_left : '÷ÓÅ×Ï', +align_right : '÷ÐÒÁ×Ï', +align_middle : 'ðÏ ÃÅÎÔÒÕ', +row_title : 'ó×ÏÊÓÔ×Á ÓÔÒÏËÉ ÔÁÂÌÉÃÙ', +cell_title : 'ó×ÏÊÓÔ×Á ÑÞÅÊËÉ ÔÁÂÌÉÃÙ', +cell_type : 'ôÉÐ ÑÞÅÊËÉ', +row_desc : 'ó×ÏÊÓÔ×Á ÓÔÒÏËÉ ÔÁÂÌÉÃÙ', +cell_desc : 'ó×ÏÊÓÔ×Á ÑÞÅÊËÉ ÔÁÂÌÉÃÙ', +valign : '÷ÅÒÔÉËÁÌØÎÏÅ ×ÙÒÁ×ÎÉ×ÁÎÉÅ', +align_top : 'ðÏ ×ÅÒÈÕ', +align_bottom : 'ðÏ ÎÉÚÕ', +props_desc : 'ó×ÏÊÓÔ×Á ÔÁÂÌÉÃÙ', +bordercolor : 'ã×ÅÔ ÒÁÍËÉ', +bgcolor : 'ã×ÅÔ ÆÏÎÁ', +merge_cells_title : 'ïÂßÅÄÉÎÉÔØ ÑÞÅÊËÉ ÔÁÂÌÉÃÙ', +split_cells_desc : 'òÁÚÄÅÌÉÔØ ÑÞÅÊËÉ ÔÁÂÌÉÃÙ', +merge_cells_desc : 'ïÂßÅÄÉÎÉÔØ ÑÞÅÊËÉ ÔÁÂÌÉÃÙ', +cut_row_desc : '÷ÙÌÅÚÁÔØ ÓÔÒÏËÕ ÔÁÂÌÉÃÙ', +copy_row_desc : 'óËÏÐÉÒÏ×ÁÔØ ÓÔÒÏËÕ ÔÁÂÌÉÃÙ', +paste_row_before_desc : '÷ÓÔÁ×ÉÔØ ÓÔÒÏËÕ ÔÁÂÌÉÃÙ ÐÅÒÅÄ', +paste_row_after_desc : '÷ÓÔÁ×ÉÔØ ÓÔÒÏËÕ ÔÁÂÌÉÃÙ ÐÏÓÌÅ', +id : 'Id', +style: 'óÔÉÌØ', +langdir : 'ïÐÉÓÁÎÉÅ ÑÚÙËÁ', +langcode : 'ëÏÄ ÑÚÙËÁ', +mime : 'ãÅÌÅ×ÏÊ MIME ÔÉÐ', +ltr : 'óÌÅ×Á ÎÁÐÒÁ×Ï', +rtl : 'óÐÒÁ×Á ÎÁÌÅ×Ï', +bgimage : 'æÏÎÏ×ÏÅ ÉÚÏÂÒÁÖÅÎÉÅ', +summary : 'ëÒÁÔËÏÅ ÏÐÉÓÁÎÉÅ', +td : "ôÅÌÏ", +th : "úÁÇÏÌÏ×ÏË", +cell_cell : 'ïÂÎÏ×ÉÔØ ÔÅËÕÝÕÀ ÑÞÅÊËÕ', +cell_row : 'ïÂÎÏ×ÉÔØ ÔÅËÕÝÕÀ ÓÔÒÏËÕ', +cell_all : 'ïÂÎÏ×ÉÔØ ×ÓÅ ÑÞÅÊËÉ × ÔÁÂÌÉÃÅ', +row_row : 'ïÂÎÏ×ÉÔØ ÔÅËÕÝÕÀ ÓÔÒÏËÕ', +row_odd : 'Update odd rows in table', +row_even : 'Update even rows in table', +row_all : 'ïÂÎÏ×ÉÔØ ×ÓÅ ÓÔÒÏËÉ × ÔÁÂÌÉÃÅ', +thead : 'úÁÇÏÌÏ×ÏË ÔÁÂÌÉÃÙ', +tbody : 'ôÅÌÏ ÔÁÂÌÉÃÙ', +tfoot : 'æÕÔÅÒ ÔÁÂÌÉÃÙ', +del : 'õÄÁÌÉÔØ ÔÁÂÌÉÃÕ', +scope : 'çÒÁÎÉÃÙ', +row : 'óÔÒÏËÁ', +col : 'ëÏÌÏÎËÁ', +rowgroup : 'çÒÕÐÐÁ ÓÔÒÏË', +colgroup : 'çÒÕÐÐÁ ËÏÌÏÎÏË', +missing_scope: '÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ÐÒÏÄÏÌÖÁÔØ ÎÅ ÏÂÏÚÎÁÞÉ× ÇÒÁÎÉÃÙ ÑÞÅÅË ÛÁÐËÉ ÔÁÂÌÉÃÙ? âÅÚ ÜÔÏÇÏ, ×ÏÚÍÏÖÎÏ, ÎÅËÏÔÏÒÙÍ ÐÏÌØÚÏ×ÁÔÅÌÑÍ ÂÕÄÅÔ ÚÁÔÒÕÄÎÉÔÅÌØÎÏ ÐÏÎÑÔØ, ÞÔÏ ÚÁ ÄÁÎÎÙÅ ÎÁÈÏÄÑÔÓÑ × ÔÁÂÌÉÃÅ.' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/ru_UTF-8.js b/jscripts/tiny_mce/plugins/table/langs/ru_UTF-8.js new file mode 100644 index 000000000..f72dbab1d --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/ru_UTF-8.js @@ -0,0 +1,75 @@ +// RU UTF-8 lang variables + +tinyMCE.addToLang('table',{ +general_tab : 'Основные', +advanced_tab : 'Расширенные', +general_props : 'Основные свойства', +advanced_props : 'Расширенные свойства', +desc : 'Вставить новую таблицу', +row_before_desc : 'Вставить строку перед', +row_after_desc : 'Вставить строку после', +delete_row_desc : 'Удалить строку', +col_before_desc : 'Вставить колонку перед', +col_after_desc : 'Вставить колонку после', +delete_col_desc : 'Удалить колонку', +rowtype : 'Строка в части таблицы', +title : 'Вставить/Изменить таблицу', +width : 'Ширина', +height : 'Высота', +cols : 'Колонки', +rows : 'Строки', +cellspacing : 'Расстояние между ячейками', +cellpadding : 'Отступ в ячейках', +border : 'Граница', +align : 'Выравнивание', +align_default : 'По-умолчанию', +align_left : 'Всево', +align_right : 'Вправо', +align_middle : 'По центру', +row_title : 'Свойства строки таблицы', +cell_title : 'Свойства ячейки таблицы', +cell_type : 'Тип ячейки', +row_desc : 'Свойства строки таблицы', +cell_desc : 'Свойства ячейки таблицы', +valign : 'Вертикальное выравнивание', +align_top : 'По верху', +align_bottom : 'По низу', +props_desc : 'Свойства таблицы', +bordercolor : 'Цвет рамки', +bgcolor : 'Цвет фона', +merge_cells_title : 'Объединить ячейки таблицы', +split_cells_desc : 'Разделить ячейки таблицы', +merge_cells_desc : 'Объединить ячейки таблицы', +cut_row_desc : 'Вылезать строку таблицы', +copy_row_desc : 'Скопировать строку таблицы', +paste_row_before_desc : 'Вставить строку таблицы перед', +paste_row_after_desc : 'Вставить строку таблицы после', +id : 'Id', +style: 'Стиль', +langdir : 'Описание языка', +langcode : 'Код языка', +mime : 'Целевой MIME тип', +ltr : 'Слева направо', +rtl : 'Справа налево', +bgimage : 'Фоновое изображение', +summary : 'Краткое описание', +td : "Тело", +th : "Заголовок", +cell_cell : 'Обновить текущую ячейку', +cell_row : 'Обновить текущую строку', +cell_all : 'Обновить все ячейки в таблице', +row_row : 'Обновить текущую строку', +row_odd : 'Update odd rows in table', +row_even : 'Update even rows in table', +row_all : 'Обновить все строки в таблице', +thead : 'Заголовок таблицы', +tbody : 'Тело таблицы', +tfoot : 'Футер таблицы', +del : 'Удалить таблицу', +scope : 'Границы', +row : 'Строка', +col : 'Колонка', +rowgroup : 'Группа строк', +colgroup : 'Группа колонок', +missing_scope: 'Вы уверены, что хотите продолжать не обозначив границы ячеек шапки таблицы? Без этого, возможно, некоторым пользователям будет затруднительно понять, что за данные находятся в таблице.' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/sk.js b/jscripts/tiny_mce/plugins/table/langs/sk.js new file mode 100644 index 000000000..86b0e61db --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/sk.js @@ -0,0 +1,51 @@ +/** + * Slovak lang variables + * encoding: utf-8 + * + * @author Vladimir VASIL vvasil@post.sk + * + * $Id: sk.js,v 1.1 2005/11/22 20:56:44 spocke Exp $ + */ + +tinyMCE.addToLang('',{ +table_desc : 'VložiÅ¥ novú tabuľku', +table_insert_row_before_desc : 'VložiÅ¥ riadok pred', +table_insert_row_after_desc : 'VložiÅ¥ riadok po', +table_delete_row_desc : 'ZmazaÅ¥ riadok', +table_insert_col_before_desc : 'VložiÅ¥ stĺpec pred', +table_insert_col_after_desc : 'VložiÅ¥ stĺpec po', +table_delete_col_desc : 'OdstrániÅ¥ stĺpec', +insert_table_title : 'VložiÅ¥/upraviÅ¥ tabuľku', +insert_table_width : 'Šírka', +insert_table_height : 'Výška', +insert_table_cols : 'Stĺpce', +insert_table_rows : 'Riadky', +insert_table_cellspacing : 'Vonkajší okraj buniek', +insert_table_cellpadding : 'Vnutorný okraj buniek', +insert_table_border : 'Riadok', +insert_table_align : 'Zarovnanie', +insert_table_align_default : 'Východzie', +insert_table_align_left : 'Vľavo', +insert_table_align_right : 'Vpravo', +insert_table_align_middle : 'Na stred', +insert_table_class : 'Trieda', +table_row_title : 'Vlastnosti riadku', +table_cell_title : 'Vlastnosti bunky', +table_row_desc : 'Vlastnosti riadku', +table_cell_desc : 'Vlastnosti riadku', +insert_table_valign : 'Vertikálne zarovnávanie', +insert_table_align_top : 'Nahor', +insert_table_align_bottom : 'Dole', +table_props_desc : 'Vlastnosti tabuľky', +table_bordercolor : 'Farba rámčeku', +table_bgcolor : 'Farba pozadia', +table_merge_cells_title : 'ZlúčiÅ¥ bunky', +table_split_cells_desc : 'RozdeliÅ¥ bunky', +table_merge_cells_desc : 'ZlúčiÅ¥ bunky', +table_cut_row_desc : 'VyňaÅ¥ riadok', +table_copy_row_desc : 'KopírovaÅ¥ riadok', +table_paste_row_before_desc : 'VložiÅ¥ riadok pred', +table_paste_row_after_desc : 'VložiÅ¥ riadok za', +table_insert_desc : 'VložiÅ¥ tabuľku' +}); + diff --git a/jscripts/tiny_mce/plugins/table/langs/sv.js b/jscripts/tiny_mce/plugins/table/langs/sv.js new file mode 100644 index 000000000..a9f01ca91 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/sv.js @@ -0,0 +1,76 @@ +// UK lang variables + +tinyMCE.addToLang('table',{ +general_tab : 'Generella inställningar', +advanced_tab : 'Avancerade inställningar', +general_props : 'Generella inställningar', +advanced_props : 'Avancerade inställningar', +desc : 'Skapa ny tabell', +before_desc : 'Skapa rad före', +after_desc : 'Skapa rad efter', +row_before_desc : 'Skapa rad före', +row_after_desc : 'Skapa rad efter', +delete_row_desc : 'Ta bort rad', +col_before_desc : 'Skapa kolumn före', +col_after_desc : 'Skapa kolumn efter', +delete_col_desc : 'Ta bort kolumn', +rowtype : 'Rad typ', +title : 'Skapa/redigera ny tabell', +width : 'Bredd', +height : 'Höjd', +cols : 'Columner', +rows : 'Rader', +cellspacing : 'Cellmellanrum', +cellpadding : 'Cellutfyllnad', +border : 'Ram', +align : 'Justering', +align_default : 'Ingen', +align_left : 'Vänster', +align_right : 'Höger', +align_middle : 'Mitten', +row_title : 'Tabell radsinställningar', +cell_title : 'Tabell cellsinställningar', +cell_type : 'Cell typ', +row_desc : 'Tabell rads inställningar', +cell_desc : 'Tabell cells inställningar', +valign : 'Vertical justering', +align_top : 'Toppen', +align_bottom : 'Botten', +props_desc : 'Tabell inställningar', +bordercolor : 'Ram färg', +bgcolor : 'Bakgrundsfärg', +merge_cells_title : 'Sammanfoga tabell celler', +split_cells_desc : 'Delaupp tabell celler', +merge_cells_desc : 'Sammanfoga tabell celler', +cut_row_desc : 'Klipput tabell rad', +copy_row_desc : 'Kopiera tabell rad', +paste_row_before_desc : 'Klistra in tabell rad före', +paste_row_after_desc : 'Klistra in tabell rad efter', +id : 'Id', +style: 'Stil', +langdir : 'Skrift riktning', +langcode : 'Språk kåd', +ltr : 'Vänster till höger', +rtl : 'Höger till vänster', +bgimage : 'Bakgrundsbild', +summary : 'Sammanfattning', +td : "Data", +th : "Huvud", +cell_cell : 'Updatera nuvarande cell', +cell_row : 'Updatera alla celler i raden', +cell_all : 'Updatera alla celler t tabellen', +row_row : 'Updatera nuvarande rad', +row_odd : 'Updatera udda rader i tabellen', +row_even : 'Updatera jämna rader i tabellen', +row_all : 'Updatera alla rader i tabellen', +thead : 'Tabell Huvud', +tbody : 'Tabell Kropp', +tfoot : 'Tabell Fot', +del : 'Tabort tabell', +scope : 'Scope', +row : 'Rad', +col : 'Kolumn', +rowgroup : 'Rad grupp', +colgroup : 'Kolumn grupp', +missing_scope: 'Är du säker på att du vill fortsätta utan att specifisera ett scope, utan denna kan det bli svårt för handikappade att förstå tabellen.' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/tw.js b/jscripts/tiny_mce/plugins/table/langs/tw.js new file mode 100644 index 000000000..847e20219 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/tw.js @@ -0,0 +1,43 @@ +// TW lang variables contributed by Jim Kou + +tinyMCE.addToLang('',{ +insert_table_align : '¹ï»ô', +insert_table_align_default : '¼Ð·Ç', +insert_table_align_left : '»ô¥ª', +insert_table_align_middle : '¸m¤¤', +insert_table_align_right : '»ô¥k', +insert_table_border : '®Ø½u', +insert_table_cellpadding : '¦rÅé»PÀx¦s®æ¶¡»Ø', +insert_table_cellspacing : 'Àx¦s®æ¶¡»Ø', +insert_table_class : '¼Ë¦¡', +insert_table_cols : '¦æ', +insert_table_height : '°ª«×', +insert_table_rows : '¦C', +insert_table_title : 'ªí®æ¼ÐÃD', +insert_table_width : '¼e«×', +table_delete_col_desc : '§R°£¤@¦æÀx¦s®æ', +table_delete_row_desc : '§R°£¤@¦CÀx¦s®æ', +table_desc : 'ªí®æ', +table_insert_col_after_desc : '·s¼W¤@¦æÀx¦s®æ(«á)', +table_insert_col_before_desc : '·s¼W¤@¦æÀx¦s®æ(«e)', +table_insert_row_after_desc : '·s¼W¤@¦CÀx¦s®æ(«á)', +table_insert_row_before_desc : '·s¼W¤@¦CÀx¦s®æ(«e)', +table_row_title : 'Table row properties', +table_cell_title : 'Table cell properties', +table_row_desc : 'Table row properties', +table_cell_desc : 'Table cell properties', +insert_table_valign : 'Vertical alignment', +insert_table_align_top : 'Top', +insert_table_align_bottom : 'Bottom', +table_props_desc : 'Table properties', +table_bordercolor : 'Border color', +table_bgcolor : 'Bg color', +table_merge_cells_title : 'Merge table cells', +table_split_cells_desc : 'Split table cells', +table_merge_cells_desc : 'Merge table cells', +table_cut_row_desc : 'Cut table row', +table_copy_row_desc : 'Copy table row', +table_paste_row_before_desc : 'Paste table row before', +table_paste_row_after_desc : 'Paste table row after', +table_insert_desc : 'Insert a new table' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/zh_cn.js b/jscripts/tiny_mce/plugins/table/langs/zh_cn.js new file mode 100644 index 000000000..a3f59cfee --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/zh_cn.js @@ -0,0 +1,75 @@ +// Simplified Chinese lang variables contributed by tom_cat (thomaswangyang@gmail.com) + +tinyMCE.addToLang('table',{ +general_tab : 'Ò»°ã', +advanced_tab : '¸ß¼¶', +general_props : 'Ò»°ãÊôÐÔ', +advanced_props : '¸ß¼¼ÊôÐÔ', +desc : '²åÈëÒ»¸öбí', +row_before_desc : 'ÏòÇ°²åÈëÒ»ÐÐ', +row_after_desc : 'Ïòºó²åÈëÒ»ÐÐ', +delete_row_desc : 'ɾ³ýÐÐ', +col_before_desc : 'Ïò×ó²åÈëÒ»ÁÐ', +col_after_desc : 'ÏòÓÒ²åÈëÒ»ÁÐ', +delete_col_desc : 'ɾ³ýÁÐ', +rowtype : 'ÐÐÖÖÀà', +title : '²åÈë/ÐÞ¸Ä ±í', +width : '¿í', +height : '¸ß', +cols : 'ÁÐÊý', +rows : 'ÐÐÊý', +cellspacing : 'µ¥Ôª¸ñ¿Õ¼ä', +cellpadding : 'µ¥Ôª¸ñÌî³ä', +border : '±ß¿ò', +align : '¶ÔÆë', +align_default : 'ĬÈÏ', +align_left : '¾Ó×ó', +align_right : '¾ÓÓÒ', +align_middle : '¾ÓÖÐ', +row_title : 'ÐбêÌâ', +cell_title : 'µ¥Ôª¸ñ±êÌâ', +cell_type : 'µ¥Ôª¸ñÖÖÀà', +row_desc : 'ÐÐÃèÊö', +cell_desc : 'µ¥Ôª¸ñÃèÊö', +valign : '´¹Ö±¶ÔÆë', +align_top : '¶¥¶Ë', +align_bottom : 'µ×¶Ë', +props_desc : '±íÊôÐÔ', +bordercolor : '±ß¿òÑÕÉ«', +bgcolor : '±³¾°ÑÕÉ«', +merge_cells_title : 'ºÏ²¢±íÖе¥Ôª¸ñ±êÌâ', +split_cells_desc : '·ÖÀà±íÖе¥Ôª¸ñÃèÊö', +merge_cells_desc : 'ºÏ²¢±íÖе¥Ôª¸ñÃèÊö', +cut_row_desc : '¼ôÇÐÐÐ', +copy_row_desc : '¸´ÖÆÐÐ', +paste_row_before_desc : 'ÏòÇ°Õ³ÌùÒ»ÐÐ', +paste_row_after_desc : 'ÏòºóÕ³ÌùÒ»ÐÐ', +id : '±íʶ', +style: 'Ñùʽ', +langdir : 'Êéд·½Ïò', +langcode : 'ÓïÑÔ±àÂë', +mime : 'Ä¿±ê MIME ÖÖÀà', +ltr : '´Ó×óµ½ÓÒ', +rtl : '´ÓÓÒµ½×ó', +bgimage : '±³¾°Í¼Æ¬', +summary : 'С½á', +td : "Êý¾Ý", +th : "ҳü", +cell_cell : '¸üе±Ç°µ¥Ôª¸ñ', +cell_row : '¸üÐÂÐÐÖÐËùÓе¥Ôª¸ñ', +cell_all : '¸üбíÖÐËùÓе¥Ôª¸ñ', +row_row : '¸üе±Ç°ÐÐ', +row_odd : '¸üÐÂÆæÊýÐÐ', +row_even : '¸üÐÂżÊýÐÐ', +row_all : '¸üбíÖÐËùÓÐÐÐ', +thead : '±íÍ·', +tbody : '±íÖÐ', +tfoot : '±íβ', +del : 'ɾ³ý±í', +scope : 'ÇøÓò', +row : 'ÐÐ', +col : 'ÁÐ', +rowgroup : 'Ðм¯ÍÅ', +colgroup : 'Áм¯ÍÅ', +missing_scope: 'ÄúÈ·ÈÏÒªÔÚûÓÐÉùÃ÷±à¼­ÇøÓòʱ¼ÌÐøÂð£¿Ã»ÓÐÉùÃ÷±à¼­ÇøÓò½«Ê¹ÔĶÁÕß¿´ÆðÀ´ºÜ·ÑÁ¦¡£' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/zh_tw.js b/jscripts/tiny_mce/plugins/table/langs/zh_tw.js new file mode 100644 index 000000000..664d5f020 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/zh_tw.js @@ -0,0 +1,76 @@ +// Traditional Chinese BIG-5; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// ÁcÅ餤¤å BIG-5 ¡F¼Æ¦ìÀ³¥Î§{»s§@¡F twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('table',{ +general_tab : '¤@¯ë', +advanced_tab : '¶i¶¥', +general_props : '¤@¯ëÄÝ©Ê', +advanced_props : '¶i¶¥ÄÝ©Ê', +desc : '´¡¤J·sªí®æ', +row_before_desc : '¦b¤§«e´¡¤J¦C', +row_after_desc : '¦b¤§«á´¡¤J¦C', +delete_row_desc : '§R°£¦C', +col_before_desc : '¦b¤§«e´¡¤J¦æ', +col_after_desc : '¦b¤§«á´¡¤J¦æ', +delete_col_desc : '§R°£¦æ', +rowtype : 'ªí®æ¤¤ªº¦C', +title : '´¡¤J©Î½Õ¾ãªí®æ', +width : '¼e', +height : '°ª', +cols : '¦æ', +rows : '¦C', +cellspacing : 'Àx¦s®æ®æ½u¶¡¶Z', +cellpadding : 'Àx¦s®æ¤º¤å»P®æ½u¶¡¶Z', +border : '®Ø½u', +align : '¦ì¸m', +align_default : '¤º©w', +align_left : '¾a¥ª', +align_right : '¾a¥k', +align_middle : '¸m¤¤', +row_title : '¦CÄÝ©Ê', +cell_title : 'Àx¦s®æÄÝ©Ê', +cell_type : 'Àx¦s®æÃþ«¬', +row_desc : '¦CÄÝ©Ê', +cell_desc : 'Àx¦s®æÄÝ©Ê', +valign : '««ª½¦ì¸m', +align_top : '³»ºÝ', +align_bottom : '©³³¡', +props_desc : 'ªí®æÄÝ©Ê', +bordercolor : '®Ø½uÃC¦â', +bgcolor : '­I´ºÃC¦â', +merge_cells_title : '¦X¨ÖÀx¦s®æ', +split_cells_desc : '¤À³ÎÀx¦s®æ', +merge_cells_desc : '¦X¨ÖÀx¦s®æ', +cut_row_desc : '°Å¤U¦C', +copy_row_desc : '½Æ»s¦C', +paste_row_before_desc : '¦b¤§«e¶K¤W¦C', +paste_row_after_desc : '¦b¤§«á¶K¤W¦C', +id : '½s½X', +style: '¦¡¼Ë', +langdir : '»y¨¥¥Îªk', +langcode : '»y½X', +mime : '¹ï¶H MIME Ãþ«¬', +ltr : '¥Ñ¥ª¦Ü¥k', +rtl : '¥Ñ¥k¦Ü¥ª', +bgimage : '­I´º¹ÏÀÉ', +summary : '¤@Äý', +td : "¸ê®Æ", +th : "¼ÐÀY", +cell_cell : '§ó·s©Ò¦bªºÀx¦s®æ', +cell_row : '§ó·s¦C¤ºªºÀx¦s®æ', +cell_all : '§ó·sªí®æ¤¤ªºÀx¦s®æ', +row_row : '§ó·s©Ò¦bªº¦C', +row_odd : '§ó·sªí®æ¤¤ªº©_¼Æ¦C', +row_even : '§ó·sªí®æ¤¤ªº°¸¼Æ¦C', +row_all : '§ó·sªí®æ¤¤ªº¦C', +thead : 'ªí®æ¼ÐÀY', +tbody : 'ªí®æ¹êÅé', +tfoot : 'ªí®æ©³³¡', +del : '§R°£ªí®æ', +scope : '½d³ò', +row : '¦C', +col : '¦æ', +rowgroup : '¸s¦C', +colgroup : '¸s¦æ', +missing_scope: '½T©w­n¦b¨S¦³¹ï¦¹ªí®æ¼ÐÀY³]©w½d³ò¤UÄ~Äò°õ¦æ¶Ü¡H\n¤£¥[¥H³]©wªº¸Ü¡A¥i¯à·|¾É­P¬Y¨Ç¨Ï¥ÎªÌµLªk¶¶§QŪ¨úªí®æ¤¤ªº³¡¥÷©Î¬O¾ãÅé¸ê°T¡C' +}); diff --git a/jscripts/tiny_mce/plugins/table/langs/zh_tw_utf8.js b/jscripts/tiny_mce/plugins/table/langs/zh_tw_utf8.js new file mode 100644 index 000000000..e56bb1e8b --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/langs/zh_tw_utf8.js @@ -0,0 +1,76 @@ +// Traditional Chinese UTF-8; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// 繁體中文 UTF-8 ;數位應用坊製作; twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('table',{ +general_tab : '一般', +advanced_tab : '進階', +general_props : '一般屬性', +advanced_props : '進階屬性', +desc : '插入新表格', +row_before_desc : '在之前插入列', +row_after_desc : '在之後插入列', +delete_row_desc : '刪除列', +col_before_desc : '在之前插入行', +col_after_desc : '在之後插入行', +delete_col_desc : '刪除行', +rowtype : '表格中的列', +title : '插入或調整表格', +width : '寬', +height : '高', +cols : '行', +rows : '列', +cellspacing : '儲存格格線間距', +cellpadding : '儲存格內文與格線間距', +border : '框線', +align : '位置', +align_default : '內定', +align_left : '靠左', +align_right : '靠右', +align_middle : '置中', +row_title : '列屬性', +cell_title : '儲存格屬性', +cell_type : '儲存格類型', +row_desc : '列屬性', +cell_desc : '儲存格屬性', +valign : '垂直位置', +align_top : '頂端', +align_bottom : '底部', +props_desc : '表格屬性', +bordercolor : '框線顏色', +bgcolor : '背景顏色', +merge_cells_title : '合併儲存格', +split_cells_desc : '分割儲存格', +merge_cells_desc : '合併儲存格', +cut_row_desc : '剪下列', +copy_row_desc : '複製列', +paste_row_before_desc : '在之前貼上列', +paste_row_after_desc : '在之後貼上列', +id : '編碼', +style: '式樣', +langdir : '語言用法', +langcode : '語碼', +mime : '對象 MIME 類型', +ltr : '由左至右', +rtl : '由右至左', +bgimage : '背景圖檔', +summary : '一覽', +td : "資料", +th : "標頭", +cell_cell : '更新所在的儲存格', +cell_row : '更新列內的儲存格', +cell_all : '更新表格中的儲存格', +row_row : '更新所在的列', +row_odd : '更新表格中的奇數列', +row_even : '更新表格中的偶數列', +row_all : '更新表格中的列', +thead : '表格標頭', +tbody : '表格實體', +tfoot : '表格底部', +del : '刪除表格', +scope : '範圍', +row : '列', +col : '行', +rowgroup : '群列', +colgroup : '群行', +missing_scope: '確定要在沒有對此表格標頭設定範圍下繼續執行嗎?\n不加以設定的話,可能會導致某些使用者無法順利讀取表格中的部份或是整體資訊。' +}); diff --git a/jscripts/tiny_mce/plugins/table/merge_cells.htm b/jscripts/tiny_mce/plugins/table/merge_cells.htm new file mode 100644 index 000000000..be723a9fa --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/merge_cells.htm @@ -0,0 +1,37 @@ + + + {$lang_table_merge_cells_title} + + + + + + +
    +
    + {$lang_table_merge_cells_title} + + + + + + + + + +
    {$lang_table_cols}: +
    {$lang_table_rows}:
    +
    + +
    +
    + +
    + +
    + +
    +
    +
    + + diff --git a/jscripts/tiny_mce/plugins/table/readme.txt b/jscripts/tiny_mce/plugins/table/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/jscripts/tiny_mce/plugins/table/row.htm b/jscripts/tiny_mce/plugins/table/row.htm new file mode 100644 index 000000000..64f2afcb5 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/row.htm @@ -0,0 +1,159 @@ + + + {$lang_table_row_title} + + + + + + + + +
    + + +
    +
    +
    + {$lang_table_general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    + +
    +
    +
    + +
    +
    + {$lang_table_advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + + + + + +
     
    +
    + + + + + +
     
    +
    +
    +
    +
    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + + diff --git a/jscripts/tiny_mce/plugins/table/table.htm b/jscripts/tiny_mce/plugins/table/table.htm new file mode 100644 index 000000000..846f55131 --- /dev/null +++ b/jscripts/tiny_mce/plugins/table/table.htm @@ -0,0 +1,155 @@ + + + {$lang_table_title} + + + + + + + + +
    + + +
    +
    +
    + {$lang_table_general_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    + {$lang_table_advanced_props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + + + + + +
     
    +
    + + + + + +
     
    +
    + + + + + +
     
    +
    +
    +
    +
    + +
    +
    + +
    + +
    + +
    +
    +
    + + diff --git a/jscripts/tiny_mce/plugins/zoom/editor_plugin.js b/jscripts/tiny_mce/plugins/zoom/editor_plugin.js new file mode 100644 index 000000000..e1af066e6 --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/editor_plugin.js @@ -0,0 +1 @@ +var TinyMCE_ZoomPlugin={getInfo:function(){return{longname:'Zoom',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_zoom.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},getControlHTML:function(control_name){if(!tinyMCE.isMSIE||tinyMCE.isMSIE5_0||tinyMCE.isOpera)return"";switch(control_name){case"zoom":return'';}return"";},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceZoom":tinyMCE.getInstanceById(editor_id).contentDocument.body.style.zoom=value;tinyMCE.getInstanceById(editor_id).contentDocument.body.style.mozZoom=value;return true;}return false;}};tinyMCE.addPlugin("zoom",TinyMCE_ZoomPlugin); \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/zoom/editor_plugin_src.js b/jscripts/tiny_mce/plugins/zoom/editor_plugin_src.js new file mode 100644 index 000000000..e7cd43607 --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/editor_plugin_src.js @@ -0,0 +1,58 @@ +/** + * $RCSfile: editor_plugin_src.js,v $ + * $Revision: 1.10 $ + * $Date: 2006/04/07 15:52:50 $ + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +var TinyMCE_ZoomPlugin = { + getInfo : function() { + return { + longname : 'Zoom', + author : 'Moxiecode Systems', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_zoom.html', + version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion + }; + }, + + /** + * Returns the HTML contents of the zoom control. + */ + getControlHTML : function(control_name) { + if (!tinyMCE.isMSIE || tinyMCE.isMSIE5_0 || tinyMCE.isOpera) + return ""; + + switch (control_name) { + case "zoom": + return ''; + } + + return ""; + }, + + /** + * Executes the mceZoom command. + */ + execCommand : function(editor_id, element, command, user_interface, value) { + // Handle commands + switch (command) { + case "mceZoom": + tinyMCE.getInstanceById(editor_id).contentDocument.body.style.zoom = value; + tinyMCE.getInstanceById(editor_id).contentDocument.body.style.mozZoom = value; + return true; + } + + // Pass to next handler in chain + return false; + } +}; + +tinyMCE.addPlugin("zoom", TinyMCE_ZoomPlugin); diff --git a/jscripts/tiny_mce/plugins/zoom/langs/es.js b/jscripts/tiny_mce/plugins/zoom/langs/es.js new file mode 100644 index 000000000..3bc7aed29 --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/langs/es.js @@ -0,0 +1,3 @@ +// Español por matiasl-AR + +tinyMCELang['lang_zoom_prefix'] = 'Aumento de Tamaño'; \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/zoom/langs/fr.js b/jscripts/tiny_mce/plugins/zoom/langs/fr.js new file mode 100644 index 000000000..8d48271c7 --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/langs/fr.js @@ -0,0 +1,3 @@ +// Traduit par Normand Lamoureux le 2005-11-12 + +tinyMCELang['lang_zoom_prefix'] = 'Augmenter la taille'; \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/zoom/langs/he.js b/jscripts/tiny_mce/plugins/zoom/langs/he.js new file mode 100644 index 000000000..134435a3c --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/langs/he.js @@ -0,0 +1,5 @@ +// HE lang variables by Liron Newman, http://eesh.net + +tinyMCE.addToLang('',{ +zoom_prefix : 'æåí' +}); diff --git a/jscripts/tiny_mce/plugins/zoom/langs/pt_br.js b/jscripts/tiny_mce/plugins/zoom/langs/pt_br.js new file mode 100644 index 000000000..e36760085 --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/langs/pt_br.js @@ -0,0 +1,10 @@ +/** + * pt_br lang variables + * Brazilian Portuguese + * + * Authors : + * Marcio Barbosa (mpg) + * Last Updated : November 26, 2005 + * TinyMCE Version : 2.0RC4 + */ +tinyMCELang['lang_zoom_prefix'] = 'Aumentar de Tamanho'; \ No newline at end of file diff --git a/jscripts/tiny_mce/plugins/zoom/langs/ru.js b/jscripts/tiny_mce/plugins/zoom/langs/ru.js new file mode 100644 index 000000000..310ecbf6f --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/langs/ru.js @@ -0,0 +1,5 @@ +// RU cp1251 lang variables + +tinyMCE.addToLang('',{ +zoom_prefix : 'ìàñøòàá' +}); diff --git a/jscripts/tiny_mce/plugins/zoom/langs/ru_KOI8-R.js b/jscripts/tiny_mce/plugins/zoom/langs/ru_KOI8-R.js new file mode 100644 index 000000000..b285dfd08 --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/langs/ru_KOI8-R.js @@ -0,0 +1,5 @@ +// RU KOI8-R lang variables + +tinyMCE.addToLang('',{ +zoom_prefix : 'ÍÁÓÛÔÁÂ' +}); diff --git a/jscripts/tiny_mce/plugins/zoom/langs/ru_UTF-8.js b/jscripts/tiny_mce/plugins/zoom/langs/ru_UTF-8.js new file mode 100644 index 000000000..0c81efced --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/langs/ru_UTF-8.js @@ -0,0 +1,5 @@ +// RU UTF-8 lang variables + +tinyMCE.addToLang('',{ +zoom_prefix : 'масштаб' +}); diff --git a/jscripts/tiny_mce/plugins/zoom/langs/zh_tw.js b/jscripts/tiny_mce/plugins/zoom/langs/zh_tw.js new file mode 100644 index 000000000..c2300776e --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/langs/zh_tw.js @@ -0,0 +1,6 @@ +// Traditional Chinese BIG-5; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// ÁcÅ餤¤å BIG-5 ¡F¼Æ¦ìÀ³¥Î§{»s§@¡F twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +zoom_prefix : '©ñ¤j' +}); diff --git a/jscripts/tiny_mce/plugins/zoom/langs/zh_tw_utf8.js b/jscripts/tiny_mce/plugins/zoom/langs/zh_tw_utf8.js new file mode 100644 index 000000000..bd56537c2 --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/langs/zh_tw_utf8.js @@ -0,0 +1,6 @@ +// Traditional Chinese UTF-8; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// 繁體中文 UTF-8 ;數位應用坊製作; twapweb_AT_gmail_DOT_com + +tinyMCE.addToLang('',{ +zoom_prefix : '放大' +}); diff --git a/jscripts/tiny_mce/plugins/zoom/readme.txt b/jscripts/tiny_mce/plugins/zoom/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/jscripts/tiny_mce/plugins/zoom/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/jscripts/tiny_mce/themes/advanced/about.htm b/jscripts/tiny_mce/themes/advanced/about.htm new file mode 100644 index 000000000..d15ff3a76 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/about.htm @@ -0,0 +1,52 @@ + + + {$lang_about_title} + + + + + + + + +
    +
    +

    {$lang_about_title}

    +

    Version: {$tinymce_version} ({$tinymce_releasedate})

    +

    TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL + by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.

    +

    Copyright © 2003-2006, Moxiecode Systems AB, All rights reserved.

    +

    For more information about this software visit the TinyMCE website.

    + +
    +
    + +
    +
    +

    {$lang_loaded_plugins}

    + +
    +
    + +

     

    +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/anchor.htm b/jscripts/tiny_mce/themes/advanced/anchor.htm new file mode 100644 index 000000000..53d7969f0 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/anchor.htm @@ -0,0 +1,33 @@ + + + {$lang_insert_anchor_title} + + + + + +
    + + + + + + + + + +
    {$lang_insert_anchor_title}
    {$lang_insert_anchor_name}:
    + +
    +
    + +
    + +
    + +
    +
    + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/charmap.htm b/jscripts/tiny_mce/themes/advanced/charmap.htm new file mode 100644 index 000000000..9aed1d4b5 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/charmap.htm @@ -0,0 +1,53 @@ + + + {$lang_theme_charmap_title} + + + + + + + + + + + + + + + + + +
    {$lang_theme_charmap_title}
    + + + + + + + + + +
     
     
    +
    + + + + + + + + + + + + + + + + +
    HTML-Code
     
     
    NUM-Code
     
    +
    + + + diff --git a/jscripts/tiny_mce/themes/advanced/color_picker.htm b/jscripts/tiny_mce/themes/advanced/color_picker.htm new file mode 100644 index 000000000..3f5a19838 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/color_picker.htm @@ -0,0 +1,13 @@ + + + {$lang_theme_colorpicker_title} + + + + + +
    + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/css/editor_content.css b/jscripts/tiny_mce/themes/advanced/css/editor_content.css new file mode 100644 index 000000000..182e79121 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/css/editor_content.css @@ -0,0 +1,58 @@ +/* This file contains the CSS data for the editable area(iframe) of TinyMCE */ +/* You can extend this CSS by adding your own CSS file with the the content_css option */ + +body, td, pre { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; +} + +body { + background-color: #FFFFFF; +} + +.mceVisualAid { + border: 1px dashed #BBBBBB !important; +} + +div.mceVisualAid { + background-image:url('../images/spacer.gif'); + visibility: visible !important; +} + +.mceItemAnchor { + width: 12px; + line-height: 6px; + overflow: hidden; + padding-left: 12px; + background-image: url('../images/anchor_symbol.gif'); + background-position: bottom; + background-repeat: no-repeat; +} + +/* Important is needed in Gecko browsers inorder to style links */ +/* +a { + color: green !important; +} +*/ + +/* Style selection range colors in Gecko browsers */ +/* +::-moz-selection { + background-color: red; + color: green; +} +*/ + +/* MSIE specific */ + +* html body { + scrollbar-3dlight-color: #F0F0EE; + scrollbar-arrow-color: #676662; + scrollbar-base-color: #F0F0EE; + scrollbar-darkshadow-color: #DDDDDD; + scrollbar-face-color: #E0E0DD; + scrollbar-highlight-color: #F0F0EE; + scrollbar-shadow-color: #F0F0EE; + scrollbar-track-color: #F5F5F5; +} diff --git a/jscripts/tiny_mce/themes/advanced/css/editor_popup.css b/jscripts/tiny_mce/themes/advanced/css/editor_popup.css new file mode 100644 index 000000000..2bae9158a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/css/editor_popup.css @@ -0,0 +1,327 @@ +/* This file contains the CSS data for all popups in TinyMCE */ + +body { + background-color: #F0F0EE; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + scrollbar-3dlight-color: #F0F0EE; + scrollbar-arrow-color: #676662; + scrollbar-base-color: #F0F0EE; + scrollbar-darkshadow-color: #DDDDDD; + scrollbar-face-color: #E0E0DD; + scrollbar-highlight-color: #F0F0EE; + scrollbar-shadow-color: #F0F0EE; + scrollbar-track-color: #F5F5F5; + margin: 8px; +} + +td { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; +} + +input { + background: #FFFFFF; + border: 1px solid #cccccc; +} + +td, input, select, textarea { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; +} + +input, select, textarea { + border: 1px solid #808080; +} + +.input_noborder { + border: 0; +} + +#insert, .updateButton { + font-weight: bold; + width: 90px; + height: 21px; + border: 0; + background-image: url('../images/insert_button_bg.gif'); + cursor: pointer; +} + +#cancel { + font-weight: bold; + width: 90px; + height: 21px; + border: 0; + background-image: url('../images/cancel_button_bg.gif'); + cursor: pointer; +} + +/* Mozilla only style */ +html>body #insert, html>body #cancel { + padding-bottom: 2px; +} + +.title { + font-size: 12px; + font-weight: bold; + color: #2B6FB6; +} + +table.charmap { + border-style: solid; + border-width: 1px; + border-color: #AAAAAA; +} + +td.charmap, td.charmapOver { + color: #000000; + border-color: #AAAAAA; + border-style: solid; + border-width: 1px; + text-align: center; + font-size: 12px; +} + +td.charmapOver { + background-color: #CCCCCC; + cursor: default; +} + +a.charmap { + color: #000000; + text-decoration: none +} + +.wordWrapCode { + vertical-align: middle; + border: 1px none #000000; + background-color: transparent; +} + +input.radio { + border: 1px none #000000; + background-color: transparent; + vertical-align: middle; +} + +input.checkbox { + border: 1px none #000000; + background-color: transparent; + vertical-align: middle; +} + +.mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected { + margin-left: 1px; +} + +.mceButtonNormal { + border-top: 1px solid; + border-left: 1px solid; + border-bottom: 1px solid; + border-right: 1px solid; + border-color: #F0F0EE; + cursor: default; +} + +.mceButtonOver { + border: 1px solid #0A246A; + cursor: default; + background-color: #B6BDD2; +} + +.mceButtonDown { + cursor: default; + border: 1px solid #0A246A; + background-color: #8592B5; +} + +.mceButtonDisabled { + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); + -moz-opacity:0.3; + opacity: 0.3; + border-top: 1px solid; + border-left: 1px solid; + border-bottom: 1px solid; + border-right: 1px solid; + border-color: #F0F0EE; + cursor: default; +} + +.mceActionPanel { + margin-top: 5px; +} + +/* Tabs classes */ + +.tabs { + float: left; + width: 100%; + line-height: normal; + background-image: url("../images/xp/tabs_bg.gif"); +} + +.tabs ul { + margin: 0; + padding: 0 0 0; + list-style: none; +} + +.tabs li { + float: left; + background: url("../images/xp/tab_bg.gif") no-repeat left top; + margin: 0; + margin-left: 0; + margin-right: 2px; + padding: 0 0 0 10px; + line-height: 18px; +} + +.tabs li.current { + background: url("../images/xp/tab_sel_bg.gif") no-repeat left top; + margin-right: 2px; +} + +.tabs span { + float: left; + display: block; + background: url("../images/xp/tab_end.gif") no-repeat right top; + padding: 0px 10px 0 0; +} + +.tabs .current span { + background: url("../images/xp/tab_sel_end.gif") no-repeat right top; +} + +.tabs a { + text-decoration: none; + font-family: Verdana, Arial; + font-size: 10px; +} + +.tabs a:link, .tabs a:visited, .tabs a:hover { + color: black; +} + +.tabs a:hover { +} + +.tabs .current { +} + +.tabs .current a, .tabs .current a:link, .tabs .current a:visited { +} + +.panel_wrapper div.panel { + display: none; +} + +.panel_wrapper div.current { + display: block; + width: 100%; + height: 300px; + overflow: visible; /* Should be auto but that breaks Safari */ +} + +.panel_wrapper { + border: 1px solid #919B9C; + border-top: 0px; + padding: 10px; + padding-top: 5px; + clear: both; + background-color: white; +} + +fieldset { + border: 1px solid #919B9C; + font-family: Verdana, Arial; + font-size: 10px; + padding: 0; + margin: 0; + padding: 4px; +} + +legend { + color: #2B6FB6; + font-weight: bold; +} + +.properties { + width: 100%; +} + +.properties .column1 { +} + +.properties .column2 { + text-align: left; +} + +a:link, a:visited { + color: black; +} + +a:hover { + color: #2B6FB6; +} + +#plugintable thead { + font-weight: bold; + background-color: #DDDDDD; +} + +#plugintable, #about #plugintable td { + border: 1px solid #919B9C; +} + +#plugintable { + width: 99%; + margin-top: 10px; +} + +#pluginscontainer { + height: 290px; + overflow: auto; +} + +/* MSIE Specific styles */ + +* html .panel_wrapper { + width: 100%; +} + +.column { + float: left; +} + +h1, h2, h3, h4 { + color: #2B6FB6; + margin: 0; + padding: 0; + padding-top: 5px; +} + +h3 { + font-size: 14px; +} + +#link .panel_wrapper, #link div.current { + height: 125px; +} + +#image .panel_wrapper, #image div.current { + height: 190px; +} + +/* Disables the advanced tab in the table plugin. */ +/* +#table #advanced_tab { + display: none; +} +*/ + +/* Disables the border input field and label in the table plugin. */ +/* +#table #border, #table #borderlabel { + display: none; +} +*/ diff --git a/jscripts/tiny_mce/themes/advanced/css/editor_ui.css b/jscripts/tiny_mce/themes/advanced/css/editor_ui.css new file mode 100644 index 000000000..c51be6c89 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/css/editor_ui.css @@ -0,0 +1,353 @@ +/* This file contains the CSS data for the editor UI of TinyMCE instances */ + +.mceToolbarTop a, .mceToolbarTop a:visited, .mceToolbarTop a:hover, .mceToolbarBottom a, .mceToolbarBottom a:visited, .mceToolbarBottom a:hover { + border: 0; margin: 0; padding: 0; background: transparent; +} + +.mceSeparatorLine { + border: 0; + padding: 0; + margin-left: 4px; + margin-right: 2px; +} + +.mceSelectList { + font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; + font-size: 7pt !important; + font-weight: normal; + margin-top: 3px; + padding: 0; + display: inline; + vertical-align: top; + background-color: #F0F0EE; +} + +.mceLabel, .mceLabelDisabled { + font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; + font-size: 9pt; +} + +.mceLabel { + color: #000000; +} + +.mceLabelDisabled { + cursor: text; + color: #999999; +} + +.mceEditor { + background: #F0F0EE; + border: 1px solid #cccccc; + padding: 0; + margin: 0; +} + +.mceEditorArea { + font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; + background: #FFFFFF; + padding: 0; + margin: 0; +} + +.mceToolbarTop, .mceToolbarBottom { + background: #F0F0EE; + line-height: 1px; + font-size: 1px; +} + +.mceToolbarTop { + border-bottom: 1px solid #cccccc; + padding-bottom: 1px; +} + +.mceToolbarBottom { + border-top: 1px solid #cccccc; +} + +.mceStatusbarTop, .mceStatusbarBottom, .mceStatusbar { + height: 20px; +} + +.mceStatusbarTop .mceStatusbarPathText, .mceStatusbarBottom .mceStatusbarPathText, .mceStatusbar .mceStatusbarPathText { + font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; + font-size: 9pt; + padding: 2px; + line-height: 16px; + overflow: visible; +} + +.mceStatusbarTop { + border-bottom: 1px solid #cccccc; +} + +.mceStatusbarBottom { + border-top: 1px solid #cccccc; +} + +.mceStatusbar { + border-bottom: 1px solid #cccccc; +} + +.mcePathItem, .mcePathItem:link, .mcePathItem:visited, .mcePathItem:hover { + text-decoration: none; + font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; + font-size: 9pt; + color: #000000; +} + +.mcePathItem:hover { + text-decoration: underline; +} + +.mceStatusbarPathText { + float: left; +} + +.mceStatusbarResize { + float: right; + background-image: url('../images/statusbar_resize.gif'); + background-repeat: no-repeat; + width: 11px; + height: 20px; + cursor: se-resize; +} + +.mceResizeBox { + width: 10px; + height: 10px; + display: none; + border: 1px dotted gray; + margin: 0; + padding: 0; +} + +.mceEditorIframe { + border: 0; +} + +/* Button CSS rules */ + +a.mceButtonDisabled img, a.mceButtonNormal img, a.mceButtonSelected img { + width: 20px; + height: 20px; + cursor: default; + margin-top: 1px; + margin-left: 1px; +} + +a.mceButtonDisabled img { + border: 0 !important; +} + +a.mceButtonNormal img, a.mceButtonSelected img { + border: 1px solid #F0F0EE !important; +} + +a.mceButtonSelected img { + border: 1px solid #6779AA !important; + background-color: #D4D5D8; +} + +a.mceButtonNormal img:hover, a.mceButtonSelected img:hover { + border: 1px solid #0A246A !important; + cursor: default; + background-color: #B6BDD2; +} + +a.mceButtonDisabled img { + -moz-opacity:0.3; + opacity: 0.3; + border: 1px solid #F0F0EE !important; + cursor: default; +} + +a.mceTiledButton img { + background-image: url('../images/buttons.gif'); + background-repeat: no-repeat; +} + +/* MSIE specific rules */ + +* html a.mceButtonNormal img, * html a.mceButtonSelected img, * html a.mceButtonDisabled img { + border: 0 !important; + margin-top: 2px; + margin-bottom: 1px; +} + +* html a.mceButtonDisabled img { + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); + border: 0 !important; +} + +* html a.mceButtonDisabled { + border: 1px solid #F0F0EE !important; +} + +* html a.mceButtonNormal, * html a.mceButtonSelected { + border: 1px solid #F0F0EE !important; + cursor: default; +} + +* html a.mceButtonSelected { + border: 1px solid #6779AA !important; + background-color: #D4D5D8; +} + +* html a.mceButtonNormal:hover, * html a.mceButtonSelected:hover { + border: 1px solid #0A246A !important; + cursor: default; + background-color: #B6BDD2; +} + +* html .mceSelectList { + margin-top: 2px; +} + +/* Menu button CSS rules */ + +span.mceMenuButton img, span.mceMenuButtonSelected img { + border: 1px solid #F0F0EE; + margin-left: 1px; +} + +span.mceMenuButtonSelected img { + border: 1px solid #6779AA; + background-color: #B6BDD2; +} + +span.mceMenuButtonSelected img.mceMenuButton { + border: 1px solid #F0F0EE; + background-color: transparent; +} + +span.mceMenuButton img.mceMenuButton, span.mceMenuButtonSelected img.mceMenuButton { + border-left: 0; + margin-left: 0; +} + +span.mceMenuButton:hover img, span.mceMenuButtonSelected:hover img { + border: 1px solid #0A246A; + background-color: #B6BDD2; +} + +span.mceMenuButton:hover img.mceMenuButton, span.mceMenuButtonSelected:hover img.mceMenuButton { + border-left: 0; +} + +span.mceMenuButtonFocus img { + border: 1px solid gray; + border-right: 0; + margin-left: 1px; + background-color: #F5F4F2; +} + +span.mceMenuButtonFocus img.mceMenuButton { + border: 1px solid gray; + border-left: 1px solid #F5F4F2; + margin-left: 0; +} + +/* Menu button MSIE specific rules */ + +* html span.mceMenuButton, * html span.mceMenuButtonFocus { + position: relative; + left: 0; + top: 0; +} + +* html span.mceMenuButton img, * html span.mceMenuButtonSelected img, * html span.mceMenuButtonFocus img { + position: relative; + top: 1px; +} + +* html span.mceMenuHover img { + border: 1px solid #0A246A; + background-color: #B6BDD2; +} + +* html span.mceMenuButtonSelected.mceMenuHover img.mceMenuButton { + border: 1px solid #0A246A; + background-color: #B6BDD2; + border-left: 0; +} + +/* Menu */ + +.mceMenu { + position: absolute; + left: 0; + top: 0; + display: none; + z-index: 100; + background-color: white; + border: 1px solid gray; + font-weight: normal; +} + +.mceMenu a, .mceMenuTitle, .mceMenuDisabled { + display: block; + width: 100%; + text-decoration: none; + background-color: white; + font-family: Tahoma, Verdana, Arial, Helvetica; + font-size: 11px; + line-height: 20px; + color: black; +} + +.mceMenu a:hover { + background-color: #B6BDD2; + color: black; + text-decoration: none !important; +} + +.mceMenu span { + padding-left: 10px; + padding-right: 10px; + display: block; + line-height: 20px; +} + +.mceMenuSeparator { + border-bottom: 1px solid gray; + background-color: gray; + height: 1px; +} + +.mceMenuTitle span { + padding-left: 5px; +} + +.mceMenuTitle { + background-color: #DDDDDD; + font-weight: bold; +} + +.mceMenuDisabled { + color: gray; +} + +span.mceMenuSelectedItem { + background-image: url('../images/menu_check.gif'); + background-repeat: no-repeat; + background-position: 5px 8px; + padding-left: 20px; +} + +span.mceMenuCheckItem { + padding-left: 20px; +} + +span.mceMenuLine { + display: block; + position: absolute; + left: 0; + top: -1px; + background-color: #F5F4F2; + width: 30px; + height: 1px; + overflow: hidden; + padding-left: 0; + padding-right: 0; +} diff --git a/jscripts/tiny_mce/themes/advanced/docs/cs/about.htm b/jscripts/tiny_mce/themes/advanced/docs/cs/about.htm new file mode 100644 index 000000000..f51faa9a8 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/cs/about.htm @@ -0,0 +1,31 @@ + + +O TinyMCE + + + + + + + + + + + + +
    +
    +TinyMCE je malý WYSIWYG editor pro webové prohlí¾eèe jako jsou MSIE nebo Mozilla, +kterým lze HTML obsah upravovat mnohem jednodu¹eji. Obsahuje bì¾né funkce, +je¾ lze nalézt ve vìt¹inì textových editorù, proto by jeho pou¾ívání nemìlo být slo¾ité.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/cs/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/cs/common_buttons.htm new file mode 100644 index 000000000..c096703b4 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/cs/common_buttons.htm @@ -0,0 +1,170 @@ + + +Bì¾ná tlaèítka + + + + + + + + + + + + +
    +
    +Ní¾e je krátce popsáno ka¾dé tlaèítko. + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Zkopíruje aktuálnì vybraný obsah do schránky. (Ctrl+C)
    Vyjme aktuálnì vybraný obsah do schránky. (Ctrl+X)
    Vlo¾í obsah schránky do okna editoru. (Ctrl+P)
    Ztuèní text.
    Naformátuje text kurzívou.
    Podtrhne text.
    Pøe¹krtne text.
    Zarovná vlevo.
    Zarovná na støed.
    Zarovná vpravo.
    Zarovná do bloku.
    Neøazený seznam/seznam s odrá¾ky.
    Øazený seznam/èíslovaný seznam.
    Pøedsadí/sní¾í odsazení.
    Odsadí/zvý¹í odsazení.
    Vrátí zpìt naposledy provedenou akci.
    Obnoví poslední akci.
    Vlo¾í nový odkaz, více o této funkci v èásti Vlo¾it odkaz.
    Zru¹í odkaz v aktuálním výbìru/odstranit v¹echny vybrané odkazy.
    Vlo¾í nový obrázek, více o této funkci v èásti Vlo¾it obrázek.
    Vyèistí kód/odstraní nechtìné formátování. Tato funkce se hodí kdy¾ + kopírujete obsah napøíklad z kanceláøského balíku.
    Zobrazí tuto nápovìdu.
    Otevøe editor s HTML zdrojem.
    Do aktuální pozice vlo¾í novou 2x2 tabulku.
    Pøidá øádek pøed aktuální.
    Pøidá øádek pod aktuální.
    Odstraní øádek.
    Pøidá sloupec pøed aktuální.
    Pøidá sloupec za aktuální.
    Odstraní aktuální sloupec.
    Pøidá nový vodorovný oddìlovaè.
    Odstraní z výbìru formátování.
    Vytvoøí z vybraného textu dolní index.
    Vytvoøí z vybraného textu horní index.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/cs/images/insert_image_window.png b/jscripts/tiny_mce/themes/advanced/docs/cs/images/insert_image_window.png new file mode 100644 index 0000000000000000000000000000000000000000..5d9ea983036b347646ccda7ac3f26723c4a3cf43 GIT binary patch literal 4799 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/cs/images/insert_link_window.png b/jscripts/tiny_mce/themes/advanced/docs/cs/images/insert_link_window.png new file mode 100644 index 0000000000000000000000000000000000000000..94a0c2e5a4206226b83753c42c7dfe08bcb288a0 GIT binary patch literal 3833 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/cs/index.htm b/jscripts/tiny_mce/themes/advanced/docs/cs/index.htm new file mode 100644 index 000000000..88c8c8f05 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/cs/index.htm @@ -0,0 +1,26 @@ + + +Nápovìda + + + + + + + + + + +
    +
    +Kliknutím na odkazy ní¾e zvolte po¾adovanou èást nápovìdy. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/cs/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/cs/insert_image_button.htm new file mode 100644 index 000000000..360102df7 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/cs/insert_image_button.htm @@ -0,0 +1,66 @@ + + +Tlaèítko vlo¾it obrázek + + + + + + + + + + + + +
    +
    +Tlaèítko vlo¾it obrázek otevøe následující okno.
    +
    +
    +
    +Jen vlo¾te URL obrázku, který chcete pøidat a zadáte jeho popis, jen¾ bude +zobrazován jako alternativní popisek obrázku.
    +
    +Popis políèek:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    URL obrázkuURL/cesta k obrázku.
    Popis obrázkuAlternativní popis toho, co je na obrázku.
    Rozmìry©íøka/vý¹ka obrázku.
    ZarovnáníZarovnání obrázku, vhodné pro obtékání obrázku textem.
    RámeèekTlou¹»ka rámeèku.
    Vertikální okrajVertikální okraj, vhodné pro zalomení textu kolem obrázku.
    Horizontální okrajHorizontální okraj, vhodné pro zalomení textu kolem obrázku.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/cs/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/cs/insert_link_button.htm new file mode 100644 index 000000000..35080782c --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/cs/insert_link_button.htm @@ -0,0 +1,34 @@ + + +Tlaèítko vlo¾it odkaz + + + + + + + + + + + + +
    +
    +Toto tlaèítko otevøe nové okno s mo¾ností vlo¾ení/úpravy odkazu.
    +
    +
    +
    +V tomto oknì jsou dvì políèka. "URL odkazu" je adresa stránky, na +kterou odkazujeme. "Cíl" urèuje, jak má být odkazovaná stránka otevøena.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/cs/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/cs/insert_table_button.htm new file mode 100644 index 000000000..fcb63b62a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/cs/insert_table_button.htm @@ -0,0 +1,68 @@ + + +Tlaèítko vlo¾it tabulku + + + + + + + + + + + + +
    +
    +Tlaèítko vlo¾it tabulku otevøe následující okno, v nìm¾ mù¾ete definovat novou tabulku.
    +
    +
    +
    +Popis políèek:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SloupcePoèet sloupcù v tabulce.
    ØádkyPoèet øádkù v tabulce.
    Vnitøní okraj bunìkVnitøní okraj bunìk tabulky.
    Vnìj¹í okraj bunìkVnitøní okraj bunìk tabulky.
    ZarovnáníZarovnání tabulky.
    RámeèekTlou¹»ka rámeèku tabulky.
    ©íøka©íøka tabulky v pixelech.
    Vý¹kaVý¹ka tabulky v pixelech.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/cs/style.css b/jscripts/tiny_mce/themes/advanced/docs/cs/style.css new file mode 100644 index 000000000..f988e2a7b --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/cs/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: 0; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/about.htm b/jscripts/tiny_mce/themes/advanced/docs/da/about.htm new file mode 100644 index 000000000..fc228f8c4 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/da/about.htm @@ -0,0 +1,31 @@ + + +About TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE er et kompakt WYSIWYG editeringsmodul, der kan anvendes i browsere som MS Internet +Explorer eller Mozilla. Modulet gør det muligt for dig at redigere HTML-indhold +på en mere brugervenlig måde. Den er forsynet med de samme funktioner, som man +finder i de fleste tekstbehandlingssystemer og skulle ikke være svær at anvende.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/da/common_buttons.htm new file mode 100644 index 000000000..297a22c95 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/da/common_buttons.htm @@ -0,0 +1,162 @@ + + +Common buttons + + + + + + + + + + + +
    +
    +Herunder finder du en beskrivelse af de enkelte knapper.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Bold text iconFed tekst (Ctrl+B).
    Italic text iconKursiv (Ctrl+I).
    Underline text icon.Understregning (Ctrl+U).
    Strikethrough text icon.Gennemstregning.
    Align left icon.Juster til venstre.
    Align center icon.Centrer.
    Align right icon.Juster til højre.
    Align full icon.Lige højre margen.
    Unordered list/bullet list icon.Uordnet list med bullets.
    Ordered list/numbered list icon.Ordnet liste med tal
    Outdent/decrease indentation icon.Flyt tekst til venstre.
    Indent/increase indentation icon.Flyt tekst til højre.
    Undo the last operation.Fortryd sidste valg (Ctrl+Z).
    Redo the last operation icon.Gentag sidste valg (Ctrl+Y).
    Insert a new link icon.Indsæt nyt link - læs mere om denne funktion i afsnittet Indsættelse + af link.
    Unlinks the current selection icon.Fjern aktuelt valgte link(s).
    Insert a new anchor icon.Indsæt nyt bogmærke - læs mere om denne funktion i afsnittet om + Bogmærker.
    Insert a new image icon.Indsæt nyt billede - læs mere om denne funktion i afsnittet om + Billedbehandling.
    Cleanup code icon.Ryd op i koden / fjern uønsket formatering. Denne funktion er brugbar, + når man indsætter tekst f. eks. fra et office-produkt.
    Show help icon.Viser dette hjælpevindue.
    Source code editor icon.Åbner editoren til redigering af HTML-kode.
    Insert table icon.Indsætter en ny tabel, hvor cursoren aktuelt er anbragt.
    Adds a row above icon.Tilføjer en række over den aktuelle.
    Adds a row under icon.Tilføjer en række under den aktuelle.
    Remove row icon.Fjerner en række.
    Add column before icon.Tilføjer en kolonne før den aktuelle.
    Add column after icon.Tilføjer en kolonne efter den aktuelle.
    Remove column icon.Fjerner den aktuelle kolonne.
    Insert horizontal ruler icon.Indsætter en vandret streg
    Remove formatting icon.Fjerner al formatering fra den aktuelt valgte tekst.
    Subscript icon.Sætter det valgte som sænket skrift.
    Superscript icon.Sætter det valgte som hævet skrift.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/create_accessible_content.htm b/jscripts/tiny_mce/themes/advanced/docs/da/create_accessible_content.htm new file mode 100644 index 000000000..b855eb713 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/da/create_accessible_content.htm @@ -0,0 +1,76 @@ + + +Insert table button + + + + + + + + + + + +
    +

    TinyMCE kan producere HTML, der vil være tilgængeligt for alle brugere, også +dem med handicaps, som anvender forskellige hjælpeteknikker. Den kan også skabe +indhold, der er tilgængeligt for brugere, som anvender tekstbaserede browsere +eller dem, der browser uden at vise billederne frem på siderne. 

    + +

    Ting du selv kan gøre, for at gøre dine tekste tilgængelige:

    +
      +
    1. Lav en billedbeskrivelse: Blinde brugere eller andre, som +ikke er i stand til at se billeder, er helt afhængige af billedbeskrivelsen +eller alt-teksten, som erstatter selve billedet. Hvis et billede ingen betydning +har - dvs. hvis det blot fungerer som dekoration eller som et blankt område, så +lad billedbeskrivelsen stå tom.  Så vil TinyMCE indsætte et tomt alt-felt, +der vil tvinge hjælpeprogrammerne til at ignorere billedet.

    2. + +
    3. Tilføj udstrækning til en tabels overskriftsceller: I den +dialog, som gør det muligt at styre en tabels attributter, bør man angive en +overskrifts udstrækning. Det vil fungere sådan, at overskriften automatisk +knyttes til alle værdier i tabellen, hvilket gør det nemmere for blinde brugere +at forstå, hvad indholdet i den enkelte celle betyder. 

    4. + +
    5. Strukturer indholdet med fornuftige overskrifter: Vælg +standardformaterede overskrifter (som f. eks. H1-6) for at lave overskrifter til +dit indhold - går det i stedet for at lave dine egne standarder. Blinde brugere +anvender en læser, der kan genkende disse standardformater og på den måde lave +en indholdsfortegnelse over siden. På den måde kan en blind bruger lettere +bevæge sig rundt på siden og springe fra afsnit til afsnit.

    6. + +
    7. Husk at lave alternativt indhold: Lav en alternativ side +der repræsenterer ikke-HTML-formateret indhold - så som Flash, Java applets +eller indlejrede videosekvenser. Denne kan laves som et stykke statisk grafik +kombineret med en beskrivelse af billedet og en beskrivelse af det indhold, som  +ville være dukket op, hvis man havde set siden på normal vis. En alternativ +HTML-side kan også laves, hvorefter man så kan lægge et link på til den ved +siden af Falsh-referencen eller referencen til Java appletten. På denne måde +sikrer du, at indholdet også er tilgængeligt for folk, som bruger +hjælpeteknologier, som ikke er i stand til at vise eller afvikle dit indhold +eller som mangler den relevante player eller plugin.

    8. + +
    9. Kontroller tilgængeligheden: Når AChecker plugin'en er +installeret sammen med TinyMCE, kan du blot trykke på den relevante knap for at +blive adviseret om mulige tilgængelighedsproblemer.

    10. + +
    + +

    Besøg ACheckers +hjemmeside for at se yderligere informationer om, hvordan man skaber +indhold, som alle brugere kan tilgå.
    +

    + +
    + + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/images/insert_anchor_window.gif b/jscripts/tiny_mce/themes/advanced/docs/da/images/insert_anchor_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b5f528dd57cae8e062919a66b0ff7fcf8f3bc42 GIT binary patch literal 5189 zcmV-L6uRq2Nk%w1VM+mu0QUd@H&l@lEO0qilOsNVFindaHh4i^nHDj05GrpUI(!r_ za}OzQrpoXNBx(yKYi5SIC`5!jS(O+wc1dTTm%8JFrP7M5*m|4FS$M8BQjd0*$5mBT z=;+h``|#@O>def{hpE;xP>o@MwWZ1MmAK&!C~YJ_fOC|^AUu7Ow%}WOucF57OlzZ* zw&0}4?rx62QE;bCYowvX>r85*c$vv8NQW{`j8k!_FH4CuP>z71&z->NKwX$paj0pE zye&zHq{#21$L&sRq?EVen7rhKrqiFo>V2NfQE#UjHF%J+-E@`3GEa?lmc|`9dpK2* zrOEF^Vw{Vv*__V48cJ%W#pxN@<~n zsMJnvrBH9C0A|c`lfyqtRHdBxl zFm#Qu+mEu`CPIROqtR4yshGRuX^FcMEpd*p+f{U`Cqjd5kGv^Gg(pLU88mmC!01S3 zpJ<4>VuH3?day-fos6#9fTGZuyya?&y^pcnB|w2?g}6OhmVBMeXNS5IE^=vtn#p8@xFtb?7czBwoy$gJoo$W3h^p6Mf3qq^g%B%mTzjybzvr605p*>rcFHDMBd9Qt+&3AWqElP-Sk;0I( z-5xo6E=q}UlEZhH$d{pUziytuto-k+j}!kHAxMsSGA;4JT}sxZ;L}hHsC- zGc(Nb@$mp=nVFfH004k9Gc%x*O#}o4z`(%&%$Wc)nKNe0UteD{=KnxIK!AXN)X>NP z00960|M2kcA^8LV00000EC2ui07?Oi000R80Qm_VNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGZNIt&!5MSAVZ2ANwTELlPFWFT*BcR3xlMp%jWXM1X0Dva~1XRJ|EJ6fX z)6SqV!^1$9EM216ilWLFAvnuSO_(4J%%B-8Vh9n#Mavi@FnZiDrzz5>J8v9`1BU@a zH5I9dDOzM_%CTTq_=rHIY>gaUu^v4CpmpjNCm*h!;VJa%#fx(5AbrW!t&E-%OQffv2Za)dSExbcS$tRR!gBo$Op1T)Zt(FO>~0JDV!7T_YqD$Q8p$t#yA zp$$269Fjr{Ly(ZpHxy8?2@$Or1Bf8Sl(NGfMi{|H95OUw$O=KY00a~xFreg;Og8D{ zlTbz(B|k>##MCwFWT~Z=PC+FVRaRl86<1z?B^Fs`p`{jEZowrNU3TH67hiq>CKzFc zA*L8(jzK0FWtL&48E2k>CK_p`p{5#ZuE8c7ZMNa28*jb=CmeCcA*UR3&Os*~b=G00 z9e3V=Cmwm`p{E{u?!hM?efHu1ryqa*0Vp7W1|p~+gAPI{A%zxVs3C_Qf+!-1CZeb! zi!Q<_BaJrVs3VU)0x2YsMj|QYw%m3LC6zfLwbV5vy|aN*PenCVRaa%TRaakyHC9rnq8@FUB}yjW_1FV~;-uIb@MXCdt4``k<|(+6;hu)Rq2p zAotuIywkzC4W#=eyJEioTc*5d*1IOYZtfeWzjOwCC&79i+^52THasZAhEANQ#f)bB zD94h1T&c*Imb@v-o~|6K%cRD9D$T0i+^Wv7_B<=lwho=E(Yz-8E7QV0U98l|R=q6N z&Tbv8*VKl6E!oxStrnem=UubTI^ zsV|)V$oX%b0(+FF!F(qCC&Pk1T&TpP@ra@>)+miZs$-J^nWaXSDU)$3WuIc1s9sho znW3s?tHN11J`y`w{j63(!&T9Cg*0C+Em%$?R@9C~HDz6`Sz3cu*QNzFYmF^iW{ciJ zpeK-h`0$56?4kAloF}~@VozL3fk*ec*MV`gqXQp!$2HF70FZ#GU1NfmndX%yd$GkM zg@d2`5@)AG*v}(4@JRmrw6H)qj8G9f6b}T5IgB}KW0CS0r9vhgk2KH`9>IV|N(ZWz zjS6O_npvuB#;O;1L_QvgmCry@I}v(>guPN4u$ne3s2OW&O7Mu)m=zKkO6zOY5*xP4 zM!h0N4~VeT$@GZGkAC!nAhs0Z^{Rx#2EZc}eqaYX@?5R8Ss^Ewx

    E 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/images/insert_image_window.gif b/jscripts/tiny_mce/themes/advanced/docs/da/images/insert_image_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..cdc617eab3be256173af047822671023c41d53c7 GIT binary patch literal 7195 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 AEdT%j literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/da/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..23b38145bf569162ff30de7dfec7bb8a31058700 GIT binary patch literal 10359 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/index.htm b/jscripts/tiny_mce/themes/advanced/docs/da/index.htm new file mode 100644 index 000000000..1671fe41b --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/da/index.htm @@ -0,0 +1,28 @@ + + +Help Index + + + + + + + + + +


    +
    +Klik på et link herunder for at springe til en hjælpetekst. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/insert_anchor_button.htm b/jscripts/tiny_mce/themes/advanced/docs/da/insert_anchor_button.htm new file mode 100644 index 000000000..3bc9d2951 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/da/insert_anchor_button.htm @@ -0,0 +1,33 @@ + + +Insert anchor button + + + + + + + + + + + +
    +
    +Denne knap åbner et nyt vindue, som rummer bogmærkefunktionen.
    +
    +Anchor dialog/window
    +
    +Der er kun et enkelt felt i dette vindue - i det skriver du navnet på dit +bogmærke. Husk at to bogmærker ikke kan hedde det samme.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/da/insert_image_button.htm new file mode 100644 index 000000000..ed7c81f70 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/da/insert_image_button.htm @@ -0,0 +1,67 @@ + + +Insert image button + + + + + + + + + + + +
    +
    +Knappen "Indsæt billede" åbner et vindue, der ser ud som nedenfor.
    +
    +Insert image dialog/window
    +
    +Her indskriver man ganske enkelt adressen på det billede, man vil linke til samt +en billedbeskrivelse. Denne beskrivelse bliver derefter vist som den alternative +tekstbeskrivelse af billedet.
    +
    +Feltbeskrivelser:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Image URL Adressen på eller stien til billedet.
    Image description Alternativ tekstbeskrivelse af billedet.
    DimentionsBilledets bredde / højde.
    AlignmentBilledets justering - brugbar når der skal sættes tekst på plads omkring + et billede.
    BorderRamme bredde.
    VSpaceVertikal margen - brugbart når billedet skal placeres i en tekst.
    HSpaceHorisontal margen - brugbart når billedet skal placeres i en tekst.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/da/insert_link_button.htm new file mode 100644 index 000000000..3c3444173 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/da/insert_link_button.htm @@ -0,0 +1,34 @@ + + +Insert link button + + + + + + + + + + + +
    +
    +Denne knap åbner et nyt vindue, som rummer linkfunktionen.
    +
    +Insert link dialog/window
    +
    +Der er to felter i dette vindue. I det første skal man indskrive adressen på +linket - i det andet det "target", som linket skal pege på - dvs. hvordan linket +åbnes, når brugeren trykker på det.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/da/insert_table_button.htm new file mode 100644 index 000000000..9fc990141 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/da/insert_table_button.htm @@ -0,0 +1,72 @@ + + +Insert table button + + + + + + + + + + + +
    +
    +Trykker man på indsæt tabel knappen åbnes det vindue, som du kan se herunder. I +dette vindue kan du oprette nye tabeller.
    +
    +
    +
    +Feltbeskrivelser:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KolonnerAntal kolonner i tabellen.
    RækkerAntal rækker i tabellen.
    CellemarginTabellens cellemargin.
    Indvendig marginIndvendig margin i cellerne.
    JusteringTabellens justering.
    KantKantbredden i tabellen.
    BreddeTabellens bredde i pixels.
    HøjdeTabellens højde i pixels.
    KlasseStyle eller stylesheet klasse for tabellen.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/da/style.css b/jscripts/tiny_mce/themes/advanced/docs/da/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/da/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/de/about.htm b/jscripts/tiny_mce/themes/advanced/docs/de/about.htm new file mode 100644 index 000000000..c546f3048 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/de/about.htm @@ -0,0 +1,31 @@ + + +Über TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE ist ein kompakter WYSIWYG-Editor für Webbrowser wie MSIE oder Mozilla +der es Ihnen ermöglicht HTML-Inhalte auf eine benutzerfreundliche Weise zu +editieren. Es verfügt über die wichtigsten Funktionen die in den meisten +Textverarbeitungen vorkommen und sollte einfach zu benutzen sein.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/de/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/de/common_buttons.htm new file mode 100644 index 000000000..3dc058d87 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/de/common_buttons.htm @@ -0,0 +1,107 @@ + + +Allgemeine Schaltflächen + + + + + + + + + + + +
    +
    +Untenstehend eine kurze Beschreibung jeder Schaltfläche.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Fetter Text.
    Kursiver Text.
    Unterstrichener Text.
    Durchgestrichener Text.
    Linksbündig.
    Zentriert.
    Rechtsbündig.
    Blocksatz.
    Unsortierte Liste / Punktierte Liste.
    Sortierte Liste / Nummerierte Liste.
    Einzug verkleinern.
    Einzug vergrössern.
    Letzte Aktion rückgängig machen.
    Letzte Aktion wiederholen.
    Einen neuen Hyperlink einfügen, lesen Sie mehr über diese Funktion im Kapitel Hyperlink einfügen.
    Den gegenwärtige markierten Hyperlink entfernen / Alle gegenwärtig markierten Hyperlinks entfernen.
    Ein neues Bild einfügen, lesen Sie mehr über diese Funktion im Kapitel Bild einfügen.
    unsauberen Code aufräumen / Entfernt ungewollte Formatierungen. Diese Funktion ist nützlich, + wenn Sie beispielsweise Inhalte aus einem Office Produkt kopieren.
    Zeigt diese Hilfe an.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/de/images/insert_image_window.gif b/jscripts/tiny_mce/themes/advanced/docs/de/images/insert_image_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..751de28166262c14abe87713103afce2e741864b GIT binary patch literal 4822 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/de/images/insert_link_window.gif b/jscripts/tiny_mce/themes/advanced/docs/de/images/insert_link_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..14871d7d2f27d6a667ed61aa19c503df6ce3201a GIT binary patch literal 5135 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/de/index.htm b/jscripts/tiny_mce/themes/advanced/docs/de/index.htm new file mode 100644 index 000000000..d0d39e1d1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/de/index.htm @@ -0,0 +1,24 @@ + + +Inhaltsverzeichnis der Hilfe + + + + + + + + + +
    +
    +Klicken Sie auf die untenstehenden Links um die verschiedenen Bereiche der Hilfe zu betrachten. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/de/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/de/insert_image_button.htm new file mode 100644 index 000000000..7fcb2c6d1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/de/insert_image_button.htm @@ -0,0 +1,33 @@ + + +Schaltfläche Bild einfügen + + + + + + + + + + + +
    +
    +Die Schaltfläche "Bild einfügen" öffnet das unten gezeigte Fenster.
    +
    +
    +
    +Sie geben einfach die URL zu dem Bild ein, das Sie verknüpfen möchten und eine +Beschreibung des Bildes, welche dann als alternative Textbeschreibung verwendet wird. +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/de/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/de/insert_link_button.htm new file mode 100644 index 000000000..fbbd54f50 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/de/insert_link_button.htm @@ -0,0 +1,34 @@ + + +Schaltfläche Hyperlink einfügen + + + + + + + + + + + +
    +
    +Diese Schaltfläche öffnet das Fenster für die "Hyperlink einfügen / bearbeiten"-Funktion.
    +
    +
    +
    +Zwei Felder sind in diesem Fenster auszufüllen. Das Erste, "Hyperlink URL", ist für +die URL der Verknüpfung. Das "Ziel" erlaubt Ihnen auszuwählen wie die Verknüpfung +geöffnet werden soll. +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/de/style.css b/jscripts/tiny_mce/themes/advanced/docs/de/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/de/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/about.htm b/jscripts/tiny_mce/themes/advanced/docs/en/about.htm new file mode 100644 index 000000000..a6957a651 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/en/about.htm @@ -0,0 +1,31 @@ + + +About TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE is a small WYSIWYG editor control for web browsers such as MSIE or Mozilla +that enables you to edit HTML contents in a more user friendly way. It has common +features that are found in most word processors and should not be difficult to +use.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/en/common_buttons.htm new file mode 100644 index 000000000..518b28551 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/en/common_buttons.htm @@ -0,0 +1,162 @@ + + +Common buttons + + + + + + + + + + + +
    +
    +Below is a short description about each button. +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Bold text iconBold text style (Ctrl+B).
    Italic text iconItalic text style (Ctrl+I).
    Underline text icon.Underline text style (Ctrl+U).
    Strikethrough text icon.Strikethrough text style.
    Align left icon.Align left.
    Align center icon.Align center.
    Align right icon.Align right.
    Align full icon.Align full.
    Unordered list/bullet list icon.Unordered list/bullet list.
    Ordered list/numbered list icon.Ordered list/numbered list
    Outdent/decrease indentation icon.Outdent/decrease indentation.
    Indent/increase indentation icon.Indent/increase indentation.
    Undo the last operation.Undo the last operation (Ctrl+Z).
    Redo the last operation icon.Redo the last operation (Ctrl+Y).
    Insert a new link icon.Insert a new link, read more about this function in the Insert + link section.
    Unlinks the current selection icon.Unlinks the current selection/removes all selected links.
    Insert a new anchor icon.Insert a new anchor, read more about this function in the Insert anchor section.
    Insert a new image icon.Insert a new image, read more about this function in the Insert + image section.
    Cleanup code icon.Cleanup code/Removes unwanted formating. This function is useful when + you copy contents from for example a office product.
    Show help icon.Shows this help window.
    Source code editor icon.Opens HTML source code editor.
    Insert table icon.Inserts a new table at the current location.
    Adds a row above icon.Adds a row above the current one.
    Adds a row under icon.Adds a row under the current one.
    Remove row icon.Removes the row.
    Add column before icon.Adds a column before the current one.
    Add column after icon.Adds a column after the current one.
    Remove column icon.Removes the current column.
    Insert horizontal ruler icon.Inserts a new horizontal ruler
    Remove formatting icon.Removes formatting from the selection.
    Subscript icon.Makes the selection to be subscript.
    Superscript icon.Makes the selection to be superscripted.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/create_accessible_content.htm b/jscripts/tiny_mce/themes/advanced/docs/en/create_accessible_content.htm new file mode 100644 index 000000000..f4070a31d --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/en/create_accessible_content.htm @@ -0,0 +1,45 @@ + + +Insert table button + + + + + + + + + + + +
    +

    TinyMCE can create HTML content that will be accessible to all users, including those with disabilities using assistive technologies, as well as those using text-based browsers, or those browsing the Web with images turned off.

    + +

    Things you can do to make your content accessible:

    +
      +
    1. Include an Image Description: Blind users, or others who are unable to view images, will rely on the Image Description (or Alt text) to take the place of the image. If an image contains no meaning, such as a decoration or a spacer image, leave the Image Description empty. TinyMCE will then insert an empty Alt text attribute that will force assistive technologies to ignore the image.

    2. + +
    3. Add Scope to data table header cells: In the table cell editor dialog window, choose a Scope when creating Header cells so the column or row label in that cell becomes explicitely associated with its data cells. Table cell headers will then be announced with each data cell, making it easier for blind users using a screen reader to understand what the content of each cell represents.

    4. + +
    5. Structure content with properly nested headings: In the format selection menu choose Heading 1 to Heading 6 to represent headings in your content, rather than using other font formating options. Blind users using a screen reader can then extract the headings from the page to generate a summary of the content it contains, and use those headings to navigate quickly to subsections within the page.

    6. + +
    7. Include alternate content: Create an alternate page for non-HTML content such as Flash, Java applets, or embedded movies. This might be a static image, with a description of the image, and a description of the content that would have appeared in its place. An alternate HTML page could also be created, and a link to it included next to the non-HTML object. This will ensure that the content will be accessible to users of assistive technologies that can not view or play the content, and ensure the content will be available to those who do not have the appropriate plugin or helper application installed.

    8. + +
    9. Check accessbility: When the AChecker plugin is installed with TinyMCE, click on the Check Accessibility button to generate a report of potential accessibility problems.

    10. + +
    + +

    See the AChecker Web Site for further details about creating content that will be accessible to all users.
    +

    + +
    + + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/images/insert_anchor_window.gif b/jscripts/tiny_mce/themes/advanced/docs/en/images/insert_anchor_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b5f528dd57cae8e062919a66b0ff7fcf8f3bc42 GIT binary patch literal 5189 zcmV-L6uRq2Nk%w1VM+mu0QUd@H&l@lEO0qilOsNVFindaHh4i^nHDj05GrpUI(!r_ za}OzQrpoXNBx(yKYi5SIC`5!jS(O+wc1dTTm%8JFrP7M5*m|4FS$M8BQjd0*$5mBT z=;+h``|#@O>def{hpE;xP>o@MwWZ1MmAK&!C~YJ_fOC|^AUu7Ow%}WOucF57OlzZ* zw&0}4?rx62QE;bCYowvX>r85*c$vv8NQW{`j8k!_FH4CuP>z71&z->NKwX$paj0pE zye&zHq{#21$L&sRq?EVen7rhKrqiFo>V2NfQE#UjHF%J+-E@`3GEa?lmc|`9dpK2* zrOEF^Vw{Vv*__V48cJ%W#pxN@<~n zsMJnvrBH9C0A|c`lfyqtRHdBxl zFm#Qu+mEu`CPIROqtR4yshGRuX^FcMEpd*p+f{U`Cqjd5kGv^Gg(pLU88mmC!01S3 zpJ<4>VuH3?day-fos6#9fTGZuyya?&y^pcnB|w2?g}6OhmVBMeXNS5IE^=vtn#p8@xFtb?7czBwoy$gJoo$W3h^p6Mf3qq^g%B%mTzjybzvr605p*>rcFHDMBd9Qt+&3AWqElP-Sk;0I( z-5xo6E=q}UlEZhH$d{pUziytuto-k+j}!kHAxMsSGA;4JT}sxZ;L}hHsC- zGc(Nb@$mp=nVFfH004k9Gc%x*O#}o4z`(%&%$Wc)nKNe0UteD{=KnxIK!AXN)X>NP z00960|M2kcA^8LV00000EC2ui07?Oi000R80Qm_VNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGZNIt&!5MSAVZ2ANwTELlPFWFT*BcR3xlMp%jWXM1X0Dva~1XRJ|EJ6fX z)6SqV!^1$9EM216ilWLFAvnuSO_(4J%%B-8Vh9n#Mavi@FnZiDrzz5>J8v9`1BU@a zH5I9dDOzM_%CTTq_=rHIY>gaUu^v4CpmpjNCm*h!;VJa%#fx(5AbrW!t&E-%OQffv2Za)dSExbcS$tRR!gBo$Op1T)Zt(FO>~0JDV!7T_YqD$Q8p$t#yA zp$$269Fjr{Ly(ZpHxy8?2@$Or1Bf8Sl(NGfMi{|H95OUw$O=KY00a~xFreg;Og8D{ zlTbz(B|k>##MCwFWT~Z=PC+FVRaRl86<1z?B^Fs`p`{jEZowrNU3TH67hiq>CKzFc zA*L8(jzK0FWtL&48E2k>CK_p`p{5#ZuE8c7ZMNa28*jb=CmeCcA*UR3&Os*~b=G00 z9e3V=Cmwm`p{E{u?!hM?efHu1ryqa*0Vp7W1|p~+gAPI{A%zxVs3C_Qf+!-1CZeb! zi!Q<_BaJrVs3VU)0x2YsMj|QYw%m3LC6zfLwbV5vy|aN*PenCVRaa%TRaakyHC9rnq8@FUB}yjW_1FV~;-uIb@MXCdt4``k<|(+6;hu)Rq2p zAotuIywkzC4W#=eyJEioTc*5d*1IOYZtfeWzjOwCC&79i+^52THasZAhEANQ#f)bB zD94h1T&c*Imb@v-o~|6K%cRD9D$T0i+^Wv7_B<=lwho=E(Yz-8E7QV0U98l|R=q6N z&Tbv8*VKl6E!oxStrnem=UubTI^ zsV|)V$oX%b0(+FF!F(qCC&Pk1T&TpP@ra@>)+miZs$-J^nWaXSDU)$3WuIc1s9sho znW3s?tHN11J`y`w{j63(!&T9Cg*0C+Em%$?R@9C~HDz6`Sz3cu*QNzFYmF^iW{ciJ zpeK-h`0$56?4kAloF}~@VozL3fk*ec*MV`gqXQp!$2HF70FZ#GU1NfmndX%yd$GkM zg@d2`5@)AG*v}(4@JRmrw6H)qj8G9f6b}T5IgB}KW0CS0r9vhgk2KH`9>IV|N(ZWz zjS6O_npvuB#;O;1L_QvgmCry@I}v(>guPN4u$ne3s2OW&O7Mu)m=zKkO6zOY5*xP4 zM!h0N4~VeT$@GZGkAC!nAhs0Z^{Rx#2EZc}eqaYX@?5R8Ss^Ewx

    E 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/images/insert_image_window.gif b/jscripts/tiny_mce/themes/advanced/docs/en/images/insert_image_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..cdc617eab3be256173af047822671023c41d53c7 GIT binary patch literal 7195 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 AEdT%j literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/en/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a032c5ae8dfcf3fad7ed65c814c2b1a1e88d25d GIT binary patch literal 7094 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/index.htm b/jscripts/tiny_mce/themes/advanced/docs/en/index.htm new file mode 100644 index 000000000..9810a93b0 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/en/index.htm @@ -0,0 +1,27 @@ + + +Help Index + + + + + + + + + +


    +
    +Click the links below to go to the different help sections. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm b/jscripts/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm new file mode 100644 index 000000000..332cbc687 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm @@ -0,0 +1,32 @@ + + +Insert anchor button + + + + + + + + + + + +
    +
    +This button opens a new window with the insert/edit anchor function.
    +
    +Anchor dialog/window
    +
    +There are one field in this window, this is where you enter the name of you anchor point. Remember the anchor name needs to be unique.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/en/insert_image_button.htm new file mode 100644 index 000000000..1529648d5 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/en/insert_image_button.htm @@ -0,0 +1,65 @@ + + +Insert image button + + + + + + + + + + + +
    +
    +The insert image button opens the window shown below.
    +
    +Insert image dialog/window
    +
    +You simply enter a URL to the image you want to link to and enter a image description, +this is then displayed as an alternative text descripton of the image on the page.
    +
    +Field descriptions:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Image URL URL/path to the image.
    Image description Alternative description of image contents.
    DimentionsImage width/height.
    AlignmentImage alignment, useful when wrapping text around images.
    BorderBorder thickness.
    VSpaceVertical space, useful when wrapping text around images.
    HSpaceHorizontal space, useful when wrapping text around images.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/en/insert_link_button.htm new file mode 100644 index 000000000..4f6445076 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/en/insert_link_button.htm @@ -0,0 +1,33 @@ + + +Insert link button + + + + + + + + + + + +
    +
    +This button opens a new window with the insert/edit link function.
    +
    +Insert link dialog/window
    +
    +There are two fields in this window the first one "Link URL" is the +URL of the link. The target enables you to select how the link is to be opened.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/en/insert_table_button.htm new file mode 100644 index 000000000..f352a0516 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/en/insert_table_button.htm @@ -0,0 +1,71 @@ + + +Insert table button + + + + + + + + + + + +
    +
    +The insert table button opens the window shown below. This action enables you to create tables.
    +
    +Image of table window
    +
    +Field descriptions:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ColumnsNumber of columns in the table.
    RowsNumber of rows in the new table.
    CellpaddingCellpadding of the table .
    CellspacingCellspacing of the table .
    AlignmentTable alignment .
    BorderBorder thinkness of table.
    WidthWidth in pixels of table .
    HeightHeight in pixels of table.
    ClassStyle or CSS class of table.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/en/style.css b/jscripts/tiny_mce/themes/advanced/docs/en/style.css new file mode 100644 index 000000000..ebc05380e --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/en/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/es/about.htm b/jscripts/tiny_mce/themes/advanced/docs/es/about.htm new file mode 100644 index 000000000..055c8202d --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/es/about.htm @@ -0,0 +1,28 @@ + + +Acerca de TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE es un editor WYSIWYG para navegadores como MSIE o Mozilla que te permite editar el contenido HTML de una manera más amigable. Tiene la mayoría de las opciones de un procesador de texto y no debería ser dificil de usar.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/es/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/es/common_buttons.htm new file mode 100644 index 000000000..458a4fd55 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/es/common_buttons.htm @@ -0,0 +1,155 @@ + + +Botones de uso común + + + + + + + + + + + +
    +
    +Pequeña descripción de cada botoón. +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Texto en negrita.
    Texto en cursiva.
    Texto subrayado.
    Texto tachado.
    Alinear a la izquierda.
    Alinear al centro.
    Alinear a la derecha.
    Alinear justificado.
    Lista desordenada/lista por puntos.
    Lista ordenada/lista numerada
    Disminuir la sangría.
    Aumentar la sangría.
    Deshacer la última operación.
    Rehacer la última operación.
    Insertar un enlace, más información en insertar enlace.
    Quita el enlace al texto seleccionado.
    Insertar un imagen, más información en insertar imagen.
    Limpiar código, esta función es útil cuando copias el código de otra página.
    Muestra esta ventana de ayuda.
    Abre el editor de HTML.
    Inserta una nueva tabla de 2x2.
    Añade una fila encima.
    Añade una fila debajo.
    Elimina una fila.
    Añade una columna antes de la actual .
    Añade una columna después de la actual.
    Elimina la columna actual.
    Inserta un separador horizontal
    Elimina el formato de la selección.
    Subíndice.
    Superíndice.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/es/images/insert_image_window.gif b/jscripts/tiny_mce/themes/advanced/docs/es/images/insert_image_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..cdc617eab3be256173af047822671023c41d53c7 GIT binary patch literal 7195 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 AEdT%j literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/es/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/es/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..5e8497f75e25c308ea813ea7a24d2ce0461d579f GIT binary patch literal 6747 zcmV-h8l>e%Nk%w1VN?Op0QUd@N@$@~bE+9McR5y*3@2N{Jyn zeikuw6fSZjKY$xHc@ivfG*FHYDQ-YOK&Hy@3M6WhwcmA?#tS8DW`?gwvu%*-f6gm#z5j??}Me%O>3j0#_dOCo?w8qP;RDqo635d$`C4Vh^p5%QjdkF(+?_dPj01A zaHmjjriiN6aFD_vJbj?U>VBWiZ;-(vJ%5F#)HPC%A3A(@n8-zAootN00A|dYyyYG` zdtrgKqQ>o=!RTFlu`5T0kh9%#lf-h8!(@cFpv3E>$nHN}m@i9;BR+qApw3rztYd?> zn7rhXv)(>immD{FqsQ)@!00wpkS0QcR&}hQ#q2Olid}uOUVXAycC95rf)y}xfuhis zx#B@ynU1jAjIP>^ui9yeyG&}M7czBAX`+Ip(N%P-mAK(nb*q7+(3QC2BtU^BL4iPC znJPwwI8~92uiJv7(Pf3WTzjyZz2=Lp*?*zWZH>Qbio9rux?+O1OlqP=WS*YF=|EkW z6E1QQEO2Lsx@d^ILSULfUz$c^ohn9#fTGV|f3u6O*%2#ngr(AlsnvMVVj1AhDc_gM`fRHkHIlbi!e=# z@$vC9Gt2;HnVFfH004k9Gc&-zz@U>&1OxNP z00960|M2kcA^8LV00000EC2ui08|0d000R80Qm_VNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGdh&O&!5MSAVZ2ANwTELlPFWFT*Vbi~gsQuhB}k4XV6cb@(_)7c836)(3dKlJ zByu4_V54?}l{7n#AVmqr?8+P(vz872+B0nx1`N7n?b1{vmIx7VV8Ox>E*%;&*1YM- z!{f;h3l^-fLK{6O<4hJ>lu*J8*^F~WAVji@mK;wlPMig_*7+e_BK?kk~ zgGnZ-T*5*%+~8424HZ;igE-%SGD;;GWPl7IaWvCP65W84NFC4EGJ_d>G|>nhRUp#G z5K_1>!IV^1Y2}qzW~rr?{1~MZQ`eXy=9ptT1(j4(S%sBWTzLhSSY(-nmRfAN1(#fO z*@c&0eE9{KV1yZlm|~1M2AO1(S%#TroOuSCXr!5jnrf`M2AgcO*@l~Ly!i&4aKssh zoN~-L2c2}(S%;l=+<6C{c;uP?hn{-uxd)$o^x21>e*F0dpnwD#h@gTDItZbJ6k3R( zh8%hbqKG7#h@y%tx(K6;G}?%xjy(DZq>w}!iKLQDItiteTc)e-x>$CZ6H-fEL()4V zDD_lS1WZ-cRatG-)mLGSRn}Q)t<~0Bam`iNU3u-**I$7RR@h;QE!Nm$kxf?FWtnZ( z*=M1RR@!N)t=8IWvCUT7ZMp5%+i$@QSKM*QE!W(0(M?y~b=hs#-FM-QSKfK)t=Har z@y%D?efjOz-+uuPSm1#PF4*9M5l&d)g&A(x;fEoPSmKE(uGr#>G0s@yjXCbv%yPF4^RhQBJv%1bgfMt&#*&x_cCu{+M9+;U>IeLcJ8+i{`#-`s-%EaS}}D!FMXG zXTyC$4CuszT5M>>iE_;7$B&9EX~~tMjOogoy6kDpq0&t1&8OT!rH!P3slZ zfHk#YS04VS*IA;~Mq407&$urhc^vU~n4PoYvxz11d~`9$}ycJQA@$ zQH)R%^oS5Vvav;B@G~A!9S2wA!ApVAA0p(`%RVJDQF$bVk?=?eJhHP@`OH;8ixtsm zb+lW}$0PUgh|_!pk{&Y8BhJ&BvbxqRut95V(_(=~td+KqaPMv3lAE~dRxZ4uD}4$< zpBB5=MV+`Wef{VML9+S9zd=mM)B_G|WCse|7)Lq!qkoXIV*n|q#{%{- za|yJ|M;!M5kwStlf)hLxBNf%LMnTdalAIJJ{qeyNvP_e+GodFvQmT)js+7EYVJd+) z!&VXxmSm8n4gutmU{Q@&xIC6FhbTQ?9?^Qj^an9zOHnq3;n zKCB5wXmXPuM|GDs-<6aLz+)cxu%AELaSwE&00k#VK|4K?uaNW$BwzuFSv=wZe}Dia z3Cm{#K(Yvs1O_A&3yBgG`H?PoBr_gC9Y{(8l7)UmHVy>|2{~Ci8GwWlAQ`1UssoZJ zc;pKH01rrH1(NoFFBW>S^yb-#U#=ni}Xij?uv@MIx3PIM2$yuP)Uzm zaswX8jYl>~yA%2&03ZpaKNNcdkC+l9H1NoHJc0p_u+k&&@dyq;DpJmR)*}e=$O}?R z1dmY2BU1oLYW)Esk95EzC-O*4XKDju$~F$P^~jJsGDYz@^NQ-rVo-fcR3HyzxWpx6 zQuZ;Ad??p&Y(xP&PJmUd?vJa|^#^tRVcm~>MI_wy2c7Pju<+_LFCOU&A=7(+^|n|4 zg8rB*d?(pkHgnYD~1t^y!Gjj zfxAuN62yHksw%gT3U2 zvz+7GNRK=c&+I;eyDhQb{`%v;^_Jbe3#;!^DVV|jcC0^K(%$;Io))g+EfO%hH``o2BLdNA%8V27P3- zAPM}%2k&B6q`Dd(N&H7LaN`_<#7L5-yya2;^2}>5XPY^^X7jq~YlWzWSIvE5hBco8QV@a9v zP+~_|CsZ?Lmpd$EO1%R^suVmlAKhxI2pIJ2A9M z!c#*^6N$&;D?(^XmIy@8vr9y@i7ypQN|ZgIcuY|AJ-6j!wk84gc#rs)kNUWe_&6o} z$d3mYKgTr!1X+*a8JJ{56ogrrhIyEX znV5<>5#QvBj`^678JUtfnUqo2VI@?}8Kmkej->o4nbZzWJNL8Jxm7oWxn2#(A8`nVibGoXpvr z&iS0s$(y!mo6%XF)_I-SnVs6Xo!r@-&^et%<(=aHIiBQMp5}R;=vkcL=`QKnp6>ac z@EM=-`48)foAY^}_?e&jxu3sTpAx{I02-hII-uR@p9FfK2%4Y@8k`2Ypbq+=5UQUI z8leVJa&`lo8TsB7wfT?(mwN~wFwrH*=~j0&f0 zYNnW4sg9bak9w(xI-rT_rj@Fus@kZlx~Zfps#=<+ks7C*Dyp>#sjJGWy?Lv&+N-%* zssehdyPB%DN~*l7tAHw~vRbUI>Z{D!ti#%^3aq9In&FA1#7e1v>Zy}ztd~ly z;tH+LI;yCetk24;o@%WDDy*G~u3uWK$O^0U8ms9#uJ8;}Wt+*F7OMJF4!`v9L>OQAz$6J;B* zXz-#Dp>0bOZ_BQ8I}>%Ao^cDIcPkTl3#@$`6MuW2d%LRy8n`eqxQB|kFQK?h z>$TMxs&0C?A0b?V>z?cCplxfpiEFlyi=_~&sFdpu{ZP4`+n#>Pw;oZtt9!a|`?+4K zsEZ1wp=+ikE4d|Goqfx?F5$T1nY!H?x(J)Q>AAbEi?p!YocjvAv|78u+q|^PvC#{i zcgwrIi@CV#ypcM+!h4?8d%5rbiL=Y=yu&-a%=^4G`!Z$zn<&BMY_T)alcXu!z&@f-dVVsYZLxp z!%j-WD#63tiNgy@wqqN%EzGlAo5bO3!b;r4;wi*V9L2c_#Zv6VR9wYMe8pJIwOYKz zSlh*3OtoMf#!oxOWW2Oy44_2Jwnn_fE=;68oDx8+q;Y%`M|_(P{G)Yz5_6oSdu$SY zoSkXRpMP8uf&9Wce8|`TdBxD1oCutqg-jBPY@UsbpOGw7cTAnpDY=F#y@cAy>8qTV zEE1C(xprE~v3tR8o5|T)vE9q2+=Dl_q`{1w@-&ZwNg=Zwzs49~o|%{$D>6r0MOnyKfE%>GNv(!9&MY0urfoXhL2<_p07 z%(3QNzQjq;_$;;1EYIW{(EnV~`%BNe3DN9K(eXUb7oE}R%*^ZT#z?%$7@N%0T+A$u z&<@?w!O79si_H`NT(Bm4%+@^8+3cG#jl6H1o&tTHLH!Rs{h&iF%nx1C4Sdo-J)WE# z(@G7YM=hr_OVm-Vx8H1|MGd%DUBW*Nq-(6gZM@WYe8y(owO@VKYJH?xz1D8cq;37y zZav6y{jzjj*AaWyc+IYQz1P6n*M5DdfIXjNTi62V4{|-&@+q3M+1UEn5hfbeKF!o% z%{Myi5)Y9Rk=@mV8`m+4K9}7RTFA$mJ)&FP*=c>kmL1wFaTGxY*{03e=6SYLou8oX z64|s8_3II?jfJo+)c1MXv+db(s>_s2y{nDExor}=&D^aE621LXr5(-6S=-&Yxy#+S z5uL}(8NZ(Y?9|9jzY9DP&0P|#%f8W#5MENIxjdZK&7C4V-Z8x0o9xgFz07}#yEpC9 z$$8tPE8eTS+!?Ig3w++n&AaLCh0_hnA{(pMY|IYc-n9JO|E=97UDmEV&JAtR{T$K~ zKAiq-y$1f=yFKC+ZsNR+dA?G&>n5yAdH+rKIJ08yJ8OJ zCms^%{eQpK;vl@^9^Sq0-QQ%M!jp~R6HUA2?BgJv&^0~0QC^%O&bgJ#xgrke11{zW z-i4k2r{*{f;WT~UUA~>zP32X71dZ(g4M&DtoD;J&5k8!Ft7o7yc~)x4bCntl>p z0-2t!p`cEliXESse(EKWn!g>Qt&YE~m=uB7rajhkj^jWo>$0BM#2wgM{OZW= zq{_bRO4{tsZlus2?NEB`)ZWC?e(gV+?b=SI*52(~%kAC^?A9vTSe@%Pdh0VR+o4X` zdd%)(s_r-Z?IZ0($AzY41Ty?~~i+PQKXw&Yj`P-cA1KQm(dE zuFo2M@UWinE$i^aIm?)C@dJ)mYs z{^auu@u=JL>2S4%NY4pIo zze*p^Jn!c&FUUY&@C?1^%bL#SN%hvb@G8IPA^+h4zxCKD?qkpP@tO5&&-B4w>F-YW z1NziO5BJvT_8X7)Tn+fBt?xT(?tn|~UQPJmUd4XD_%Pb|j?bcyANeRc`IHZ{U4QvQ zYx$ZVqMYCP9s2p8zo9W}*pu1$rjMD=S^C62>6dTMbi4YQpPR66yZpVYul%D-RyHSWv8ulUCqxPU$r&0WxDjl$1g6Vbo?bk3ZJE9or%as8Ul zxMQxv-rt<8Pu_u^-2`6braR=y|NSJ<+=Tx8f}Y*ukJilJ^Y35a$shhk4iNqX4)nM0 z-$8^46)t4h(BVUf5hYHfSkdA|i2DcrCF5eMx8)W zmW=8Yt5URS)viVR73|KkL8WqRn)2*Qu3U|}C0R8r)SZB*l2ysp@L|M>7xLv;wXa{e zj~~yqYc#J*n0uXW=G?imV$h*Qd-Yt}wCB4RFVEC`+I8vFqh-&geUS10YuuY-TU?!) zbZ+2RYY!(b`gU;SyDRqYO7u8#)5?oar~VuIb%D|+GT*z;`*-l+#g8XnUVC-)=_8tF z-`@Rr%a~)zS6|=$ef+e!=jY$w|9{ow(+fZX3pCKb{SH)cK?Z9}ut5kTln|{4C$#WF z3?r&ALk>HO$7{7OV|MHY)wu|*hT1nor`YqXI<0qMJOM;>vUX}}(X z6f(dcbsX|YBp;$NNhW(-vPmdwd@@QZS?rA;EVI;dOD?$LMuJoD6ZPd@t`s7N>i6?9NS3pMmmL=!DIbgTCob@Wk4Bb9Vg xN-MSWQcN?|v{DH=_4HFvLlt#YQcE@UR8&({byZedb@f$PW0iGQT2~DS06V- + +Índice de la ayuda + + + + + + + + + +
    +
    +Selecciona una sección para ver la ayuda. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/es/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/es/insert_image_button.htm new file mode 100644 index 000000000..fdaa1a062 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/es/insert_image_button.htm @@ -0,0 +1,64 @@ + + +Insertar imagen + + + + + + + + + + + +
    +
    +El botón insertar imagen abre la siguiente ventana.
    +
    +
    +
    +Tu sólo tienes que escribir la URL de la imagen que quieres que aparezca y escribir una descripción de esta, esta descripción aparecera como un texto alternativo que describa la imagen.
    +
    +Descripción de los campos:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Image URL URL de la imagen.
    Image description Descripción alternativa del contenido de la imagen.
    DimentionsAltura/anchura de la imagen.
    AlignmentAlineamiento, útil cuando colocas texto alrededor de la imagen.
    BorderAnchura del borde.
    VSpaceEspacio vertical, útil cuando colocas texto alrededor de la imagen.
    HSpaceEspacio horizontal, útil cuando colocas texto alrededor de la imagen.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/es/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/es/insert_link_button.htm new file mode 100644 index 000000000..09930358f --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/es/insert_link_button.htm @@ -0,0 +1,32 @@ + + +Insertar enlaces + + + + + + + + + + + +
    +
    +Este botón abre una nueva ventana con la función insertar/editar enlace.
    +
    +
    +
    +Hay dos campos en esta ventana, el primero "Link URL" es donde hay que escribir la dirección del enlace. El segundo "Target" indica cómo se abrirá el enlace.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/es/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/es/insert_table_button.htm new file mode 100644 index 000000000..5950e480e --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/es/insert_table_button.htm @@ -0,0 +1,67 @@ + + +Insertar tabla + + + + + + + + + + + +
    +
    +El botón insertar tabla abre la siguiente ventana. Esta acci&ocaute;n te permite crear tablas.
    +
    +
    +
    +Descripción de los campos:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ColumnsNúmero de columnas.
    RowsNAúmero de filas.
    CellpaddingDesplazamiento entre celdas .
    CellspacingEspacio entre celdas .
    AlignmentAlineamiento de la tabla.
    BorderAnchura del borde de la tabla.
    WidthAnchura de la tabla en pixels .
    HeightAltura de la tabla en pixels.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/es/style.css b/jscripts/tiny_mce/themes/advanced/docs/es/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/es/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fi/about.htm b/jscripts/tiny_mce/themes/advanced/docs/fi/about.htm new file mode 100644 index 000000000..75df8e5ff --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fi/about.htm @@ -0,0 +1,28 @@ + + +About TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE on pieni WYSIWYG sisällönmuokkausohjain webbiselaimille kuten MSIE tai Mozilla joka mahdollistaa HTML sisällön muokkauksen käyttäjäystävällisellä tavalla. Se tarjoaa yleiset tekstinkäsittelyohjelmien tarjoamat toiminnot eikä ole vaikea käyttää.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fi/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/fi/common_buttons.htm new file mode 100644 index 000000000..7d423df2d --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fi/common_buttons.htm @@ -0,0 +1,156 @@ + + +Common buttons + + + + + + + + + + + +
    +
    +Alla on lyhyt selostus kaikista toimintonapeista. +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Lihavointi.
    Kursivointi.
    Alleviivaus.
    Yliviivaus.
    vasen tasaus.
    Keskitys.
    Oikea tasaus.
    Pakotettu tasaus.
    Järjestämätön lista.
    Järjestetty lista/numeroitu lista
    Poista / vähennä sisennystä.
    Sisennä.
    Peruuta viimeinen muutos.
    Tee uudelleen viimeinen peruutettu muutos.
    Lisää linkki. Lisätietoa tästä toiminnosta lisää linkki -osiosta.
    Poista linkki valitusta tekstistä.
    Lisää kuva. Lue lisää tästä toiminnosta lisää kuva -osiosta.
    Siisti koodi. Tämä toiminto on käytännöllinen kun liität tekstiä toimistosovelluksista.
    Näyttäää tämän apuikkunan.
    Avaa HTML lähdekoodieditorin.
    Lisää tualu. Lue lisää tästä toiminnosta lisää taulu -osiosta.
    Lisää rivi valitun rivin edelle.
    Lisää rivi valitun rivin jälkeen.
    Poista valittu rivi.
    Lisää saraka valitun sarakkeen jälkeen.
    Lisää sarake valitun sarakkeen edelle.
    Poistaa valitun sarakkeen.
    Lisää vaakaviiva.
    Poista muotoilu valitusta tekstistä.
    Tekee valitusta tekstistä alamääreistä.
    Tekee valitusta tekstistä ylämääreistä.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fi/images/insert_image_window.gif b/jscripts/tiny_mce/themes/advanced/docs/fi/images/insert_image_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..29dc616254731f3819dfe58cfe2210feb75202cd GIT binary patch literal 8825 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 vzXRl$M(rSLOHk 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 R-}uJ#ra5itNZTVI06Uk)tIPlZ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/fi/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/fi/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..b24364695f6bd0eb18c5687796c953dfbf5a54f1 GIT binary patch literal 8442 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 + +Apua sisällysluettelo + + + + + + + + + +
    +
    +Napsauta alla olevista linkeistä mennäksesi eri osa-alueisiin. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fi/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/fi/insert_image_button.htm new file mode 100644 index 000000000..84628a815 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fi/insert_image_button.htm @@ -0,0 +1,65 @@ + + +Insert image button + + + + + + + + + + + +
    +
    +Lisää linkki -nappi avaa alla näkyvän ikkunan.
    +
    +
    +
    +Kirjoita haluamasi kuvan URL osoite ja lisää kuvalle selite. Selite näytetään vaihtoehtoisena selitteenä sivulla. +
    +
    +Kenttien selitykset:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Kuvan URLKuvan URL tai polku.
    Kuvan seliteVaihtoehtoinen selite kuvan sisällöstä.
    UlottuvuudetKuvan leveys ja korkeus.
    AsetteluKuvan asettelu, käytännöllinen kun halutaan tekstin rivittyvän kuvan ympärille.
    ReunaKuvaa ympäröivän reunan leveys.
    PystyväliPystyväli, käytännöllinen kun halutaan tekstin rivittyvän kuvan ympärille.
    VaakaväliVaakaväli, useful when wrapping text around images.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fi/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/fi/insert_link_button.htm new file mode 100644 index 000000000..857ef3a7b --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fi/insert_link_button.htm @@ -0,0 +1,35 @@ + + +Insert link button + + + + + + + + + + + +
    +
    +Tämä nappi avaa uuden ikkunan jossa on linkin lisäys- ja muokkaustoiminnallisuus.
    +
    +
    +
    + +Tässä ikkunassa on kaksi kenttää. Ensimmäinen kenttä, "Linkin URL", on linkin osoittama URL -osoite. +Toinen kenttä, "kohde", vaikuttaa siihen miten linkki avataan. +The target enables you to select how the link is to be opened.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fi/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/fi/insert_table_button.htm new file mode 100644 index 000000000..8891a5b98 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fi/insert_table_button.htm @@ -0,0 +1,67 @@ + + +Insert table button + + + + + + + + + + + +
    +
    +Lisää taulu -nappi avaa alla näkyvän ikkunan. Tämä toimonto mahdollistaa taulujen luonnin.
    +
    +
    +
    +Kenttien selitteet:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SarakkeetTaulussa olevien saraakkeiden määrä.
    RivitTaulussa olevien rivien määrä.
    Solun reunan ja sisällön väliTaulun sisällä olevan solun reunan ja sisällön väli.
    Solujen väliTaulun sisällä olevien solujen väli.
    AsetteluTaulun asettelu.
    ReunaReunan leveys.
    LeveysTaulun leveys pikseleinä.
    KorkeusTaulun korkeus pikseleinä.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fi/style.css b/jscripts/tiny_mce/themes/advanced/docs/fi/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fi/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr/about.htm b/jscripts/tiny_mce/themes/advanced/docs/fr/about.htm new file mode 100644 index 000000000..51d9e57e6 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr/about.htm @@ -0,0 +1,32 @@ + + +À propos de TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE est un petit éditeur "WYSIWYG" pour page Web comme MSIE ou Mozilla qui +vous permet de manipuler du contenu HTML d'une façon plus intuitive. +Il est simple d'utilisation et possède les fonctionalités ls plus répendues que l'on peut retrouver dans +les traitements de texte. +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/fr/common_buttons.htm new file mode 100644 index 000000000..aa9c23740 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr/common_buttons.htm @@ -0,0 +1,160 @@ + + +Outils communs + + + + + + + + + + + +
    +
    +Ci-dessous une courte description de chacuns des outils. +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Met le texte sélectionné en gras.
    Met le texte sélectionné en italique.
    Souligne le texte sélectionné.
    Barre le texte sélectionné.
    Alignement à gauche.
    Alignement au centré.
    Alignement à droite.
    Texte justifié.
    Liste à puces.
    Liste numérotée
    Réduit l'indentation.
    Augmente l'indentation.
    Annule la dernière opération.
    Refait la dernière opération annulée.
    Insère ou modifie un hyperlien. Allez à la page + Outil d'ajout d'hyperliens pour plus de détails.
    Efface les hyperliens qui sont sélectionées.
    Insère ou modifie une image. Allez à la page + Outil d'ajout d'images pour plus de détails.
    Nettoie le code et retire les paramètres non désirés. Cet outil + est très utile lorsque vous copiez du contenu provenant de logiciels + de bureatique.
    Affiche cette page d'aide.
    Ouvre un éditeur permettant de modifier le code HTML.
    Insère un nouveau tableau à la position actuelle. Allez à la page + Outil d'ajout de tableau pour plus de détails.
    Ajoute une ligne au tableau avant la ligne courante.
    Ajoute une ligne au tableau après la ligne courante.
    Supprime la ligne courante.
    Ajoute une colonne au tableau avant la colonne courante.
    Ajoute une colonne au tableau après la colonne courante.
    Supprime la colonne courante.
    Insère un séparateur horizontal.
    Supprime les formattages du texte sélectionné.
    Transforme le texte sélectionné en texte souscrit.
    Transforme le texte sélectionné en indice supérieur.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr/images/insert_image_window.gif b/jscripts/tiny_mce/themes/advanced/docs/fr/images/insert_image_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..4ee31bdf0d569b8e958d939683be68f6b97837e5 GIT binary patch literal 38920 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/fr/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a265223cc3ff0faee302da526b1573979013a72 GIT binary patch literal 32353 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 SXPqt-n + +Table des matières de l'aide + + + + + + + + + +
    +
    +Faites votre sélection parmis les thèmes suivants: + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/fr/insert_image_button.htm new file mode 100644 index 000000000..d8f38b12b --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr/insert_image_button.htm @@ -0,0 +1,66 @@ + + +Outil d'ajout d'images + + + + + + + + + + + +
    +
    +L'outil d'ajout d'images ouvre la fenêtre ci-dessous.
    +
    +
    +
    +Vous entrez tout simplement l'adresse de l'image que vous désirez ajouter et +entrez une description facultative. La description sera affichée en texte alternatif +sur l'image lorsqu'elle sera publiée.
    +
    +Description des champs:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Adresse de l'image Adresse URL de l'image à insérer.
    Description de l'image Description alternative de l'image.
    DimensionsLargeur et Hauteur de l'image en pixel.
    AlignementAlignement de l'image. Très utile pour faire contourner le texte autour des images.
    BordureÉpaisseur en pixel de la bordure.
    VSpaceEspacement vertical. Très utile pour faire contourner le texte autour des images.
    HSpaceEspacement horizontal. Très utile pour faire contourner le texte autour des images.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/fr/insert_link_button.htm new file mode 100644 index 000000000..d691d6bc3 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr/insert_link_button.htm @@ -0,0 +1,34 @@ + + +Outil d'ajout d'hyperliens + + + + + + + + + + + +
    +
    +L'outil d'ajout d'hyperlien ouvre la fenêtre ci-dessous.
    +
    +
    +
    +Il y a deux champs dans cette fenêtre. L'Adresse URL est l'adresse +de l'hyperlien. La destination vous permet de choisir de quelle façon +l'hyperlien sera ouvert.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/fr/insert_table_button.htm new file mode 100644 index 000000000..9ba3b7c37 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr/insert_table_button.htm @@ -0,0 +1,71 @@ + + +Outil d'ajout de tableau + + + + + + + + + + + +
    +
    +L'outil d'ajout de tableau ouvre la fenêtre ci-dessous. Elle vous permet de créer dfes talbeaux.
    +
    +
    +
    +Description des champs:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ColonnesNombre de colonnes du tableau.
    LignesNombre de lignes du tableau.
    CellpaddingMarge à l'intérieur des cellules du tableau.
    CellspacingEspacement entre les cellules du tableau.
    AlignementAlignement du tableau.
    BordureÉpaisseur des bordures du tableau.
    LargeurLargeur en pixel du tableau.
    HauteurHauteur en pixel du tableau.
    Classe CSSNom de la classe CSS pour appliquer un style.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr/style.css b/jscripts/tiny_mce/themes/advanced/docs/fr/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr_ca/about.htm b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/about.htm new file mode 100644 index 000000000..51d9e57e6 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/about.htm @@ -0,0 +1,32 @@ + + +À propos de TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE est un petit éditeur "WYSIWYG" pour page Web comme MSIE ou Mozilla qui +vous permet de manipuler du contenu HTML d'une façon plus intuitive. +Il est simple d'utilisation et possède les fonctionalités ls plus répendues que l'on peut retrouver dans +les traitements de texte. +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr_ca/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/common_buttons.htm new file mode 100644 index 000000000..aa9c23740 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/common_buttons.htm @@ -0,0 +1,160 @@ + + +Outils communs + + + + + + + + + + + +
    +
    +Ci-dessous une courte description de chacuns des outils. +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Met le texte sélectionné en gras.
    Met le texte sélectionné en italique.
    Souligne le texte sélectionné.
    Barre le texte sélectionné.
    Alignement à gauche.
    Alignement au centré.
    Alignement à droite.
    Texte justifié.
    Liste à puces.
    Liste numérotée
    Réduit l'indentation.
    Augmente l'indentation.
    Annule la dernière opération.
    Refait la dernière opération annulée.
    Insère ou modifie un hyperlien. Allez à la page + Outil d'ajout d'hyperliens pour plus de détails.
    Efface les hyperliens qui sont sélectionées.
    Insère ou modifie une image. Allez à la page + Outil d'ajout d'images pour plus de détails.
    Nettoie le code et retire les paramètres non désirés. Cet outil + est très utile lorsque vous copiez du contenu provenant de logiciels + de bureatique.
    Affiche cette page d'aide.
    Ouvre un éditeur permettant de modifier le code HTML.
    Insère un nouveau tableau à la position actuelle. Allez à la page + Outil d'ajout de tableau pour plus de détails.
    Ajoute une ligne au tableau avant la ligne courante.
    Ajoute une ligne au tableau après la ligne courante.
    Supprime la ligne courante.
    Ajoute une colonne au tableau avant la colonne courante.
    Ajoute une colonne au tableau après la colonne courante.
    Supprime la colonne courante.
    Insère un séparateur horizontal.
    Supprime les formattages du texte sélectionné.
    Transforme le texte sélectionné en texte souscrit.
    Transforme le texte sélectionné en indice supérieur.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr_ca/images/insert_anchor_window.gif b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/images/insert_anchor_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..71f417908f20d86f2be4fe7ac03f26a9b6b5f9c8 GIT binary patch literal 12662 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr_ca/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a265223cc3ff0faee302da526b1573979013a72 GIT binary patch literal 32353 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 SXPqt-n + +Table des matières de l'aide + + + + + + + + + +
    +
    +Faites votre sélection parmis les thèmes suivants: + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_anchor_button.htm b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_anchor_button.htm new file mode 100644 index 000000000..f63bc74ef --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_anchor_button.htm @@ -0,0 +1,32 @@ + + +Outil d'ajout d'ancres + + + + + + + + + + + +
    +
    +L'outil d'ajout d'ancres ouvre la fenêtre ci-dessous.
    +
    +
    +
    +Il y a un seul champ dans cette fenêtre, c'est le nom de cette ancre. Rappelez-vous, les noms doivent être unique dans la page.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_image_button.htm new file mode 100644 index 000000000..d8f38b12b --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_image_button.htm @@ -0,0 +1,66 @@ + + +Outil d'ajout d'images + + + + + + + + + + + +
    +
    +L'outil d'ajout d'images ouvre la fenêtre ci-dessous.
    +
    +
    +
    +Vous entrez tout simplement l'adresse de l'image que vous désirez ajouter et +entrez une description facultative. La description sera affichée en texte alternatif +sur l'image lorsqu'elle sera publiée.
    +
    +Description des champs:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Adresse de l'image Adresse URL de l'image à insérer.
    Description de l'image Description alternative de l'image.
    DimensionsLargeur et Hauteur de l'image en pixel.
    AlignementAlignement de l'image. Très utile pour faire contourner le texte autour des images.
    BordureÉpaisseur en pixel de la bordure.
    VSpaceEspacement vertical. Très utile pour faire contourner le texte autour des images.
    HSpaceEspacement horizontal. Très utile pour faire contourner le texte autour des images.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_link_button.htm new file mode 100644 index 000000000..d691d6bc3 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_link_button.htm @@ -0,0 +1,34 @@ + + +Outil d'ajout d'hyperliens + + + + + + + + + + + +
    +
    +L'outil d'ajout d'hyperlien ouvre la fenêtre ci-dessous.
    +
    +
    +
    +Il y a deux champs dans cette fenêtre. L'Adresse URL est l'adresse +de l'hyperlien. La destination vous permet de choisir de quelle façon +l'hyperlien sera ouvert.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_table_button.htm new file mode 100644 index 000000000..9ba3b7c37 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/insert_table_button.htm @@ -0,0 +1,71 @@ + + +Outil d'ajout de tableau + + + + + + + + + + + +
    +
    +L'outil d'ajout de tableau ouvre la fenêtre ci-dessous. Elle vous permet de créer dfes talbeaux.
    +
    +
    +
    +Description des champs:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ColonnesNombre de colonnes du tableau.
    LignesNombre de lignes du tableau.
    CellpaddingMarge à l'intérieur des cellules du tableau.
    CellspacingEspacement entre les cellules du tableau.
    AlignementAlignement du tableau.
    BordureÉpaisseur des bordures du tableau.
    LargeurLargeur en pixel du tableau.
    HauteurHauteur en pixel du tableau.
    Classe CSSNom de la classe CSS pour appliquer un style.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/fr_ca/style.css b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/fr_ca/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/hu/about.htm b/jscripts/tiny_mce/themes/advanced/docs/hu/about.htm new file mode 100644 index 000000000..08f839176 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/hu/about.htm @@ -0,0 +1,28 @@ + + +Über TinyMCE + + + + + + + + + + + +
    +
    +A TinyMCE egy kompakt WYSIWYG-szerkesztő az MSIE-hoz és a Mozillához hasonló webböngészők számára, mely lehetőséget nyújt önnek a HTML tartalmak egyszerű szerkesztésére. A legtöbb szövegszerkesztőben elérhető funkciókat nyújtja egyszerűen kezelhető formában.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/hu/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/hu/common_buttons.htm new file mode 100644 index 000000000..e665373da --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/hu/common_buttons.htm @@ -0,0 +1,106 @@ + + +Allgemeine Schaltflächen + + + + + + + + + + + +
    +
    +Untenstehend eine kurze Beschreibung jeder Schaltfläche.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Félkövér szöveg.
    Dõlt szöveg .
    Aláhúzott szöveg .
    Áthúzott szöveg .
    Balra igazítás .
    Középre igazítás .
    Jobbra igazíás .
    Sorkizárt.
    Felsorolás / pontozott lista.
    Felsorolás / számozott lista.
    Behúzás balra .
    behúzás jobbra .
    Utolsó parancs visszavonása .
    Utolsó parancs ismétlése .
    Új link beillesztése, bõvebb információért olvassa el a Link beillesztését.
    A kijelölt link eltávolítása / Az összes kijelölt link eltávolítása.
    Egy új kép beillesztése, bõvebb információért olvassa el a Kép beillesztését .
    Kód tisztítása / Eltávolítja a nemkívánt formázásokat. Ez a funkció akkor hasznos, ha például Office dokumentumból másol tartalmat.
    Ennek a segítségnek az elérése.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/hu/images/insert_image_window.gif b/jscripts/tiny_mce/themes/advanced/docs/hu/images/insert_image_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..a60e1fa8d8a92292e17c6fcf1877b8722c297a77 GIT binary patch literal 5486 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 Rh>G^;A)8UYmWtHn{{oZ!j5h!P literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/hu/images/insert_link_window.gif b/jscripts/tiny_mce/themes/advanced/docs/hu/images/insert_link_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..e72357bb6a56444bf8e24ac27656eae74cec74ea GIT binary patch literal 5762 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/hu/index.htm b/jscripts/tiny_mce/themes/advanced/docs/hu/index.htm new file mode 100644 index 000000000..43b81a2e2 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/hu/index.htm @@ -0,0 +1,24 @@ + + +Inhaltsverzeichnis der Hilfe + + + + + + + + + +
    +
    +Kattintson az alábbi linkekre a segítség különbözõ részeinek eléréséhez. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/hu/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/hu/insert_image_button.htm new file mode 100644 index 000000000..e7860bf7e --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/hu/insert_image_button.htm @@ -0,0 +1,32 @@ + + +Schaltfläche Bild einfügen + + + + + + + + + + + +
    +
    +A Kép beillesztése gomb az alábbi ablakot nyitja meg. +
    +
    +
    +
    +Egyszerűen meg kell adni a beilleszteni kívánt kép elérésének URL-jét, valamint egy rövd leírást, mely alternatív szövegként kerül megjelenítésre (pl. nem grafikus böngészőkben).
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/hu/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/hu/insert_link_button.htm new file mode 100644 index 000000000..95b375021 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/hu/insert_link_button.htm @@ -0,0 +1,31 @@ + + +Schaltfläche Hyperlink einfügen + + + + + + + + + + + +
    +
    +A Link beillesztése gomb az alábbi ablakot nyitja meg.
    +
    +
    +
    +Két mezőt kell kitöltenie ebben az ablakban. Az első - "Link URL" - a hivatkozás URL-je. A második lehetőséget ad Önnek a hivatkoztás megjelenítésének kiválasztásához.
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/hu/style.css b/jscripts/tiny_mce/themes/advanced/docs/hu/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/hu/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/images/table.gif b/jscripts/tiny_mce/themes/advanced/docs/images/table.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8a00544a9980d38c44d5fe8e9a8457be8339834 GIT binary patch literal 1018 zcmeH`!D|yi6vijCX;K?;HK|5XNfs0Yg$)+cs)rOqvff5dHHc2Uv)oRl&oNM zL_v>pGsp4dsvwhU>0X4Xh+Wac9CC=o!gvw&;JEQG@DJ$6$B*y9ySxux{Y-6ku9*Wl z&;cV^mgTqzF2D-Ju^=LJ*5Me*7UC50Cy+D9dr10NaI7en0;v!yiHT1LWt4Ho80`td zH0fy?J20##7#A#vDOn&n7d(iA=0Y-IcxbrPf)f!?@szE;c^>s&MB!_#s1QkQn7rM&uZWEuIkdp$R4&n$wy)0vxLV{8?)r-!}Ci)!@%sw>sSn!}>!G{SeK1|r~VZn+68+II6u;asm10Ob=_wF-@g9v?#;*dZ@+%|{O#+PpFh6;{Q2Y8&mX^k|N8U$_y7O@!A=+@ zMnhm=LO}5+3o`?QHiHhxdQhHV;HYB==aBK(u;5@bhp<-6i46*DqFMnSA1*XHGjymj z$?Op*WNGP=)SJbz@M1!Xh>C;FgAEIv8ibYXrszl~ z&MaaYDh9g*7@JwyXK1-BXgI*Il2h;pPeZ6;LmS)vCRL5HH(U%EXSsA%Z__>8z+epk DI%10H literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/images/table_delete_row.gif b/jscripts/tiny_mce/themes/advanced/docs/images/table_delete_row.gif new file mode 100644 index 0000000000000000000000000000000000000000..1997065fb2b447f498ab7fda4b7e21dcbb25dc81 GIT binary patch literal 942 zcmZ?wbhEHb6k!lyXlDQc1CIoUh=PEGhJcKQgo1{IiU|b`3j#VmBuw~FFylkPf)5Q7 z7Bo!QFk!}m2{SfKSg@gC#fJ$SK1|s0VZn+63pO0su;ai2Ap5|F4JUx;|A7nt58U{F z;lck0FaAIH@c#o4{rLYMi2nZv+crv!hQJ^S0mYvz%nS@F3_2h;f${_cM>m5fhm6OD z1qYisgtcN$Ojy9mEvgi>fT8hWN4JEt$%Yw%N7~tCoGZROc*x+)p`mC~@Svg5n~l@8 z>cxRXXEq)or2`@y3m*9JNg2eP*va6?$lx(i=t)DOQwuAXkirbBgarR4#!XpwwGCZQ}j-u$i5iXM38c!-9o(cUMTVu`pNz0PJ9X!TQ3xphWMO7tP+`ykxe1gf7&uxPJUL`M zHY_;U%pokNQs8*7k%5a_=z@SE(i5MkXeC zPNt5?0yW=8hN62%Dla%PGcz-pWCS=goN5wqs`((G@bc1P7WEc}kBSW;s{+{lBo>-5 iu&xUgtrHbga%dGy+03=YpedVyC-?NbIlm1R7_0$Wk9qk3 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/images/table_insert_col_before.gif b/jscripts/tiny_mce/themes/advanced/docs/images/table_insert_col_before.gif new file mode 100644 index 0000000000000000000000000000000000000000..5d1ff37afea7bb2e67952400e00184aa275d6764 GIT binary patch literal 935 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&uxOJUL`M zHY_;U%)u+PW5EN5h88YU7mp7DN{(zYMmj4p0u!3~q*V&u{5arzY@(RFO-4h5!|^7D zIH?}ZVugm;rn%2dUMy&AWMq^w(NJJWb>vXAtKet|SsBK;hMu<;?0m9#Rd5 h!d40F?cxwzaHwNr1Z$MUMpFj1Z7JoaTqOh;tN|1Me9r&? literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/images/table_insert_row_after.gif b/jscripts/tiny_mce/themes/advanced/docs/images/table_insert_row_after.gif new file mode 100644 index 0000000000000000000000000000000000000000..c3aa15f93a9d50777ca3a3b2309fc807ceabc57a GIT binary patch literal 928 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&vMfJUL`M zHY_;U%)uMAz#x%{g`JbTZ-#`DOLGT{dj|*Oqh`h)X6?Ek4-y$X8X1FD*?2NJv$hH7 z&6{JfXpzqZDa$&I13@aDj5?v~Qf7WQ*v!VmA#i}h;Q=$htVPBS0l|h)240Jt69SHm a!Hpb79uX5BFnBXLF$=_=o|fvsU=08}a&%e% literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/images/table_insert_row_before.gif b/jscripts/tiny_mce/themes/advanced/docs/images/table_insert_row_before.gif new file mode 100644 index 0000000000000000000000000000000000000000..c3271e54937cb8dbfb435ee8bc2d02157cff1448 GIT binary patch literal 928 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&vMfJUL`M zHY_;U%pt55lkwqTGaC=w17?0%i;Nu$1RC5Kcr9{H2skpjHgXtwL`-~0*X=}WE7QHI{4WtnErk^c$i_Har&nt0T0z!7V6jbF?3B; b3|uVFrNMjfN;AWXK;{oIr@tjQFjxZsoSk_C literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/it/about.htm b/jscripts/tiny_mce/themes/advanced/docs/it/about.htm new file mode 100644 index 000000000..e1bca0ffb --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/it/about.htm @@ -0,0 +1,37 @@ + + + Informazioni su TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE è un piccolo WYSIWYG (What You See Is What You Get, +quello che vedi è quello che ottieni) editor per i web browser +come MSIE o Mozilla che permette di editare HTML in modo comodo. Ha le +funzionalità comuni di molti word processor e non dovrebbe +essere difficile da usare.
    +
    +
    + + + + + + + + +
    +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/it/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/it/common_buttons.htm new file mode 100644 index 000000000..7dc7a7906 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/it/common_buttons.htm @@ -0,0 +1,180 @@ + + + Pulsanti comuni + + + + + + + + + + + +
    +
    +Di seguito una breve descrizione di ogni pulsante.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Testo grassetto.
    Testo corsivo.
    Testo sottolineato.
    Testo barrato.
    Allinea a sinistra.
    Allinea al centro.
    Allinea a destra.
    Giustifica.
    Lista non ordinata.
    Lista ordianta.
    +
    Diminuisci l'indentazione.
    +
    Aumenta l'indentazione.
    Annulla l'ultima operazione.
    Ripeti l'ultima operazione.
    Inserieci un nuovo collegamento, maggiori informazioni su +questa funzione nella Sezione +'Inserisci un collegamento'
    Rimuovi tutti i collegamenti selezionati
    +
    Inserisci una nuova àncora, maggiori informazioni su +questa funzione nella Sezione 'Inserisci un'àncora'.
    Inserieci una nuova immagine, maggiori informazioni su questa +funzione nella Sezione 'Inserisci +una immagine'.
    Ripulisci il codice/rimuovi la formattazione non voluta. +Questa funzione è utile quando si copia per esempio da un +programma office
    +
    Mostra questa guida
    +
    Apre l'editor del sorgente HTML.
    Inserisce una nuova tabella 2x2 alla posizione corrente.
    Aggiunge una riga sopra quella corrente.
    Aggiunge una roga sotto quella corrente.
    Rimuove la riga corrente.
    Aggiunge una colonna prima di quella corrente.
    Aggiunge una colonna dopo quella corrente.
    Rimuove la colonna corrente.
    Inserisce una nuova riga orizzontale.
    Rimuove la formattazione dalla selezione.
    Formatta la selezione come pedice.
    Formatta la selezione come apice.
    +
    +
    + + + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/it/images/insert_anchor_window.gif b/jscripts/tiny_mce/themes/advanced/docs/it/images/insert_anchor_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..cc9fc9d4a5e19f6f7c5e29bcb8e8f1fdd54d44ab GIT binary patch literal 5336 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/it/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/it/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..5cb25cf59f7c75bf4dadfa6de5164b42b3c9b3cc GIT binary patch literal 7379 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 F06X$-YIgtt literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/it/index.htm b/jscripts/tiny_mce/themes/advanced/docs/it/index.htm new file mode 100644 index 000000000..4e57afb15 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/it/index.htm @@ -0,0 +1,30 @@ + + + Indice della guida + + + + + + + + + + + +
    +
    +Seleziona un argomento:
    + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/it/insert_anchor_button.htm b/jscripts/tiny_mce/themes/advanced/docs/it/insert_anchor_button.htm new file mode 100644 index 000000000..c4a011176 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/it/insert_anchor_button.htm @@ -0,0 +1,32 @@ + + +Bottone 'Inserisci àncora' + + + + + + + + + + + +
    +
    +Questo bottone apre una nuova finestra che permette di aggiungere o modificare un'àncora
    +
    +
    +
    +C'è un solo campo in questa finestra, dove devi inserire il nome del tuo punto di àncoraggio. Ricorda che il nome dell' àncora deve essere univoco.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/it/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/it/insert_image_button.htm new file mode 100644 index 000000000..9d3092305 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/it/insert_image_button.htm @@ -0,0 +1,66 @@ + + +Pulsante 'Inserisci immagine' + + + + + + + + + + + +
    +
    +Il pulsante 'inserisci immagine' apre la finestra mostrata qui sotto.
    +
    +
    +
    +Si inserisce semplicemente l'url dell'immagine che si vuole collegare e una descrizione di quell'immagine, +che sarà mostrato come testo alternativo dell'immagine sulla pagina. +
    +
    +Descrizione dei parametri:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    URL immagine URL/indirizzo dell'immagine.
    Descrizione dell'immagine Descrizione alternativa del contenuto dell'immagine.
    DimensioniLarghezza/Altezza dell'immagine.
    AllineamentoAllineamento dell'immagine, utile quando si inserisce del testo attorno all'immagine.
    BordoSpessore del bordo.
    Spazio verticaleSpazio verticale, utile quando si inserisce del testo attorno all'immagine.
    Spazio orizzontaleSpazio orizzontale, utile quando si inserisce del testo attorno all'immagine.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/it/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/it/insert_link_button.htm new file mode 100644 index 000000000..0aad824a7 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/it/insert_link_button.htm @@ -0,0 +1,41 @@ + + + Pulsante 'Inserisci collegamento' + + + + + + + + + + + +
    +
    +Questo pulsante apre una nuova finstra con le funzioni di +inserimento/modifica del collegamento.
    +
    +
    +
    +Ci sono due campi in questa finestra: il primo, "Link URL" è +l'indirizzo del collegamento. Il 'target' permette di selezionare come +il collegamento deve essere aperto.
    +
    +
    + + + + + + + + +
    +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/it/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/it/insert_table_button.htm new file mode 100644 index 000000000..f75e4dfea --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/it/insert_table_button.htm @@ -0,0 +1,71 @@ + + +Pulsante 'Inserisci tabella' + + + + + + + + + + + +
    +
    +Il pulsante 'Inserisci tabella' apre la finestra mostrata qui sotto. Questa azione permette di creare tabelle.
    +
    +
    +
    +Descrizione dei parametri:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ColonneNumero di colonne nella nuova tabella.
    RigheNumero di righe nella nuova tabella.
    CellpaddingSpazio tra il bordo di una cella e il suo contenuto.
    CellspacingSpazio tra le celle della tabella.
    AllineamentoAllineamento della tabella.
    BordoSpessore del bordo della tabella.
    LarghezzaLarghezza, in pixel, della tabella.
    AltezzaAltezza, in pixel, della tabella.
    ClasseStile o classe CSS della tabella.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/it/style.css b/jscripts/tiny_mce/themes/advanced/docs/it/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/it/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/about.htm b/jscripts/tiny_mce/themes/advanced/docs/nb/about.htm new file mode 100644 index 000000000..f2cf6566d --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nb/about.htm @@ -0,0 +1,32 @@ + + +About TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE er en liten WYSIWYG-editor for weblesere som +f.eks. MSIE, Mozilla og Firefox og gjør det mulig å redigere +HTML-innhold på et mer anvendervennlig vis. +Applikasjonen har funksjoner som ligner dem man finner i vanlige tekstbehandlere +og burde ikke være spesielt vanskelig å benytte.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/nb/common_buttons.htm new file mode 100644 index 000000000..09857ea5c --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nb/common_buttons.htm @@ -0,0 +1,163 @@ + + +Vanlige knapper + + + + + + + + + + + +
    +
    +Nedenfor finner du en kort beskrivelse av hver knapp/funksjon.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Fet tekst.
    Kursiv tekst.
    Understreket tekst.
    Gjennomstreket tekst.
    Rett venstremarg.
    Sentrer.
    Rett høyremarg.
    Rette marger.
    Punktliste.
    Nummerliste
    Reduser innrykk.
    Øk innrykk.
    Angre seneste endring.
    Gjør om seneste endring.
    Lage/Redigere lenke, lær mer om denne funksjonen i + kapittelet Lage/Redigere lenke.
    Ta bort lenker fra markerte lenker.
    Lage/Redigere anker, lær mer om denne funksjonen i + kapittelet Lage/Redigere anker.
    Lage/Redigere bilde, lær mer om denne funksjonen i + kapittelet Lage/Redigere bilde.
    Rense/Ordne koden. Denne funksjonen tar bort unødvendig + formatering. Bør anvendes når man f.eks. kopierer tekst + fra Office-program.
    Viser denne hjelp.
    Åpner en HTML-kodeeditor.
    Lager en ny tabell (2x2).
    Lager en rad ovenfor den nåværende raden.
    Lager en rad under den nåværende raden.
    Tar bort en rad.
    Lager en kolonne før den nåværende kolonnen.
    Lager en kolonne etter den nåværende kolonnen.
    Tar bort en kolonne.
    Lager en horisontal linje.
    Tar bort formatering fra markert område.
    Lager nedsenket tekst.
    Lager opphøyd tekst.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/images/insert_anchor_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nb/images/insert_anchor_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..1c38437e26bcc84145d6a6e994ff1f0bdbbf0538 GIT binary patch literal 5229 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 CMam2S literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/images/insert_link_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nb/images/insert_link_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..2a56e79c4d9f735f162fb69fb9b49ec05f17fc0d GIT binary patch literal 5767 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 F06XoAmZ<;$ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nb/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..e8b69ef02a40913b8a94c28f4df060c27f2859d2 GIT binary patch literal 7099 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/index.htm b/jscripts/tiny_mce/themes/advanced/docs/nb/index.htm new file mode 100644 index 000000000..629301257 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nb/index.htm @@ -0,0 +1,27 @@ + + +Hjelp Index + + + + + + + + + +
    +
    +Klikk på lenkene nedenfor for å gå til de ulike +hjelp-kapitlene. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/insert_anchor_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nb/insert_anchor_button.htm new file mode 100644 index 000000000..83d88708c --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nb/insert_anchor_button.htm @@ -0,0 +1,34 @@ + + +Lage/Redigere anker + + + + + + + + + + + +
    +
    +Denne funksjon åpner et nytt vindu lik det nedenfor.
    +
    +
    +
    +Dette vinduet har et felt som man skal fylle i med et unikt +navn, denne funksjon gjør det mulig å skape +ankerpunkter/bokmerker.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nb/insert_image_button.htm new file mode 100644 index 000000000..40fb90e43 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nb/insert_image_button.htm @@ -0,0 +1,71 @@ + + +Lage/Redigere bilde + + + + + + + + + + + +
    +
    +Funksjonen "Lage/Redigere bilde" åpner et nytt vindu som ser ut som +bildet nedenfor.
    +
    +
    +
    +I dette vinduet skriver du inn URL:en til bildet du vil lenke til +samt en bildebeskrivelse, denne beskrivelsen kommer til å vises som en alternativ +tekst til bildet.
    +
    +Feltforklaring:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Bildets URL URL/søkevei til bildet.
    Bildets beskrivelseBildets beskrivelse, denne beskrivelsen kommer til å vises som en + alternativ tekst til bildet.
    DimensjonerBildets bredde og høyde.
    JusteringBildets justering, kan være anvendelig når man vil at + tekst skal flyte rundt bildet.
    RammeBilderammens bredde.
    Vertikalt tomrom Vertikalt tomrom , kan væra anvendelig når man vil + at tekst skal flyte rundt bildet.
    Horisontalt tomromHorisontalt tomrom, kan være anvendelig når man vil + at tekst skal flyte rundt bildet.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nb/insert_link_button.htm new file mode 100644 index 000000000..5430f6a7a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nb/insert_link_button.htm @@ -0,0 +1,33 @@ + + +Lage/Redigere lenke + + + + + + + + + + + +
    +
    +Denne funksjon åpner et nytt vindu lik det nedenfor.
    +
    +
    +
    +Dette vinduet har to felt, lenkens URL/addresse samt hvordan lenken +skal åpnes.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nb/insert_table_button.htm new file mode 100644 index 000000000..6e620df1a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nb/insert_table_button.htm @@ -0,0 +1,72 @@ + + +Lage/Redigere tabell + + + + + + + + + + + +
    +
    +Lage tabell-knappen åpner et nytt vindu, ved hjelp av +dette vinduet kan du lage tabeller.
    +
    +
    +
    +Feltforklaring:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KolonnerAntall kolonner i tabellen.
    RaderAntall rader i tabellen.
    CelleutfyllingAntall pixler utfylling i hver celle.
    CellemellomromAntall pixler mellomrom mellom cellene.
    JusteringTabellens justering.
    RammebreddeRammens bredde.
    BreddeBredde i pixler.
    HøydeHøyde i pixler.
    StilStilmal på tabellen.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nb/style.css b/jscripts/tiny_mce/themes/advanced/docs/nb/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nb/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/about.htm b/jscripts/tiny_mce/themes/advanced/docs/nl/about.htm new file mode 100644 index 000000000..7ac0211e1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nl/about.htm @@ -0,0 +1,31 @@ + + +Over TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE is een kleine What-You-See-Is-What-You-Get (WYSIWYG) +editor voor teksten. De bediening vindt plaats in de web browser, zoals MSIE of Mozilla. +Het werken met deze editor is eenvoudig, omdat de bediening veel lijkt op het werken +met teksten in (office-)tekstverwerkers. +

    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/nl/common_buttons.htm new file mode 100644 index 000000000..5b03318b5 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nl/common_buttons.htm @@ -0,0 +1,188 @@ + + +Functies van TinyMCE + + + + + + + + + + + +
    +
    +Het werken met de editor komt sterk overeen met wat u gewend bent van uw tekstverwerker: +Dubbel-klik op een woord in de tekst, of trek een kader met de muis terwijl u +de linkerknop inhoudt om een gedeelte van de tekst te kiezen. Het aldus gemarkeerde woord of +tekstfragment noemen we 'selecteerd'. Met de knoppen en stijl-keuzelijsten +in de editor kunt u hiervan vervolgens de opmaak aanpassen of (indien deze reeds was toegekend) verwijderen. +

    +De meeste functies voert u eenvoudig uit door het klikken +van de knoppen (buttons) boven het tekstvenster in de editor. Hieronder vindt u van elk van deze +knoppen een beknopte beschrijving. +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Gekozen tekstfragment 'Vet' (Bold) maken.
    Gekozen tekstfragment 'Cursief' (Italic) maken.
    Gekozen tekstfragment 'Onderstrepen' (Underline).
    Gekozen tekstfragment 'Doorstrepen' (Strikethrough).
    Gekozen tekstfragment naar links uitlijnen.
    Gekozen tekstfragment centreren.
    Gekozen tekstfragment naar rechts uitlijnen.
    Gekozen tekstfragment 'uitvullen' tot complete regels.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Gekozen tekstfragment omzetten naar ongeordende (bullet-)lijst of opsomming.
    Gekozen tekstfragment omzetten naar doorgenummerde lijst.
    Inspringniveau van het gekozen tekstfragment verkleinen.
    Inspringniveau van het gekozen tekstfragment vergroten.
    De laaste bewerking ongedaan maken. De toetscombinatie CRTL-Z doet hetzelfde.
    De laatste bewerking opnieuw uitvoeren.
    Invoegen van een Link (Cross-Link) via dialoogmenu.
    + Zie de beschrijving bij Links en verwijzingen in tekst invoegen.
    Verwijdert alle gevonden Links (Cross-Links) uit de tekstselectie.
    Anker aan de tekstselectie toekennen of wijzigen.
    + Zie de beschrijving bij Anker Toevoegen.
    Voegt een afbeelding in.
    + Zie de beschrijving bij Afbeeldingen invoegen.
    Schoont ongewenste opmaak en codering van de tekstselectie op. Deze functie is erg nuttig na het + overkopiëren van teksten vanuit uw (Office-)tekstverwerker.
    Toont dit helpvenster met uitleg van alle functionaliteit van de editor.
    Opent het venster met de HTML-broncode voor het direct maken van wijzigingen + in de achterliggende pagina-codering. Kennis van de HTML-taal is vereist.
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Voegt een nieuwe tabel met 2 rijen en kolommen in op de huidige positie in te tekst.
    Voegt een nieuwe rij toe aan de tabel boven de huidige.
    Voegt een nieuwe rij toe aan de tabel onder de huidige.
    Verwijdert de huidige rij uit de tabel.
    Voegt een nieuwe kolom toe aan de tabel voor de huidige.
    Voegt een nieuwe kolom toe aan de tabel achter de huidige.
    Verwijdert de huidige kolom uit de tabel.
    Voegt een horizontale lijn in de tekst toe.
    Verwijdert alle tekst-opmaak van de tekstselectie.
    Toon of verberg hulplijnen voor tabellen in het tekstvenster.
    Verandert het gekozen tekstfragment in Subscript.
    Verandert het gekozen tekstfragment in Superscript.
    De Karaktertabel maakt het eenvoudig invoegen van bijzondere karakters mogelijk.
    + Zie de beschrijving bij Bijzondere karakers in de tekst invoegen.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/images/html_source_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nl/images/html_source_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..db933dc9e65c954dcdc97e09048d15d26478e2fe GIT binary patch literal 16012 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 G0suP!I-~Fa literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_anchor_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_anchor_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..17dde58b7de1577b8ad6fe3abad9e84971eada60 GIT binary patch literal 4031 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_image_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_image_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..05354a4ef24e945c8c6fd5078eca0a6070be289b GIT binary patch literal 8363 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 R^;na2S)27)FLDR~06Xz*j?Dl7 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nl/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..e65679dde336b2bd9227f37dd9f9f3eb7ca011bc GIT binary patch literal 7337 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 PrZSx=O>3IF5C8x>C=Hx) literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/index.htm b/jscripts/tiny_mce/themes/advanced/docs/nl/index.htm new file mode 100644 index 000000000..84fe119d7 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nl/index.htm @@ -0,0 +1,27 @@ + + +Help Index + + + + + + + + + +
    +
    +Klik op de onderwerpen in onderstaande inhoudsopgave voor meer informatie. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/insert_anchor_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nl/insert_anchor_button.htm new file mode 100644 index 000000000..4cd1ec8f1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nl/insert_anchor_button.htm @@ -0,0 +1,37 @@ + + +Ankers in de tekst gebruiken + + + + + + + + + +
    +
    +Met de knop 'Invoegen Anker' kunt u in de tekst z.g. HTML-ankers invoegen en +aanpassen. Deze ankers maken het mogelijk snel naar bepaalde tekstfragmenten te springen. +Door het toevoegen van de ankernaam (voorafgegaan door een '#') +aan de link naar een pagina (Zie 'Links en verwijzingen in tekst invoegen') +kan op deze wijze desgewenst direct naar een bepaalde passage in een pagina worden doorgelinkt. +

    +Voor het toevoegen of aanpassen van een anker wordt onderstaand dialoogvenster getoond.
    +
    +
    +
    +Bij het veld 'Anker naam' kan de gewenste naam van het anker worden ingevuld. +Let op: Binnen een complete pagina binnen uw website dient de naam van dit anker uniek zijn.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nl/insert_image_button.htm new file mode 100644 index 000000000..264855352 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nl/insert_image_button.htm @@ -0,0 +1,65 @@ + + +Afbeeldingen invoegen + + + + + + + + + + + +
    +
    +Voer simpelweg de URL van de afbeelding en de beschrijving in. +De omschrijvende tekst wordt in sommige browsers bij de muiswijzer getoond +wanneer deze boven de afbeelding wordt stilgehouden. +De knop 'Afbeelding Invoegen' opent onderstaand dialoogvenster.
    +
    +
    +
    +Omschrijving van de velden:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AfbeeldingIn dit veld dient u een complete URL op te geven van de afbeelding.
    BeschrijvingOmschrijvende tekst die in sommige browsers bij de muiswijzer wordt getoond wanneer deze boven de afbeelding wordt stilgehouden.
    UitlijningUit de lijst kan worden gekozen op welke wijze de afbeelding in de tekst wordt ingebed.
    AfmetingenDe breedte en hoogte van de afbeelding in pixels. Laat deze velden leeg als de originele afmetingen gewenst zijn.
    OmrandingDe dikte (in pixels) van de omranding om de afbeelding.
    Verticale margeDe verticale marge (in pixels) gebruikt voor de omloop van teksten om de afbeelding.
    Horizontale margeDe horizontale marge (in pixels) gebruikt voor de omloop van teksten om de afbeelding.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nl/insert_link_button.htm new file mode 100644 index 000000000..073dbc51e --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nl/insert_link_button.htm @@ -0,0 +1,35 @@ + + +Links en verwijzingen in tekst invoegen + + + + + + + + + + + +
    +
    +De knop 'Link Invoegen' leidt u naar onderstaand dialoogvenster waarmee u eenvoudig +een Link (Cross-Link) kunt aanbrengen in uw teksten. +

    +
    +
    +Bij 'Link URL' dient de de url van +de link te worden ingevuld (desgewenst voorafgegaan door 'http://' voor een externe +website), bij 'target' kan worden bepaald hoe de link moet openen. +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/insert_specchar_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nl/insert_specchar_button.htm new file mode 100644 index 000000000..32868ba44 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nl/insert_specchar_button.htm @@ -0,0 +1,32 @@ + + +Bijzondere karakers in de tekst invoegen + + + + + + + + + +
    +
    +Met de knop 'Bijzondere Karakters' kunt u in de tekst bijzondere karakters, die soms +op het toetsenbord lastig te vinden zijn, invoegen. +

    +Voor het invoegen van een deze karakters wordt onderstaand keuzevenster getoond. +Door het eenvoudigweg klikken op het gewenste karakter in het overzicht, wordt het op de huidige positie in de tekst ingevoegd.
    +
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nl/insert_table_button.htm new file mode 100644 index 000000000..5e91d9f8f --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nl/insert_table_button.htm @@ -0,0 +1,73 @@ + + +Tabellen invoegen en aanpassen + + + + + + + + + + + +
    +
    +De knop 'Invoegen Tabel' stelt u in staat op de huidige plek een nieuwe tabel +in uw tekst in te voegen en opent onderstaand dialoogvenster.
    +
    +
    +
    +Omschrijving van de velden:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KolommenHet gewenste aantal kolommen in de tabel.
    RijenHet gewenste aantal rijen in de tabel.
    CelvullingDe 'Celvulling' (Cellpadding)
    + De opvulmarge rondom binnen elke cel in de tabel in pixels.
    CelafstandDe 'Celafstand' (Cellspacing)
    + De ruimte tussen de cellen onderling binnen de tabel in pixels.
    PositioneringDe positionering van de tabel in de paragraaf.
    OmrandingDe dikte in pixels van de omranding van de tabel.
    BreedteDe breedte van de tabel (in pixels of percentuele notatie).
    HoogteDe breedte van de tabel (in pixels of percentuele notatie).
    CSS-StijlOptionele stijlkeuze uit de voor de website aangemaakte Cascading Style Sheet (CSS).
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nl/style.css b/jscripts/tiny_mce/themes/advanced/docs/nl/style.css new file mode 100644 index 000000000..f36b6297f --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nl/style.css @@ -0,0 +1,28 @@ +/* body { background-color: #FFFFFF; } */ +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/about.htm b/jscripts/tiny_mce/themes/advanced/docs/nn/about.htm new file mode 100644 index 000000000..060221887 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nn/about.htm @@ -0,0 +1,32 @@ + + +About TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE er ein liten WYSIWYG-editor for weblesere som +f.eks. MSIE, Mozilla og Firefox og gjer det mulig å redigere +HTML-innhald på eit meir anvendervennlig vis. +Applikasjonen har funksjoner som likner dem man finner i vanlege tekstbehandlere +og burde ikkje vere spesielt vanskelig å benytte.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/nn/common_buttons.htm new file mode 100644 index 000000000..2907a280a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nn/common_buttons.htm @@ -0,0 +1,163 @@ + + +Vanlege knapper + + + + + + + + + + + +
    +
    +Nedanfor finner du ein kort beskrivelse av kvar knapp/funksjon.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Feit tekst.
    Kursiv tekst.
    Understreket tekst.
    Gjennomstreket tekst.
    Rett venstremarg.
    Sentrer.
    Rett høgremarg.
    Rette marger.
    Punktliste.
    Nummerliste
    Reduser innrykk.
    Auk innrykk.
    Angre seinaste endring.
    Gjer om seinaste endring.
    Lage/Redigere lenke, lær meir om denne funksjonen i + kapittelet Lage/Redigere lenke.
    Ta bort lenker frå markerte lenker.
    Lage/Redigere anker, lær meir om denne funksjonen i + kapittelet Lage/Redigere anker.
    Lage/Redigere bilde, lær meir om denne funksjonen i + kapittelet Lage/Redigere bilde.
    Rense/Ordne koden. Denne funksjonen tar bort unødvendig + formatering. Bør anvendes når man f.eks. kopierer tekst + frå Office-program.
    Viser denne hjelp.
    Åpner ein HTML-kodeeditor.
    Lager ein ny tabell (2x2).
    Lager ei rad ovenfor den noverande raden.
    Lager ei rad under den noverande raden.
    Tar bort ei rad.
    Lager ei kolonne før den noverande kolonnen.
    Lager ei kolonne etter den noverande kolonnen.
    Tar bort ei kolonne.
    Lager ei horisontal linje.
    Tar bort formatering frå markert område.
    Lager nedsenket tekst.
    Lager opphøgd tekst.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/images/html_source_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nn/images/html_source_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..db933dc9e65c954dcdc97e09048d15d26478e2fe GIT binary patch literal 16012 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 G0suP!I-~Fa literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_anchor_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_anchor_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..1c38437e26bcc84145d6a6e994ff1f0bdbbf0538 GIT binary patch literal 5229 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 CMam2S literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_link_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_link_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..2a56e79c4d9f735f162fb69fb9b49ec05f17fc0d GIT binary patch literal 5767 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 F06XoAmZ<;$ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_specchar_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_specchar_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..986fa51d3ccdc966896e9464e5559dd0257d354e GIT binary patch literal 10407 zcmV;YC|K7=Nk%w1VL$=o0K@gwrkZf*Vj{nOLawzjm~+}lu3 zPr$&xGcz)yqN2iFLIVQ>_MVlHCnM+Q=HYv7*Vos8Lq6c(-_X#{n3$Kbv9S2wZ5bIE z?Ck9D@bIdts_^jcA^8LV00000EC2ui06+oc000I5;3p2(f}Ciou59bRa4gSsZQppV z?|k1bmx1UbAt4qNiNwHcI-k&}bV{vSuh^`1%k6r<;IP=Kq?m$50kXqxyWjA*d`_?1 z@A$la&+q&HfPsQ`W&$J&32Yo31WJyNkdcy;l$Dm3n3>qn8Cxv$Cv^b00jjA7y`Js7T1#5odW}; z-rC}wjX)fe01OHR7#IZ#3;>qt3e?c>@|7Oc9t#T|&^%mfu)q<9f(tN=lXT!gK}Zdd zNjNAA!v;^rNCCLGu;V2T7m^h5MslNq1{W;0S`Q58uKQM!T<~ml1iOQwJHgRJnMO5fWfL)m=?b(Eg+WaMxFu;m0io$ zEIbBqJ6&53oW-#4)6SXc zYPAmF`jnXe3?zi70B-fD#{hr#r1th#SauWvn;YgB=E=Hha zalS1XfdV!H=Rk5)2H*g2HUdCUS{HPAL0Styhonu$xHRKNWDb~)P3chZWsT|_u%-nY z`J+G02W|?z=edOxlu|Ks3Sn45Ae87qy=<3=C8m8E8{vD+)BZ* z$R?X;1|WLQwF~5mKn4%6x{W;e8z`yUbl(gW zTpKXGUe0kR(2`s?i)!`%=%kl!dgwqMpz)XqfLq_`Iag4e&k#W1GjkPKT|sh3ADvw8 zOB1B}H;yoPK$xYA+LGB_r`v$li)Ng&^Fpg5_uHPgopa-ZKk&5Zdi#w5&Ipuy^Vf)o z-gTaRBR;Bz+hbq7G@3=e!3B78Pkq;eclbcnaMPZ8RChJ)!R~+v&<1X`kz+Z^ zO}8o*1)8F)8-B@D6xG-A3kV8vvmt0nizBPgGkwFmezS1h#8eZmMzEGq0oSwmJTqd3bB z!mvX4;nRJx)-S34A9M-E>y#}(%C_UF4S9w1lQC$*pOB3F)a~g zD6)WWYe0q zssI59Av-M4)0_Si2sf+FzlzG#raJYhP>pI)eUi1qNcE~%&8k+n%GItm^;oRiXj8pJ zRxjZx8o-$btIEpOvqobYr@9GS$(n!*WFP~AIsyLX%GbX7^{;>pEMJ3h48a=qu!v2p zVi(I;ze1FBD~usyoidWi1eUTeaT8!EppqGBwy~fMt!PI}+R~c#w4jxlYPm$6)w-6o ziFvJS57Q;t+V-}%&8=>C%iG@i_P4+du5gD-+~OMdxX4Yea+k~8<|-Ee(2cHir%T=H zTKBsD*v+nXx69q`diT5F4X=2|OWyLDSG+?=uX@+Z-uAlpz3`2%eCJEw`r7xt_|30= z_sie@`uD#84zPd+OyB|=_`nEGu!0xN;08PR!4QtHgeOel3S0QX7|yVUH_YJt^oBUs52w7MSt}xVeD=V+sTKwK9OkoL+cPdC4knGMF(H z6%L$$#}y`X3g7&J1RTN3PQI_4`@824G#LSCPIIofd;t-_B>{ED<$**HjI{wey`F3T z@}d(h=?oZ}E5j%N3f1dN5EXy`A2@V6)bRlo$pru(xX{`baA~MWYSZ8;hMFmTA4`Y2 zY?R`(_Xq%wH8(j!XLeMsaS3b@See&c=_Oo(qG($STLFRAaFcua=nq(#1NM=ImGkrf z`k{IV*zR^ODG+XLd(Yaw6sE1y>&s&JvH|FhqbW-r7hirl%9wgUp?|6F4-lZq55Oe= z$~|s$r(4%Mybq|=A&h_r>C12>x8^6UDsd|J%C9FD&UO55dY_=lDxN zj-T|#{g=??c&Fq2fvizn>Q`161NiRqA&@P{+#G!09jvp1J2j|=~3_G zUb5QC35YUuxw518%zg;z5BU1Wr~Y(+Ir+Ue_x;aZc-3RAYSVU1mWF@-+P4mB7Jv0% zf6xbbT;@01(MzCrW#D%rK5>0;M|DdVaMe(MT(N-TH(|3T0j4wnV%AFSh5+GoA`+rr zCU_!%)`A-VX!xgV0EcsYS8|KTanR;XcsFv3XM@zXb|DV;UWu`3@I@i)HHP|i zGw~&d^QAFE0EbzahXtm3e4~ec_=gE5CnE%igjk4%c!-FYh>Ey~jM#{d_=u1giIO;p zlvs(Dc!`*piJG{HoY;w;_=%txilR7*q*#ikc#5c~h#s(ttk{bGuK0?u7>lwvi?mpa zws?!Un2Wl&i@ey2zW9s4=!y&$jKo-s#(0d#n2gG}jL0~QLndFV2#wDeU(xtp)o6{= z2w&IOUfYO``PGf<1&-<^j@+1y;b@NOMUEn%j-`f<zNs zkL$>f_PCGm=#TF>1o2QG|LBbYnO^s!8U5&9?D&uZ*^UV*jm|ic07;PunUNRikP%sr z11SOnQ!NL{k@U5VCNYxdsF5j&k<{3c5$Rvz_%!<1lI=wTA}5h5$zI^tDJwYyJc*JY zpdAdrh7BnKjZl*O7>^!VltYjKIaZV$U}Qk~6fPHyQK=aJ>xPr?=O_Ijj~2O+3D%7p z;U9&@lsUO&_wj97`H>{4UcJ(j#}{>GiERro4Kq1v-!?Ee*^@4kZr`Sq(@01l$8l74 zje5tF>)@5?Wf5jrjq8vZia7*p;t-JumS;(i*~ljzfI_qclx!&ipK)fMIg=WxF~_hW zk=Z3jfj@J3WdtCB2bnogc6@57lhYUvB5-nMX`3RT9d|?kwebkM`2o7AmD*96OQ)9A zs2y|(lrqHYgJ2 z6*85d=GmYG+IMmZlm%d*OIeL@G%$UKY8GIIAJB3mX$)Cup0o0g3Ge{KCw!734Q+#> zHaMXNN~1N3oII#_H@c$$c8!pkoeuhB+@x0BS)|zcmIRuiMmm$11Ar1B3>|oK462nE zAWUUrmckH*(O5oq_oC8pW!pF~PidoMTBaLnj>4ohk@+FgRi49XUSjI;E1G=i6L!4u7L@& zYC4i60;BA(qyl!0|8|{qYL0voq^O#ze2Ss}7kZ}Zm3|UXN>A3F_Y-PEMvm=ip2E1CG^&}ECVbcu>+*BB_mr+DDl0P9wb0w5_DAOXSY2uwL?#EPk9ik$=? zp>LY1aB7ZYc_O?jmO6@(=bEjNnGP$OpVjz%iJ1<=8Bp|T2+C@f>1T#e3U8)ngV(qb zmiLr^>65smckQB;he@W!3Zw)ZvlL2T;;1?V$^huNoD=tv2SOyuO0Lr>o#{0IY{&s) zdb0jnp+@?$GOM&ryRpm~sO9RO1i*#=ABl6-@Uv1Iv`NdgGdr+NtBy?jwNMMRVY#(k z3$|*zwt0%S^@X%v8@K%`w`^Ot|GKO&>9#OSwtA|!PD{3QyS7VdruR6ue|xxP`;z^| zjEvj3j{CTf8@bK6V3J$8mV3FFo4LhUk;fXipxU=z`LuY8xNu98bZfYY8@iqwU}n3z zg6og1i=aZ_3sB3qN%@kftG2ldxOO|Zi|e<%`>&wex%9cB*;Biud%H-9sk?i(y$ifF zi?*GLudvy=1xazkYr4eg9t#`0s#~EJP<4aLw7F`QH^HCRNVG>eoHl`=GKsjO%U@<2 zT^XX7@Zl3?RIh-lUc$-%CJVd&Xp1SWnvJ>En~F-NT>6<*Q<&nOSx!!LJq1SePscw>$AIQ3I|XRBTSvp+oy<@p^v%0J_&Hx zYp`^RlU15ai;_!B*|I1)lX-mC3YUV3sAlON1Pa8*d5{e;N*tVxLi~)B!k@bP zjQ`0J83LT)DVB<}#^6{DH-^0OJH;c3!WpU((DBBWHcH|u!vBbE1t2G<^dVckUe(%- zqk4r0TCdYtAJGuWYYD{vK&c(=Ho%705~4}LiYcrCS8c|s031-S1)&g1XqFOiZqb08 z!ce8P>AQ<8q}L?`9(j!{2V`)zLT33tV>+QJ+K}ZVa>W2955QyHILE_jH^8cn-rSQi zb;C^Qcb__(4v{XTxuV-Cw$B(1qqM1)+RM_QUbwuL9MC8AVaNoWaSr>ydHZCZTF_+S zyk;9t9WtDm5z9knkdUW1qO_J`+MV0+x8ppM)^|L`JdNxE09~oh{!qa<2@M&tCt%B= zXLiqoJEG9W(m;no-G~5`q9u`u$)$9n#=KwN8@%H9HI+QA(by1XNNUlk%5MtCMw-A5 zdLZVkl|)UTtb8K>uKWQeT@Q~Y%Lhp*1#zVvmT856-{oqVjkmT?`;xh?FvT1h8` z=1to(Jz|GSL#Y(Hx2g)wfSsVL6az$Av0d1agJgjTkfhd{BBA~{}`qk6` ze(-T)SiII-wi#(n!r$xD1l-DOTa9RRN}+upc>Q)9H=2B%(j*<3`05{n{EX?saq!B+ z>804wT$vo;O}6&3Cqa96yxGA!(8MdcEWD8*!G@?=+?E}>b@{op9kh&HXGXcuUp=C= zAr19_#*7@lJiXlyT)KOkyufXlPYvGws?|mLIT^BPhTA2aJ>H?}-95dd^ZmTvXpYa< zw#$3E&zQ^q&|0JQ9mQu0-}c?L0UqFtZdtho|C;S^rsk?V}Oh?Ew- z;T+!KkE_<&Sd#Fay)L}0JFVQ|eYgz1;0})9J=&2XKHOS6;tp=RCH}Q59^Nkg;2>^| zF}~b0F5@N+;rgAneazxUzT+o;-|+b3Lr}!dyC6l;o%Z?Tisa}ne|~kNB#kOo|_Ac zlYvg0gU+F8X=quw?`P&+aA4=$^drGR^_!-?PtbZGZbslQI)DD#mei$=&+p=uK|bsKz!N5ZS^zjsM1Dl{%rpj-hXE+Sj?{ z3VLSHRg@I)OQN3V;fI_2RSe(6wJNaE7Z-h_1TlT3htHp z83d2-On!WnGV#5=jv}t^+W{4zmd~Zj0Y)LA*9Z_0+75DQn7@RaZVta6sqZ2?jb7*P z;%KodK8+{8uSbEiQ27pvQrYdv(pfW-J&$uKkCOnG89DazdH%ai*$zyfm=@pU7_T1x z<;n5NE1koR;$KdhEN_+rAXEQIqcXpwIsU|M%#`U+AuW$(B3TdR8>S-puHuSwY)|VE z&t4CYyO1|_7QiWBz3#^SBZO)SSbpOfx%IjV^UuAvx2yo#k*)Wc>!{ZD1gw_nQJ&i< ztc4Q!bl>Rrc=s_L*(>-S%kK9Xsj0s-qY6&k4k{@Uz%k;A`1`H+#Tw66z39`(=?1sz zR649IQSy_Y`?<>K_oa>v;P{X3rjkAQDX#okuJzb7rQOI5Uq8O)c*Jw7fi! zdfHkE*X*|W!w=)*zUv;G-OT^qNlxVXz8ORr{jeXp3{bs=JNxTT;7NbX(;9KR^N+IKu}i=2}R7z}_k)746V0s}`o{%+7GP+FxTv)buS``TVr zTyfYnHkG4ZCkc~Kmn?&U#h8W<2W<2GoXq;|=>)DJ5gK{j3Gx{#q76FQ6+T))CibQI zX-57vf=zhJxny`u+k33l9?)o9<2?c2)u^ z5-JBmpORTJH(SFoVqJ54BCkoSP;6vSs~kKan3D`_Y*0|P60*u)rYVvH=W6j1<5?tdC_MjxuO~az~W{2$<+}D-#=Ex}QoAAQ3pG-h=6M1pbFhGETgK+`>QdmjYKRdO*%wK2Gz^ z6iE^#h(Zf^mF6;Qwz&tK52QK6oNgX*ry$!=aAk1-VGxpy1=KOc0uKz9(u#vJG{d4g zR;U1@7)lChCt9X}>4tua$SH{_SWqH)8SLnyW-v}BodWK~bW~FL5rmw5@whtc47I|V z0aIiqssmBWcS2j;B^)*#eiH=vIQL%P^1u z0pysP9;yLJu+Vz`*vJ5xDX_}~jx)sT?nw2%TLQj&FwyQ!FfgHjKR9Y8zyqv4Hl>44 zBBU^e3{!h;mJ(-5u?pKB@$Cnps#p$3GMrrglVHl_^2%P5c5 z$;>VPar0;_jN8_cq=g2tlS5DDFeOIMP;EsPTbu30o_1Nnm!p1Qa=z!T*QXB>)YeG@ z%vmMU3}3?=EevGqtI^qDOF9zTB(&Yo+hHg1Hh~i0?NNf;k-%VZ804)X3I7CMA>eo? z`Ul~NN9=UdATqrvSy5kr@@hwf+r|S|V?CK~4@BGlN!)Efm&52E1WL*2sl%{(>1n5s zdPA-!F)Ql2rN{*bp98m!bFU9RT!q3PO?-6IrGySqTX!5Joi4oU+Mgq*cbf`|MxO$svk`|GoXzyAJ?J2yc&n|L>ncee0_q z0q=J%`VG*4=4v1O{MWt)0AO+qT;Ts2xIh6G@O=|>AdC>0K?_o_f)4cHUlPbc{{;{e z;?v*>L)bxMz%Yg~oFNTs7>v&G!G=2AArE`#!(QN!g(7re1)m{5^p&s>=c5S|8;C&# zwvdGJYk|Nh^R?CJcpU_jU0f{{K#ApuHJ0K;Zr7rX?-D;5|X9yPN^K&C+g45%3#dO`uE6sZZc zdC^(`mfJtVGm_AT` z-~bpvKw@%$k$7NO8Zm%I`RB@tr_MFs?yJZE#1v=hoqGs%Ep)0^A0K{&Ok zvTmC5j^ylSd=zk!jMYYt>DeR+{AdHCamfb%nvw&FZd9Tk^^!&tBGQI{)TABl1QSNUQHnUF zr3qocO5v#l&Uq`I1p5O&|7C-o#^eI8303q0s)iqwX~bFa2v4DG&;tVej9%Wffnqnu*ea~iv5SZ-1Aw5=#a`4iGdR>MWkeMiaMnwo z%|U3THrfxAHV8fetw6uD*&d)4wvPxc`8>Ofy>el%_xvkQc?*SyTwnuO$~6H7vURNu2(U&;HMnX=rr9!#ya6O%7%)qwFc6#!Wep=^21)X#S3j_2 zwvOb>B`B+xAHd~5td#@`X{&q}GGj?3DJx@UGg+S`ST0OSut&4A*ldvJKD$7mBO$DT z+pt<2^lC6Ag+Zc8uxKFvG`ciVCPAc28k0&-nv}~(DMv>dgpzhTCY(O$A4Xl%kCv1G z5``&gVGEzG!2m_&2=$K`poic-i3?1)^#%rPgI#|B*C@4huzTHOI0#zEZCNO2Yno*E z=)nU??whkS4eb|DIR)32cBV<0Cv<*uB;^eEo4_6AaWB`H<{rsgOAuE!3`?9b8Nh8! zgUm3{JDZ`SM856K?|OsoMS>=-IoL>31yI*?&rz=E7CvpbIlSBTW;kIco^4H^Dtn~S z_*^)S5RdBxtpYq(?vt4gKqr&cb-#g#?{tCQLU6*CY`q`5X!lj$tiNGxU z*Ri_c7A(LnZWp{GD9`l7AO4psYbV|D&NKe> zVTS?+G(v=n($9=l@d{TBRXsttlA37)ZcI0{}psicI|X zq-YshM94E=f{&bIh;DER@s>OBV6RtH?<-ciy={ESS0VOcIme32yHt zjGO5F0TF=zM2+RZ0jyNTAFRU&bK1u)eWgbPSuk<4^fOt>IIoF55Dz#Hr!Vek)OP}Rn4 zAQkPK;XNL_V3z85Q(VOd0I-@ktPup}00l&0u9N^3x`P#7VHNHH7OKmsklX)+A(X5i z6ola!Twil=L`W2qi3mq!jl>1K;bWD697>j3*dZK#+#KRWiy0y4sepHJ*Vzcb0APSN zNdWwrp#lg%Q~?|Sitq+GWyCAyjx4$&EWXJs;$lo36D^Jh+=Um0G1#PWO$Iyw0Av8E9GbR$ zg*L#406-)Bb;2`7V;kv*MpYvvP@@1yqm4n*4S*tHkm4wcq6%E!bFsmY0U824z&;Qk zqqXDUs12gUV^Yi`d(>kZ9sxVL;}?|x1nEye_8;I?*_2%vM+wXW2#mnoV+s6>8a$V~ zxJ#GS)#gYfMOLIl+RoWn|~+I2%!Dt2N;Yx zBxVt8CYq_sXL?9zrUQtOCSqPe`?;NFK~}`6&T~vs6b2j=6ofm>3u)1mJJ6xK<>m(L zCU3ffZ^pv{^yY7-097`oRf?lzmH=dKjB#`lC8%RV)MmhSLUjUKi@1Yz(&l#Fn+jkj zN~B@bg~Aj7T|6YfYH+{-v|$Sf(&YRWd|rVC$fpa?=VaVx>J3Eeg$xF9zy-MfN1gyE zI1Q*~{O2iM!GW%(;{hUEqQnwBpW4M<>yanoZ5;#A(d&sHg`!wRfn2rjSeb?c50z&snn$b1)ydNNI)8y=VO5XAPB~U2x^aF z44gDoRi5sr>Iv%Red>y;9(g{63fSS3U5-DciTvG1{9)ONFp~ex^ zo)Tzb*72vBW)Pc_>4eVSH9;cE{32eV#r&P*xPB)IWZzfjK)SxA)D%Hf3>Kl_q=GeL z&s1ojV(a~AtD8z`x8frma7DX*0K1ZixjL)Catp$`1#u}19$tjMn9!Io^oo~&LF$9P%lz-AY50LZ;s?38AxmuhT|`fE*u z3qY{tN!ARxddttA>%a=_pcSoV49Ys7BoMOE2GFXt+G@VK&%QGMX{c80hCG>O@=Z)g ztXc?c*N!K>c;@wqt!C=u6&wnk($jIVpLNP?)L!hG=4!v5Y2me~)WnC|E<>2a$Jwrc zZHBFQ^=)?A<=|GuLm-=R2rLO03;;6dmF_AEbsdzBsMYpr2?ziH5I})`-|Dy+h)GA)a0$s_*);Z~MCM`@(Ph%J2NrZ~fZu{o-%_>hJ#YZ~yxL@BadD01NN{6L0|=@Bt%m z0xR$WGjIbt@B>3|1WWJ)Q*Z@a@C9RV25ayJb8rWH@CSo%2#fFtlW+-}@Cl=E3aju6 zpKt@X@C(Cm49oBg({K&j@D1Z|4(sp^^KcLQ@DBrV5DW1T6EP4QKnEak5-af%GjS6; z@e@OF6ie|GQ*jkr@fBln7Hjbqb8#1Y@e>n^3AMqEP@fo9W8msXdvvC`{@f4GB z9ACy9({UZ!@g3uF9_#TQ^Kl>h@gD*~mCvqb@@*_iXBunxn zQ*tHy@gk3L6F-MLh{qdy@+X6GD2wtat1%{vu_g=uKnHMC0+4bmyYef;ax9~ z#s(a~LrB0fd-FGgb2y7L9@BCeFR^GOv82EU688xKbii(OfK9}+plpXM+w(o+b3T7@ zIioTXhXw|m2NH+M0KD@7#4`hQz}FzaLbI|yJM=?CG(?xPGq2LBjmrgaz*JN-M%%=C zro%XcbV!TzNI&vK+wmqp83kNMpwQF;Y%~XSGzWZ*y96^y+w@K2G*0t#6;ss|H*`b; zbx;fSDDU)88}(5mbwrzVPBV2=JM~lZ@lr!1^;A=JRgZKzV|7+*^;UCrS9|qWgLPPo R^;na2S)27)FLDR~06Xz*j?Dl7 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/nn/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..e8b69ef02a40913b8a94c28f4df060c27f2859d2 GIT binary patch literal 7099 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/index.htm b/jscripts/tiny_mce/themes/advanced/docs/nn/index.htm new file mode 100644 index 000000000..ec6695a59 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nn/index.htm @@ -0,0 +1,27 @@ + + +Hjelp Index + + + + + + + + + +
    +
    +Klikk på lenkene nedanfor for å gå til dei ulike +hjelp-kapitlene. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/insert_anchor_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nn/insert_anchor_button.htm new file mode 100644 index 000000000..8fb63bb6c --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nn/insert_anchor_button.htm @@ -0,0 +1,34 @@ + + +Lage/Redigere anker + + + + + + + + + + + +
    +
    +Denne funksjon åpner eit nytt vindauge lik det nedanfor.
    +
    +
    +
    +Dette vindauget har eit felt som man skal fylle i med eit unikt +navn, denne funksjon gjer det mulig å skape +ankerpunkter/bokmerker.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nn/insert_image_button.htm new file mode 100644 index 000000000..47d483ff5 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nn/insert_image_button.htm @@ -0,0 +1,71 @@ + + +Lage/Redigere bilde + + + + + + + + + + + +
    +
    +Funksjonen "Lage/Redigere bilde" åpner eit nytt vindauge som ser ut som +bildet nedanfor.
    +
    +
    +
    +I dette vindauget skriver du inn URL:en til bildet du vil lenke til +samt ein bildebeskrivelse, denne beskrivelsen kommer til å vises som ein alternativ +tekst til bildet.
    +
    +Feltforklaring:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Bildets URL URL/søkevei til bildet.
    Bildets beskrivelseBildets beskrivelse, denne beskrivelsen kommer til å vises som ein + alternativ tekst til bildet.
    DimensjonerBildets bredde og høgde.
    JusteringBildets justering, kan vere anvendelig når man vil at + tekst skal flyte rundt bildet.
    RammeBilderammens bredde.
    Vertikalt tomrom Vertikalt tomrom , kan vere anvendelig når man vil + at tekst skal flyte rundt bildet.
    Horisontalt tomromHorisontalt tomrom, kan vere anvendelig når man vil + at tekst skal flyte rundt bildet.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nn/insert_link_button.htm new file mode 100644 index 000000000..972bbcd62 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nn/insert_link_button.htm @@ -0,0 +1,33 @@ + + +Lage/Redigere lenke + + + + + + + + + + + +
    +
    +Denne funksjon åpner eit nytt vindauge lik det nedanfor.
    +
    +
    +
    +Dette vindauget har to felt, lenkens URL/addresse samt hvordan lenken +skal åpnes.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/nn/insert_table_button.htm new file mode 100644 index 000000000..8aad70aa0 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nn/insert_table_button.htm @@ -0,0 +1,72 @@ + + +Lage/Redigere tabell + + + + + + + + + + + +
    +
    +Lage tabell-knappen åpner et nytt vindauge, ved hjelp av +dette vindauget kan du lage tabeller.
    +
    +
    +
    +Feltforklaring:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KolonnerAntall kolonner i tabellen.
    RaderAntall rader i tabellen.
    CelleutfyllingAntall pixler utfylling i kvar celle.
    CellemellomromAntall pixler mellomrom mellom cellene.
    JusteringTabellens justering.
    RammebreddeRammens bredde.
    BreddeBredde i pixler.
    HøgdeHøgde i pixler.
    StilStilmal på tabellen.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/nn/style.css b/jscripts/tiny_mce/themes/advanced/docs/nn/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/nn/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/pl/about.htm b/jscripts/tiny_mce/themes/advanced/docs/pl/about.htm new file mode 100644 index 000000000..81c947c2d --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/pl/about.htm @@ -0,0 +1,33 @@ + + + + +O TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE jest ma³ym edytorem WYSWIWYG dla przegl±darek internetowych takich jak MSIE +lub Mozilla, pozwalaj±cym na edytowanie zawarto¶ci strony HTML w sposób przyjazny dla +u¿ytkownika. Posiada szeref funkcji znanych z popularnych edytorów tekstu, wiêc powinien +byæ ³atwy w u¿yciu.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/pl/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/pl/common_buttons.htm new file mode 100644 index 000000000..00a0b04d1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/pl/common_buttons.htm @@ -0,0 +1,164 @@ + + + + +Wa¿niejsze przyciski + + + + + + + + + + + +
    +
    +Poni¿ej znajduje siê krótki opis ka¿dego przycisku +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Pogrubienie tekstu.
    Pochylenie tekstu.
    Podkre¶lenie tekstu.
    Przekre¶lenie tekstu.
    Wyrównanie do lewej
    Wy¶rodkowanie.
    Wyrównanie do prawej.
    Wyjustowanie.
    Lista nieuporz±dkowana/lista punktów.
    Lista uporz±dkowana/lista ponumerowana
    Wysuniêcie/zmniejsz wciêcie.
    Wciêcie/zwiêksz wciêcie.
    Cofniêcie ostatnio wykonanej czynno¶ci
    Ponowienie ostatnio wykonanej czynno¶ci
    Wstawienie nowego ³±cza, przeczytaj wiêcej o tej funkcji sekcji Wstaw + ³±cze.
    Usuniêcie ³±cz z zaznaczonej czê¶ci/usuniêcie wszystkich zaznaczonych ³±cz.
    Wstawienie nowego zakotwiczenia, przeczytaj wiêcej o tej funkcji w sekcji Wstaw zakotwiczenie.
    Wstawienie nowego zdjêcia, przeczytaj wiêcej o tej funkcji w sekcji Wstaw + zdjêcie.
    Oczyszczenie kodu/usuniêcie niechcianeg formatowania. Ta funkcja jest pomocna kiedy + kopiujesz zawarto¶æ np. z worda.
    Pokazanie tego okna pomocy.
    Otwarcie edytora kodu HTML.
    Wstawienie nowej tabeli 2x2 w bie¿±cej pozycji.
    Wstawienie wiersza ponad aktualnie zaznaczonym.
    Wstawienie wiersz poni¿ej aktualnie zaznaczonego.
    Usuniêcie wiersza.
    Wstawienie kolumny przed aktualnie zaznaczon±.
    Wstawienie kolumny za aktualnie zaznaczon±.
    Usuniêcie kolumny.
    Wstawienie poziomej linii.
    Usuniêcie formatowania z zaznaczonej czê¶ci.
    Przekszta³cenie w indeks dolny.
    Przekszta³cenie w indeks górny.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/pl/images/insert_anchor_window.gif b/jscripts/tiny_mce/themes/advanced/docs/pl/images/insert_anchor_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..c2e08332b6700db03ac9b17d746899737beaf762 GIT binary patch literal 5401 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 aKrH9Vm=9K~W> z#JXC>SZu{+48&Bd!4|s3UHrxm{KXR5vFw_!WZbXDnzf26#YLOLS^L6p9LQeG#4+ln z|8*RsZY;=(oW61#q1fA^d5p-5Jjwst$VOVgVVlU5yvadf$q)L-hFZO%Jj$e8%H>JO zc+0%1e7hpN%C1bLp!~|ROu!U8%eI`Ov3$$AY^s>N%f8&az5L6YRuT*|0?x|z($*nGa8?4ZuPr<$D2;Jgvr+@Rfzr{5gT=nTT`Tg$Af zrRSW^@Ej52%**VYp^BTV!AizHtfTK7&;Crq)eO6OOU3!?&i{PS7ctKZ8pcEX$5898 zeC)3*+{XlsqWz4}7(EaQt)L7&#zLIK)w;%NJkt8?$1Hl$8I92!ouC~}(m|}O|0X-e zSG>me+@dI*(g(fL2x2%f|Lh#7TP7T8++J9n7$rzn<&WH7eF)4bEj<&rHkKZH>)u-O8Cf z&3K*HdTpKo?YqqU*H3EJfIZlbEZBs7*z|1Ih`rc}-NcOj*b8mgkWJX-JlV2a*_Pe9 zn4Q_FyV-KO*Pwl#|4^x(9jEa*ps1bNseKfrE!nqvCt0l$DZtv4TH0_5+ev*CG(6j* zUE8jms<@5R50iwn9jTkG*6s{CK>+{)!Q2l#++SDRklN8bJ-I51+!n3e|Jb(^&ixPF z4ZzUNNW9(JaBaa={Jh#d5Z|p6>rKDmJrYDA-H*!CChXHUd&1`})er5^>59c#oZjlK z-UTJ#1Fl~I?%f35+|6y^3GTh`jc4QS+vRP+J1f))E5TuHXm`;@v&s zA`apQPU0b+;@b<|LWpnj&8YNU;T)ddGOpoJJkt0&qqzOu&W++I9^ySN;3t0K+ugn4 zeQz$_+s6Id`yA9g{p2=I<1-G{|4k4-?&AlZ;sag~L9XQ{{=M(*eMwHn|q z$3i>v|j7Cdh583s=B`Gq}uDg4ywQ&?4CO8UJAVxitMXw>|H9?1+mf2 zP7q7Yy3Ed{(XP?SF3zr8?OS^7OH85O{twgM*`_|K;STNEzU<|G#zwusYkKb4t`Xyo zy42n7fC}&6p6;p~RXwW|UEf6=*7}~`35xIgzV0qu;~x#>K%KG%PoxOX!`nLX z%ggT>-tZl6)fV2Q7Jt<-or&+$|q=qK&+ z)y)qfPrQ$8^G)vYE)StQKfFC(&{8_|42tx>%k2ie^7-!c34iI&s_YX=^~}rk#O~*1 zp7pzo^;{3*F#q*LANFFu^kiT5y6g35uexWy_LtrEZm-#JANS-g^{?HYYp?cGs`R+7 z_eUS}S?~8w%J;QC>^}dagfHv$ZuDuqq>2CP41M@NZ>5jV>R}wy_-*4QtFJH3uNw^b z#D2qoi{T$#`Z4X&_D-Xf&)Jbr)O+0TGp*q|ytJPW^5^Zhz;D^E{`~z5`oS*v{y=a0UyuDvYW3Sc_jFIX+#mjO zI{xGjr{;hDnG62v59{pT{N5V-^nBv{bkL4FAp zE@ary;X{ZKB~GMR(c(pn88hblmoHa}e;qr1)L7EwNt76Kg=E>%*xfAD4pf^{-Bw942%%Dk?E@etl=f{vwQ#7SomElmMSz98t+STh1v{o( z`Q%};8W-=idpBWcex37z{!E&o=!K?HhgR(VIW%b1pBY1h9QoyB%ei$=#OyQUX4%1k z2WMT}`0V1GQ_ogzy!mM44r|-qy4(77h`s4z9Nzpja?#LD77H7Z#PLk53dM&yr0&BObEN7;9o@3gHXM5t5-1*r z^y(lalPt(cCYLI*NhqU~GAy#j@@+~iv($2-C%5$S%O1M~b4)Vd6SGV-(@e0+x#m;z zO*r8?Gfq0|OlnR$^VBmXJoohT&x-&01aweBxnvWuLM2jiQ6v*>QcyyFj4Vh;5rlM5 zNdcp@()bR|j8o}Uj0sdBFXax*OxN0!RO?Kg5JgyRqOq$~*V_i!vwgy{MmRa>mtWnh4f^Biw?)a-uJpA_a&)f6P5>MJtsjbf15V1Y2 zyw7@RLX8P$zorZeqFr}vY>U6EfdTXI~vJzsh!`@A4vCC$P zY_roQQfsx_=9%q@jFx-uCEeDIZoG}&2yR6~rdDUWsruP(_o(!`&5Q;oT;#xWQ`~Qt zbA250#x0vX=e-X{^rFi#ubi^ZTLQqt%%MX3-j_xXN%enNcgb}E0slNH_F!Mjc9w8w z+;G!3x2QJOgC|P&NoRL#y3vUro^;-M^1UMDTbJJT&RVbDdf``J(Rjk55B_@TwGUr- zySBeb^5v5ce|_;^*IxZmxgQMp+}l?@`}^x>KVOT`he>_-tuA{4EZ_9@w=nt5?|-7P zUjxUdKix%+ZxN}T{{Gyzz5xcXS_ym${lteq2s$u=rE}h=I9HSbVo!AU1D^(6B0CP& z1TwG-;P(n>!~DhXd=q5Z;%*c}ANg>3I_w`0aVA7f0TC^s%Sr)>7$_r_3yDcoVp^t1 z#T{zSgulBY7OQ9#CW=aeTI?6}@^(fgeep-U^keB$amZ@k&_6QkJu%Wi4%aOI+qsm%HR;FMat-UCIn8-abf#0C>of>Y zQt(cA##5g2q-Qy%Tg$_O8O!t^)Bj^*V^ddG=e!cgCHsW?Y7o!0Q^CA) z!MySz=jB5{3Qs|bPx%x>`ISQXm7fWmQVA2h{`|tJ8{rpKBQB{$TvmS}q!B5sc`8ce zW|YV+sOT-I*zIUBtr&5w7zyoI37uGVbze!HI7x7vly1EADZK<4{R9I816y0$$B!RJ zMn=M5OaS0Z1ALj7U`*r-ax zTW020ZtjmY55V3FsIUmEuy}&I{{&|lRB0Jp_25)U^~0ytR!?iJLTjv_)!Lj2t9$hP z6y7!*Zx>N-|DwSmlHeHC=mdT39DSz~6W#wtJmQ>hMlJMf7<|^i3i8rIP*APIU&PcLpH30ufzLGP<8+z75KJ z8=Tz}lHD7U)B7~HFZ5Ji|Fc)82Ey_Op63rfFBl9jd>3)5Xy`@pa3qov1)LgzqDG=i zs4?i#7|duah89;!iz^$8KUF@?L}U0e7%&(tB_#y_00s?UFaQ|#J*;8^j+;otO(s@O zCRI%(SATd}bLwMC?Z?!*=`{RITKy+P!z_X@n?aywG}1F0=dxbUWi`!bH_hiXFXXf= zIa~0XO3UsZZy4O%|*Gt~6qkFyqG#a{h z19Pfxv$TJ+tbeO)V5@v^8++>APQ}ovUEJ_)C1tN_Sb@N@bj&Ok=B~`Wd=!3AANpFSfWhx z6^F%`Yh0xA@chU*0QLaeE8nkhw#o=6vXf`?tQt{^Gg4l%~$BwT4Wx)ZS_su+-V>VtoMqNi#aH z`|qsRTA_n)-CB{$3%ZYwfG|Dd{A|qjlPh$0`qN`L zkKL?Cy7J7dSKfU)x(^UML-)gG+06yi5oYF|G>_TM2a|SZ=AZWQ*e^UAQU0{>eDc2i z=LmZ6r_Yf~S@vI`j7`F)FEKyH?7znC?|%B4z|8Bg2ujX4>I#v~LRM+nnxnGQUWTz}SILhhpZ0&-B zXP(bRr@-d5i!Nc4K9}60f2>_{PvrBx?1@lazwG_W%2&u2^=w_pzar09I1t~wE*#V{ z=_?XK{;@6++Rx`F8b($9CK^6vz}Zx5cRwM8ojpt(*k@iIil`A#jvb6{!_|+ND3|I6%hV` z6;zCVh7&fL`%x+BtQ}T;^*QQijZ(%zSe+Wq=@$1s02YbrhWpV_QFEO545@+xRtmg<>FoyFb0T9;#sxXB^~R9nu- z7sByAxJ01Nw@9I+S;6o1GSCojr-)s``*#|mUKbUW!@&dxYa_eqqL-R}!OBieGK7++Pediq(>?C+n8)sY^uXSbcp^!X>xCoCpi zQofBg=#mCCvscC+^Ru7qXf%O^G9Pf@n3;sG)~1?N!&o*&Ss*gG6RHzlEKtcy(rM)T zSelI@SK+AXg;twM3tN^tF)6kdcKGigJA>Bgi7+1xH`!f#c7FCGHft~^pLdGAdWu2Y zSwiD|uAmuV=XTm38MwoPwB=}L(yDKc+^f|X_drj9EVXxXEKE$|TI&LYM|z4*vS$&u zQ>D1`GK|8TB@X{qTxLLq5|BS6{9Q7HnTPI-{5YSTv_HJY=6_dW@rOjTi=YH!Y1kB+ zX)PtfSk=FRBpW$3MPz(*-w_|dz}o^Po5)u;1u=j}2-q`KrMMxoVJ01g)yDFvAT@B|(h3UpLr<9zkFRAZhkWbrvfY2wF1tBfB>z zE8nU?mqBhm9~;jZM_!2gHwy0`xMZTFsVoC4o@ikxS@idA9D9XgB72%7R*+(Rj$bq5 zM8@b0Gatml7<7@tTbNOM2ST}%>%_b2e09u?54t&;$Mma80ve#IA4WsXwE zdGC~XZ6!=}MVZ+=VQQR}N-WJ^Z%frM!^0)fY5{Rd(+PMS(OCwq;Sc#;c^(!(j<_wULCKX+D;|E07yfpddDL2{rW#E~=B|5m3`65TU z3l*B%+@-GyLYC(~**&vRhA~U~ix5@za1sZScq_hC&?2ufn$i0hl6`o-?j#A%*bsQm zS`5Y58?Ful2C5X!(x>U5jM;H8-G`F1zRcm>*P?qcdDib z{r5VAMZ^7(;NM<`T$Pv9;rVk6)_z$v)0Yh9n{e;H5+W*;RHMvpzNgo#dn`N=kcznr z*IM6*1JXh7hZ8SRB>B>b!@Asg>`DtaJHQv&9nSu&uHvi<4-4SqwD5(HALOm5w$#-9#@{&Ooan3c+nWKSMc4OXt!37bo(zr9P@p;&NafB41I z3u0wAU~209FJKFP^p$gIlrKp>*6(~{hko(jXW1{O9T z&rz4ILvKY${I40}Tdd^w!WWP_*RO|q{jW{lvw1LsbKRu=Y+8CXG+WZ$BN+RaS+Pox z#qJ2`6Ql@&ci8XU$@vz>zz)MerzZgahp3-d)$hGLUn3FVdvZ}!F(vJjX1e*u9{nS? z;EJe~y}RR--S1hj{nRxUhr44!fu3C_!`}pnsxi@Sxiv;^g1>#33L)WV9^=E*2^H!b znucVY*|k-j(l*0>8Kvt5?rN1vb#35VtLE=pjaoEx^$TwPy=i<@ZQvl(Sl*( zC$B^~6DN9cstq=ke$FIT&SLdfoOj~+WQVjA_Na7qea4ob{`0B$gOxi4EBXnBcL7$_ z|NN3m^9{`9w0V*rRI|PmsMJmihcvPVv-;R`vKw~b9-j9%?EYY;APBbbg8TV{g^*y) zL96e7;GvhTKe8IjMp@$`R1_X&4n<{BkeSq|OuLrMQTC)b*6WHlvOYRweTYgz80m*j zUC*KoH9wUU8c0P~oQM?ntLO@#O_3Ce0D!KO^;Zqbv&rl6Sll)}jo4 zvT1XzCT#spKk_!c@aW|~{s_Hd*l!|&H!8<{;~_&pF2lzZy!IzYgpwlmuQ{7gVwi)j zY~j<$C>3640WT@Qs=2^|USPRj@KC6*+BP!5q0kOm=l~QtkqTYtg>L(W?m|VLT1DQZ zLWP-I#!H!jq@o~tQOJH#s8Dg3R&lsv@e62i6i^(Uo_W_Q)VS|FObD5%g-mutra+Nt z01`n$X3~+_`^a1&;FT6o;0P4S194`B3ZVd+4wUW#SQ0a0V>PtF$1zNfRl;$~>ZqZBk_DhpTO8?O+`>j>_ z)3NL?Q1$^@c0eyXkw+ixm$7JMgfSu`@61)2%sFY{U)VWS-Q%ouJisYB z#W^CXT(zrZovOXekq&{??g*SGxyntr>a|wYqpj)}!blA~&L2@76z*jozQi{m$aQhr_#V!ZJ`|F|Nf-}opqUfKg$ZTm_48Z!6mml&75~+VK!6e+%n`7h z)!o{Jp9giJbJh0I^<4+m8)U+mdHsPx;}#jUqkw*UP%(%goU5;97QwKJpwBqh)D&gR~_X3@juE+~GMqvgsyjJR`)oMMyoAx3__eeY1t3)>(2* zr}gF&Kr^OQyR-C0M!C;^tAR+Hp-!7e07^HeTv=AoytB<>zD>oatz@W$1=VKh{KhWk zjWCw$;dZg=VcDaMH|`?so+TisjMlr(D31D)$2#pn^X>M|?S(*V6TVUtU-2)ZCWq7> z(%BKqB^Y`S(5lCW-vf$;>r-?(vg$hGI*FMXd>dRwvx9ydpk+UC*y7;^su^iRobQ&sUGuch5T`r|xyH zj<(NiBg5)3E6#6sGTwZfM{bs2w&&meo^Si^jIGpp^KWO5M@&zKP|vhk8w-1d=YUhjX6Bg~b(A6i--6M9?Cmn>50{349Bbj3R z)k^w51oWyL_21wgV8D87H(O(%1Gmuw+Fb+T=>i(D=$o`2Lo}Z}mPIeK&qZX=sB2KL zFOdr(c$d~E1TOdJAGA9H-IX%A10FC%_cj9U&5rLbGc$R`zB7ajoy~ifckvy}xj&EI z-OYveR00u9K>iJ&$RIvwS6htB+qfV-C)!Z%_7GoZ7vtGc$@AD@1Z~*%aQNfla3Hua z5lptRAg0h?rv#OFb`5(sykIm@!ecF1Cr8R$hOtM(6)se$%W!Ed^&B%5N27+vQZZ=i zSq~~+bhILK)PG^LA!zhW-)Jisl&8f1koL|RJy>kkFcL!~l1BQ#v@-BmH<*eI8lF)a zqi2qN5FMLZ7_Q_Vr@M@OjUDBHjDKDjTjd^I2Gc4nK!GlCK>Is=T6xh3?L+}RK^x0B z8ZYmnzF43(H;isHj7|HEf2WOYxs1<&C)ma&xWpzm7sj`^X)q-l`qhaEj*jTOTgiQAsV;wvRB2Z-GrsOf>my~S^?!0$(8NkRl@9)q$ zw1!DLQy)bqc4(tS@RYghXuHzH><;C@@zhNo8o}j*I?o5P#k5v14UD0=S(F=hcVzDf z_=pMmW%0dhNPPTxsBq^^!~ijXAn-hR#(>Yljy{ugG;^Xg<9qapjk!4ArIV^OV-1~6 z!^|qcX(6t&temsC7y%L876li&oCT%mxK9a9ztTxZA2*jC(?vw)D&m?eUFW!B=4uIz z*F*-QiF3)DbM#wuYenFfqTtCBddF@@TU=)@X}*hRK9OTVFK_R?%2X{n=a2_Q614i`HSGvXXynJ$1Z5; zK4>S7PQi4r^Nrs=9<5WNDITBywcEF+J9#8FdAvhmh#~1&6L&vPD93#~tM?h6{$&Nc zv`3pb@Al=71;CvBl^651nznTI*`jdf7yJ85Y$3~Mq?V6z7w0}NIvjtI=UsxyFI{k3 zxfZgbn!O}SSo+5O;a>OGewP`AkiO{Ak$D1j!)1AuXGYHz7~5S?8$bWRlJC;^>iX{L zl=6y=INwF(uibHgbEANfUY|$lo5%5A9C?>~O8FGN%(W<6Se>lj4_~*6@58%(lZyTp z^#vRK_M6b$xA=H0Ond__j-V%(wj{-G@S-*lDitYTHY7(kaxKeW>20z&Z5Hj7Axk$8 zNSo;FveJ{y-$Gjzyk(VcTYJ#0+Qw4++bv~s3qowWMQ^*!ZChEYB@eSr9w(XyY`;C( u?iJs$b~Fid+Zl@Ap_J~NaS;SB?2Mo6Oo;DJ>FrLw-JXfx%@hGK>HH6qwq1?@ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/pl/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/pl/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..b02e34edadfb9f7b66651d1a7d92b8aaadba0a3e GIT binary patch literal 7418 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/pl/index.htm b/jscripts/tiny_mce/themes/advanced/docs/pl/index.htm new file mode 100644 index 000000000..4a48d425d --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/pl/index.htm @@ -0,0 +1,28 @@ + + + + +Spis pomocy + + + + + + + + + +
    +
    +Aby zobaczyæ poszczególne sekcje pomocy kliknij jeden z poni¿szych linków + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/pl/insert_anchor_button.htm b/jscripts/tiny_mce/themes/advanced/docs/pl/insert_anchor_button.htm new file mode 100644 index 000000000..3858714b3 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/pl/insert_anchor_button.htm @@ -0,0 +1,33 @@ + + + + +Przycisk "Wstaw zakotwiczenie" + + + + + + + + + +
    +
    +Ten przycisk otwiera nowe okno z funkcj± wstawienia/edycja zakotwiczenia.
    +
    +
    +
    +Jest tylko jedno pole w tym oknie, nale¿y tam wpisaæ nazwê punktu zakotwiczenia. Nale¿y pamiêtaæ, ¿e nazwa musi byæ +unikatowa, nie powtarzaj±ca siê. +

    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/pl/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/pl/insert_image_button.htm new file mode 100644 index 000000000..1578e9e40 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/pl/insert_image_button.htm @@ -0,0 +1,65 @@ + + + + +Przycisk "Wstaw zdjêcie" + + + + + + + + + +
    +
    +Przycisk "Wstaw zdjêcie" otwiera okno pokazane poni¿ej.
    +
    +
    +
    +Nale¿y podaæ adres URL lub scie¿kê dostêpu do zdjêcia które ma byæ wstawione i podaæ krótki opis +zdjêcia, jest on wy¶wietlany jako alternatyny tekstowy opis zdjêcia umieszczonego na stronie. +

    +Opis pól:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Adres URL lub ¶cie¿ka dostêpu do zdjêciaURL/scie¿ka dostêpu do zdjêcia.
    Opis zdjêciaTekst opisuj±cy zdjêcia.
    WymiaryD³ugo¶æ/szeroko¶æ zdjêcia .
    WyrównanieWyrównanie zdjêcia, u¿yteczne przy zawijaniu tekstu wokó³ zdjêcia.
    KrawêdzieGrubo¶æ krawêdzi.
    Odstêp poziomyOdstêp poziomy, pomocne przy zawijaniu tesktu wokó³ zdjêcia.
    Odstêp pionowyOdstêp pionowy, pomocne przy zawijaniu tesktu wokó³ zdjêcia.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/pl/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/pl/insert_link_button.htm new file mode 100644 index 000000000..5ad826318 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/pl/insert_link_button.htm @@ -0,0 +1,35 @@ + + + + +Przycisk "Wstaw ³±cze" + + + + + + + + + + + +
    +
    +Ten przycisk otwiera nowe okno, pozwalaj±ce na wstawienie lub edytowanie ³±cza.
    +
    +
    +
    +S± dwa pola w tym oknie, pierwsze "Adres URL" jest adresem URL ³±cza +. "Cel" umo¿liwia ustalenie jak ³±cze ma byæ otwarte.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/pl/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/pl/insert_table_button.htm new file mode 100644 index 000000000..b3a448c77 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/pl/insert_table_button.htm @@ -0,0 +1,73 @@ + + + + +Przycisk "Wstaw tabelê" + + + + + + + + + + + +
    +
    +Przycisk "Wstaw tabelê" otwiera okno pokazane poni¿ej. Mo¿na w ten sposób stworzyæ now± tabelê.
    +
    +
    +
    +Opis pól:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KolumnyLiczba kolumn w tabeli.
    WierszeLiczba wierszy w tabeli.
    CellpaddingOdleg³o¶æ akapitu od krawêdzi komórki tabeli.
    CellspacingSzeroko¶æ krawêdzi komórek tabeli.
    WyrównanieWyrównanie tabeli.
    KrawêdzieGrubo¶æ krawêdzi tabeli.
    Szeroko¶æSzeroko¶æ tabeli w pikselach.
    Wysoko¶æWysoko¶æ tabeli w pikselach.
    KlasaStyl lub klasa CSS tabeli.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/pl/style.css b/jscripts/tiny_mce/themes/advanced/docs/pl/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/pl/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sk/about.htm b/jscripts/tiny_mce/themes/advanced/docs/sk/about.htm new file mode 100644 index 000000000..e0dbac072 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sk/about.htm @@ -0,0 +1,32 @@ + + +O TinyMCE + + + + + + + + + + + + +
    +
    +TinyMCE je malý WYSIWYG editor pre webovské prehliadače� ako sú MSIE nebo Mozilla, +ktorým je možné upravovať obsah HTML omnoho jednoduchšie. Obsahuje bežné funkcie, +ktoré je možné nájsť vo väčšine textových editorov, preto by jeho používanie nemalo +byť zložité
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sk/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/sk/common_buttons.htm new file mode 100644 index 000000000..7f9b7a8f0 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sk/common_buttons.htm @@ -0,0 +1,170 @@ + + +B��tla�tka + + + + + + + + + + + + +
    +
    +Nižšie je popísané každé tlačitko. + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Kopíruje aktuálne vybraný obsah do schránky. (Ctrl+C)
    Odstráni aktuálne vybraný obsah do schránky. (Ctrl+X)
    Vloží obsah schránky do okna editoru. (Ctrl+P)
    Zhrubne text.
    Naformatuje text kurzívou.
    Podčiarkne text.
    Preškrtne text.
    Zarovná vľavo.
    Zarovná na sted.
    Zarovná vpravo.
    Zarovná do bloku.
    Zoznam s odrážkami.
    Číslovaný zoznam.
    Predsadí/zníži odsadenie
    Odsadenie/zvýši odsadenie
    Vráti späť naposledy vykonanú akciu.
    Obnový poslednú akciu.
    Vloží nový odkaz, viac o tejto funkcií v častiVložiť odkaz.
    Zruši odkaz v aktuálnom výbere/odstráni všetky vybrané odkazy.
    Vloží nový obrázok, viac o tejto funkcii v častiVložiť obrázok.
    Vyčistí kód/odstráni nechcené formatovanie. Táto funkcia sa hodí keď kopírujete + obsah napríklad z kancelárskeho balíka.
    Zobrazí túto nápovedu.
    Otevorý editor s HTML zdrojom.
    Do aktuálnej pozície vloží novú 2x2 tabulku.
    Pridá riadok pred akruálny.
    Pridá riadok po aktuálny.
    Odstráni riadok.
    Pridá stĺpec pred aktuálny.
    Pridá stĺpec za aktuálny.
    Odstráni aktuálny stĺpec.
    Pridá nový vodorovný oddeľovač.
    Odstráni z výberu formatovanie.
    Vytvorý z vybraného textu dolný index.
    Vytvorý z vybreného textu horný index.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sk/images/insert_image_window.png b/jscripts/tiny_mce/themes/advanced/docs/sk/images/insert_image_window.png new file mode 100644 index 0000000000000000000000000000000000000000..5d9ea983036b347646ccda7ac3f26723c4a3cf43 GIT binary patch literal 4799 zcmZ`-c{r5o`xjXvCWNvbhA7KOma&zLJ&|oJLm~Ul*k#DR3}wkaqf*G&*D-`5%ow5& zF(k%F*2unnbTm(zdxSqy`KBMm*=_P&*#4H>rFH?&}L@jW~8E`V%F8sFs7n9 zWqq=M3^XT_sOh|_lSilFZBtD=6&0IdGIdZb!{ZM2qOo24O#p!X=;(-=*M?2RSXkbX zLZOghOm1#Yl?>FPS0qi1?kp`Y!(cE8^#>?)p`5IYudmNWqb&9P7mtuJYWFa6~oN_~=;rQBg6m{aU9!PKFhR?$OvL zPfjaT-|;bYyN`y}#%NaeHoQ#)8kZZn%S$($@wGo6oPCpE2MfBP`y`lW#cVYhsGyf^!J8$1-1TCPOn z{-ESc7QCt?+uPgwcxQ34U$i}}gA>jAVHH}~I&>Pca(jKF2kWgmb-a00HL#34-jlg6 zKOx|`D*Fty-5C#1jc7lfJ!~16(+na~=v+}sMdT~R`y zJ*);|H`Ugb`I-)SBlfCDh20X*NfkUP{Xh&`e6e@p>@(iXI-lS#24!K)P$I_3F_cHM zuA;0=Smu$_^&wPc`IRKAx(i^&m50CCo>SU$3j#8prG4j|QuJ^Wm(62pg zcW-6VYViTpECiR<(N^c=cmZZVHgB29U=ED+u&{KffqH;2A9mfYynsOquek)^0vZf% zwR~Cv$w<1lt}N)kc!RG8HITH>*&l8d<-?Tk6&bo3+yQN(VB;5F_u6ENBuUMM@2t%_ z8;2hqYz?SRa6N6rOLm?mCEj|plo?QbdeJuh^n=|@sZpO+iQ!Z~u~N_19Pqry;C zO4vi_eVST>8u}VBMF(H$+sKq+Eb&k>I~+`ovea&=Af(U^`b8Xhw5IHPAIr8OniH^V zOf2{`Ps>3D@qF!j@(C(Zy%3$tJ;j;(S8bns!2j%~kn&y*P9<`r%(&nSdFgsvJR~+O zX@`r5NQr(_!Ms|E5T{j!;>$at&*w86&=+zg{b1vT1zk6SM{elgFa;0_EpFzNnSS|e zjGqxaOaED&MxB1jq=0#mVmtYxR7sXdIW>rUk+PE|PCR~ELUeLY5Ts80s7Zje#g-Gs0gR5|8{LkS+)^`rxo8w3^#VV{ zV=;`AP$d40tbe~0n3;RaFPuFs|V0=U-f3RJ^{;;)aUPHgkB3 z4Cw4G_)ZmT{^XX0N74rb4p93J;#H1)Wdl(VctUb9nlE(l&wh)<*35PntvM`+)96V& z5$j(dxW^Zm=$YJWn1pM39sF2*tlHJJ62W!cfF-8L__>6@pVkrT>4hc**tKy>y{@8B z8v*m5vh;JE)-gb~>l5G%hR~_eQr;WAI-g$lR?YMFb@_%8_ssl-9;J~|h#a`Aib@L% zBJ~m{+#4g=`+85!!`9Ln`q9r@V4G4<_7XZ;ACQ*+(ex?05EEod(m zujAPX*K8Egp{%HTw|wtM#oQOWyRcq^&10|B(@ZJ4EG)LgSS4ugD7m;leG>P)Osi(5 zImZu&Qp|gd!0m<_^Wn+3xHVYVV!Qy-(Evz4bO+iP}bSr6jjVY5sC(*357@G?9 zh@L8bTdB(AnJ6_DCP`nz&YJ5N9C~vmB8iuygQ_rg&o8AYl2+j>9iInXq$SONYTWIN zE5{f=oe#C};hQ}wOZ9UG;2H(HBn(_475wL1`@Wt@X7q5mV7?cV^{R~Vf@&4tkMz^` zsXka*9>#E%|H>0zwCML3&h;&!D{p4iRtJ}K55?T(H%(*~#lOaQN7&%I7S1R>C;i+7 zq>IMgXi_^t#lHc7d}WRz6;r_+W{jgCAO6-+(EypZt1zIfCFMq4;}To5wBXyB;t=~r zVgMpYGKIV%HHucy3&;>SBa&=G|Nb=FK1nxHs1XvBu1wR#WW%Oco zWarMq*p8iN8P}}JsjI?rnxHmcm*WER9hWp((1B()o6o(-N$7jF~(EHg-ZP z{lUo%fj6L?&f%w>rbGWGBjK(I&t8+p@8p5&|Ccs%iD^wM@($$A(JN76XNHoskh5;Tu= z933C*E~XQWCgC4mU)mMVKz=v-Ns`H4q*oIt>HE?P?2W4_i(XNE7V0$>dyMLnoyfrS zRNVT$qm4swUI+UH>Qma1Ywfni`H}+*L%k?(ys0K7?&?@BKP(O5H3pfZO0B_bmLPjq zjdv*rZD8Hph_2w3dM@{O8~e`pT%Yxj1lU`*L%sGwxP>K0$>{0vm=ZO&IAExAtN3dC z3T}Kkq__3EOtHP|&P`3R9lo#GC8=f=y2}WsKaK6Ylo}Or)WlO43UX%5bcovW4iKe^4 z`ePs9T=pQr?+qgSj z@Ssh!{@p`jY+F*%sSvU5xY+e@E#l?;B2s6MwG4SsxqsNUnBOnfK#r314ITdo=PbdM zMhRG1`;I@tp+_aLpDwj%1-fB}{iH3KQ-bfpYg9RiHg%+>nh+A*jZ%_!(0&rRE%@Im zFlzRT25;6}vSMdDg#aMJyZ;8mA*JavDW~mA$Y7)HO0lAstmRSlkpX;@@9{9U4Zg?S zt!z-XTrXJaNG$cF^T_$*2iLN4AG5NTd$lrA#&l-+yJP33Ke5V|EfiQCC;{5;YKeU29bE{PUAqq%=<_RzKT={F&4vNoKha9$j) zLM2tDWTlIG^y{w90cP04u@S$FgS`TYfrlq2ETwQ{42_z?1$7T-=~d7?E7EldOINdl zER{*DgB>x=4{R%n3C@|wCN%607D(QiCfqCW0;=qmA)SM5SePtcm5;FQ?n~tfnEOR zU&eyJOcf`RlIU|4-1=gFnaWb+pD+HSg(3=&4F3;FSwm0A+j{t`AOBT(N#aK^x2cF5ot=o{*75rO#@kTO(8hw%6qR6R-Yzwe)bDB2oMFxR(x?Aj z)=<=1+c#V|v0_FeYkSUa@9_jQfq`5B_c)@YlWV==6)#%dW-6TF)HtidA!^(%^*Ap} zEjD58EwIN)r?Sb;+_)>;6g!?smCk0YZ@>4b!%DEi8)fm`IZJuGuBAyQD%`7^E{GUU%=ckl2?{e=ou9Xni4^I znt;=OXJt<%TY>+7r;ER!{8NOQHFW>K)5zyl?}**rbw(gBIf05by+tHQJ%L^obTfwR zhWnnc-M!BTS`{>rLJCpf+tnDv90uQ7DK%<;279 z^E{nr>-igI{~##&9&V!Yr_I*fu`3MGPU>GZvf1Go9jebGd;RrgL;P_eTt|M_G8X3^ z0T!DU+C6Y~=T2+6*L)Mnke|Sg(Bu1gcbNNPtwrSDa3ZBlLAL6TVKDqqs}%xYea@kF zdtFv1YWS?CM*^Yc^~T3JIzidyp|6ED%+Hr65mtx<(n(2__jsF|!>-LM?OB84`r^0W zA@nrIxH2ubyv4f=khZ8~32YP+i~AyLSEW`dHD2D=F>ug4!f%V0vr4?+6fn?FJrPC= zH}S0&tCN@&`8m^fGmQuC1nRbC<)OB(T(E9+!6lx`X5tg9<0F%nAQSQXjd_)RV2C&H zBG42z4!?LH^_i3>B5Grh!H!#5U?b(HtI~ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/sk/images/insert_link_window.png b/jscripts/tiny_mce/themes/advanced/docs/sk/images/insert_link_window.png new file mode 100644 index 0000000000000000000000000000000000000000..94a0c2e5a4206226b83753c42c7dfe08bcb288a0 GIT binary patch literal 3833 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/sk/index.htm b/jscripts/tiny_mce/themes/advanced/docs/sk/index.htm new file mode 100644 index 000000000..e7b0ce5f3 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sk/index.htm @@ -0,0 +1,26 @@ + + +N�ov�a + + + + + + + + + + +
    +
    +Kliknutím na odkaz zvolíte požadovanú voľbu. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sk/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/sk/insert_image_button.htm new file mode 100644 index 000000000..5a9bb457e --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sk/insert_image_button.htm @@ -0,0 +1,66 @@ + + +Tla�tko vloit obr�ek + + + + + + + + + + + + +
    +
    +Tlačitko vložiť obrázok otvorý následujúce okno.
    +
    +
    +
    +Iba vložte URL obrázku, ktorý chcete pridať a zadajte jeho popis, ten bude +zobrazovaný ako alternatívny popisok obrázku.
    +
    +Popis položiek:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    URL obrázkuURL/cesta k obrázku.
    Popis obrázkuAlternatívny popis toho, co je na obrázku.
    Rozmeryšírka/výška obrázku.
    ZarovnávanieZarovnávanie obrázku, vhodné pre obtekanie obrázku textom.
    RamčekHrúbka ramčeku.
    Vertikálny okrajVertikálny okraj, vhodné pre zalomenie textu okolo obrázku.
    Horizontálny okrajHorizontány okraj, vhodné pre zalomenie textu okolo obrázku.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sk/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/sk/insert_link_button.htm new file mode 100644 index 000000000..d2e14c894 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sk/insert_link_button.htm @@ -0,0 +1,34 @@ + + +Tla�tko vloit odkaz + + + + + + + + + + + + +
    +
    +Toto tlačitko otvorý nové okno s možnosťou vložiť/upraviť odkaz.
    +
    +
    +
    +V tomto okne sú dve položky. "URL odkazu" je adresa stráky, na +ktorú odkazujeme. "Cieľ" určuje, ako môže byť odkazovaná stránka otvorená.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sk/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/sk/insert_table_button.htm new file mode 100644 index 000000000..36a7d21b5 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sk/insert_table_button.htm @@ -0,0 +1,68 @@ + + +Tla�tko vloit tabulku + + + + + + + + + + + + +
    +
    +Tlačítko vložiť tabuľku otvorý následujúce okno, vňom môžete definovať novú tabuľku.
    +
    +
    +
    +Popis položiek:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    StĺpcePočet stĺpcov v tabuľke.
    RiadkyPočet riadkov v tabuľke.
    Vnútorný okraj bunkyVnútorný okraj bunky.
    Vnútorný okraj tabuľky�Vnútorný okraj tabuľky.
    ZarovnanieZarovnať tabuľky.
    RiadokHrúbka riadku tabuľky.
    ŠírkaŠírka tabuľky v pixelech.
    VýškakaVýška tabuľky v pixelech.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sk/style.css b/jscripts/tiny_mce/themes/advanced/docs/sk/style.css new file mode 100644 index 000000000..f988e2a7b --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sk/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: 0; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/about.htm b/jscripts/tiny_mce/themes/advanced/docs/sv/about.htm new file mode 100644 index 000000000..8ea096afa --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sv/about.htm @@ -0,0 +1,32 @@ + + +About TinyMCE + + + + + + + + + + + +
    +
    +TinyMCE är en liten WYSIWYG-editor för webläsare som +MSIE och Mozilla vilken möjliggör för användare att redigera +HTML-innehåll på ett mer användarvänligt sätt. +Applikationen har funktioner som liknar dem man finner i vanliga ordbehandlare +och borde inte vara speciellt svårt att använda.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/sv/common_buttons.htm new file mode 100644 index 000000000..d256fa5b7 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sv/common_buttons.htm @@ -0,0 +1,163 @@ + + +Common buttons + + + + + + + + + + + +
    +
    +Nedan finner du en kort beskrivning av varje knapp/funktion.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Fet text.
    Kursiv text.
    Understruken text.
    Genomstruken text.
    Rak vänstermarginal.
    Centrera.
    Rak högermarginal.
    Raka marginaler.
    Punktlista.
    Numrerad lista
    Minska indrag.
    Öka utdrag.
    Ångra senaste ändringen.
    Gör om senaste ändringen.
    Skapa/Redigera länk, läs mer om denna funktion i + kapitlet Skapa/Redigera länk.
    Ta bort länkar från markerade länkar.
    Skapa/Redigera ankare, lär mer om denna funktion i + kapitlet Skapa/Redigera ankare.
    Skapa/Redigera bild, lär mer om denna funktion i + kapitlet Skapa/Redigera bild.
    Rensa/Städa kåden. Denna funktion tar bort onödig + formatering. Bör användas när man t.ex. kopierar text + från Office-program.
    Visad denna hjälp.
    Öppnar en HTML-käkodseditor .
    Skapar en ny tabell (2x2) .
    Skapar en rad ovanför den nuvarande raden .
    Skapar en rad under den nuvarande raden .
    Tar bort en rad.
    Skapar en kolumn före den nuvarande kolumnen.
    Skapar en kolumn efter den nuvarande kolumnen.
    Tar bort en kolumn.
    Skapar en horisontell linje.
    Tar bort formatering från markerat område.
    Skapar nedsänkt text.
    Skapar upphöjd text.
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/images/insert_anchor_window.gif b/jscripts/tiny_mce/themes/advanced/docs/sv/images/insert_anchor_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..1c38437e26bcc84145d6a6e994ff1f0bdbbf0538 GIT binary patch literal 5229 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 CMam2S literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/images/insert_link_window.gif b/jscripts/tiny_mce/themes/advanced/docs/sv/images/insert_link_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..2a56e79c4d9f735f162fb69fb9b49ec05f17fc0d GIT binary patch literal 5767 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 F06XoAmZ<;$ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/images/insert_table_window.gif b/jscripts/tiny_mce/themes/advanced/docs/sv/images/insert_table_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..e8b69ef02a40913b8a94c28f4df060c27f2859d2 GIT binary patch literal 7099 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/index.htm b/jscripts/tiny_mce/themes/advanced/docs/sv/index.htm new file mode 100644 index 000000000..afeb5cab1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sv/index.htm @@ -0,0 +1,27 @@ + + +Help Index + + + + + + + + + +
    +
    +Klicka på länkarna nedan för att gå till olika +hjälp-kapitel. + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/insert_anchor_button.htm b/jscripts/tiny_mce/themes/advanced/docs/sv/insert_anchor_button.htm new file mode 100644 index 000000000..9aa4846a6 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sv/insert_anchor_button.htm @@ -0,0 +1,34 @@ + + +Skapa/Redigera länk + + + + + + + + + + + +
    +
    +Denna funktion öppnar ett nytt fönster liknande det nedan.
    +
    +
    +
    +Detta fönster har ett fält som man skall fylla i med ett unik +namn, denna funktion gör det möjligt att skapa +ankarpunkter/bokmärken.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/sv/insert_image_button.htm new file mode 100644 index 000000000..9a583a11a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sv/insert_image_button.htm @@ -0,0 +1,71 @@ + + +Skapa/Redigera bild + + + + + + + + + + + +
    +
    +Funktionen "Skapa/Redigera bild" öppnar ett nytt fönster som ser ut som +bilden nedan.
    +
    +
    +
    +I detta fönster skriver du in URL:en till bilden du vill länka till +samt en bildbeskrivning, denna beskrivning kommer att visas som en alternativ +text till bilden.
    +
    +Fältförklaring:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Bilderns URL URL/sökväg till bilden.
    Bildens beskrivningBildens beskrivning, denna beskrivning kommer att visas som en + alternativ text till bilden.
    DimensionerBildens bredd och höjd.
    JusteringBildens justering, kan vara användbart när man vill att + text skall flyta runt bilden.
    RamBildramens bredd.
    Vertikalt tomrum Vertikalt tomrum , kan vara användbart när man vill + att text skall flyta runt bilden.
    Horizontellt tomromHorisontellt tomrum, kan vara användbart när man vill + att text skall flyta runt bilden.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/sv/insert_link_button.htm new file mode 100644 index 000000000..cc428aaab --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sv/insert_link_button.htm @@ -0,0 +1,33 @@ + + +Skapa/Redigera länk + + + + + + + + + + + +
    +
    +Denna funktion öppnar ett nytt fönster liknande det nedan.
    +
    +
    +
    +Detta fönster har två fält länkens URL/adress samt hur länken +skall öppnas.
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/sv/insert_table_button.htm new file mode 100644 index 000000000..8cc1c956a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sv/insert_table_button.htm @@ -0,0 +1,72 @@ + + +Skapa/Redigera tabell + + + + + + + + + + + +
    +
    +Skapa tabell-knappen öppnar ett nytt fönster, med hjälp av +detta fönster kan du skapa tabeller.
    +
    +
    +
    +Fältförklaring:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KolumnerAntal kolumner i tabellen.
    RaderAntal rader i tabellen .
    CellutfyllnadAntal pixlars utfyllnad i varje cell.
    CellmellanrumAntal pixlars mellanrum mellan cellerna.
    JusteringTabellens justering.
    RambreddRamens bredd .
    BreddBredd i pixlar.
    HöjdHöjd i pixlar.
    StilStilmall på tabellen.
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/sv/style.css b/jscripts/tiny_mce/themes/advanced/docs/sv/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/sv/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/docs/zh_cn/about.htm b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/about.htm new file mode 100644 index 000000000..4d3c8b3f6 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/about.htm @@ -0,0 +1,29 @@ + + +¹ØÓÚTinyMCE + + + + + + + + + + + + +
    +
    +TinyMCEÊÇÒ»ÖÖÊÊÓÃÓÚMSIEºÍMozillaµÈä¯ÀÀÆ÷µÄÇáÁ¿¼¶Ëù¼û¼´ËùµÃ±à¼­Æ÷£¬ÒÔ¸ü¼ÓÓѺõķ½Ê½¹©Óû§±à¼­HTMLÄÚÈÝ¡£Ëü¾ßÓд󲿷ÖÎÄ×Ö´¦ÀíÆ÷Ëù³£¼ûµÄ¹¦ÄÜ£¬²¢ÇÒÒ×ÓÚʹÓá£
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/zh_cn/common_buttons.htm b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/common_buttons.htm new file mode 100644 index 000000000..167a830d3 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/common_buttons.htm @@ -0,0 +1,160 @@ + + +³£Óð´Å¥ + + + + + + + + + + + + +
    +
    +ÒÔÏÂÊÇÿ¸ö°´Å¥µÄ¼ò¶Ì˵Ã÷ +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ´ÖÌåÎÄ×ÖÑùʽ
    бÌåÎÄ×ÖÑùʽ
    Ï»®ÏßÎÄ×ÖÑùʽ
    ɾ³ýÏßÎÄ×ÖÑùʽ
    ×ó¶ÔÆë
    ¾ÓÖжÔÆë
    ÓÒ¶ÔÆë
    Á½¶Ë¶ÔÆë
    ÎÞÐòÁбí
    ÓÐÐòÁбí
    ¼õÉÙËõ½øÁ¿
    Ôö¼ÓËõ½øÁ¿
    ³·ÏûÉÏÒ»²Ù×÷
    ÖØ×öÉÏÒ»²Ù×÷
    ²åÈëÐÂÁ´½Ó£¬µã»÷ ²åÈëÁ´½Ó°´Å¥ Õ½ÚÒԲ鿴¸ü¶àÄÚÈÝ¡£
    ɾ³ýµ±Ç°Ñ¡¶¨µÄÁ´½Ó/ÒƳýÈ«²¿Ñ¡¶¨µÄÁ´½Ó
    ²åÈëÐÂêµã£¬µã»÷ ²åÈëêµã°´Å¥ Õ½ÚÒԲ鿴¸ü¶àÄÚÈÝ¡£
    ²åÈëÐÂͼÏñ£¬µã»÷ ²åÈëͼÏñ°´Å¥ Õ½ÚÒԲ鿴¸ü¶àÄÚÈÝ¡£
    ÇåÀí´úÂë/Çå³ýËùÓв»ÐèÒªµÄ¸ñʽ¡£´Ë¹¦ÄÜÔÚÄã´ÓofficeµÈ²úÆ·Öи´ÖÆÄÚÈݽøÀ´µÄʱºòÌرðÓÐÓá£
    ÏÔʾ´Ë°ïÖú´°¿Ú
    ´ò¿ªHTML´úÂë±à¼­Æ÷
    ÔÚµ±Ç°Î»ÖòåÈëÒ»ÕÅ2¡Á2µÄ±í¸ñ
    ÔÚµ±Ç°ÐеÄÇ°Ãæ²åÈëÐÂÐÐ
    ÔÚµ±Ç°ÐеĺóÃæ²åÈëÐÂÐÐ
    ɾ³ýµ±Ç°ÐÐ
    ÔÚµ±Ç°ÁеÄÇ°Ãæ²åÈëÐÂÁÐ
    ÔÚµ±Ç°ÁеĺóÃæ²åÈëÐÂÁÐ
    ɾ³ýµ±Ç°ÁÐ
    ²åÈëˮƽÏß
    ÒƳýËùÑ¡ÎÄ×ֵĸñʽ
    ½«ËùÑ¡ÎÄ×Ö×öΪϱê
    ½«ËùÑ¡ÎÄ×Ö×öΪÉϱê
    +
    +
    + + + + + + + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/zh_cn/images/insert_anchor_window.gif b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/images/insert_anchor_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..21513adc8f71e69fd69cfed82abed802f04f9be5 GIT binary patch literal 10444 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%0DWBpH{MR24QF0Jaa;c&b1L6e( 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/zh_cn/images/insert_link_window.gif b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/images/insert_link_window.gif new file mode 100644 index 0000000000000000000000000000000000000000..bcb3976e35f78e9e5ded9fececeb9d2b3607baa6 GIT binary patch literal 12005 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 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/docs/zh_cn/index.htm b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/index.htm new file mode 100644 index 000000000..1dd52cdba --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/index.htm @@ -0,0 +1,27 @@ + + +°ïÖúË÷Òý + + + + + + + + + + +
    +
    +Çëµã»÷ÒÔÏÂÁ´½ÓÀ´²é¿´°ïÖúÄÚÈÝÖеIJ»Í¬Õ½Ú. +
    +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_anchor_button.htm b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_anchor_button.htm new file mode 100644 index 000000000..bbb75589a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_anchor_button.htm @@ -0,0 +1,31 @@ + + +²åÈëêµã°´Å¥ + + + + + + + + + + + + +
    +
    ´Ë°´Å¥»á´ò¿ª²åÈë/±à¼­ÃªµãµÄ¶Ô»°´°¿Ú£º
    +
    +
    +
    ´°¿ÚÖÐÖ»ÓÐÒ»¸öÎı¾Óò£¬Äã¿ÉÒÔÔÚ´ËÊäÈëêµãÃû³Æ£¬ÐèҪעÒâµÄÊÇêµãÃû³Æ±ØÐëÊÇΨһµÄ¡£
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_image_button.htm b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_image_button.htm new file mode 100644 index 000000000..68bd326b8 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_image_button.htm @@ -0,0 +1,63 @@ + + +²åÈëͼÏñ°´Å¥ + + + + + + + + + + + + +
    +
    µã»÷²åÈëͼƬ°´Å¥ºó»á´ò¿ªÒÔÏ´°¿Ú£º
    +
    +
    +
    ÄãÖ»Ðè¼òµ¥µÄÊäÈëÐèÒªÁ¬½ÓµÄͼÏñµØÖ·¼°Í¼ÏñÃèÊö£¨Í¼ÏñµÄÌæ´úÎÄ×Ö£©
    +
    +²ÎÊý˵Ã÷£º
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ͼÏñµØÖ·Òª²åÈëµÄͼƬµÄURL
    ͼÏñÃèÊöͼƬÄÚÈݵÄÌæ´úÎÄ×ÖÃèÊö
    άÊýͼÏñ¿í¶ÈÓë¸ß¶È
    ¶ÔÆ뷽ʽͼÏñµÄ¶ÔÆ뷽ʽ£¬ÔÚÎÄ×Ö»·ÈÆͼÏñʱÌرðÓÐÓá£
    ±ß¿òͼÏñ±ß¿òµÄºñ¶È
    ˮƽ¼ä¾àͼÏñˮƽ¼ä¾à£¬ÔÚÎÄ×Ö»·ÈÆͼÏñʱÌرðÓÐÓá£
    ´¹Ö±¼ä¾àͼÏñ´¹Ö±¼ä¾à£¬ÔÚÎÄ×Ö»·ÈÆͼÏñʱÌرðÓÐÓá£
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_link_button.htm b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_link_button.htm new file mode 100644 index 000000000..64944e374 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_link_button.htm @@ -0,0 +1,32 @@ + + +²åÈëÁ´½Ó°´Å¥ + + + + + + + + + + + + +
    +
    ´Ë°´Å¥»á´ò¿ª²åÈë/±à¼­Á´½ÓµÄ¶Ô»°´°¿Ú£º
    +
    +
    +
    ´°¿ÚÖÐÓÐÁ½¸ö±íµ¥Óò£¬µÚÒ»¸öÊÇÁ´½ÓµÄµØÖ·£¬µÚ¶þ¸öÊÇÁ´½ÓµÄ´ò¿ª·½Ê½¡£ +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_table_button.htm b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_table_button.htm new file mode 100644 index 000000000..b34ca1fec --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/insert_table_button.htm @@ -0,0 +1,71 @@ + + +²åÈë±í¸ñ°´Å¥ + + + + + + + + + + + + +
    +
    µã»÷²åÈë±í¸ñ°´Å¥»á´ò¿ªÒÔÏ´°¿Ú£¬´Ë²Ù×÷ÔÊÐíÄã´´½¨±í¸ñ¡£
    +
    +
    +
    +²ÎÊý˵Ã÷£º
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ÁÐÊý±í¸ñÁÐÊý
    ÐÐÊý±í¸ñÐÐÊý
    Ìî³ä±í¸ñµ¥Ôª¸ñµÄÌî³äÖµ
    ¼ä¾à±í¸ñµ¥Ôª¸ñ¼ä¾à
    ¶ÔÆ뷽ʽ±í¸ñ¶ÔÆ뷽ʽ
    ±ß¿ò±í¸ñ±ß¿ò¿í¶È
    ¿í¶È±í¸ñ¿í¶È£¬ÒÔÏóËØΪµ¥Î»¡£
    ¸ß¶È±í¸ñ¸ß¶È£¬ÒÔÏóËØΪµ¥Î»¡£
    ÀàÃû±í¸ñcssÑùʽÃû
    +
    +
    +
    + + + + + + +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/docs/zh_cn/style.css b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/style.css new file mode 100644 index 000000000..722f537a1 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/docs/zh_cn/style.css @@ -0,0 +1,28 @@ +body { background-color: #FFFFFF; } +body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } +.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } +.subtitle { font-size: 12px; font-weight: bold; } + +.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } +.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } +img { border: #000000 solid 1px; } + +a:visited { color: #666666; text-decoration: underline; } +a:active { color: #666666; text-decoration: underline; } +a:hover { color: #666666; text-decoration: underline; } +a { color: #666666; text-decoration: underline; } + +.pageheader { border: #E0E0E0 solid 1px; } +.pagefooter { border: #E0E0E0 solid 1px; } +.sample { background-color: #FFFFFF; border: #000000 solid 1px; } +.samplecontent { font-size: 10px; } + +.code { background-color: #FFFFFF; border: #000000 solid 1px; } +.codecontent { font-size: 10px; } +.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } +.codecontent a { color: #666666; text-decoration: none; font-weight: bold } + +hr { height: 1px; } + diff --git a/jscripts/tiny_mce/themes/advanced/editor_template.js b/jscripts/tiny_mce/themes/advanced/editor_template.js new file mode 100644 index 000000000..0292b64cc --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/editor_template.js @@ -0,0 +1 @@ +tinyMCE.importThemeLanguagePack('advanced');var TinyMCE_AdvancedTheme={_autoImportCSSClasses:true,_resizer:{},_buttons:[['bold','{$lang_bold_img}','lang_bold_desc','Bold'],['italic','{$lang_italic_img}','lang_italic_desc','Italic'],['underline','{$lang_underline_img}','lang_underline_desc','Underline'],['strikethrough','strikethrough.gif','lang_striketrough_desc','Strikethrough'],['justifyleft','justifyleft.gif','lang_justifyleft_desc','JustifyLeft'],['justifycenter','justifycenter.gif','lang_justifycenter_desc','JustifyCenter'],['justifyright','justifyright.gif','lang_justifyright_desc','JustifyRight'],['justifyfull','justifyfull.gif','lang_justifyfull_desc','JustifyFull'],['bullist','bullist.gif','lang_bullist_desc','InsertUnorderedList'],['numlist','numlist.gif','lang_numlist_desc','InsertOrderedList'],['outdent','outdent.gif','lang_outdent_desc','Outdent'],['indent','indent.gif','lang_indent_desc','Indent'],['cut','cut.gif','lang_cut_desc','Cut'],['copy','copy.gif','lang_copy_desc','Copy'],['paste','paste.gif','lang_paste_desc','Paste'],['undo','undo.gif','lang_undo_desc','Undo'],['redo','redo.gif','lang_redo_desc','Redo'],['link','link.gif','lang_link_desc','mceLink',true],['unlink','unlink.gif','lang_unlink_desc','unlink'],['image','image.gif','lang_image_desc','mceImage',true],['cleanup','cleanup.gif','lang_cleanup_desc','mceCleanup'],['help','help.gif','lang_help_desc','mceHelp'],['code','code.gif','lang_theme_code_desc','mceCodeEditor'],['hr','hr.gif','lang_theme_hr_desc','inserthorizontalrule'],['removeformat','removeformat.gif','lang_theme_removeformat_desc','removeformat'],['sub','sub.gif','lang_theme_sub_desc','subscript'],['sup','sup.gif','lang_theme_sup_desc','superscript'],['forecolor','forecolor.gif','lang_theme_forecolor_desc','mceForeColor',true],['backcolor','backcolor.gif','lang_theme_backcolor_desc','mceBackColor',true],['charmap','charmap.gif','lang_theme_charmap_desc','mceCharMap'],['visualaid','visualaid.gif','lang_theme_visualaid_desc','mceToggleVisualAid'],['anchor','anchor.gif','lang_theme_anchor_desc','mceInsertAnchor'],['newdocument','newdocument.gif','lang_newdocument_desc','mceNewDocument']],_buttonMap:'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells',getControlHTML:function(button_name){var i,x;for(i=0;i4?but[4]:false),(but.length>5?but[5]:null));}switch(button_name){case"formatselect":var html='';return html;case"styleselect":return'';case"fontselect":var fontHTML='';return fontHTML;case"fontsizeselect":return'';case"|":case"separator":return'';case"spacer":return'';case"rowseparator":return'
    ';}return"";},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceLink":var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();var selectedText="";if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=rng.text;}else selectedText=inst.getSel().toString();if(!tinyMCE.linkElement){if((tinyMCE.selectedElement.nodeName.toLowerCase()!="img")&&(selectedText.length<=0))return true;}var href="",target="",title="",onclick="",action="insert",style_class="";if(tinyMCE.selectedElement.nodeName.toLowerCase()=="a")tinyMCE.linkElement=tinyMCE.selectedElement;if(tinyMCE.linkElement!=null&&tinyMCE.getAttrib(tinyMCE.linkElement,'href')=="")tinyMCE.linkElement=null;if(tinyMCE.linkElement){href=tinyMCE.getAttrib(tinyMCE.linkElement,'href');target=tinyMCE.getAttrib(tinyMCE.linkElement,'target');title=tinyMCE.getAttrib(tinyMCE.linkElement,'title');onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');style_class=tinyMCE.getAttrib(tinyMCE.linkElement,'class');if(onclick=="")onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');onclick=tinyMCE.cleanupEventStr(onclick);href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");mceRealHref=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_href');if(mceRealHref!=""){href=mceRealHref;if(tinyMCE.getParam('convert_urls'))href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");}action="update";}var template=new Array();template['file']='link.htm';template['width']=310;template['height']=200;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);if(inst.settings['insertlink_callback']){var returnVal=eval(inst.settings['insertlink_callback']+"(href, target, title, onclick, action, style_class);");if(returnVal&&returnVal['href'])TinyMCE_AdvancedTheme._insertLink(returnVal['href'],returnVal['target'],returnVal['title'],returnVal['onclick'],returnVal['style_class']);}else{tinyMCE.openWindow(template,{href:href,target:target,title:title,onclick:onclick,action:action,className:style_class,inline:"yes"});}return true;case"mceImage":var src="",alt="",border="",hspace="",vspace="",width="",height="",align="";var title="",onmouseover="",onmouseout="",action="insert";var img=tinyMCE.imgElement;var inst=tinyMCE.getInstanceById(editor_id);if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){img=tinyMCE.selectedElement;tinyMCE.imgElement=img;}if(img){if(tinyMCE.getAttrib(img,'name').indexOf('mce_')==0)return true;src=tinyMCE.getAttrib(img,'src');alt=tinyMCE.getAttrib(img,'alt');if(alt=="")alt=tinyMCE.getAttrib(img,'title');if(tinyMCE.isGecko){var w=img.style.width;if(w!=null&&w!="")img.setAttribute("width",w);var h=img.style.height;if(h!=null&&h!="")img.setAttribute("height",h);}border=tinyMCE.getAttrib(img,'border');hspace=tinyMCE.getAttrib(img,'hspace');vspace=tinyMCE.getAttrib(img,'vspace');width=tinyMCE.getAttrib(img,'width');height=tinyMCE.getAttrib(img,'height');align=tinyMCE.getAttrib(img,'align');onmouseover=tinyMCE.getAttrib(img,'onmouseover');onmouseout=tinyMCE.getAttrib(img,'onmouseout');title=tinyMCE.getAttrib(img,'title');if(tinyMCE.isMSIE){width=img.attributes['width'].specified?width:"";height=img.attributes['height'].specified?height:"";}src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);");mceRealSrc=tinyMCE.getAttrib(img,'mce_src');if(mceRealSrc!=""){src=mceRealSrc;if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);");}action="update";}var template=new Array();template['file']='image.htm?src={$src}';template['width']=355;template['height']=265+(tinyMCE.isMSIE?25:0);template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);if(inst.settings['insertimage_callback']){var returnVal=eval(inst.settings['insertimage_callback']+"(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");if(returnVal&&returnVal['src'])TinyMCE_AdvancedTheme._insertImage(returnVal['src'],returnVal['alt'],returnVal['border'],returnVal['hspace'],returnVal['vspace'],returnVal['width'],returnVal['height'],returnVal['align'],returnVal['title'],returnVal['onmouseover'],returnVal['onmouseout']);}else tinyMCE.openWindow(template,{src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout,action:action,inline:"yes"});return true;case"mceForeColor":var template=new Array();var elm=tinyMCE.selectedInstance.getFocusElement();var inputColor=tinyMCE.getAttrib(elm,"color");if(inputColor=='')inputColor=elm.style.color;if(!inputColor)inputColor="#000000";template['file']='color_picker.htm';template['width']=220;template['height']=190;tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes",command:"forecolor",input_color:inputColor});return true;case"mceBackColor":var template=new Array();var elm=tinyMCE.selectedInstance.getFocusElement();var inputColor=elm.style.backgroundColor;if(!inputColor)inputColor="#000000";template['file']='color_picker.htm';template['width']=220;template['height']=190;template['width']+=tinyMCE.getLang('lang_theme_advanced_backcolor_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_backcolor_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes",command:"HiliteColor",input_color:inputColor});return true;case"mceColorPicker":if(user_interface){var template=new Array();var inputColor=value['document'].getElementById(value['element_id']).value;template['file']='color_picker.htm';template['width']=220;template['height']=190;template['close_previous']="no";template['width']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height',0);if(typeof(value['store_selection'])=="undefined")value['store_selection']=true;tinyMCE.lastColorPickerValue=value;tinyMCE.openWindow(template,{editor_id:editor_id,mce_store_selection:value['store_selection'],inline:"yes",command:"mceColorPicker",input_color:inputColor});}else{var savedVal=tinyMCE.lastColorPickerValue;var elm=savedVal['document'].getElementById(savedVal['element_id']);elm.value=value;if(elm.onchange!=null&&elm.onchange!='')eval('elm.onchange();');}return true;case"mceCodeEditor":var template=new Array();template['file']='source_editor.htm';template['width']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_width",720));template['height']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_height",580));tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"no",inline:"yes"});return true;case"mceCharMap":var template=new Array();template['file']='charmap.htm';template['width']=550+(tinyMCE.isOpera?40:0);template['height']=250;template['width']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceInsertAnchor":var template=new Array();template['file']='anchor.htm';template['width']=320;template['height']=90+(tinyMCE.isNS7?30:0);template['width']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceNewDocument":if(confirm(tinyMCE.getLang('lang_newdocument')))tinyMCE.execInstanceCommand(editor_id,'mceSetContent',false,' ');return true;}return false;},getEditorTemplate:function(settings,editorId){function removeFromArray(in_array,remove_array){var outArray=new Array();for(var i=0;i 

    ';var layoutManager=tinyMCE.getParam("theme_advanced_layout_manager","SimpleLayout");var styleSelectHTML='';if(settings['theme_advanced_styles']){var stylesAr=settings['theme_advanced_styles'].split(';');for(var i=0;i'+key+'';}TinyMCE_AdvancedTheme._autoImportCSSClasses=false;}switch(layoutManager){case"SimpleLayout":var toolbarHTML="";var toolbarLocation=tinyMCE.getParam("theme_advanced_toolbar_location","bottom");var toolbarAlign=tinyMCE.getParam("theme_advanced_toolbar_align","center");var pathLocation=tinyMCE.getParam("theme_advanced_path_location","none");var statusbarLocation=tinyMCE.getParam("theme_advanced_statusbar_location",pathLocation);var defVals={theme_advanced_buttons1:"bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,separator,sub,sup,separator,charmap"};toolbarHTML+='0){toolbarHTML+="
    ";deltaHeight-=23;}}toolbarHTML+='
    ';template['html']='';if(toolbarLocation=="top"){template['html']+='';}if(statusbarLocation=="top"){template['html']+='';deltaHeight-=23;}template['html']+='';if(toolbarLocation=="bottom"){template['html']+='';}if(toolbarLocation=="external"){var bod=document.body;var elm=document.createElement("div");toolbarHTML=tinyMCE.replaceVar(toolbarHTML,'style_select_options',styleSelectHTML);toolbarHTML=tinyMCE.applyTemplate(toolbarHTML,{editor_id:editorId});elm.className="mceToolbarExternal";elm.id=editorId+"_toolbar";elm.innerHTML='
    '+toolbarHTML+'
    '+statusbarHTML+'
    '+toolbarHTML+'
    '+toolbarHTML+'
    ';bod.appendChild(elm);deltaHeight=0;tinyMCE.getInstanceById(editorId).toolbarElement=elm;}else{tinyMCE.getInstanceById(editorId).toolbarElement=null;}if(statusbarLocation=="bottom"){template['html']+=''+statusbarHTML+'';deltaHeight-=23;}template['html']+='';break;case"RowLayout":template['html']='';var containers=tinyMCE.getParam("theme_advanced_containers","",true,",");var defaultContainerCSS=tinyMCE.getParam("theme_advanced_containers_default_class","container");var defaultContainerAlign=tinyMCE.getParam("theme_advanced_containers_default_align","center");for(var i=0;i';else if(containers[i]=="mceElementpath"||containers[i]=="mceStatusbar"){var pathClass="mceStatusbar";if(i==containers.length-1){pathClass="mceStatusbarBottom";}else if(i==0){pathClass="mceStatusbar";}else{deltaHeight-=2;}template['html']+='';deltaHeight-=22;}else{var curContainer=tinyMCE.getParam("theme_advanced_container_"+containers[i],"",true,',');var curContainerHTML="";var curAlign=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align",defaultContainerAlign);var curCSS=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class",defaultContainerCSS);for(var j=0;j0){curContainerHTML+="
    ";deltaHeight-=23;}template['html']+='
    ';}}template['html']+='
    '+statusbarHTML+'
    '+curContainerHTML+'
    ';break;case"CustomLayout":var customLayout=tinyMCE.getParam("theme_advanced_custom_layout","");if(customLayout!=""&&eval("typeof("+customLayout+")")!="undefined"){template=eval(customLayout+"(template);");}break;}if(resizing)template['html']+='';template['html']=tinyMCE.replaceVar(template['html'],'style_select_options',styleSelectHTML);template['delta_width']=0;template['delta_height']=deltaHeight;return template;},initInstance:function(inst){if(tinyMCE.getParam("theme_advanced_resizing",false)){if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var w=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_width");var h=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_height");TinyMCE_AdvancedTheme._resizeTo(inst,w,h,tinyMCE.getParam("theme_advanced_resize_horizontal",true));}}inst.addShortcut('ctrl','k','lang_link_desc','mceLink');},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection,setup_content){function selectByValue(select_elm,value,first_index){first_index=typeof(first_index)=="undefined"?false:true;if(select_elm){for(var i=0;i=0;i--){var nodeName=path[i].nodeName.toLowerCase();var nodeData="";if(nodeName=="b"){nodeName="strong";}if(nodeName=="i"){nodeName="em";}if(nodeName=="span"){var cn=tinyMCE.getAttrib(path[i],"class");if(cn!=""&&cn.indexOf('mceItem')==-1)nodeData+="class: "+cn+" ";var st=tinyMCE.getAttrib(path[i],"style");if(st!=""){st=tinyMCE.serializeStyle(tinyMCE.parseStyle(st));nodeData+="style: "+st+" ";}}if(nodeName=="font"){if(tinyMCE.getParam("convert_fonts_to_spans"))nodeName="span";var face=tinyMCE.getAttrib(path[i],"face");if(face!="")nodeData+="font: "+face+" ";var size=tinyMCE.getAttrib(path[i],"size");if(size!="")nodeData+="size: "+size+" ";var color=tinyMCE.getAttrib(path[i],"color");if(color!="")nodeData+="color: "+color+" ";}if(getAttrib(path[i],'id')!=""){nodeData+="id: "+path[i].getAttribute('id')+" ";}var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1)nodeData+="class: "+className+" ";if(getAttrib(path[i],'src')!=""){var src=tinyMCE.getAttrib(path[i],"mce_src");if(src=="")src=tinyMCE.getAttrib(path[i],"src");nodeData+="src: "+src+" ";}if(getAttrib(path[i],'href')!=""){var href=tinyMCE.getAttrib(path[i],"mce_href");if(href=="")href=tinyMCE.getAttrib(path[i],"href");nodeData+="href: "+href+" ";}if(nodeName=="img"&&tinyMCE.getAttrib(path[i],"class").indexOf('mceItemFlash')!=-1){nodeName="flash";nodeData="src: "+path[i].getAttribute('title');}if(nodeName=="a"&&(anchor=tinyMCE.getAttrib(path[i],"name"))!=""){nodeName="a";nodeName+="#"+anchor;nodeData="";}if(getAttrib(path[i],'name').indexOf("mce_")!=0){var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1){nodeName+="."+className;}}var cmd='tinyMCE.execInstanceCommand(\''+editor_id+'\',\'mceSelectNodeDepth\',false,\''+i+'\');';html+=''+nodeName+'';if(i>0){html+=" » ";}}pathElm.innerHTML=''+tinyMCE.getLang('lang_theme_path')+": "+html+' ';}tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyright','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClass(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClass(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClass(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_numlist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sub','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sup','mceButtonNormal');tinyMCE.switchClass(editor_id+'_anchor','mceButtonNormal');tinyMCE.switchClass(editor_id+'_link','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_unlink','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_outdent','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_image','mceButtonNormal');tinyMCE.switchClass(editor_id+'_hr','mceButtonNormal');if(node.nodeName=="A"&&tinyMCE.getAttrib(node,"class").indexOf('mceItemAnchor')!=-1)tinyMCE.switchClass(editor_id+'_anchor','mceButtonSelected');var anchorLink=tinyMCE.getParentElement(node,"a","href");if(anchorLink||any_selection){tinyMCE.switchClass(editor_id+'_link',anchorLink?'mceButtonSelected':'mceButtonNormal');tinyMCE.switchClass(editor_id+'_unlink',anchorLink?'mceButtonSelected':'mceButtonNormal');}tinyMCE.switchClass(editor_id+'_visualaid',visual_aid?'mceButtonSelected':'mceButtonNormal');if(undo_levels!=-1){tinyMCE.switchClass(editor_id+'_undo','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_redo','mceButtonDisabled');}if(tinyMCE.getParentElement(node,"li,blockquote"))tinyMCE.switchClass(editor_id+'_outdent','mceButtonNormal');if(undo_index!=-1&&(undo_index0))tinyMCE.switchClass(editor_id+'_redo','mceButtonNormal');if(undo_index!=-1&&(undo_index>0&&undo_levels>0))tinyMCE.switchClass(editor_id+'_undo','mceButtonNormal');var selectElm=document.getElementById(editor_id+"_styleSelect");if(selectElm){TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);classNode=node;breakOut=false;var index=0;do{if(classNode&&classNode.className){for(var i=0;i");else selectByValue(selectElm,"");}var selectElm=document.getElementById(editor_id+"_fontNameSelect");if(selectElm){if(!tinyMCE.isSafari&&!(tinyMCE.isMSIE&&!tinyMCE.isOpera)){var face=inst.queryCommandValue('FontName');face=face==null||face==""?"":face;selectByValue(selectElm,face,face!="");}else{var elm=tinyMCE.getParentElement(node,"font","face");if(elm){var family=tinyMCE.getAttrib(elm,"face");if(family=='')family=''+elm.style.fontFamily;if(!selectByValue(selectElm,family,family!=""))selectByValue(selectElm,"");}else selectByValue(selectElm,"");}}var selectElm=document.getElementById(editor_id+"_fontSizeSelect");if(selectElm){if(!tinyMCE.isSafari&&!tinyMCE.isOpera){var size=inst.queryCommandValue('FontSize');selectByValue(selectElm,size==null||size==""?"0":size);}else{var elm=tinyMCE.getParentElement(node,"font","size");if(elm){var size=tinyMCE.getAttrib(elm,"size");if(size==''){var sizes=new Array('','8px','10px','12px','14px','18px','24px','36px');size=''+elm.style.fontSize;for(var i=0;i0)selectElm.setAttribute('cssImported','true');}},_setCookie:function(name,value,expires,path,domain,secure){var curCookie=name+"="+escape(value)+((expires)?"; expires="+expires.toGMTString():"")+((path)?"; path="+escape(path):"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":"");document.cookie=curCookie;},_getCookie:function(name){var dc=document.cookie;var prefix=name+"=";var begin=dc.indexOf("; "+prefix);if(begin==-1){begin=dc.indexOf(prefix);if(begin!=0)return null;}else begin+=2;var end=document.cookie.indexOf(";",begin);if(end==-1)end=dc.length;return unescape(dc.substring(begin+prefix.length,end));},_resizeTo:function(inst,w,h,set_w){var editorContainer=document.getElementById(inst.editorId+'_parent');var tableElm=editorContainer.firstChild;var iframe=inst.iframeElement;if(w==null||w=="null"){set_w=false;w=0;}if(h==null||h=="null")return;w=parseInt(w);h=parseInt(h);if(tinyMCE.isGecko){w+=2;h+=2;}var dx=w-tableElm.clientWidth;var dy=h-tableElm.clientHeight;w=w<1?30:w;h=h<1?30:h;if(set_w)tableElm.style.width=w+"px";tableElm.style.height=h+"px";iw=iframe.clientWidth+dx;ih=iframe.clientHeight+dy;iw=iw<1?30:iw;ih=ih<1?30:ih;if(tinyMCE.isGecko){iw-=2;ih-=2;}if(set_w)iframe.style.width=iw+"px";iframe.style.height=ih+"px";if(set_w){var tableBodyElm=tableElm.firstChild;var minIframeWidth=tableBodyElm.scrollWidth;if(inst.iframeElement.clientWidth';tinyMCE.execCommand("mceInsertContent",false,html);}else{if(!tinyMCE.imgElement&&tinyMCE.selectedInstance){if(tinyMCE.isSafari)tinyMCE.execCommand("mceInsertContent",false,'');else tinyMCE.selectedInstance.contentDocument.execCommand("insertimage",false,tinyMCE.uniqueURL);tinyMCE.imgElement=tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"img","src",tinyMCE.uniqueURL);}}if(tinyMCE.imgElement){var needsRepaint=false;var msrc=src;src=eval(tinyMCE.settings['urlconverter_callback']+"(src, tinyMCE.imgElement);");if(tinyMCE.getParam('convert_urls'))msrc=src;if(onmouseover&&onmouseover!="")onmouseover="this.src='"+eval(tinyMCE.settings['urlconverter_callback']+"(onmouseover, tinyMCE.imgElement);")+"';";if(onmouseout&&onmouseout!="")onmouseout="this.src='"+eval(tinyMCE.settings['urlconverter_callback']+"(onmouseout, tinyMCE.imgElement);")+"';";if(typeof(title)=="undefined")title=alt;if(width!=tinyMCE.imgElement.getAttribute("width")||height!=tinyMCE.imgElement.getAttribute("height")||align!=tinyMCE.imgElement.getAttribute("align"))needsRepaint=true;tinyMCE.setAttrib(tinyMCE.imgElement,'src',src);tinyMCE.setAttrib(tinyMCE.imgElement,'mce_src',msrc);tinyMCE.setAttrib(tinyMCE.imgElement,'alt',alt);tinyMCE.setAttrib(tinyMCE.imgElement,'title',title);tinyMCE.setAttrib(tinyMCE.imgElement,'align',align);tinyMCE.setAttrib(tinyMCE.imgElement,'border',border,true);tinyMCE.setAttrib(tinyMCE.imgElement,'hspace',hspace,true);tinyMCE.setAttrib(tinyMCE.imgElement,'vspace',vspace,true);tinyMCE.setAttrib(tinyMCE.imgElement,'width',width,true);tinyMCE.setAttrib(tinyMCE.imgElement,'height',height,true);tinyMCE.setAttrib(tinyMCE.imgElement,'onmouseover',onmouseover);tinyMCE.setAttrib(tinyMCE.imgElement,'onmouseout',onmouseout);if(width&&width!="")tinyMCE.imgElement.style.pixelWidth=width;if(height&&height!="")tinyMCE.imgElement.style.pixelHeight=height;if(needsRepaint)tinyMCE.selectedInstance.repaint();}tinyMCE.execCommand('mceEndUndoLevel');},_insertLink:function(href,target,title,onclick,style_class){tinyMCE.execCommand('mceBeginUndoLevel');if(tinyMCE.selectedInstance&&tinyMCE.selectedElement&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){var doc=tinyMCE.selectedInstance.getDoc();var linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");var newLink=false;if(!linkElement){linkElement=doc.createElement("a");newLink=true;}var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(linkElement,'href',thref);tinyMCE.setAttrib(linkElement,'mce_href',mhref);tinyMCE.setAttrib(linkElement,'target',target);tinyMCE.setAttrib(linkElement,'title',title);tinyMCE.setAttrib(linkElement,'onclick',onclick);tinyMCE.setAttrib(linkElement,'class',style_class);if(newLink){linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));tinyMCE.selectedElement.parentNode.replaceChild(linkElement,tinyMCE.selectedElement);}return;}if(!tinyMCE.linkElement&&tinyMCE.selectedInstance){if(tinyMCE.isSafari){tinyMCE.execCommand("mceInsertContent",false,''+tinyMCE.selectedInstance.selection.getSelectedHTML()+'');}else tinyMCE.selectedInstance.contentDocument.execCommand("createlink",false,tinyMCE.uniqueURL);tinyMCE.linkElement=tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);var elementArray=tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);for(var i=0;i 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); + } + + // Custom controlls other than buttons + switch (button_name) { + case "formatselect": + var html = ''; + + return html; + + case "styleselect": + return ''; + + case "fontselect": + var fontHTML = ''; + return fontHTML; + + case "fontsizeselect": + return ''; + + case "|": + case "separator": + return ''; + + case "spacer": + return ''; + + case "rowseparator": + return '
    '; + } + + return ""; + }, + + /** + * Theme specific execcommand handling. + */ + execCommand : function(editor_id, element, command, user_interface, value) { + switch (command) { + case "mceLink": + var inst = tinyMCE.getInstanceById(editor_id); + var doc = inst.getDoc(); + var selectedText = ""; + + if (tinyMCE.isMSIE) { + var rng = doc.selection.createRange(); + selectedText = rng.text; + } else + selectedText = inst.getSel().toString(); + + if (!tinyMCE.linkElement) { + if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0)) + return true; + } + + var href = "", target = "", title = "", onclick = "", action = "insert", style_class = ""; + + if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a") + tinyMCE.linkElement = tinyMCE.selectedElement; + + // Is anchor not a link + if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "") + tinyMCE.linkElement = null; + + if (tinyMCE.linkElement) { + href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href'); + target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target'); + title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title'); + onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); + style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class'); + + // Try old onclick to if copy/pasted content + if (onclick == "") + onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); + + onclick = tinyMCE.cleanupEventStr(onclick); + + href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); + + // Use mce_href if defined + mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_href'); + if (mceRealHref != "") { + href = mceRealHref; + + if (tinyMCE.getParam('convert_urls')) + href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); + } + + action = "update"; + } + + var template = new Array(); + + template['file'] = 'link.htm'; + template['width'] = 310; + template['height'] = 200; + + // Language specific width and height addons + template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0); + + if (inst.settings['insertlink_callback']) { + var returnVal = eval(inst.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);"); + if (returnVal && returnVal['href']) + TinyMCE_AdvancedTheme._insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']); + } else { + tinyMCE.openWindow(template, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class, inline : "yes"}); + } + + return true; + + case "mceImage": + var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = ""; + var title = "", onmouseover = "", onmouseout = "", action = "insert"; + var img = tinyMCE.imgElement; + var inst = tinyMCE.getInstanceById(editor_id); + + if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { + img = tinyMCE.selectedElement; + tinyMCE.imgElement = img; + } + + if (img) { + // Is it a internal MCE visual aid image, then skip this one. + if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0) + return true; + + src = tinyMCE.getAttrib(img, 'src'); + alt = tinyMCE.getAttrib(img, 'alt'); + + // Try polling out the title + if (alt == "") + alt = tinyMCE.getAttrib(img, 'title'); + + // Fix width/height attributes if the styles is specified + if (tinyMCE.isGecko) { + var w = img.style.width; + if (w != null && w != "") + img.setAttribute("width", w); + + var h = img.style.height; + if (h != null && h != "") + img.setAttribute("height", h); + } + + border = tinyMCE.getAttrib(img, 'border'); + hspace = tinyMCE.getAttrib(img, 'hspace'); + vspace = tinyMCE.getAttrib(img, 'vspace'); + width = tinyMCE.getAttrib(img, 'width'); + height = tinyMCE.getAttrib(img, 'height'); + align = tinyMCE.getAttrib(img, 'align'); + onmouseover = tinyMCE.getAttrib(img, 'onmouseover'); + onmouseout = tinyMCE.getAttrib(img, 'onmouseout'); + title = tinyMCE.getAttrib(img, 'title'); + + // Is realy specified? + if (tinyMCE.isMSIE) { + width = img.attributes['width'].specified ? width : ""; + height = img.attributes['height'].specified ? height : ""; + } + + //onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover)); + //onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout)); + + src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); + + // Use mce_src if defined + mceRealSrc = tinyMCE.getAttrib(img, 'mce_src'); + if (mceRealSrc != "") { + src = mceRealSrc; + + if (tinyMCE.getParam('convert_urls')) + src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); + } + + //if (onmouseover != "") + // onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);"); + + //if (onmouseout != "") + // onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);"); + + action = "update"; + } + + var template = new Array(); + + template['file'] = 'image.htm?src={$src}'; + template['width'] = 355; + template['height'] = 265 + (tinyMCE.isMSIE ? 25 : 0); + + // Language specific width and height addons + template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0); + + if (inst.settings['insertimage_callback']) { + var returnVal = eval(inst.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);"); + if (returnVal && returnVal['src']) + TinyMCE_AdvancedTheme._insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']); + } else + tinyMCE.openWindow(template, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action, inline : "yes"}); + + return true; + + case "mceForeColor": + var template = new Array(); + var elm = tinyMCE.selectedInstance.getFocusElement(); + var inputColor = tinyMCE.getAttrib(elm, "color"); + + if (inputColor == '') + inputColor = elm.style.color; + + if (!inputColor) + inputColor = "#000000"; + + template['file'] = 'color_picker.htm'; + template['width'] = 220; + template['height'] = 190; + + tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes", command : "forecolor", input_color : inputColor}); + return true; + + case "mceBackColor": + var template = new Array(); + var elm = tinyMCE.selectedInstance.getFocusElement(); + var inputColor = elm.style.backgroundColor; + + if (!inputColor) + inputColor = "#000000"; + + template['file'] = 'color_picker.htm'; + template['width'] = 220; + template['height'] = 190; + + template['width'] += tinyMCE.getLang('lang_theme_advanced_backcolor_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_theme_advanced_backcolor_delta_height', 0); + + tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes", command : "HiliteColor", input_color : inputColor}); + //mceBackColor + return true; + + case "mceColorPicker": + if (user_interface) { + var template = new Array(); + var inputColor = value['document'].getElementById(value['element_id']).value; + + template['file'] = 'color_picker.htm'; + template['width'] = 220; + template['height'] = 190; + template['close_previous'] = "no"; + + template['width'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height', 0); + + if (typeof(value['store_selection']) == "undefined") + value['store_selection'] = true; + + tinyMCE.lastColorPickerValue = value; + tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : inputColor}); + } else { + var savedVal = tinyMCE.lastColorPickerValue; + var elm = savedVal['document'].getElementById(savedVal['element_id']); + elm.value = value; + + if (elm.onchange != null && elm.onchange != '') + eval('elm.onchange();'); + } + return true; + + case "mceCodeEditor": + var template = new Array(); + + template['file'] = 'source_editor.htm'; + template['width'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_width", 720)); + template['height'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_height", 580)); + + tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no", inline : "yes"}); + return true; + + case "mceCharMap": + var template = new Array(); + + template['file'] = 'charmap.htm'; + template['width'] = 550 + (tinyMCE.isOpera ? 40 : 0); + template['height'] = 250; + + template['width'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_height', 0); + + tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); + return true; + + case "mceInsertAnchor": + var template = new Array(); + + template['file'] = 'anchor.htm'; + template['width'] = 320; + template['height'] = 90 + (tinyMCE.isNS7 ? 30 : 0); + + template['width'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_width', 0); + template['height'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_height', 0); + + tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); + return true; + + case "mceNewDocument": + if (confirm(tinyMCE.getLang('lang_newdocument'))) + tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ' '); + + return true; + } + + return false; + }, + + /** + * Editor instance template function. + */ + getEditorTemplate : function(settings, editorId) { + function removeFromArray(in_array, remove_array) { + var outArray = new Array(); + + for (var i=0; i 

    '; + var layoutManager = tinyMCE.getParam("theme_advanced_layout_manager", "SimpleLayout"); + + // Setup style select options -- MOVED UP FOR EXTERNAL TOOLBAR COMPATABILITY! + var styleSelectHTML = ''; + if (settings['theme_advanced_styles']) { + var stylesAr = settings['theme_advanced_styles'].split(';'); + + for (var i=0; i' + key + ''; + } + + TinyMCE_AdvancedTheme._autoImportCSSClasses = false; + } + + switch(layoutManager) { + case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)... + var toolbarHTML = ""; + var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom"); + var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center"); + var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Compatiblity + var statusbarLocation = tinyMCE.getParam("theme_advanced_statusbar_location", pathLocation); + var defVals = { + theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect", + theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code", + theme_advanced_buttons3 : "hr,removeformat,visualaid,separator,sub,sup,separator,charmap" + }; + + // Add accessibility control + toolbarHTML += ' 0) { + toolbarHTML += "
    "; + deltaHeight -= 23; + } + } + + // Add accessibility control + toolbarHTML += '
    '; + + // Setup template html + template['html'] = ''; + + if (toolbarLocation == "top") { + template['html'] += ''; + } + + if (statusbarLocation == "top") { + template['html'] += ''; + deltaHeight -= 23; + } + + template['html'] += ''; + + if (toolbarLocation == "bottom") { + template['html'] += ''; + } + + // External toolbar changes + if (toolbarLocation == "external") { + var bod = document.body; + var elm = document.createElement ("div"); + + toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML); + toolbarHTML = tinyMCE.applyTemplate(toolbarHTML, {editor_id : editorId}); + + elm.className = "mceToolbarExternal"; + elm.id = editorId+"_toolbar"; + elm.innerHTML = '
    ' + toolbarHTML + '
    ' + statusbarHTML + '
    ' + toolbarHTML + '
    '+toolbarHTML+'
    '; + bod.appendChild (elm); + // bod.style.marginTop = elm.offsetHeight + "px"; + + deltaHeight = 0; + tinyMCE.getInstanceById(editorId).toolbarElement = elm; + + //template['html'] = '
    '+toolbarHTML+'
    ' + template["html"]; + } else { + tinyMCE.getInstanceById(editorId).toolbarElement = null; + } + + if (statusbarLocation == "bottom") { + template['html'] += '' + statusbarHTML + ''; + deltaHeight -= 23; + } + + template['html'] += ''; + //"SimpleLayout" + break; + + case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom. + template['html'] = ''; + + var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ","); + var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container"); + var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center"); + + //Render Containers: + for (var i = 0; i < containers.length; i++) + { + if (containers[i] == "mceEditor") //Exceptions for mceEditor and ... + template['html'] += ''; + else if (containers[i] == "mceElementpath" || containers[i] == "mceStatusbar") // ... mceElementpath: + { + var pathClass = "mceStatusbar"; + + if (i == containers.length-1) + { + pathClass = "mceStatusbarBottom"; + } + else if (i == 0) + { + pathClass = "mceStatusbar"; + } + else + { + deltaHeight-=2; + } + + template['html'] += ''; + deltaHeight -= 22; + } else { // Render normal Container + var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ','); + var curContainerHTML = ""; + var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign); + var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS); + + for (var j=0; j 0) { + curContainerHTML += "
    "; + deltaHeight -= 23; + } + + template['html'] += '
    '; + } + } + + template['html'] += '
    ' + statusbarHTML + '
    ' + curContainerHTML + '
    '; + //RowLayout + break; + + case "CustomLayout" : //User defined layout callback... + var customLayout = tinyMCE.getParam("theme_advanced_custom_layout",""); + + if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") { + template = eval(customLayout + "(template);"); + } + break; + } + + if (resizing) + template['html'] += ''; + + template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML); + template['delta_width'] = 0; + template['delta_height'] = deltaHeight; + + return template; + }, + + initInstance : function(inst) { + if (tinyMCE.getParam("theme_advanced_resizing", false)) { + if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { + var w = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_width"); + var h = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_height"); + + TinyMCE_AdvancedTheme._resizeTo(inst, w, h, tinyMCE.getParam("theme_advanced_resize_horizontal", true)); + } + } + + inst.addShortcut('ctrl', 'k', 'lang_link_desc', 'mceLink'); + }, + + /** + * Node change handler. + */ + handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection, setup_content) { + function selectByValue(select_elm, value, first_index) { + first_index = typeof(first_index) == "undefined" ? false : true; + + if (select_elm) { + for (var i=0; i=0; i--) { + var nodeName = path[i].nodeName.toLowerCase(); + var nodeData = ""; + + if (nodeName == "b") { + nodeName = "strong"; + } + + if (nodeName == "i") { + nodeName = "em"; + } + + if (nodeName == "span") { + var cn = tinyMCE.getAttrib(path[i], "class"); + if (cn != "" && cn.indexOf('mceItem') == -1) + nodeData += "class: " + cn + " "; + + var st = tinyMCE.getAttrib(path[i], "style"); + if (st != "") { + st = tinyMCE.serializeStyle(tinyMCE.parseStyle(st)); + nodeData += "style: " + st + " "; + } + } + + if (nodeName == "font") { + if (tinyMCE.getParam("convert_fonts_to_spans")) + nodeName = "span"; + + var face = tinyMCE.getAttrib(path[i], "face"); + if (face != "") + nodeData += "font: " + face + " "; + + var size = tinyMCE.getAttrib(path[i], "size"); + if (size != "") + nodeData += "size: " + size + " "; + + var color = tinyMCE.getAttrib(path[i], "color"); + if (color != "") + nodeData += "color: " + color + " "; + } + + if (getAttrib(path[i], 'id') != "") { + nodeData += "id: " + path[i].getAttribute('id') + " "; + } + + var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); + if (className != "" && className.indexOf('mceItem') == -1) + nodeData += "class: " + className + " "; + + if (getAttrib(path[i], 'src') != "") { + var src = tinyMCE.getAttrib(path[i], "mce_src"); + + if (src == "") + src = tinyMCE.getAttrib(path[i], "src"); + + nodeData += "src: " + src + " "; + } + + if (getAttrib(path[i], 'href') != "") { + var href = tinyMCE.getAttrib(path[i], "mce_href"); + + if (href == "") + href = tinyMCE.getAttrib(path[i], "href"); + + nodeData += "href: " + href + " "; + } + + if (nodeName == "img" && tinyMCE.getAttrib(path[i], "class").indexOf('mceItemFlash') != -1) { + nodeName = "flash"; + nodeData = "src: " + path[i].getAttribute('title'); + } + + if (nodeName == "a" && (anchor = tinyMCE.getAttrib(path[i], "name")) != "") { + nodeName = "a"; + nodeName += "#" + anchor; + nodeData = ""; + } + + if (getAttrib(path[i], 'name').indexOf("mce_") != 0) { + var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); + if (className != "" && className.indexOf('mceItem') == -1) { + nodeName += "." + className; + } + } + + var cmd = 'tinyMCE.execInstanceCommand(\'' + editor_id + '\',\'mceSelectNodeDepth\',false,\'' + i + '\');'; + html += '' + nodeName + ''; + + if (i > 0) { + html += " » "; + } + } + + pathElm.innerHTML = '' + tinyMCE.getLang('lang_theme_path') + ": " + html + ' '; + } + + // Reset old states + tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_sub', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_sup', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_link', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_unlink', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_image', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_hr', 'mceButtonNormal'); + + if (node.nodeName == "A" && tinyMCE.getAttrib(node, "class").indexOf('mceItemAnchor') != -1) + tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonSelected'); + + // Get link + var anchorLink = tinyMCE.getParentElement(node, "a", "href"); + + if (anchorLink || any_selection) { + tinyMCE.switchClass(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); + } + + // Handle visual aid + tinyMCE.switchClass(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal'); + + if (undo_levels != -1) { + tinyMCE.switchClass(editor_id + '_undo', 'mceButtonDisabled'); + tinyMCE.switchClass(editor_id + '_redo', 'mceButtonDisabled'); + } + + // Within li, blockquote + if (tinyMCE.getParentElement(node, "li,blockquote")) + tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonNormal'); + + // Has redo levels + if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0)) + tinyMCE.switchClass(editor_id + '_redo', 'mceButtonNormal'); + + // Has undo levels + if (undo_index != -1 && (undo_index > 0 && undo_levels > 0)) + tinyMCE.switchClass(editor_id + '_undo', 'mceButtonNormal'); + + // Select class in select box + var selectElm = document.getElementById(editor_id + "_styleSelect"); + + if (selectElm) { + TinyMCE_AdvancedTheme._setupCSSClasses(editor_id); + + classNode = node; + breakOut = false; + var index = 0; + + do { + if (classNode && classNode.className) { + for (var i=0; i"); + else + selectByValue(selectElm, ""); + } + + // Select fontselect + var selectElm = document.getElementById(editor_id + "_fontNameSelect"); + if (selectElm) { + if (!tinyMCE.isSafari && !(tinyMCE.isMSIE && !tinyMCE.isOpera)) { + var face = inst.queryCommandValue('FontName'); + + face = face == null || face == "" ? "" : face; + + selectByValue(selectElm, face, face != ""); + } else { + var elm = tinyMCE.getParentElement(node, "font", "face"); + + if (elm) { + var family = tinyMCE.getAttrib(elm, "face"); + + if (family == '') + family = '' + elm.style.fontFamily; + + if (!selectByValue(selectElm, family, family != "")) + selectByValue(selectElm, ""); + } else + selectByValue(selectElm, ""); + } + } + + // Select fontsize + var selectElm = document.getElementById(editor_id + "_fontSizeSelect"); + if (selectElm) { + if (!tinyMCE.isSafari && !tinyMCE.isOpera) { + var size = inst.queryCommandValue('FontSize'); + selectByValue(selectElm, size == null || size == "" ? "0" : size); + } else { + var elm = tinyMCE.getParentElement(node, "font", "size"); + if (elm) { + var size = tinyMCE.getAttrib(elm, "size"); + + if (size == '') { + var sizes = new Array('', '8px', '10px', '12px', '14px', '18px', '24px', '36px'); + + size = '' + elm.style.fontSize; + + for (var i=0; i 0) + selectElm.setAttribute('cssImported', 'true'); + } + }, + + _setCookie : function(name, value, expires, path, domain, secure) { + var curCookie = name + "=" + escape(value) + + ((expires) ? "; expires=" + expires.toGMTString() : "") + + ((path) ? "; path=" + escape(path) : "") + + ((domain) ? "; domain=" + domain : "") + + ((secure) ? "; secure" : ""); + + document.cookie = curCookie; + }, + + _getCookie : function(name) { + var dc = document.cookie; + var prefix = name + "="; + var begin = dc.indexOf("; " + prefix); + + if (begin == -1) { + begin = dc.indexOf(prefix); + + if (begin != 0) + return null; + } else + begin += 2; + + var end = document.cookie.indexOf(";", begin); + + if (end == -1) + end = dc.length; + + return unescape(dc.substring(begin + prefix.length, end)); + }, + + _resizeTo : function(inst, w, h, set_w) { + var editorContainer = document.getElementById(inst.editorId + '_parent'); + var tableElm = editorContainer.firstChild; + var iframe = inst.iframeElement; + + if (w == null || w == "null") { + set_w = false; + w = 0; + } + + if (h == null || h == "null") + return; + + w = parseInt(w); + h = parseInt(h); + + if (tinyMCE.isGecko) { + w += 2; + h += 2; + } + + var dx = w - tableElm.clientWidth; + var dy = h - tableElm.clientHeight; + + w = w < 1 ? 30 : w; + h = h < 1 ? 30 : h; + + if (set_w) + tableElm.style.width = w + "px"; + + tableElm.style.height = h + "px"; + + iw = iframe.clientWidth + dx; + ih = iframe.clientHeight + dy; + + iw = iw < 1 ? 30 : iw; + ih = ih < 1 ? 30 : ih; + + if (tinyMCE.isGecko) { + iw -= 2; + ih -= 2; + } + + if (set_w) + iframe.style.width = iw + "px"; + + iframe.style.height = ih + "px"; + + // Is it to small, make it bigger again + if (set_w) { + var tableBodyElm = tableElm.firstChild; + var minIframeWidth = tableBodyElm.scrollWidth; + if (inst.iframeElement.clientWidth < minIframeWidth) { + dx = minIframeWidth - inst.iframeElement.clientWidth; + + inst.iframeElement.style.width = (iw + dx) + "px"; + } + } + }, + + /** + * Handles resizing events. + */ + _resizeEventHandler : function(e) { + var resizer = TinyMCE_AdvancedTheme._resizer; + + // Do nothing + if (!resizer.resizing) + return; + + e = typeof(e) == "undefined" ? window.event : e; + + var dx = e.screenX - resizer.downX; + var dy = e.screenY - resizer.downY; + var resizeBox = resizer.resizeBox; + var editorId = resizer.editorId; + + switch (e.type) { + case "mousemove": + var w, h; + + w = resizer.width + dx; + h = resizer.height + dy; + + w = w < 1 ? 1 : w; + h = h < 1 ? 1 : h; + + if (resizer.horizontal) + resizeBox.style.width = w + "px"; + + resizeBox.style.height = h + "px"; + break; + + case "mouseup": + TinyMCE_AdvancedTheme._setResizing(e, editorId, false); + TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId), resizer.width + dx, resizer.height + dy, resizer.horizontal); + + // Expire in a month + if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { + var expires = new Date(); + expires.setTime(expires.getTime() + 3600000 * 24 * 30); + + // Set the cookies + TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_width", "" + (resizer.horizontal ? resizer.width + dx : ""), expires); + TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_height", "" + (resizer.height + dy), expires); + } + break; + } + }, + + /** + * Starts/stops the editor resizing. + */ + _setResizing : function(e, editor_id, state) { + e = typeof(e) == "undefined" ? window.event : e; + + var resizer = TinyMCE_AdvancedTheme._resizer; + var editorContainer = document.getElementById(editor_id + '_parent'); + var editorArea = document.getElementById(editor_id + '_parent').firstChild; + var resizeBox = document.getElementById(editor_id + '_resize_box'); + var inst = tinyMCE.getInstanceById(editor_id); + + if (state) { + // Place box over editor area + var width = editorArea.clientWidth; + var height = editorArea.clientHeight; + + resizeBox.style.width = width + "px"; + resizeBox.style.height = height + "px"; + + resizer.iframeWidth = inst.iframeElement.clientWidth; + resizer.iframeHeight = inst.iframeElement.clientHeight; + + // Hide editor and show resize box + editorArea.style.display = "none"; + resizeBox.style.display = "block"; + + // Add event handlers, only once + if (!resizer.eventHandlers) { + if (tinyMCE.isMSIE) + tinyMCE.addEvent(document, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); + else + tinyMCE.addEvent(window, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); + + tinyMCE.addEvent(document, "mouseup", TinyMCE_AdvancedTheme._resizeEventHandler); + + resizer.eventHandlers = true; + } + + resizer.resizing = true; + resizer.downX = e.screenX; + resizer.downY = e.screenY; + resizer.width = parseInt(resizeBox.style.width); + resizer.height = parseInt(resizeBox.style.height); + resizer.editorId = editor_id; + resizer.resizeBox = resizeBox; + resizer.horizontal = tinyMCE.getParam("theme_advanced_resize_horizontal", true); + } else { + resizer.resizing = false; + resizeBox.style.display = "none"; + editorArea.style.display = tinyMCE.isMSIE && !tinyMCE.isOpera ? "block" : "table"; + tinyMCE.execCommand('mceResetDesignMode'); + } + }, + + _insertImage : function(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout) { + tinyMCE.execCommand('mceBeginUndoLevel'); + + if (src == "") + return; + + if (!tinyMCE.imgElement && tinyMCE.isSafari) { + var html = ""; + + html += '' + alt + ''; + + tinyMCE.execCommand("mceInsertContent", false, html); + } else { + if (!tinyMCE.imgElement && tinyMCE.selectedInstance) { + if (tinyMCE.isSafari) + tinyMCE.execCommand("mceInsertContent", false, ''); + else + tinyMCE.selectedInstance.contentDocument.execCommand("insertimage", false, tinyMCE.uniqueURL); + + tinyMCE.imgElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "img", "src", tinyMCE.uniqueURL); + } + } + + if (tinyMCE.imgElement) { + var needsRepaint = false; + var msrc = src; + + src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, tinyMCE.imgElement);"); + + if (tinyMCE.getParam('convert_urls')) + msrc = src; + + if (onmouseover && onmouseover != "") + onmouseover = "this.src='" + eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, tinyMCE.imgElement);") + "';"; + + if (onmouseout && onmouseout != "") + onmouseout = "this.src='" + eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, tinyMCE.imgElement);") + "';"; + + // Use alt as title if it's undefined + if (typeof(title) == "undefined") + title = alt; + + if (width != tinyMCE.imgElement.getAttribute("width") || height != tinyMCE.imgElement.getAttribute("height") || align != tinyMCE.imgElement.getAttribute("align")) + needsRepaint = true; + + tinyMCE.setAttrib(tinyMCE.imgElement, 'src', src); + tinyMCE.setAttrib(tinyMCE.imgElement, 'mce_src', msrc); + tinyMCE.setAttrib(tinyMCE.imgElement, 'alt', alt); + tinyMCE.setAttrib(tinyMCE.imgElement, 'title', title); + tinyMCE.setAttrib(tinyMCE.imgElement, 'align', align); + tinyMCE.setAttrib(tinyMCE.imgElement, 'border', border, true); + tinyMCE.setAttrib(tinyMCE.imgElement, 'hspace', hspace, true); + tinyMCE.setAttrib(tinyMCE.imgElement, 'vspace', vspace, true); + tinyMCE.setAttrib(tinyMCE.imgElement, 'width', width, true); + tinyMCE.setAttrib(tinyMCE.imgElement, 'height', height, true); + tinyMCE.setAttrib(tinyMCE.imgElement, 'onmouseover', onmouseover); + tinyMCE.setAttrib(tinyMCE.imgElement, 'onmouseout', onmouseout); + + // Fix for bug #989846 - Image resize bug + if (width && width != "") + tinyMCE.imgElement.style.pixelWidth = width; + + if (height && height != "") + tinyMCE.imgElement.style.pixelHeight = height; + + if (needsRepaint) + tinyMCE.selectedInstance.repaint(); + } + + tinyMCE.execCommand('mceEndUndoLevel'); + }, + + _insertLink : function(href, target, title, onclick, style_class) { + tinyMCE.execCommand('mceBeginUndoLevel'); + + if (tinyMCE.selectedInstance && tinyMCE.selectedElement && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { + var doc = tinyMCE.selectedInstance.getDoc(); + var linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a"); + var newLink = false; + + if (!linkElement) { + linkElement = doc.createElement("a"); + newLink = true; + } + + var mhref = href; + var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);"); + mhref = tinyMCE.getParam('convert_urls') ? href : mhref; + + tinyMCE.setAttrib(linkElement, 'href', thref); + tinyMCE.setAttrib(linkElement, 'mce_href', mhref); + tinyMCE.setAttrib(linkElement, 'target', target); + tinyMCE.setAttrib(linkElement, 'title', title); + tinyMCE.setAttrib(linkElement, 'onclick', onclick); + tinyMCE.setAttrib(linkElement, 'class', style_class); + + if (newLink) { + linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true)); + tinyMCE.selectedElement.parentNode.replaceChild(linkElement, tinyMCE.selectedElement); + } + + return; + } + + if (!tinyMCE.linkElement && tinyMCE.selectedInstance) { + if (tinyMCE.isSafari) { + tinyMCE.execCommand("mceInsertContent", false, '' + tinyMCE.selectedInstance.selection.getSelectedHTML() + ''); + } else + tinyMCE.selectedInstance.contentDocument.execCommand("createlink", false, tinyMCE.uniqueURL); + + tinyMCE.linkElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); + + var elementArray = tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); + + for (var i=0; i + + {$lang_insert_image_title} + + + + + + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
     
    + x +
    +
    +
    + +
    +
    + +
    + +
    + +
    +
    +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/images/anchor.gif b/jscripts/tiny_mce/themes/advanced/images/anchor.gif new file mode 100644 index 0000000000000000000000000000000000000000..34ab71534b74e1f8eb01a822d2073cde4cd878cb GIT binary patch literal 171 zcmV;c095}+Nk%w1VH5xq0K*0VDLrY1lc!y3io(UtI8lV8tiaOK*3t6qtjy*E#3&d$!w&zD+OKB~ULl7eEw((m;2 z^kQ<7@$qtYhNk=Uwg3PCA^8LW000jFEC2ui02BZe000DA@X1N5y*TU5`(_{rgp5Wq zV<-tiQw0DJpz-{)hcHm#IKm8pA~9I(Ca@SvR8S0cm6VSWFgTt^N>UaxG!szEiFzP_ cvz1f8Q5b|bYX=qJK_CnUx@XVt`!Nv!J5VM>-~a#s literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/bold.gif b/jscripts/tiny_mce/themes/advanced/images/bold.gif new file mode 100644 index 0000000000000000000000000000000000000000..d6a9cc2cd4117526156fa29c06156ba5971823c4 GIT binary patch literal 76 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*&Mzw-23{>3a?E=Bm(Rqw7V Z4AWqey4jFcx$b3$*C(Ir-+DzDtN~+a79aos literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/bold_de_se.gif b/jscripts/tiny_mce/themes/advanced/images/bold_de_se.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b129de25e916946792c89f08a7b30b2f9dc8b72 GIT binary patch literal 73 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*UAzw-23e#sdnZdC`i8W!&j Xl@)6cxHjEB<6*$FFxbIg;(p2 i&djr5P5jX#dNVh}IZO5VUiUMXvRj`2I%m$xU=0AHn;dum literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/bold_fr.gif b/jscripts/tiny_mce/themes/advanced/images/bold_fr.gif new file mode 100644 index 0000000000000000000000000000000000000000..2816454515a2b3d031ee1762f9308db99e9d3940 GIT binary patch literal 78 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*yKzw-23e%TquY+VNzx0~n3 bPUX;xQ|oohT$M9BQ$Xt4x8CPfj11NQWJeUX literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/bold_ru.gif b/jscripts/tiny_mce/themes/advanced/images/bold_ru.gif new file mode 100644 index 0000000000000000000000000000000000000000..e000d461c96188c26fe081920ba332593e5b60ca GIT binary patch literal 77 zcmZ?wbhEHb6k!lyn83i`>+8$Fz@Ye(g^_`QkwFK@28xR?Ffgg~^shYqmVYseNeI`y fv!S2m6KACKPM+Zyy|O9RI8W2_`nTTOtPIuwq8S!> literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/bold_tw.gif b/jscripts/tiny_mce/themes/advanced/images/bold_tw.gif new file mode 100644 index 0000000000000000000000000000000000000000..82085432c622fb9b195d45480ce0c00f80d24027 GIT binary patch literal 207 zcmV;=05JbYNk%w1VH5xq0J9DNySuyH-QDi)?jj;0%*@PHRaKdpnGq2YcXxM0L_~;) zh%+-YW@csp00960{{R30A^8LW000gEEC2ui02BZe000Dh(8)=wy*N7}G;WM{HHkzh zs6t%9fi%d0HcQepm#{3&(I_#A0+$;m0FJ}}WxKp?w}cH!tRNB$k|H1#RxPhVL6BGg z09nkC_M1X4*#RtJD4)}o#(?mXbR9t%Fa-%dPzMPG0V6gC3@He52a9TEFU_>xB^?a&6>B~^ R#bfrS$(b43?=Ue~0{~-MC*lAA literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/bullist.gif b/jscripts/tiny_mce/themes/advanced/images/bullist.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e19467c70e337bbfb2a3fe3eff1bc3acab0eaec GIT binary patch literal 108 zcmZ?wbhEHb6k!ly*u>1h#Kfdz)l@%W&!*iMf|{-?85Jc}En;9`Q2fcl$iTqPpaWzB zRf;e$FdJ6vy7SNAl;>@M#YT=zObHxz&I%bBUa^s_ M6r5P1!pL9^0IPo@`~Uy| literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/button_menu.gif b/jscripts/tiny_mce/themes/advanced/images/button_menu.gif new file mode 100644 index 0000000000000000000000000000000000000000..c3d8fa23117f9a5630277071a6e07cd04264173f GIT binary patch literal 57 zcmZ?wbhEHbjEB<5wG8q|kKzxu41Cu~c|H{*E`Gsc$hp{fYx2K(n G!5RQ}Dh{In literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/buttons.gif b/jscripts/tiny_mce/themes/advanced/images/buttons.gif new file mode 100644 index 0000000000000000000000000000000000000000..6196350de88f382e73bec4906572229b66c5c548 GIT binary patch literal 8399 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

    XfgfVbD&|WP0QGK& z9Z|f5W%%?Hur^Od>%#^!)l-z?kHW5HdB)AI5@fZ^OQAr>0R2y9z~tjBb1l%b4?VQG zg6z~conB|0OdNa&?GGm-91rCNxQnB5V>Ox)x>=2mC*KK;d-q0uV)pyR;NTIW9gyJg zhDn%)J}f{VFGzz&P;CG#5TTVE`TaiqRupMv0Jzig62W=3yK+^vG0H{CNy(W0w=q0s z{Nl=SC?d&hKWt6IytTqub75B$4p$^8B{r&@UsG1Nv#)K&SeFeX_=`6PUl^fUDG6kJ<^sfpEqRU#>~VQRBhVkT7RZ$1 z%bOnLD0%N=*P!=BK0(U&2!|Xb2P0`nBnLS1zjpltCD9hxT4aX`rvqV4xuLjt5iTA; zH7&wAitNbeP7yQ`*emXj^?UyB>YhgJx*~UhdBQvQl>VAKvDeZ`ZD~U$-Z-MU>Fbo~ z{&LqrI3kFB-v0r4kKdDJvJUUZpkN?w)CBCmd+Ib%7YMoC6if*;Fz`CZVRyw+8$*Xj zhtEH6R^of~M8jGyTOtBZ+hmW$ZS686=zO0ylG$&lp{)Ghb*H-}!D*{7tAxefE$N;9L7= z)??Wtic`F)b5%0!j+*LVhwHynmSYB}O8W7dZA6oOMr z3uUZY-u+xAY56mrhnkXrX;gn6V@&XNpK9sH8~Vk&6SaCl%+kXmdEU`Q&ZKvkC>hZ< z6!jWo*3^FnG&#gQk-2Ky`j}Kr`a|fKIk+`00;9L4DuVu4#YBWL=HmBo`4n{nrI?T9$9H1f z`F)M)gh}0K{Uo!Ii7X?dd6Pm8_wM>UbxrBSvn4^MG=U~wUcDT*b0a&ni`(-pGm1-* zXPR@5V2Wowaa3Jc{n3=Ld2*}eZ}*P?c346w8^s{y8=nM!?qWF5 zsBgTm%1j0^-(R@#50hbQLrtIt&C>Nggz$$0A2DZANx>Bs;6F1UV! z<22p(W2V2-)2~{j{xoWP;g`JLlnkFwr=s|4^O?I(=^yiqy}ydxfPQbxpuzMUHEYY0 z@swNk;o2_K8yfxtQGR0hG=I|{0 zg|g;Qto$rKZaCH455O6rd`!-GMXZHfb#NSVtu$ZzYxpnV3fI$U>52|?-j2SBCRpg* zWorqvn}4_|?6r^pNv0T!FU`f*7%6tqLOwfwupc(#;+K(bl8%KvU+YXsNjEW~fEGnq zzs&=&<(@kYN^b(AvUJRRpUz47h?X+%mQ72osd8kOyMIyp**D+J1_v|OaVbvrBrmv( z#(pH)c?kq|?sxAf+md5uP^%1-YV}fBj`p&L^-T&Bd99wyt)6O~?v%ZWVJwgVR;$My za5@}Z#vKi%_Lsot5`OExNylF9K;#ZPx=9)g`K6FX9!|G}VF{S5NijYSL45oxvnC!Wqq!0(9Dsj_cJLoo)^}zcu%DM$7k&8Ug_j=>8$? zqHk5py~o6Ki*zzplxA@2pwH3OcU9HpgKzNAvf+`bl|8>Uf$NMg4_-Y)R?d@22?|$W zWWd0keN(-fp%n1lDm1=nrqLz|9mxq`5TA~VULhwVJWa-;!o!8_D_kn{Fl>>-LEZht z??O;bnxJ!4ZfYH7BHiyfeAaGF6?M0DO=GiqMv!L}l`3>MACAReF2c9GxL4%9lM!e* zPZMRsM7q|^ti(2Vl8Ts5ZI%E>ZMYc4v8esCfm!Q|JPJZNgBm2qH?7Z&gk~;%1C9)Y ze3*O6OyQBdw@Dkvk1M|R=Z+mx)qZYZvaio?(EgbEnJP^I4a4}hPQR~EveFwqO^aXI zKfb9eDwqbzcVli^f;u}kxH3-0=RDS}N+U`4eobs}KbpTm`*DYPMcAv+*XfV%Q2F+` zO3Sv)f+qzJxbd(aK{O;q?t3Mp^FuV74U*1eI`*kV)rD=7I?KQCk-d3ZU zUW~4t&u(>~c3fo-+k>%(uA6jbE8V{1C*hgdSVvEjtm^dA| zzkP9L^?m-5qU~fStX460Fd410Kvy1_HPFoj=lMM X^3c@}+y6QC;n>@S#Y1)o46OP;pSlB8 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/cancel_button_bg.gif b/jscripts/tiny_mce/themes/advanced/images/cancel_button_bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b4aeefcbbba8ed33383d99e3ad38a2b9683044e GIT binary patch literal 677 zcmV;W0$Tk?Nk%w1VOjtc0K@)fLs#+_}=< z+2GjQ)C|ia%M}g|2-*$|4jAv++6)X8?f3NB2<-a^7%Bu**N)yjcm?$#=+|zcKYj)I zIjF!OVTE%a3KYO_;R1$_A3cH`Nit-~lPFRDiUhfmW6G2Q3W(6yv1UzC}*s)i?z8nAt58I(vAO9Tu2JqX_n^*5Vy?OEB-=jZ2zyA2} z=ksr%;9UfV@9G68;D7`cXyAbe9{8UkfB!Y;;DZoGDB*+@R%juG3|^?=h8%WSVGAIJ LDB_4Bh5!IN$Y@?j literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/charmap.gif b/jscripts/tiny_mce/themes/advanced/images/charmap.gif new file mode 100644 index 0000000000000000000000000000000000000000..3cdc4ac9134258a9a1a83b6afd5c7055bebbcbf9 GIT binary patch literal 245 zcmVJ7UM8qsvB8x<;Dr zSg7=Nn%Hi7)&KwiA^8LW0018VEC2ui02BZe000GY;3tk`X`X1RuI#x~)x&X5LaDKL zBuP+gmjjC8P!LL;h9PruTqdW2VQ_jhm?kOJM8RlI0sywOkQfrBgdlP}Q6Q310n$b# v>y*a!grF>@BLxiv8314c77P(14Hy;xh9(V(3=AWV77>droSmMZC?Nnljc8>f literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/cleanup.gif b/jscripts/tiny_mce/themes/advanced/images/cleanup.gif new file mode 100644 index 0000000000000000000000000000000000000000..16491f6cfcf3e1123f08352c895f8010f791c469 GIT binary patch literal 256 zcmV+b0ssC-Nk%w1VH5xq0MrlwMm#2xdP3^ge4>(aXJcF2&#c0@g7@*TXJyAiI+Bx- z!osRT%E{EUw6tz+enw7G^6K)^$d=yS-J+Ue{{6y&f`-z%VxXFs!L^y{+>(HFVv>^L zOipLAk}~7mu>b%7A^8LW0018VEC2ui02BZe000Gj;3tk`X`X1RuBfCa3_CK)hB&I! z?6jS5DV>BNxhN371`1>FG$6!^gQF}JB8CHn;<-pFjYq{)@NCbANaf;iJjfX><#5Od z41@~dZSq94bpiqw6C4j!WCnJE77HB!h$k2WjE(>oEEpP%kC-wT1Ob;aBcK|jsHv(a GApkq`d~Wvu literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/close.gif b/jscripts/tiny_mce/themes/advanced/images/close.gif new file mode 100644 index 0000000000000000000000000000000000000000..679ca2aa47644793fc7096142233af6d18cfc9ac GIT binary patch literal 102 zcmZ?wbhEHb6ky1B=+vSZwA88iSX|!)1|*>PlZBCifrUW_BnDE;z-;WX>&`!e zQ=Y5$?qJ;7tnMTs#JpKBeE~;8w4TG9b-KTcEEZl{H}m}(h0KD}68$HZ6lMA_FjxZs D>4hO7 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/color.gif b/jscripts/tiny_mce/themes/advanced/images/color.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ecd5743b64464068d80fe0c306375bc0f36a3f9 GIT binary patch literal 125 zcmZ?wbhEHb6k!lxSi}GV|NsBLa^b|RS+g7*9Dr=F7=z+Z7DfgJRt6mq7o?Vf*~wzp z9Utctp08V)UYxZ)DHzz35?MDRW1X_prZuwmzXRH=pKYwZWOr?gDO&r}E WQznT77&6ApIg)ei@KZGg25SKIc`;M~ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/copy.gif b/jscripts/tiny_mce/themes/advanced/images/copy.gif new file mode 100644 index 0000000000000000000000000000000000000000..dc146865c5952aa48b82fc54677db621322465b9 GIT binary patch literal 263 zcmV+i0r>t$Nk%w1VH5xq0MrKnGD>2SrMb<|)0(p4GF`Q=%=coD-uwLia-!n0ztXb8 z>SB7D(cbRC&Eb``_99D}N_N7cveI&z@*+Zl!qxWT>hhwp!g8A0g0kXLg3_YG@}jE3 za+1=5r|rPV)BpegA^8LW0018VEC2ui02BZe000Gq;3tk`X`X1Rt}Ll2NgN5Sa@>ct z&})Jp0ne^?pcEK^!b{_DFiw_VrSR(z8m7&Gi9u+7k^;d~3fw9c#^BIo7zl(%`OrmN z*0>5KA}5&{3=It(2OS6o85w+K0F8|tI1CgD7JVrO2Z)Io8#2N9wc8v&jt5O5Ex Ns}n7+u(2f}06RB$bN>JU literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/custom_1.gif b/jscripts/tiny_mce/themes/advanced/images/custom_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..4cbccdadf60dfccaf532fd56a567c47b131f80a8 GIT binary patch literal 76 zcmZ?wbhEHb6k!lySjfQ8(7@2Zz`(%B2qYALvH&S21|1+9C@TVF%TDQEdHOB?;yGKQ b7!RD8^=Ve+T!9>q%7xRawyuk2V6X-NXyp|c literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/cut.gif b/jscripts/tiny_mce/themes/advanced/images/cut.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e9a70b6e297cfa0744d581c42868b35b0a7a204 GIT binary patch literal 187 zcmV;s07U;sNk%w1VH5xq0K*3W0z;>dm7`y6hp@H0TzRe{O`Us&m(k6|m7uZ$S-vl0 zv81W9YJ#%8z`z1cvH$=8A^8LW000jFEC2ui02BZe000DN@X1N5y*RH`2hYzS9F#DC z&mja;FrrU@G*7b_@UslKvE>g#z<@B2axx(c_%I2W2u49rARu4_N5ZktItZW!fI&z+ p0E8?Jvj7|jibsJV{#*tC#rVODXii?U706WgML@)pV literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/forecolor.gif b/jscripts/tiny_mce/themes/advanced/images/forecolor.gif new file mode 100644 index 0000000000000000000000000000000000000000..d5e381425fe0f58a146d8d68141686aa517c3391 GIT binary patch literal 272 zcmV+r0q_1tNk%w1VH5xq0MrHmVgdq!0s^>+A(FDP-mWX|+>7q%%Knm4;nJw;$6E00 zq5^UP@!4qj@34~ELeii*Vv@1~0%EdyB3-fv0%8IZO0wc20s(+4wP$kLBD|J7 zDvko>y+!`AasU7TA^8LW0018VEC2ui02BZe000Gz;3tk`X`X1Rsz$-QOtXFlqcphk z8fksw4TYkR;GGIL&%qNEW(vkqtZ}da8Ux6n@PL|Z4NSmNfK(!kj37En{Dy_fq91iUI{G1P_oC3mgd#5-J3RFrN~4DUKZp W2^|}!GYA_35_SkPxVgGBApkpwVP<>) literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/help.gif b/jscripts/tiny_mce/themes/advanced/images/help.gif new file mode 100644 index 0000000000000000000000000000000000000000..51a1ee42073402ce787b60d151219ef7ce367615 GIT binary patch literal 295 zcmV+?0oeXWNk%w1VH5xq0Mrfu6i>3FyW3udp6K!Ub&;kbTH+f8tqUysbN$lQ^w;v!hW z!pq(wXY{hj_W%F@A^8LW0018VEC2ui02BZe000G~;3tk`X`X1Ru1KI+h83(|W>rq^ zR7RF&f!#zRnN$X{6T;$HBo?`WVllvQOo2)zp>TL49!J8HVVDe#NumhpbS0R9z=Ux~ zAoz}Cx7j!jCJ$n5dR`j5{)+~RJ$w}+Xh M?UBc{1V#pH0B+0Sa+3=zxSlW-zei2b}a=z4u4c+1=|M6#AZUG%OY1V6F^WxI(BULHv>RQKq-j zt7NjCDogO`gJ_lySi|J(sDATCUOUsGgu4xU7+ORVU(d1bXgSWKeMyMJ iI-K#xts6OY)eP+JZLJ;d&BZ;{lKm4VP7)Gium%8};6e`o literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/indent.gif b/jscripts/tiny_mce/themes/advanced/images/indent.gif new file mode 100644 index 0000000000000000000000000000000000000000..acd315bb16c47c2f1679bdf440b511497f9d633b GIT binary patch literal 112 zcmV-$0FVDiNk%w1VH5xq0I~!C0s;a%TAPZd(ouxs%G2Opda$m#$^ZZWA^8LW000L7 zEC2ui02BZe0009uc)HyFFv__Ay%A`;yT;Qn5S6zzgeZ{axrjp`gM=IyhY1x0spz0f SC)ctBGpEmS`C~dK2>?4to+ugs literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/insert_button_bg.gif b/jscripts/tiny_mce/themes/advanced/images/insert_button_bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..69c131ce2992df593b0f4299bca3b823819bfafa GIT binary patch literal 703 zcmV;w0zmyoNk%w1VOjtc0K@s=_xSkz{{8#>`}z9$_xShz{{8*^{QUg;`}_L%`1kks_WJqx{r&y?{QUd-`}+F& z`T6KpoHUDH@N+q;kn@I-kkc5K66DuS_Z6KrDKY7RyI09*;fWvU%-gtB;niQErU0 zm*isj!{r@5Xn}%*gn@BrfQ5mHij9PfUyfe}2OBRWtq`cJq8+WUnh>9$sjjjey0H)tuAaQc9f1|Fwgs1#2OS*J)Y8+b*w@wD)!H1| z*x};Wufcfgl`*#qaLw)i7 z zoH>KW+zFGYhMgLD9zY-h0fGes24t9!p{j-j6DCB>;GpUR4OAyM=(>QbRjLa#3_uGO z>HrN@Gf0g)AZ^&Gar5dmTXybOr%e$Eh>L-6)xsGhB#tWqL*v4b9V>pE7=z`>iZc|> ztl2VQ$DKVp7OfcZVa0#}IK>dbvVaB+6ueeo*>VKfu`$SQfI)y|-o6|7?%lifYXPr$ z!>-Mob%f^%8bpZhntE^Fvsq(UkUGIr1<%7n7f-%?_yFe9t6xtZ{rU9?5{QT&pnm=7 z5zyOrUtfX!=lcb?pMU?kmmhlI6)505fd}4aAAtcXfPj1e&?n%97-p#9h8%WyVSMw& lC*p`CmT2OMD5j|5iYbQ3;)^iGD5Huk)M(?4INlfn06R=DYYYGY literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/italic.gif b/jscripts/tiny_mce/themes/advanced/images/italic.gif new file mode 100644 index 0000000000000000000000000000000000000000..8bb330bd0bbf61fdb5ce86388ecbeae16465bc17 GIT binary patch literal 79 zcmZ?wbhEHb6k!lySjfl#1T8Hs)z#IEjEssuS%3n}3_2iDkURsE!kqq_+b+wcJF`jEB<5wG8q|kK!gZ`FaraVVo(3d({K5uXIu`5a6TsH a;#+zDYvZ#Uy^qv#6FHB6^105+U=0A})fi&{ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/italic_ru.gif b/jscripts/tiny_mce/themes/advanced/images/italic_ru.gif new file mode 100644 index 0000000000000000000000000000000000000000..a2bb69a725e823b8e671f0640098c4fa80939b2f GIT binary patch literal 78 zcmZ?wbhEHb6k!lyn83i`>+8$Fz@Ye(g^_`QkwFK@28xR?Ffgh1^shYqmVdFy0;Z@$ hzTc5`u943p7fMVz+n$-ed(#4|tKWK`2QxBQ0|3J`7vul{ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/italic_tw.gif b/jscripts/tiny_mce/themes/advanced/images/italic_tw.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f6eeaa2b2111e9995584a66644dacd01ebf33e4 GIT binary patch literal 274 zcmZ?wbhEHb6k!lyI3mCxFE7u}&!3;4KY#xG^XJd|`}?n7zdk-bUSD7T{rmU(_wT=d z|9*dee|>$uy}dmH1H=FS|A8d&K=CIFBLjl~gAPaw$W8{sAA<=#Bx}ZV~!Miqw UgwLW=vT`Q(s%`JMrCAxQ0qpY;qW}N^ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/justifyright.gif b/jscripts/tiny_mce/themes/advanced/images/justifyright.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4cea971489cf2526bd45b5044e6d3435741f830 GIT binary patch literal 70 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz$Dw#zw-23e&HEgu66Wp{rQ%^ UM8cwz_vB2umD}FE7Gtmm0QJ%n+yDRo literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/link.gif b/jscripts/tiny_mce/themes/advanced/images/link.gif new file mode 100644 index 0000000000000000000000000000000000000000..1accf426260eabe2f3113bab599ee26991407576 GIT binary patch literal 175 zcmV;g08sx&Nk%w1VH5xq0K)|U7cWe7jH1WO&q7mgq_fHP{QhovkA|48(BJg3yUmlM zwNqn#%+lYo$Ksc#!~g&QA^8LW000jFEC2ui02BZe000DB@X1N5y*TU5yZ;lDIEo`Y zBB>;nh!jN=5Xl<{ELAJRLi`OvPeCwL9EE`(0V^O727v-Gs1O*6fC9h;473EtqJph4 d4hzK!aZXzV=z)RofG^|jEB<5wG8q|kKzxu40~1#dfBJzLcf(v(F)&yI02q@C APXGV_ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/newdocument.gif b/jscripts/tiny_mce/themes/advanced/images/newdocument.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9d293842354bade04fc9607e55763fd0ea9efec GIT binary patch literal 170 zcmV;b09F4-Nk%w1VH5xq0K*0VGD>2SqO#J~;-aN z((?HJ(%tf+t-`|0-T(jqA^8LW000jFEC2ui02BZe000D6@X1N5y*TTfdRNNeY>8o> z4KQZPc^-wzx@G{}*+AEJzAuCxrm-U+gcqV~fj9y(hozB$v;>w-LA7!<0TB$xmeMs$ Y1>z^>8fd%Q>Wl40uW#=7ygmW|J7pwMu>b%7 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/numlist.gif b/jscripts/tiny_mce/themes/advanced/images/numlist.gif new file mode 100644 index 0000000000000000000000000000000000000000..a2683522f4fbca7c59cdce63c7ac20211e006f49 GIT binary patch literal 111 zcmV-#0FeJjNk%w1VH5xq0I~%D0s;a&S(>c5(MoQ;hMLOK*yvJx*8l(jA^8LW000L7 zEC2ui02BZe0009tc)HyFFv>|=F}0bofd8LU3_`XHL13_jZKS5jZLdL qklCGA#V($?Eohv$~E=l}o!A^8LW000L7 zEC2ui02BZe0009sc)HyFFv__Ay%A`;yT+FxC|=hX#Xykdw-jk0V}u~DM=9B?30|g_ Q>jw#1h)7a$IY|HjJN(2Zp#T5? literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/paste.gif b/jscripts/tiny_mce/themes/advanced/images/paste.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b45000a0140b8f9e04c933154c915f4322d7533 GIT binary patch literal 286 zcmV+(0pb2fNk%w1VH5xq0Mr}+LNg;3tk`X`X1Rt{>*It?NM0VL6(E zVp#@75XZ#A7$__!UdC~NbOwn>K!P;!f|hLd!H_&o5ubBI-bl_Ku=A;)xD5t@Ks^{# z+MN7ifk2od9Tj&Q6dVnQ7YGCeB^rSW3L6F-dlv)<1qEp%4jqtY1`CG`6a;PnBn}E^ kX95eB1O$f^sHqkY9smLtZoQ`}2mr#v!!X9j$Rr^EJMbBDr~m)} literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/redo.gif b/jscripts/tiny_mce/themes/advanced/images/redo.gif new file mode 100644 index 0000000000000000000000000000000000000000..3af90697f0b74d0b6b07b585614a6dc67ff87f1d GIT binary patch literal 169 zcmV;a09OA;Nk%w1VH5xq0K*FaEl-kjqwqa)*O$8QUUsNeit)O{)H!9gj;!cSf8=SD z@4U+CH(H=qeZQ%{>Hq)$A^8LW000jFEC2ui02BZe000D5@X1N5y*TU5@mkK(Nsfb@ zh`52taWqPx3Yb$cP21Nib_4)BqDn)z literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/removeformat.gif b/jscripts/tiny_mce/themes/advanced/images/removeformat.gif new file mode 100644 index 0000000000000000000000000000000000000000..0fa3cb79734b6ddadaded7a30dbbab4cdf7ee11a GIT binary patch literal 168 zcmV;Z09XG3d^!9RvqL!@E;^*>mjX*~6o0ZXGB7YP=m6P3N(4x7O<|q5`t188u7e^B F)&TE55J&(3 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/spacer.gif b/jscripts/tiny_mce/themes/advanced/images/spacer.gif new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/statusbar_resize.gif b/jscripts/tiny_mce/themes/advanced/images/statusbar_resize.gif new file mode 100644 index 0000000000000000000000000000000000000000..af89d803f8f0eeb965d9443473d5be009641cacf GIT binary patch literal 79 zcmZ?wbhEHbX*~6o0ZXGB7YP=m6OaAbAERg(>|jPrv0~%%#ha d_MXKm)lqT2YSDtso)?w9Z@gz^T^C`n1_07v8bkm9 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/strikethrough.gif b/jscripts/tiny_mce/themes/advanced/images/strikethrough.gif new file mode 100644 index 0000000000000000000000000000000000000000..3264635918e2237257811a745f3a7e31b4369432 GIT binary patch literal 83 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*jFzw-23{>5`RB^ury^=8j) h^eUTr??>*V8C&%_D;C}?e9svC>)iK$`!yICtN}048)X0h literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/sub.gif b/jscripts/tiny_mce/themes/advanced/images/sub.gif new file mode 100644 index 0000000000000000000000000000000000000000..4d7ce30ff9147412d24dafd5ebeef67479edfa58 GIT binary patch literal 148 zcmV;F0Biq8Nk%w1VH5xq0K*9Y0|NsxQi79`kcOJVNJU7aqM%ZC%4un5GBq-gVG=Kt8X#(^7ugLSm;_S64DJ zGIDZqhMK}68X{71!TeAXEkg0%mX10Jt7ez-i0vdcUU#06Sc5 BF?Rp} literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/table.gif b/jscripts/tiny_mce/themes/advanced/images/table.gif new file mode 100644 index 0000000000000000000000000000000000000000..2911830c3cd9cfb588114b40205ac316ded37716 GIT binary patch literal 287 zcmV+)0pR{eNk%w1VH5xq0Mr-&4-XG=a&q$Gl8~UV)yls!N@Iej^5Wv+vYk|?#{7~x zGT6sxlB&Y;^7(>_g2~h3+KzIM(yqDEw{v33+VWCfYLcq*{{H^LvU=X>{iCqL z#mds6qN19*_y7O^A^8LW0018VEC2ui02BZe000G?;3tk`X`X1B5)?(KB@00mJQCSN zE9B*0hM>X2$p{t>MWmN#dOXbs;)npedOjg>x~OhU6O8zQIdH3l0a%P7cOqTD;bAdt z9{7i*gQ;>J6LlpUY-9lzat#_A1ttt^9EFODjU@vQ92^px5)&Jr43#7UY!VHM8yXcA lp(dna6O$XO2?L@dmz|!U8w?Bswyp)k#Kpum$jK!k06V*Ud_@2N literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/table_delete_col.gif b/jscripts/tiny_mce/themes/advanced/images/table_delete_col.gif new file mode 100644 index 0000000000000000000000000000000000000000..91f53af02aacbe33b04f782efb164560887d3bfe GIT binary patch literal 163 zcmV;U09^k^Nk%w1VH5xq0K*Fa0s;azZ{ony{xV8pTyKn*qO$Jn>V2Z^b%c^$j^>)S z^85Syjgq3Ovcf`IasU7TA^8LW000jFEC2ui02BZe000C~@X1N5y*TU5Yg=F;j03m~ z*9S7AQZ5E+6`;WiE*xJ4;S4OrVLD zq^HC5lAo_~pYs0x{r~^~A^8LW000jFEC2ui02BZe000D7@X1N5y*TU5>G|Nna879^ z3V9~RxRnWO7y-xJIHT+-78`=#Vo@mc9)Jo^FeDZl1O#9@r7(*PC}E43Bq@Wics$6M ZU5s;*CQxUf_d3_{csz*D~813(lGjTD@2z{n9^mxAJO7)Ys5OF}UnY`dU@qbmky T#N$E3kp`{PZ$%b~i~s;TfG0;) literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/table_insert_row_after.gif b/jscripts/tiny_mce/themes/advanced/images/table_insert_row_after.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9c14466138007454958671320914d9a7d8a6db5 GIT binary patch literal 163 zcmV;U09^k^Nk%w1VH5xq0K*Od0s;b3hwZ}J{xV8pU2lbto3eVM^5XCQa(@5FN<(eWPqQV3Ig1XGua#QiUNM~QhRb*u41x>)iK!0SpY*0G3P}*Z=?k literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/underline_es.gif b/jscripts/tiny_mce/themes/advanced/images/underline_es.gif new file mode 100644 index 0000000000000000000000000000000000000000..551d9148d302c5f58b3b20d2c6a642450889a7ef GIT binary patch literal 79 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*mGzw-23e(4zsAr}6}u9vvi dPIT?{=$xyxd19dGtWDy_KKDM~70ke34FHj_7K8u* literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/underline_fr.gif b/jscripts/tiny_mce/themes/advanced/images/underline_fr.gif new file mode 100644 index 0000000000000000000000000000000000000000..551d9148d302c5f58b3b20d2c6a642450889a7ef GIT binary patch literal 79 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*mGzw-23e(4zsAr}6}u9vvi dPIT?{=$xyxd19dGtWDy_KKDM~70ke34FHj_7K8u* literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/underline_ru.gif b/jscripts/tiny_mce/themes/advanced/images/underline_ru.gif new file mode 100644 index 0000000000000000000000000000000000000000..b78e2a498fb9406ef378d7c543756db552d87cba GIT binary patch literal 77 zcmZ?wbhEHb6k!lyn83i`>+8$Fz@Ye(g^_`QkwFK@28xR?Ffgg~^shYqmVYseNK2Ny ft@O9qnGc`Wq;$3l?I>E+zBOCw^tWDnRt9STq^=gR literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/underline_tw.gif b/jscripts/tiny_mce/themes/advanced/images/underline_tw.gif new file mode 100644 index 0000000000000000000000000000000000000000..b715390484c95c3d3311012dd541e2b46a2f4a78 GIT binary patch literal 245 zcmZ?wbhEHb6k!lyI3mihYSpUH(9n19-U$i{mY0{GIdf*_%$df<#%XD3=g*&4Qc`;V z{=J%-nvai9ety1-i;KOzeMd*f{{8!R@7~S8!0`Y7e;|nmDE?$&WMB|w&;h9d*~!3K zl%U#|k~uHKi*I6=T}Ytl*F$OTQv9tdV6_n`zCQJ Ua|%tL!OK2l4tMK(4MhfP08!6P_5c6? literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/undo.gif b/jscripts/tiny_mce/themes/advanced/images/undo.gif new file mode 100644 index 0000000000000000000000000000000000000000..520796d69defa118055d191eec33cc67f7551710 GIT binary patch literal 175 zcmV;g08sx&Nk%w1VH5xq0K*FaI$fTWtk6Go+_}Zyr?=K#e#T#ZwX4DHa-Hu#XSz{; z-OtzKVv^{Tv+z=g@&Et;A^8LW000jFEC2ui02BZe000DB@X1N5y*TU5^*Z3vJx60U zVAe<_A|#2DUTDd{g#kDRhWrRvKmt&#E(`|)VHiweM~gz>Krlp-Snncu!2ps)!r>e} d2m*##Qg9H=3xcDt9yk2euEN*a>RflBvc=VMi?aIs{*Scsi=V=*#PZ+j z{;astf|jzv(Biz+@&Et;A^8LW000jFEC2ui02BZe000Dg@X1N5y*TU5Y5N}`E=ypZ zo?#$r>naM6uI>xVQ-d%k;xmkbaDbB#Q~{NMWoQ&&iQ?mEND2guCgGWgQWh%TE;t;R zrC?g~sYnb2jsrT}bhh1bIVEWT3JYd|XL~9PPy-4A2LldqQhZ!)ii>%V0GF7VnjM^- Io)i%PJHdZeUH||9 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/xp/tab_bg.gif b/jscripts/tiny_mce/themes/advanced/images/xp/tab_bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..897a01f2baea1ae5f61f642f508c27f356b35260 GIT binary patch literal 694 zcmV;n0!jTxNk%w1VUPh50K@Fo9O z^8Eb#`uh6u@89F;?DO;Q@$v2O@aq2l{`U6r`uh3s@ay>a_VV)W^z`ua^X~Tc^Y!)d z@$u}Dr?mh7{{R30A^8LV00000EC2ui0FVI^000I5U_%&PX`X1Ru59bRa4gSsZQppV z?|kpu1Vq9^EE3jl(HgoTEOh>41ejE#aB*8r|OC z;Njxq>Ry;kxw7TUm@{kM z%(=7Y&!9t#9!C>oFt6t5TbcX>0AjqCgySDAyxO3~?&AYen-@t=y!-i+yC*K5ef#nAwj*aBzkGe++J%)n_rHGi z_~ZNgpFh5P|L(<$r}sa8c>VI(gJ+NLe*5z2!~0iHAKiNQ_Sx$f58u3gI&t|H25dm_ zCkt3u2SkGGWMEZW;Gomm$lxyIF~cPBOsnm+7=M9lPo_41opD-0LNQ51q(`+gvyFkl F8UVy~RVDxc literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/advanced/images/xp/tab_sel_bg.gif b/jscripts/tiny_mce/themes/advanced/images/xp/tab_sel_bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..9dc8abe1a4f20643367ea9548fa2d93be7f0fb0b GIT binary patch literal 428 zcmV;d0aN}*Nk%w1VJrbC0J8u9k(-?1#*X>8IO~@#-Jw(NpE2?8-}$*X|HwS%i!A@g zJpcdy{QUj^0000000000A^8LV00000EC2ui04xD0000F4(1ekyy*TU5yZ>M)j$~<` zXsV(?aUgIk&vb3yc&_h!@BhG{a7Zi;2?B+3$!t2G(5Q4uty-_xtai)odcR%(V@xia z&uH^v&2GEj@VIuMl4*~XmY0~BntqX! zo@AS$qNAjxdYzx1rmL*2u8ydwlCQM2wzqGwvV^$3zQ3WmyOhAi#>ard!)M6N&d+hm z%Vp5j*2mJ*W7pi>w%OX=;^U>@)8y#sm*(2-?(gvN^7Hid)9m*7`uqI-{{IZ{0USuM zpuvOl1R`9>u%W|(3Li?GNU@@fG5cC(oZi'; + html += '' + tinyMCE.getLang('lang_author') + ''; + html += '' + tinyMCE.getLang('lang_version') + ''; + html += ''; + html += ''; + html += ''; + + for (var i=0; i' + info.longname + ''; + else + html += '' + info.longname + ''; + + if (info.authorurl != null && info.authorurl != '') + html += '' + info.author + ''; + else + html += '' + info.author + ''; + + html += '' + info.version + ''; + html += ''; + } + + html += ''; + html += ''; + + tcont.innerHTML = html; +} + +function getPluginInfo(name) { + if (tinyMCE.plugins[name].getInfo) + return tinyMCE.plugins[name].getInfo(); + + return { + longname : name, + authorurl : '', + infourl : '', + author : '--', + version : '--' + }; +} + +function insertHelpIFrame() { + var html = ''; + + document.getElementById('iframecontainer').innerHTML = html; + + html = ''; + html += 'Got Moxie? '; + html += 'Hosted By Sourceforge '; + html += 'Also on freshmeat '; + + document.getElementById('buttoncontainer').innerHTML = html; +} diff --git a/jscripts/tiny_mce/themes/advanced/jscripts/anchor.js b/jscripts/tiny_mce/themes/advanced/jscripts/anchor.js new file mode 100644 index 000000000..e7c1c62c5 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/jscripts/anchor.js @@ -0,0 +1,74 @@ +var action, element; + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); + var anchor = tinyMCE.getParentElement(inst.getFocusElement(), "a", "name"); + var img = inst.getFocusElement(); + action = 'insert'; + + if (anchor != null) { + element = anchor; + action = "update"; + } + + if (tinyMCE.getAttrib(img, "class") == "mceItemAnchor") { + element = img; + action = "update"; + } + + if (action == "update") + document.forms[0].anchorName.value = element.nodeName == "IMG" ? element.getAttribute("title") : element.getAttribute("name"); + + document.forms[0].insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); +} + +function insertAnchor() { + var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); + var name = document.forms[0].anchorName.value, e; + + tinyMCEPopup.execCommand("mceBeginUndoLevel"); + + if (action == "update") { + if (element.nodeName == "IMG") + element.setAttribute("title", name); + else + element.setAttribute("name", name); + } else { + var rng = inst.getRng(); + + if (rng.collapse) + rng.collapse(false); + + name = name.replace(/&/g, '&'); + name = name.replace(/\"/g, '"'); + name = name.replace(//g, '>'); + + // Fix for bug #1447335 + if (tinyMCE.isGecko) + html = ''; + else + html = ''; + + tinyMCEPopup.execCommand("mceInsertContent", false, html); + + // Fix for bug #1447335 force cursor after the anchor element + if (tinyMCE.isGecko) { + e = inst.getDoc().getElementById('mceNewAnchor'); + + if (e) { + inst.selection.selectNode(e, true, false, false); + e.removeAttribute('id'); + } + } + + tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst); + } + + tinyMCEPopup.execCommand("mceEndUndoLevel"); + + tinyMCE.triggerNodeChange(); + tinyMCEPopup.close(); +} diff --git a/jscripts/tiny_mce/themes/advanced/jscripts/charmap.js b/jscripts/tiny_mce/themes/advanced/jscripts/charmap.js new file mode 100644 index 000000000..eaa6a94b6 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/jscripts/charmap.js @@ -0,0 +1,326 @@ +function init() { + tinyMCEPopup.resizeToInnerSize(); +} + +var charmap = new Array(); + +// for mor details please see w3c.org +// now here is the complete list ;) + +charmap = [ + [' ', ' ', true, 'no-break space'], + ['&', '&', true, 'ampersand'], + ['"', '"', true, 'quotation mark'], +// finance + ['¢', '¢', true, 'cent sign'], + ['€', '€', true, 'euro sign'], + ['£', '£', true, 'pound sign'], + ['¥', '¥', true, 'yen sign'], +// signs + ['©', '©', true, 'copyright sign'], + ['®', '®', true, 'registered sign'], + ['™', '™', true, 'trade mark sign'], + ['‰', '‰', true, 'per mille sign'], + ['µ', 'µ', true, 'micro sign'], + ['·', '·', true, 'middle dot'], + ['•', '•', true, 'bullet'], + ['…', '…', true, 'three dot leader'], + ['′', '′', true, 'minutes / feet'], + ['″', '″', true, 'seconds / inches'], + ['§', '§', true, 'section sign'], + ['¶', '¶', true, 'paragraph sign'], + ['ß', 'ß', true, 'sharp s / ess-zed'], +// quotations + ['‹', '‹', true, 'single left-pointing angle quotation mark'], + ['›', '›', true, 'single right-pointing angle quotation mark'], + ['«', '«', true, 'left pointing guillemet'], + ['»', '»', true, 'right pointing guillemet'], + ['‘', '‘', true, 'left single quotation mark'], + ['’', '’', true, 'right single quotation mark'], + ['“', '“', true, 'left double quotation mark'], + ['”', '”', true, 'right double quotation mark'], + ['‚', '‚', true, 'single low-9 quotation mark'], + ['„', '„', true, 'double low-9 quotation mark'], + ['<', '<', true, 'less-than sign'], + ['>', '>', true, 'greater-than sign'], + ['≤', '≤', true, 'less-than or equal to'], + ['≥', '≥', true, 'greater-than or equal to'], + ['–', '–', true, 'en dash'], + ['—', '—', true, 'em dash'], + ['¯', '¯', true, 'macron'], + ['‾', '‾', true, 'overline'], + ['¤', '¤', true, 'currency sign'], + ['¦', '¦', true, 'broken bar'], + ['¨', '¨', true, 'diaeresis'], + ['¡', '¡', true, 'inverted exclamation mark'], + ['¿', '¿', true, 'turned question mark'], + ['ˆ', 'ˆ', true, 'circumflex accent'], + ['˜', '˜', true, 'small tilde'], + ['°', '°', true, 'degree sign'], + ['−', '−', true, 'minus sign'], + ['±', '±', true, 'plus-minus sign'], + ['÷', '÷', true, 'division sign'], + ['⁄', '⁄', true, 'fraction slash'], + ['×', '×', true, 'multiplication sign'], + ['¹', '¹', true, 'superscript one'], + ['²', '²', true, 'superscript two'], + ['³', '³', true, 'superscript three'], + ['¼', '¼', true, 'fraction one quarter'], + ['½', '½', true, 'fraction one half'], + ['¾', '¾', true, 'fraction three quarters'], +// math / logical + ['ƒ', 'ƒ', true, 'function / florin'], + ['∫', '∫', true, 'integral'], + ['∑', '∑', true, 'n-ary sumation'], + ['∞', '∞', true, 'infinity'], + ['√', '√', true, 'square root'], + ['∼', '∼', false,'similar to'], + ['≅', '≅', false,'approximately equal to'], + ['≈', '≈', true, 'almost equal to'], + ['≠', '≠', true, 'not equal to'], + ['≡', '≡', true, 'identical to'], + ['∈', '∈', false,'element of'], + ['∉', '∉', false,'not an element of'], + ['∋', '∋', false,'contains as member'], + ['∏', '∏', true, 'n-ary product'], + ['∧', '∧', false,'logical and'], + ['∨', '∨', false,'logical or'], + ['¬', '¬', true, 'not sign'], + ['∩', '∩', true, 'intersection'], + ['∪', '∪', false,'union'], + ['∂', '∂', true, 'partial differential'], + ['∀', '∀', false,'for all'], + ['∃', '∃', false,'there exists'], + ['∅', '∅', false,'diameter'], + ['∇', '∇', false,'backward difference'], + ['∗', '∗', false,'asterisk operator'], + ['∝', '∝', false,'proportional to'], + ['∠', '∠', false,'angle'], +// undefined + ['´', '´', true, 'acute accent'], + ['¸', '¸', true, 'cedilla'], + ['ª', 'ª', true, 'feminine ordinal indicator'], + ['º', 'º', true, 'masculine ordinal indicator'], + ['†', '†', true, 'dagger'], + ['‡', '‡', true, 'double dagger'], +// alphabetical special chars + ['À', 'À', true, 'A - grave'], + ['Á', 'Á', true, 'A - acute'], + ['Â', 'Â', true, 'A - circumflex'], + ['Ã', 'Ã', true, 'A - tilde'], + ['Ä', 'Ä', true, 'A - diaeresis'], + ['Å', 'Å', true, 'A - ring above'], + ['Æ', 'Æ', true, 'ligature AE'], + ['Ç', 'Ç', true, 'C - cedilla'], + ['È', 'È', true, 'E - grave'], + ['É', 'É', true, 'E - acute'], + ['Ê', 'Ê', true, 'E - circumflex'], + ['Ë', 'Ë', true, 'E - diaeresis'], + ['Ì', 'Ì', true, 'I - grave'], + ['Í', 'Í', true, 'I - acute'], + ['Î', 'Î', true, 'I - circumflex'], + ['Ï', 'Ï', true, 'I - diaeresis'], + ['Ð', 'Ð', true, 'ETH'], + ['Ñ', 'Ñ', true, 'N - tilde'], + ['Ò', 'Ò', true, 'O - grave'], + ['Ó', 'Ó', true, 'O - acute'], + ['Ô', 'Ô', true, 'O - circumflex'], + ['Õ', 'Õ', true, 'O - tilde'], + ['Ö', 'Ö', true, 'O - diaeresis'], + ['Ø', 'Ø', true, 'O - slash'], + ['Œ', 'Œ', true, 'ligature OE'], + ['Š', 'Š', true, 'S - caron'], + ['Ù', 'Ù', true, 'U - grave'], + ['Ú', 'Ú', true, 'U - acute'], + ['Û', 'Û', true, 'U - circumflex'], + ['Ü', 'Ü', true, 'U - diaeresis'], + ['Ý', 'Ý', true, 'Y - acute'], + ['Ÿ', 'Ÿ', true, 'Y - diaeresis'], + ['Þ', 'Þ', true, 'THORN'], + ['à', 'à', true, 'a - grave'], + ['á', 'á', true, 'a - acute'], + ['â', 'â', true, 'a - circumflex'], + ['ã', 'ã', true, 'a - tilde'], + ['ä', 'ä', true, 'a - diaeresis'], + ['å', 'å', true, 'a - ring above'], + ['æ', 'æ', true, 'ligature ae'], + ['ç', 'ç', true, 'c - cedilla'], + ['è', 'è', true, 'e - grave'], + ['é', 'é', true, 'e - acute'], + ['ê', 'ê', true, 'e - circumflex'], + ['ë', 'ë', true, 'e - diaeresis'], + ['ì', 'ì', true, 'i - grave'], + ['í', 'í', true, 'i - acute'], + ['î', 'î', true, 'i - circumflex'], + ['ï', 'ï', true, 'i - diaeresis'], + ['ð', 'ð', true, 'eth'], + ['ñ', 'ñ', true, 'n - tilde'], + ['ò', 'ò', true, 'o - grave'], + ['ó', 'ó', true, 'o - acute'], + ['ô', 'ô', true, 'o - circumflex'], + ['õ', 'õ', true, 'o - tilde'], + ['ö', 'ö', true, 'o - diaeresis'], + ['ø', 'ø', true, 'o slash'], + ['œ', 'œ', true, 'ligature oe'], + ['š', 'š', true, 's - caron'], + ['ù', 'ù', true, 'u - grave'], + ['ú', 'ú', true, 'u - acute'], + ['û', 'û', true, 'u - circumflex'], + ['ü', 'ü', true, 'u - diaeresis'], + ['ý', 'ý', true, 'y - acute'], + ['þ', 'þ', true, 'thorn'], + ['ÿ', 'ÿ', true, 'y - diaeresis'], + ['Α', 'Α', true, 'Alpha'], + ['Β', 'Β', true, 'Beta'], + ['Γ', 'Γ', true, 'Gamma'], + ['Δ', 'Δ', true, 'Delta'], + ['Ε', 'Ε', true, 'Epsilon'], + ['Ζ', 'Ζ', true, 'Zeta'], + ['Η', 'Η', true, 'Eta'], + ['Θ', 'Θ', true, 'Theta'], + ['Ι', 'Ι', true, 'Iota'], + ['Κ', 'Κ', true, 'Kappa'], + ['Λ', 'Λ', true, 'Lambda'], + ['Μ', 'Μ', true, 'Mu'], + ['Ν', 'Ν', true, 'Nu'], + ['Ξ', 'Ξ', true, 'Xi'], + ['Ο', 'Ο', true, 'Omicron'], + ['Π', 'Π', true, 'Pi'], + ['Ρ', 'Ρ', true, 'Rho'], + ['Σ', 'Σ', true, 'Sigma'], + ['Τ', 'Τ', true, 'Tau'], + ['Υ', 'Υ', true, 'Upsilon'], + ['Φ', 'Φ', true, 'Phi'], + ['Χ', 'Χ', true, 'Chi'], + ['Ψ', 'Ψ', true, 'Psi'], + ['Ω', 'Ω', true, 'Omega'], + ['α', 'α', true, 'alpha'], + ['β', 'β', true, 'beta'], + ['γ', 'γ', true, 'gamma'], + ['δ', 'δ', true, 'delta'], + ['ε', 'ε', true, 'epsilon'], + ['ζ', 'ζ', true, 'zeta'], + ['η', 'η', true, 'eta'], + ['θ', 'θ', true, 'theta'], + ['ι', 'ι', true, 'iota'], + ['κ', 'κ', true, 'kappa'], + ['λ', 'λ', true, 'lambda'], + ['μ', 'μ', true, 'mu'], + ['ν', 'ν', true, 'nu'], + ['ξ', 'ξ', true, 'xi'], + ['ο', 'ο', true, 'omicron'], + ['π', 'π', true, 'pi'], + ['ρ', 'ρ', true, 'rho'], + ['ς', 'ς', true, 'final sigma'], + ['σ', 'σ', true, 'sigma'], + ['τ', 'τ', true, 'tau'], + ['υ', 'υ', true, 'upsilon'], + ['φ', 'φ', true, 'phi'], + ['χ', 'χ', true, 'chi'], + ['ψ', 'ψ', true, 'psi'], + ['ω', 'ω', true, 'omega'], +// symbols + ['ℵ', 'ℵ', false,'alef symbol'], + ['ϖ', 'ϖ', false,'pi symbol'], + ['ℜ', 'ℜ', false,'real part symbol'], + ['ϑ','ϑ', false,'theta symbol'], + ['ϒ', 'ϒ', false,'upsilon - hook symbol'], + ['℘', '℘', false,'Weierstrass p'], + ['ℑ', 'ℑ', false,'imaginary part'], +// arrows + ['←', '←', true, 'leftwards arrow'], + ['↑', '↑', true, 'upwards arrow'], + ['→', '→', true, 'rightwards arrow'], + ['↓', '↓', true, 'downwards arrow'], + ['↔', '↔', true, 'left right arrow'], + ['↵', '↵', false,'carriage return'], + ['⇐', '⇐', false,'leftwards double arrow'], + ['⇑', '⇑', false,'upwards double arrow'], + ['⇒', '⇒', false,'rightwards double arrow'], + ['⇓', '⇓', false,'downwards double arrow'], + ['⇔', '⇔', false,'left right double arrow'], + ['∴', '∴', false,'therefore'], + ['⊂', '⊂', false,'subset of'], + ['⊃', '⊃', false,'superset of'], + ['⊄', '⊄', false,'not a subset of'], + ['⊆', '⊆', false,'subset of or equal to'], + ['⊇', '⊇', false,'superset of or equal to'], + ['⊕', '⊕', false,'circled plus'], + ['⊗', '⊗', false,'circled times'], + ['⊥', '⊥', false,'perpendicular'], + ['⋅', '⋅', false,'dot operator'], + ['⌈', '⌈', false,'left ceiling'], + ['⌉', '⌉', false,'right ceiling'], + ['⌊', '⌊', false,'left floor'], + ['⌋', '⌋', false,'right floor'], + ['⟨', '〈', false,'left-pointing angle bracket'], + ['⟩', '〉', false,'right-pointing angle bracket'], + ['◊', '◊', true,'lozenge'], + ['♠', '♠', false,'black spade suit'], + ['♣', '♣', true, 'black club suit'], + ['♥', '♥', true, 'black heart suit'], + ['♦', '♦', true, 'black diamond suit'], + [' ', ' ', false,'en space'], + [' ', ' ', false,'em space'], + [' ', ' ', false,'thin space'], + ['‌', '‌', false,'zero width non-joiner'], + ['‍', '‍', false,'zero width joiner'], + ['‎', '‎', false,'left-to-right mark'], + ['‏', '‏', false,'right-to-left mark'], + ['­', '­', false,'soft hyphen'] +]; + +function renderCharMapHTML() { + var charsPerRow = 20, tdWidth=20, tdHeight=20; + var html = ''; + var cols=-1; + for (var i=0; i' + + charmap[i][1] + + ''; + if ((cols+1) % charsPerRow == 0) + html += ''; + } + } + if (cols % charsPerRow > 0) { + var padd = charsPerRow - (cols % charsPerRow); + for (var i=0; i '; + } + html += '
    '; + document.write(html); +} + +function insertChar(chr) { + tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';'); + + // Refocus in window + if (tinyMCEPopup.isWindow) + window.focus(); + + tinyMCEPopup.close(); +} + +function previewChar(codeA, codeB, codeN) { + var elmA = document.getElementById('codeA'); + var elmB = document.getElementById('codeB'); + var elmV = document.getElementById('codeV'); + var elmN = document.getElementById('codeN'); + + if (codeA=='#160;') { + elmV.innerHTML = '__'; + } else { + elmV.innerHTML = '&' + codeA; + } + + elmB.innerHTML = '&' + codeA; + elmA.innerHTML = '&' + codeB; + elmN.innerHTML = codeN; +} diff --git a/jscripts/tiny_mce/themes/advanced/jscripts/color_picker.js b/jscripts/tiny_mce/themes/advanced/jscripts/color_picker.js new file mode 100644 index 000000000..68b5db2d6 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/jscripts/color_picker.js @@ -0,0 +1,108 @@ +function init() { + if (tinyMCE.isMSIE) + tinyMCEPopup.resizeToInnerSize(); +} + +function selectColor() { + var color = document.getElementById("selectedColorBox").value; + + tinyMCEPopup.execCommand(tinyMCE.getWindowArg('command'), false, color); + tinyMCEPopup.close(); +} + +function showColor(color) { + document.getElementById("selectedColor").style.backgroundColor = color; + document.getElementById("selectedColorBox").value = color; +} + +var colors = new Array( + "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033", + "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099", + "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff", + "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033", + "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399", + "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff", + "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333", + "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399", + "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff", + "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633", + "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699", + "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff", + "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633", + "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999", + "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff", + "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933", + "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999", + "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff", + "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33", + "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99", + "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff", + "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33", + "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99", + "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff", + "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33", + "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99", + "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff" +); + +function convertRGBToHex(col) { + var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi"); + + var rgb = col.replace(re, "$1,$2,$3").split(','); + if (rgb.length == 3) { + r = parseInt(rgb[0]).toString(16); + g = parseInt(rgb[1]).toString(16); + b = parseInt(rgb[2]).toString(16); + + r = r.length == 1 ? '0' + r : r; + g = g.length == 1 ? '0' + g : g; + b = b.length == 1 ? '0' + b : b; + + return "#" + r + g + b; + } + + return col; +} + +function convertHexToRGB(col) { + if (col.indexOf('#') != -1) { + col = col.replace(new RegExp('[^0-9A-F]', 'gi'), ''); + + r = parseInt(col.substring(0, 2), 16); + g = parseInt(col.substring(2, 4), 16); + b = parseInt(col.substring(4, 6), 16); + + return "rgb(" + r + "," + g + "," + b + ")"; + } + + return col; +} + +function renderColorMap() { + var html = ""; + var inputColor = convertRGBToHex(tinyMCE.getWindowArg('input_color')); + + html += '' + + ''; + for (var i=0; i' + + '' + + '' + colors[i] +  ''; + if ((i+1) % 18 == 0) + html += ''; + } + html += '' + + '
    ' + + '' + + '' + + '
    ' + + '' + + '' + + '' + + '
    ' + + '
    ' + + '
    ' + + '
    '; + + document.write(html); +} \ No newline at end of file diff --git a/jscripts/tiny_mce/themes/advanced/jscripts/image.js b/jscripts/tiny_mce/themes/advanced/jscripts/image.js new file mode 100644 index 000000000..a52bfad6a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/jscripts/image.js @@ -0,0 +1,81 @@ +var url = tinyMCE.getParam("external_image_list_url"); +if (url != null) { + // Fix relative + if (url.charAt(0) != '/' && url.indexOf('://') == -1) + url = tinyMCE.documentBasePath + "/" + url; + + document.write(''); +} + +function insertImage() { + var src = document.forms[0].src.value; + var alt = document.forms[0].alt.value; + var border = document.forms[0].border.value; + var vspace = document.forms[0].vspace.value; + var hspace = document.forms[0].hspace.value; + var width = document.forms[0].width.value; + var height = document.forms[0].height.value; + var align = document.forms[0].align.options[document.forms[0].align.selectedIndex].value; + + tinyMCEPopup.restoreSelection(); + tinyMCE.themes['advanced']._insertImage(src, alt, border, hspace, vspace, width, height, align); + tinyMCEPopup.close(); +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); + + var formObj = document.forms[0]; + + for (var i=0; i 0) { + for (var i=0; i'); +} + +function init() { + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','theme_advanced_link'); + + // Handle file browser + if (isVisible('hrefbrowser')) + document.getElementById('href').style.width = '180px'; + + var formObj = document.forms[0]; + + for (var i=0; i 0) { + var formObj = document.forms[0]; + + for (var i=0; i', 'gi'),'\n'); + html = tinyMCE.regexpReplace(html, '
    ','
    \n','gi'); + html = tinyMCE.regexpReplace(html, '\n\n','\n','gi');*/ + return html; +} + +function onLoadInit() { + tinyMCEPopup.resizeToInnerSize(); + + document.forms[0].htmlSource.value = fixContent(tinyMCE.getContent(tinyMCE.getWindowArg('editor_id'))); + resizeInputs(); + + if (tinyMCE.getParam("theme_advanced_source_editor_wrap", true)) { + setWrap('soft'); + document.forms[0].wraped.checked = true; + } +} + +function setWrap(val) { + var s = document.forms[0].htmlSource; + + s.wrap = val; + + if (tinyMCE.isGecko) { + var v = s.value; + var n = s.cloneNode(false); + n.setAttribute("wrap", val); + s.parentNode.replaceChild(n, s); + n.value = v; + } +} + +function toggleWordWrap(elm) { + if (elm.checked) + setWrap('soft'); + else + setWrap('off'); +} + +var wHeight=0, wWidth=0, owHeight=0, owWidth=0; + +function resizeInputs() { + if (!tinyMCE.isMSIE) { + wHeight = self.innerHeight-80; + wWidth = self.innerWidth-16; + } else { + wHeight = document.body.clientHeight - 80; + wWidth = document.body.clientWidth - 16; + } + + document.forms[0].htmlSource.style.height = Math.abs(wHeight) + 'px'; + document.forms[0].htmlSource.style.width = Math.abs(wWidth) + 'px'; +} + +function renderWordWrap() { + if (tinyMCE.isMSIE || tinyMCE.isGecko) + document.write(''); +} diff --git a/jscripts/tiny_mce/themes/advanced/langs/ar.js b/jscripts/tiny_mce/themes/advanced/langs/ar.js new file mode 100644 index 000000000..83c70621f --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/ar.js @@ -0,0 +1,63 @@ +// Arabic lang variables + +tinyMCE.addToLang('',{ +theme_style_select : 'تصاميم', +theme_code_desc : 'شفرة المصدر', +theme_code_title : 'شفرة المصدر', +theme_code_wordwrap : 'Word wrap', +theme_sub_desc : 'منخفض', +theme_sup_desc : 'مرتفع', +theme_hr_desc : 'إدراج خط فاصل', +theme_removeformat_desc : 'إزالة التنسيقات', +theme_custom1_desc : 'Your custom description here', +insert_image_border : 'سمك الحدود', +insert_image_dimensions : 'المواصفات', +insert_image_vspace : 'تباعد عمودي', +insert_image_hspace : 'تباعد أفقي', +insert_image_align : 'محاذاة', +insert_image_align_default : 'Default', +insert_image_align_baseline : 'على السطر', +insert_image_align_top : 'أعلى', +insert_image_align_middle : 'وسط', +insert_image_align_bottom : 'أسفل', +insert_image_align_texttop : 'أعلى النص', +insert_image_align_absmiddle : 'وسط السطر', +insert_image_align_absbottom : 'أسفل النص', +insert_image_align_left : 'يسار', +insert_image_align_right : 'يمين', +theme_font_size : '-- Font size --', +theme_fontdefault : '-- Font family --', +theme_block : '-- Format --', +theme_paragraph : 'Paragraph', +theme_div : 'Div', +theme_address : 'Address', +theme_pre : 'Preformatted', +theme_h1 : 'Heading 1', +theme_h2 : 'Heading 2', +theme_h3 : 'Heading 3', +theme_h4 : 'Heading 4', +theme_h5 : 'Heading 5', +theme_h6 : 'Heading 6', +theme_colorpicker_title : 'لون النص', +theme_colorpicker_apply : 'Apply', +theme_forecolor_desc : 'لون النص', +theme_backcolor_desc : 'Select background color', +theme_charmap_title : 'إدراج رمز..ِ', +theme_charmap_desc : 'إدراج رمز..ِ', +theme_visualaid_desc : 'Toggle guidelines/invisible elements', +insert_anchor_title : 'Insert/edit anchor', +insert_anchor_name : 'Anchor name', +theme_anchor_desc : 'Insert/edit anchor', +theme_insert_link_titlefield : 'Title', +theme_clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?', +theme_path : 'Path', +cut_desc : 'Cut', +copy_desc : 'Copy', +paste_desc : 'Paste', +link_list : 'Link list', +image_list : 'Image list', +browse : 'Browse', +image_props_desc : 'Image properties', +newdocument_desc : 'New document', +newdocument : 'Are you sure you want clear all contents?' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/ca.js b/jscripts/tiny_mce/themes/advanced/langs/ca.js new file mode 100644 index 000000000..ebd5e15d3 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/ca.js @@ -0,0 +1,64 @@ +// CA lang variables by Marc Bria + +tinyMCE.addToLang('',{ +theme_style_select : 'Estils', +theme_code_desc : 'Editar codi HTML', +theme_code_title : 'Editor codi HTML', +theme_code_wordwrap : 'Ajustar salt de línea', +theme_sub_desc : 'Subíndex', +theme_sup_desc : 'Superíndex', +theme_hr_desc : 'Insertar un separador horitzontal', +theme_removeformat_desc : 'Eliminar format', +theme_custom1_desc : 'La teva descripció', +insert_image_border : 'Marc', +insert_image_dimensions : 'Dimensions', +insert_image_vspace : 'Espai vertical', +insert_image_hspace : 'Espai horizontal', +insert_image_align : 'Alineament', +insert_image_align_default : 'Per defecte', +insert_image_align_baseline : 'Línea base', +insert_image_align_top : 'Superior', +insert_image_align_middle : 'Centre', +insert_image_align_bottom : 'Inferior', +insert_image_align_texttop : 'Alinear text amunt', +insert_image_align_absmiddle : 'Centrat horitzontal', +insert_image_align_absbottom : 'Centrat a baix', +insert_image_align_left : 'Esquerra', +insert_image_align_right : 'Dreta', +insert_image_delta_height : 10, +theme_font_size : '-- Mida font --', +theme_fontdefault : '-- Font family --', +theme_block : '-- Format --', +theme_paragraph : 'Paragraph', +theme_div : 'Div', +theme_address : 'Address', +theme_pre : 'Preformatejat', +theme_h1 : 'Capçalera 1', +theme_h2 : 'Capçalera 2', +theme_h3 : 'Capçalera 3', +theme_h4 : 'Capçalera 4', +theme_h5 : 'Capçalera 5', +theme_h6 : 'Capçalera 6', +theme_colorpicker_title : 'Selecciona el color', +theme_colorpicker_apply : 'Apply', +theme_forecolor_desc : 'Selecciona color frontal', +theme_backcolor_desc : 'Selecciona color de fons', +theme_charmap_title : 'Selecciona un caràcter especial', +theme_charmap_desc : 'Inserta un caràcter especial', +theme_visualaid_desc : 'Alterna líniesguia/elements invisibles', +insert_anchor_title : 'Inserta/edita àncora', +insert_anchor_name : 'Nom de l´àncora', +theme_anchor_desc : 'Inserta/edita un àncora', +theme_insert_link_titlefield : 'Títlo', +theme_clipboard_msg : 'Copiar/Tallar/Enganxar no és possible amb Mozilla i Firefox.\nVols més informació sobre aquest problema de seguretat?', +theme_path : 'Camí', +cut_desc : 'Retallar', +copy_desc : 'Copiar', +paste_desc : 'Enganxar', +link_list : 'Llistat d´enllaços', +image_list : 'Llistat d´imatges', +browse : 'Explorar', +image_props_desc : 'Image properties', +newdocument_desc : 'New document', +newdocument : 'Are you sure you want clear all contents?' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/cs.js b/jscripts/tiny_mce/themes/advanced/langs/cs.js new file mode 100644 index 000000000..f6a66a3a4 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/cs.js @@ -0,0 +1,70 @@ +/** + * Czech lang variables + * encoding: utf-8 + * + * $Id: cs.js,v 1.10 2005/10/18 13:55:39 spocke Exp $ + */ + + +tinyMCE.addToLang('',{ +theme_style_select : 'Styly', +theme_code_desc : 'Zobrazit HTML', +theme_code_title : 'Editace HTML', +theme_code_wordwrap : 'Bez dělení slov', +theme_sub_desc : 'Dolní index', +theme_sup_desc : 'Horní index', +theme_hr_desc : 'Vložit vodorovný oddělovač', +theme_removeformat_desc : 'ZruÅ¡it formátování', +theme_custom1_desc : 'Libovolný popisek', +insert_image_border : 'Rámeček', +insert_image_dimensions : 'Rozměry', +insert_image_vspace : 'Vertikální okraj', +insert_image_hspace : 'Horizontální okraj', +insert_image_align : 'Zarovnání', +insert_image_align_default : 'Výchozí', +insert_image_align_baseline : 'Na účaří', +insert_image_align_top : 'Nahoru', +insert_image_align_middle : 'Na střed', +insert_image_align_bottom : 'Dolů', +insert_image_align_texttop : 'Nejvyšší bod textu', +insert_image_align_absmiddle : 'Střed řádku', +insert_image_align_absbottom : 'Spodek řádku', +insert_image_align_left : 'Vlevo', +insert_image_align_right : 'Vpravo', +theme_font_size : '-- Velikost textu --', +theme_fontdefault : '-- Písmo --', +theme_block : '-- Formát --', +theme_paragraph : 'Odstavec', +theme_div : 'Div', +theme_address : 'Adresa', +theme_pre : 'Předformát', +theme_h1 : 'Nadpis 1', +theme_h2 : 'Nadpis 2', +theme_h3 : 'Nadpis 3', +theme_h4 : 'Nadpis 4', +theme_h5 : 'Nadpis 5', +theme_h6 : 'Nadpis 6', +theme_colorpicker_title : 'Výběr barvy', +theme_colorpicker_apply : 'Vybrat', +theme_forecolor_desc : 'Barva popředí', +theme_backcolor_desc : 'Barva pozadí', +theme_charmap_title : 'Výběr znaku', +theme_charmap_desc : 'Vložit znak', +theme_visualaid_desc : 'Zapnout značky/neviditelné prvky', +insert_anchor_title : 'Vložení/editace záložky', +insert_anchor_name : 'Název', +theme_anchor_desc : 'Vložit/editovat záložku', +theme_insert_link_titlefield : 'Název', +theme_clipboard_msg : 'Funkce Kopírovat/vyjmout/vložit nejsou použitelné v Mozille a Firefoxu.\nChcete více informací o tomto problému?', +theme_path : 'Cesta', +cut_desc : 'Vyjmout', +copy_desc : 'Kopírovat', +paste_desc : 'Vložit', +link_list : 'Seznam', +image_list : 'Seznam', +browse : 'Procházet', +image_props_desc : 'Vlastnosti obrázku', +newdocument_desc : 'Nový dokument', +newdocument : 'Jste si opravdu jistý(á), že chcete vymazat veÅ¡kerý obsah?' +}); + diff --git a/jscripts/tiny_mce/themes/advanced/langs/cy.js b/jscripts/tiny_mce/themes/advanced/langs/cy.js new file mode 100644 index 000000000..43636a3c8 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/cy.js @@ -0,0 +1,76 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +theme_style_select : '-- Arddulliau --', +theme_code_desc : 'Golygu côd HTML', +theme_code_title : 'Golygydd Côd HTML', +theme_code_wordwrap : 'Amlapio geiriau', +theme_sub_desc : 'Is-sgript', +theme_sup_desc : 'Uwch-sgript', +theme_hr_desc : 'Mewnosod llinell llorweddol', +theme_removeformat_desc : 'Diddymu fformatio', +theme_custom1_desc : 'Dy ddisgrifiad fan hyn', +insert_image_border : 'Ymyl', +insert_image_dimensions : 'Meintiau', +insert_image_vspace : 'Gofod fertigol', +insert_image_hspace : 'Gofod llorweddol', +insert_image_align : 'Unioniad', +insert_image_align_default : '-- Heb ddewis --', +insert_image_align_baseline : 'Gwaelodlin', +insert_image_align_top : 'Brig', +insert_image_align_middle : 'Canol', +insert_image_align_bottom : 'Gwaelod', +insert_image_align_texttop : 'Brig Testun', +insert_image_align_absmiddle : 'Canol Union', +insert_image_align_absbottom : 'Gwaelod Union', +insert_image_align_left : 'Chwith', +insert_image_align_right : 'Dde', +theme_font_size : '-- Maint ffont --', +theme_fontdefault : '-- Teulu ffont --', +theme_block : '-- Fformat --', +theme_paragraph : 'Paragraff', +theme_div : 'Div', +theme_address : 'Cyfeiriad', +theme_pre : 'Rhag-fformatiwyd', +theme_h1 : 'Pennawd 1', +theme_h2 : 'Pennawd 2', +theme_h3 : 'Pennawd 3', +theme_h4 : 'Pennawd 4', +theme_h5 : 'Pennawd 5', +theme_h6 : 'Pennawd 6', +theme_colorpicker_title : 'Dewis lliw', +theme_colorpicker_apply : 'Gosod', +theme_forecolor_desc : 'Dewis lliw testun', +theme_backcolor_desc : 'Dewis lliw cefndir', +theme_charmap_title : 'Dewis llythyren arbennig', +theme_charmap_desc : 'Gosod llythyren arbennig', +theme_visualaid_desc : 'Gwrthdroi canllawiau/elfennau anweledig', +insert_anchor_title : 'Mewnosod/golygu angor', +insert_anchor_name : 'Enw angor', +theme_anchor_desc : 'Mewnosod/golygu angor', +theme_insert_link_titlefield : 'Teitl', +theme_clipboard_msg : 'Dyw Copïo/Torri/Gludo ddim ar gael ym Mozilla na Firefox.\nHoffet ti ragor o wybodaeth ynghylch hyn?', +theme_path : 'Llwybr', +cut_desc : 'Torri', +copy_desc : 'Copïo', +paste_desc : 'Gludo', +link_list : 'Rhestr dolenni', +image_list : 'Rhestr delweddau', +browse : 'Pori', +image_props_desc : 'Priodoleddau delwedd', +newdocument_desc : 'Dogfen newydd', +class_name : 'Dosbarth', +newdocument : 'Wyt ti\'n sicr eisiau clirio\'r holl gynnwys?', +about_title : 'Ynglŷn â TinyMCE', +about : 'Ynglŷn â', +license : 'Trwydded', +plugins : 'Ategynnau', +plugin : 'Ategyn', +author : 'Awdur', +version : 'Fersiwn', +loaded_plugins : 'Ategynnau gweithredol', +help : 'Cymorth', +not_set : '-- Heb ddewis --', +close : 'Cau', +toolbar_focus : 'Neidio i fotymau offer - Alt+Q, Neidio i\'r golygydd - Alt+Z, Neidio i lwybr y elfen - Alt+X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/da.js b/jscripts/tiny_mce/themes/advanced/langs/da.js new file mode 100644 index 000000000..b4f8c9f2a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/da.js @@ -0,0 +1,75 @@ +// DK lang variables contributed by Jan Moelgaard + +tinyMCE.addToLang('',{ +theme_style_select : '-- Styles --', +theme_code_desc : 'Rediger HTML kode', +theme_code_title : 'HTML Kodeeditor', +theme_code_wordwrap : 'Ombrydning', +theme_sub_desc : 'Sænket skrift', +theme_sup_desc : 'Hævet skrift', +theme_hr_desc : 'Indsæt horisontal linje', +theme_removeformat_desc : 'Fjern formatering', +theme_custom1_desc : 'Indsæt din egen beskrivelse her', +insert_image_border : 'Kant', +insert_image_dimensions : 'Dimensioner', +insert_image_vspace : 'Flyt til venstre', +insert_image_hspace : 'Flyt til højre', +insert_image_align : 'Justering', +insert_image_align_default : 'Standard', +insert_image_align_baseline : 'Bundlinje', +insert_image_align_top : 'Top', +insert_image_align_middle : 'Midt i', +insert_image_align_bottom : 'I bunden', +insert_image_align_texttop : 'I toppen af teksten', +insert_image_align_absmiddle : 'Absolut midte', +insert_image_align_absbottom : 'Absolut bund', +insert_image_align_left : 'Venstre', +insert_image_align_right : 'Højre', +theme_font_size : '-- Font størrelse --', +theme_fontdefault : '-- Font gruppe --', +theme_block : '-- Typografi --', +theme_paragraph : 'Afsnit', +theme_div : 'Div', +theme_address : 'Addresse', +theme_pre : 'Præformateret', +theme_h1 : 'Overskrift 1', +theme_h2 : 'Overskrift 2', +theme_h3 : 'Overskrift 3', +theme_h4 : 'Overskrift 4', +theme_h5 : 'Overskrift 5', +theme_h6 : 'Overskrift 6', +theme_colorpicker_title : 'Vælg en farve', +theme_colorpicker_apply : 'Anvend', +theme_forecolor_desc : 'Vælg forgrundsfarve', +theme_backcolor_desc : 'Vælg baggrundsfarve', +theme_charmap_title : 'Vælg specialkarakter', +theme_charmap_desc : 'Indsæt specialkarakter', +theme_visualaid_desc : 'Slå linjer/usynlige elementer til og fra', +insert_anchor_title : 'Indsæt/rediger bogmærke', +insert_anchor_name : 'Bogmærkets navn', +theme_anchor_desc : 'Indsæt/rediger bogmærke', +theme_insert_link_titlefield : 'Title', +theme_clipboard_msg : 'Kopier/Klip/Indsæt virker ikke i Mozilla og Firefox.\nVil du vide mere om dette?', +theme_path : 'Sti', +cut_desc : 'Klip', +copy_desc : 'Kopier', +paste_desc : 'Indsæt', +link_list : 'Linkliste', +image_list : 'Billedliste', +browse : 'Gennemse', +image_props_desc : 'Billedegenskaber', +newdocument_desc : 'Nyt dokument', +class_name : 'Klasse', +newdocument : 'Er du sikker på, at du vil slette alt?', +about_title : 'Om TinyMCE', +about : 'Om', +license : 'Licens', +plugins : 'Plugins', +plugin : 'Plugin', +author : 'Forfatter', +version : 'Version', +loaded_plugins : 'Indlæste plugins', +help : 'Hjælp', +not_set : '-- Ikke defineret --', +close : 'Luk' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/de.js b/jscripts/tiny_mce/themes/advanced/langs/de.js new file mode 100644 index 000000000..b17ae130e --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/de.js @@ -0,0 +1,76 @@ +// DE lang variables + +tinyMCE.addToLang('',{ +theme_style_select : '-- CSS-Stile --', +theme_code_desc : 'HTML-Quelltext editieren', +theme_code_title : 'HTML-Quelltexteditor', +theme_code_wordwrap : 'Zeilenumbruch', +theme_sub_desc : 'Tiefergestellt', +theme_sup_desc : 'Hochgestellt', +theme_hr_desc : 'Horizontalen Balken einfügen', +theme_removeformat_desc : 'Formatierung löschen', +theme_custom1_desc : 'Eigene Beschreibung', +insert_image_border : 'Rahmen', +insert_image_dimensions : 'Größe', +insert_image_vspace : 'Vertikaler Raum', +insert_image_hspace : 'Horizontaler Raum', +insert_image_align : 'Ausrichtung', +insert_image_align_default : '-- Nicht festgelegt --', +insert_image_align_baseline : 'Grundlinie', +insert_image_align_top : 'Oben', +insert_image_align_middle : 'Mitte', +insert_image_align_bottom : 'Unten', +insert_image_align_texttop : 'Mit dem Text', +insert_image_align_absmiddle : 'Absolute mittig', +insert_image_align_absbottom : 'Absolut unten', +insert_image_align_left : 'Links', +insert_image_align_right : 'Rechts', +theme_font_size : '-- Schriftgröße --', +theme_fontdefault : '-- Schriftfamilie --', +theme_block : '-- Format --', +theme_paragraph : 'Absatz', +theme_div : 'Block', +theme_address : 'Adresse', +theme_pre : 'Vorformatiert', +theme_h1 : 'Überschrift 1', +theme_h2 : 'Überschrift 2', +theme_h3 : 'Überschrift 3', +theme_h4 : 'Überschrift 4', +theme_h5 : 'Überschrift 5', +theme_h6 : 'Überschrift 6', +theme_colorpicker_title : 'Farbe auswählen', +theme_colorpicker_apply : 'Farbe festlegen', +theme_forecolor_desc : 'Schriftfarbe auswählen', +theme_backcolor_desc : 'Hintergrundfarbe auswählen', +theme_charmap_title : 'Sonderzeichen einfügen', +theme_charmap_desc : 'Sonderzeichen einfügen', +theme_visualaid_desc : 'Hilfslinen/Unsichtbare Elemente anzeigen', +insert_anchor_title : 'Anker einfügen/bearbeiten', +insert_anchor_name : 'Ankername', +theme_anchor_desc : 'Anker einfügen/bearbeiten', +theme_insert_link_titlefield : 'Titel', +theme_clipboard_msg : 'Zwischenablagefunktionen sind in Mozilla und Firefox nicht verfügbar.\nWünschen Sie hierzu weitere Informationen?', +theme_path : 'Pfad', +cut_desc : 'Ausschneiden', +copy_desc : 'Kopieren', +paste_desc : 'Einfügen', +link_list : 'Hyperlink-Liste', +image_list : 'Bild-Liste', +browse : 'Durchsuchen', +image_props_desc : 'Bildeigenschaften', +newdocument_desc : 'Neues Dokument', +class_name : 'CSS-Klasse', +newdocument : 'Sind Sie sicher, dass Sie alle Inhalte löschen wollen?', +about_title : 'Über TinyMCE', +about : 'Über', +license : 'Lizenz', +plugins : 'Plugins', +plugin : 'Plugin', +author : 'Autor', +version : 'Version', +loaded_plugins : 'Geladene Plugins', +help : 'Hilfe', +not_set : '-- Nicht festgelegt --', +close : 'Schließen', +toolbar_focus : 'Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/el.js b/jscripts/tiny_mce/themes/advanced/langs/el.js new file mode 100644 index 000000000..7a02eec3a --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/el.js @@ -0,0 +1,64 @@ +// Greek lang variables by Jacaranda Bill + +tinyMCE.addToLang('',{ +theme_style_select : 'ÈÝìáôá', +theme_code_desc : 'Åðåîåñãáóßá HTML êþäéêá', +theme_code_title : 'ÅðåîåñãáóôÞò HTML', +theme_code_wordwrap : 'Word wrap', +theme_sub_desc : 'Äåßêôçò', +theme_sup_desc : 'ÅêèÝôçò', +theme_hr_desc : 'ÅéóáãùãÞ ïñéæüíôéáò ãñáììÞò', +theme_removeformat_desc : 'ÁðáëïéöÞ ìïñöïðïßçóçò', +theme_custom1_desc : 'ÐåñéãñáöÞ', +insert_image_border : 'Ðåñßãñáììá', +insert_image_dimensions : 'ÄéáóôÜóåéò', +insert_image_vspace : 'ÊÜè. ðåñéèþñéï', +insert_image_hspace : 'Ïñéæ. ðåñéèþñéï', +insert_image_align : 'Óôïß÷éóç', +insert_image_align_default : 'ÐñïêáèïñéóìÝíç', +insert_image_align_baseline : 'Óå åõèõãñÜììéóç ìå ôï êåßìåíï', +insert_image_align_top : 'ÐÜíù', +insert_image_align_middle : 'Óôï êÝíôñï', +insert_image_align_bottom : 'ÊÜôù', +insert_image_align_texttop : 'Ôï êåßìåíï ðÜíù', +insert_image_align_absmiddle : 'Áðüëõôá óôï êÝíôñï', +insert_image_align_absbottom : 'Áðüëõôá êÜôù', +insert_image_align_left : 'ÁñéóôåñÜ', +insert_image_align_right : 'ÄåîéÜ', +theme_font_size : '-- Font size --', +theme_fontdefault : '-- Font family --', +theme_block : '-- Format --', +theme_paragraph : 'ÐáñÜãñáöïò', +theme_div : 'Div', +theme_address : 'Äéåýèõíóç', +theme_pre : 'Preformatted', +theme_h1 : 'Åðéêåöáëßäá 1', +theme_h2 : 'Åðéêåöáëßäá 2', +theme_h3 : 'Åðéêåöáëßäá 3', +theme_h4 : 'Åðéêåöáëßäá 4', +theme_h5 : 'Åðéêåöáëßäá 5', +theme_h6 : 'Åðéêåöáëßäá 6', +theme_colorpicker_title : '×ñþìáôá', +theme_colorpicker_apply : 'ÅöáñìïãÞ', +theme_forecolor_desc : 'ÅðéëïãÞ ÷ñþìáôïò ãñáììáôïóåéñÜò', +theme_backcolor_desc : 'Select background color', +theme_charmap_title : 'ÅðéëïãÞ åéäéêïý ÷áñáêôÞñá', +theme_charmap_desc : 'ÅéóáãùãÞ åéäéêïý ÷áñáêôÞñá', +theme_visualaid_desc : 'ÅìöÜíéóç/Áðüêñõøç ãñáììþí', +insert_anchor_title : 'ÅéóáãùãÞ/Äéüñèùóç Üãêõñáò', +insert_anchor_name : 'Ïíïìáóßá Üãêõñáò', +theme_anchor_desc : 'ÅéóáãùãÞ/Äéüñèùóç Üãêõñáò', +theme_insert_link_titlefield : 'Ôßôëïò', +theme_clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?', +theme_path : 'Path', +cut_desc : 'Cut', +copy_desc : 'Copy', +paste_desc : 'Paste', +link_list : 'Link list', +image_list : 'Image list', +browse : 'Browse', +image_props_desc : 'Image properties', +newdocument_desc : 'New document', +class_name : 'ÊëÜóç', +newdocument : 'Are you sure you want clear all contents?' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/en.js b/jscripts/tiny_mce/themes/advanced/langs/en.js new file mode 100644 index 000000000..685382e3d --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/en.js @@ -0,0 +1,81 @@ +// UK lang variables + +tinyMCE.addToLang('',{ +theme_style_select : '-- Styles --', +theme_code_desc : 'Edit HTML Source', +theme_code_title : 'HTML Source Editor', +theme_code_wordwrap : 'Word wrap', +theme_sub_desc : 'Subscript', +theme_sup_desc : 'Superscript', +theme_hr_desc : 'Insert horizontal ruler', +theme_removeformat_desc : 'Remove formatting', +theme_custom1_desc : 'Your custom description here', +insert_image_border : 'Border', +insert_image_dimensions : 'Dimensions', +insert_image_vspace : 'Vertical space', +insert_image_hspace : 'Horizontal space', +insert_image_align : 'Alignment', +insert_image_align_default : '-- Not set --', +insert_image_align_baseline : 'Baseline', +insert_image_align_top : 'Top', +insert_image_align_middle : 'Middle', +insert_image_align_bottom : 'Bottom', +insert_image_align_texttop : 'TextTop', +insert_image_align_absmiddle : 'Absolute Middle', +insert_image_align_absbottom : 'Absolute Bottom', +insert_image_align_left : 'Left', +insert_image_align_right : 'Right', +theme_font_size : '-- Font size --', +theme_fontdefault : '-- Font family --', +theme_block : '-- Format --', +theme_paragraph : 'Paragraph', +theme_div : 'Div', +theme_address : 'Address', +theme_pre : 'Preformatted', +theme_h1 : 'Heading 1', +theme_h2 : 'Heading 2', +theme_h3 : 'Heading 3', +theme_h4 : 'Heading 4', +theme_h5 : 'Heading 5', +theme_h6 : 'Heading 6', +theme_blockquote : 'Blockquote', +theme_code : 'Code', +theme_samp : 'Code sample', +theme_dt : 'Definition term ', +theme_dd : 'Definition description', +theme_colorpicker_title : 'Select a color', +theme_colorpicker_apply : 'Apply', +theme_forecolor_desc : 'Select text color', +theme_backcolor_desc : 'Select background color', +theme_charmap_title : 'Select custom character', +theme_charmap_desc : 'Insert custom character', +theme_visualaid_desc : 'Toggle guidelines/invisible elements', +insert_anchor_title : 'Insert/edit anchor', +insert_anchor_name : 'Anchor name', +theme_anchor_desc : 'Insert/edit anchor', +theme_insert_link_titlefield : 'Title', +theme_clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?', +theme_path : 'Path', +cut_desc : 'Cut', +copy_desc : 'Copy', +paste_desc : 'Paste', +link_list : 'Link list', +image_list : 'Image list', +browse : 'Browse', +image_props_desc : 'Image properties', +newdocument_desc : 'New document', +class_name : 'Class', +newdocument : 'Are you sure you want clear all contents?', +about_title : 'About TinyMCE', +about : 'About', +license : 'License', +plugins : 'Plugins', +plugin : 'Plugin', +author : 'Author', +version : 'Version', +loaded_plugins : 'Loaded plugins', +help : 'Help', +not_set : '-- Not set --', +close : 'Close', +toolbar_focus : 'Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/es.js b/jscripts/tiny_mce/themes/advanced/langs/es.js new file mode 100644 index 000000000..97dff894e --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/es.js @@ -0,0 +1,101 @@ +/** + * ES lang variables + * + * Authors : Alvaro Velasco, + * Adolfo Sanz De Diego (asanzdiego) , + * Carlos C Soto (eclipxe) + * Last Updated : October 17, 2005 + * TinyMCE Version : 2.0RC3 + */ + +tinyMCE.addToLang('',{ +theme_style_select : '-- Estilos --', +theme_code_desc : 'Editar código HTML', +theme_code_title : 'Editor código HTML', +theme_code_wordwrap : 'Ajuste de línea', +theme_sub_desc : 'Subíndice', +theme_sup_desc : 'Superíndice', +theme_hr_desc : 'Insertar una barra horizontal', +theme_removeformat_desc : 'Quitar formato', +theme_custom1_desc : 'Tu descripción aquí', +insert_image_border : 'Borde', +insert_image_dimensions : 'Dimensiones', +insert_image_vspace : 'Espacio vertical', +insert_image_hspace : 'Espacio horizontal', +insert_image_align : 'Alineación', +insert_image_align_default : '-- Por defecto --', +insert_image_align_baseline : 'Linea base', +insert_image_align_top : 'Arriba', +insert_image_align_middle : 'Centrado', +insert_image_align_bottom : 'Abajo', +insert_image_align_texttop : 'Texto arriba', +insert_image_align_absmiddle : 'Centrado total', +insert_image_align_absbottom : 'Abajo total', +insert_image_align_left : 'Izquierda', +insert_image_align_right : 'Derecha', +theme_font_size : '-- Tamaño del texto --', +theme_fontdefault : '-- Tipo de fuente --', +theme_block : '-- Formato del texto --', +theme_paragraph : 'Párrafo', +theme_div : 'Capa', +theme_address : 'Dirección', +theme_pre : 'Preformateado', +theme_h1 : 'Título 1', +theme_h2 : 'Título 2', +theme_h3 : 'Título 3', +theme_h4 : 'Título 4', +theme_h5 : 'Título 5', +theme_h6 : 'Título 6', +theme_colorpicker_title : 'Selecciona un color', +theme_colorpicker_apply : 'Aplicar', +theme_forecolor_desc : 'Selecciona un color para el texto', +theme_backcolor_desc : 'Selecciona un color de fondo', +theme_charmap_title : 'Selecciona un carácter especial', +theme_charmap_desc : 'Inserta un carácter especial', +theme_charmap_all_title : 'Todos', +theme_charmap_all_desc : 'Todos los caracteres', +theme_charmap_alpha_title : 'Alfabéticos', +theme_charmap_alpha_desc : 'Caracteres alfabéticos', +theme_charmap_arrows_title : 'Flechas', +theme_charmap_arrows_desc : 'Caracteres de flechas', +theme_charmap_greek_title : 'Griegos', +theme_charmap_greek_desc : 'Caracteres Griegos', +theme_charmap_math_title : 'Mathemáticos', +theme_charmap_math_desc : 'Caracteres mathemáticos', +theme_charmap_misc_title : 'Misceláneos', +theme_charmap_misc_desc : 'Caracteres misceláneos', +theme_charmap_money_title : 'Monedas', +theme_charmap_money_desc : 'Caracteres de monedas', +theme_charmap_quotaion_title : 'Comillas', +theme_charmap_quotaion_desc : 'Caracteres de comillas', +theme_visualaid_desc : 'Cambiar las líneas de ayuda por elementos invisibles', +insert_anchor_title : 'Insertar/editar ancla', +insert_anchor_name : 'Nombre del ancla', +theme_anchor_desc : 'Insertar/editar ancla', +theme_insert_link_titlefield : 'Título', +theme_clipboard_msg : 'No se pueden utilizar los comandos Copiar / Cortar / Pegar en Mozilla y en Firefox.\r\nUse el teclado Copiar (Ctrl+C) / Cortar (Ctrl+X) / Pegar (Ctrl+V)\r\n¿Quieres obtener más información?', +theme_path : 'Ruta', +cut_desc : 'Cortar (Ctrl+X)', +copy_desc : 'Copiar (Ctrl+C)', +paste_desc : 'Pegar (Ctrl+V)', +link_list : 'Lista de enlaces', +image_list : 'Lista de imágenes', +browse : 'Navegar', +image_props_desc : 'Propiedades de la imagen', +newdocument_desc : 'Nuevo documento', +class_name : 'Clase', +newdocument : '¿Estás seguro de que quieres borrar todo el contenido?', +about_title : 'Acerca de TinyMCE', +about : 'Acerca', +license : 'Licencia', +plugins : 'Plugins', +plugin : 'Plugin', +author : 'Autor', +version : 'Versión', +loaded_plugins : 'Plugins cargados', +help : 'Ayuda', +not_set : '-- Por defecto --', +close : 'Cerrar', +toolbar_focus : 'Saltar a la barra de herramientas - Alt+Q, Saltar al editor - Alt+Z, Saltar al elemento de la ruta - Alt+X', +theme_advanced_anchor_delta_width : 20 +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/fa.js b/jscripts/tiny_mce/themes/advanced/langs/fa.js new file mode 100644 index 000000000..2e01f436d --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/fa.js @@ -0,0 +1,65 @@ +// IR lang variables +// Persian (Farsi) language pack (for IRAN) +// By: Morteza Zafari +// Lost@LostLord.com +// http://www.LostLord.com + +tinyMCE.addToLang('',{ +dir : 'rtl', +theme_style_select : '????', +theme_code_desc : '?????? ????', +theme_code_title : 'HTML ???????? ????', +theme_code_wordwrap : '?? ???', +theme_sub_desc : '??? ????', +theme_sup_desc : '???? ????', +theme_hr_desc : '??? ?? ????', +theme_removeformat_desc : '??? ?? ??? ???? ????', +theme_custom1_desc : 'Your custom description here', +insert_image_border : '?????', +insert_image_dimensions : '?????', +insert_image_vspace : '????? ?????', +insert_image_hspace : '????? ????', +insert_image_align : '??? ????????', +insert_image_align_default : '??? ???', +insert_image_align_baseline : '?? ????', +insert_image_align_top : '????', +insert_image_align_middle : '???', +insert_image_align_bottom : '?????', +insert_image_align_texttop : '????? ???', +insert_image_align_absmiddle : '??? ????', +insert_image_align_absbottom : '????? ????', +insert_image_align_left : '??', +insert_image_align_right : '????', +theme_font_size : '-- Font size --', +theme_fontdefault : '-- Font family --', +theme_block : '-- Format --', +theme_paragraph : '????????', +theme_div : 'Div', +theme_address : '????', +theme_pre : '?? ??? ????? ???', +theme_h1 : '???? 1', +theme_h2 : '???? 2', +theme_h3 : '???? 3', +theme_h4 : '???? 4', +theme_h5 : '???? 5', +theme_h6 : '???? 6', +theme_colorpicker_title : '??? ?? ?????? ????', +theme_colorpicker_apply : '?????', +theme_forecolor_desc : '?????? ??? ???', +theme_backcolor_desc : '?????? ??? ?????', +theme_charmap_title : '?????? ??????? ????', +theme_charmap_desc : '??? ??????? ????', +theme_visualaid_desc : '????? ???? ???? ? ????? ??????', +insert_anchor_title : '??? ? ?????? Anchor', +insert_anchor_name : '??? Anchor', +theme_anchor_desc : '??? ? ?????? Anchor', +theme_insert_link_titlefield : '?????', +theme_clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?', +theme_path : '????', +cut_desc : 'Cut', +copy_desc : 'Copy', +paste_desc : 'Paste', +image_props_desc : 'Image properties', +newdocument_desc : 'New document', +newdocument : 'Are you sure you want clear all contents?' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/fi.js b/jscripts/tiny_mce/themes/advanced/langs/fi.js new file mode 100644 index 000000000..2eaa9419c --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/fi.js @@ -0,0 +1,77 @@ +// FI lang variables by Urho Konttori from Absolutions +// Updated by Tuomo Aura from Ateco.fi + +tinyMCE.addToLang('',{ +theme_style_select : '-- Tyylit --', +theme_code_desc : 'Muokkaa HTML-lähdekoodia', +theme_code_title : 'HTML-Lähdekoodin muokkaus', +theme_code_wordwrap : 'Word wrap', +theme_sub_desc : 'Alaindeksi', +theme_sup_desc : 'Yläindeksi', +theme_hr_desc : 'Lisää vaakaviiva', +theme_removeformat_desc : 'Poista muotoilu', +theme_custom1_desc : 'Kirjoita oma selityksesi tähän', +insert_image_border : 'Reuna', +insert_image_dimensions : 'Mitat', +insert_image_vspace : 'Pystyväli', +insert_image_hspace : 'Vaakaväli', +insert_image_align : 'Asettelu', +insert_image_align_default : 'Oletus', +insert_image_align_baseline : 'Perustasoon', +insert_image_align_top : 'Ylälaitaan', +insert_image_align_middle : 'Keskelle', +insert_image_align_bottom : 'Alalaitaan', +insert_image_align_texttop : 'Tekstin ylälaitaan', +insert_image_align_absmiddle : 'Absoluuttisen keskelle', +insert_image_align_absbottom : 'Absoluuttisen alas', +insert_image_align_left : 'Vasemmalle', +insert_image_align_right : 'Oikealle', +theme_font_size : '-- Fonttikoko --', +theme_fontdefault : '-- Fontti --', +theme_block : '-- Muotoilu --', +theme_paragraph : 'Kappale', +theme_div : 'Div', +theme_address : 'Osoite', +theme_pre : 'Etukäteen muotoiltu', +theme_h1 : 'Otsikko 1', +theme_h2 : 'Otsikko 2', +theme_h3 : 'Otsikko 3', +theme_h4 : 'Otsikko 4', +theme_h5 : 'Otsikko 5', +theme_h6 : 'Otsikko 6', +theme_colorpicker_title : 'Valitse väri', +theme_colorpicker_apply : 'Aseta väri', +theme_forecolor_desc : 'Valitse fontin väri', +theme_backcolor_desc : 'Valitse taustaväri', +theme_charmap_title : 'Valitse erikoismerkki', +theme_charmap_desc : 'Lisää oma erikoismerkki', +theme_visualaid_desc : 'Näytä/piilota apuviivat', +insert_anchor_title : 'Lisää/muokkaa ankkuria', +insert_anchor_name : 'Ankkurin nimi', +theme_anchor_desc : 'Lisää/muokkaa ankkuria', +theme_insert_link_titlefield : 'Title', +theme_clipboard_msg : 'Leikkaus/Kopiointi/Liitäminen ei onnistu Mozilla eikä Firefox -selaimilla tietoturvasyistä. \n Haluatko lisätietoa aiheesta?', +theme_path : 'Polku', +cut_desc : 'Leikkaa', +copy_desc : 'Kopioi', +paste_desc : 'Liitä', +link_list : 'Linkkilista', +image_list : 'Kuvalista', +browse : 'Selaa', +image_props_desc : 'Kuvan ominaisuudet', +newdocument_desc : 'Uusi dokumentti', +class_name : 'Luokka', +newdocument : 'Oletko varma, että haluat poistaa kaiken sisällön?', +about_title : 'TinyMCE:n tiedot', +about : 'Tiedot', +license : 'Lisenssi', +plugins : 'Pluginit', +plugin : 'Plugini', +author : 'Tekijä', +version : 'Versio', +loaded_plugins : 'Ladatut pluginit', +help : 'Apua', +not_set : '-- Ei asetettu --', +close : 'Sulje', +toolbar_focus : 'Hyppää työkalupainikkeisiin - Alt+Q, Hyppää editoriin - Alt-Z, Hyppää polkuun - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/fr.js b/jscripts/tiny_mce/themes/advanced/langs/fr.js new file mode 100644 index 000000000..49ebb75bc --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/fr.js @@ -0,0 +1,78 @@ +// Canadian French lang variables by Virtuelcom +// Modify by Laurent Dran 13-02-2006 +// Modifié par Normand Lamoureux le 2005-11-12 + +tinyMCE.addToLang('',{ +theme_style_select : '-- Style --', +theme_code_desc : 'Afficher le code source', +theme_code_title : 'Édititon du code source', +theme_code_wordwrap : 'Retour à la ligne automatique', +theme_sub_desc : 'Indice', +theme_sup_desc : 'Exposant', +theme_hr_desc : 'Insérer une règle horizontale ordinaire', +theme_removeformat_desc : 'Supprimer le formattage', +theme_custom1_desc : 'Votre description personnalisée ici', +insert_image_border : 'Bordure', +insert_image_dimensions : 'Dimensions', +insert_image_vspace : 'Espacement vertical', +insert_image_hspace : 'Espacement horizontal', +insert_image_align : 'Alignement', +insert_image_align_default : '-- Indéfini --', +insert_image_align_baseline : 'Ligne de base', +insert_image_align_top : 'Haut', +insert_image_align_middle : 'Milieu', +insert_image_align_bottom : 'Bas', +insert_image_align_texttop : 'Haut du texte', +insert_image_align_absmiddle : 'Milieu absolu', +insert_image_align_absbottom : 'Bas absolu', +insert_image_align_left : 'En flottement à gauche', +insert_image_align_right : 'En flottement à droite', +theme_font_size : '-- Taille --', +theme_fontdefault : '-- Police --', +theme_block : '-- Bloc de texte --', +theme_paragraph : 'Paragraphe', +theme_div : 'Div', +theme_address : 'Infos sur l\'auteur', +theme_pre : 'Texte préformaté', +theme_h1 : 'Titre de niveau 1', +theme_h2 : 'Titre de niveau 2', +theme_h3 : 'Titre de niveau 3', +theme_h4 : 'Titre de niveau 4', +theme_h5 : 'Titre de niveau 5', +theme_h6 : 'Titre de niveau 6', +theme_colorpicker_title : 'Choisir une couleur', +theme_colorpicker_apply : 'Appliquer', +theme_forecolor_desc : 'Couleur du texte', +theme_backcolor_desc : 'Couleur d\'arrière-plan', +theme_charmap_title : 'Sélectionner un charactère spécial', +theme_charmap_desc : 'Insérer un charactère spécial', +theme_visualaid_desc : 'Activer/Désactiver les lignes guides et les éléments invisibles', +insert_anchor_title : 'Gestionnaire d\'ancre', +insert_anchor_name : 'Nom de l\'ancre', +theme_anchor_desc : 'Insérer/Modifier une ancre', +theme_insert_link_titlefield : 'Info-bulle', +theme_clipboard_msg : 'Pour des raisons de sécurité, les fonctions « Copier », « Couper » et « Coller »\nne sont pas disponibles dans Mozilla et Firefox.\n\n\nVoulez-vous plus d\'information à ce sujet?\n', +theme_path : 'Élément(s) en cours ', +cut_desc : 'Couper', +copy_desc : 'Copier', +paste_desc : 'Coller', +link_list : 'Lien de la liste', +image_list : 'Image de la liste', +browse : 'Naviguer', +image_props_desc : 'Propriétés de l\'image', +newdocument_desc : 'Nouveau document', +class_name : 'Classe CSS', +newdocument : 'Êtes-vous sûr de vouloir supprimer tout le contenu ?', +about_title : 'À propos de TinyMCE', +about : 'À propos', +license : 'License', +plugins : 'Extensions', +plugin : 'Extension', +author : 'Auteur', +version : 'Version', +loaded_plugins : 'Extensions installées', +help : 'Aide', +not_set : '-- Indéfini --', +close : 'Fermer', +toolbar_focus : 'Atteindre la barre d\'outils (Alt+Q), Atteindre l\'éditeur (Alt-Z), Atteindre l\'élément en cours (Alt-X)' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/fr_ca.js b/jscripts/tiny_mce/themes/advanced/langs/fr_ca.js new file mode 100644 index 000000000..2e15b5818 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/fr_ca.js @@ -0,0 +1,64 @@ +// Canadian French lang variables by Virtuelcom last modification: 2005-06-15 + +tinyMCE.addToLang('',{ +theme_style_select : '-- Styles --', +theme_code_desc : 'Modifier le code source HTML', +theme_code_title : 'Éditeur de code source HTML', +theme_code_wordwrap : 'Word wrap', +theme_sub_desc : 'Souscrit', +theme_sup_desc : 'Indice supérieur', +theme_hr_desc : 'Insérer un séparateur horizontal', +theme_removeformat_desc : 'Supprimer le formattage', +theme_custom1_desc : 'Votre description personnalisée ici', +insert_image_border : 'Bordure', +insert_image_dimensions : 'Dimensions', +insert_image_vspace : 'VSpace', +insert_image_hspace : 'HSpace', +insert_image_align : 'Alignement', +insert_image_align_default : 'Défaut', +insert_image_align_baseline : 'Baseline', +insert_image_align_top : 'Haut', +insert_image_align_middle : 'Milieu', +insert_image_align_bottom : 'Bas', +insert_image_align_texttop : 'TextTop', +insert_image_align_absmiddle : 'Milieu absolu', +insert_image_align_absbottom : 'Bas absolu', +insert_image_align_left : 'Gauche', +insert_image_align_right : 'Droit', +theme_font_size : 'Taille', +theme_fontdefault : '-- Police --', +theme_block : '-- Format --', +theme_paragraph : 'Paragraphe', +theme_div : 'Div', +theme_address : 'Addresse', +theme_pre : 'Préformatté', +theme_h1 : 'Entête 1', +theme_h2 : 'Entête 2', +theme_h3 : 'Entête 3', +theme_h4 : 'Entête 4', +theme_h5 : 'Entête 5', +theme_h6 : 'Entête 6', +theme_colorpicker_title : 'Choisir une couleur', +theme_colorpicker_apply : 'Appliquer', +theme_forecolor_desc : 'Choisir la couleur d\'avant plan', +theme_backcolor_desc : 'Choisir une couleur d\'arrière plan', +theme_charmap_title : 'Sélectionner un charactère spécial', +theme_charmap_desc : 'Insérer un charactère spécial', +theme_visualaid_desc : 'Active/Désactive les lignes guides et les éléments invisibles', +insert_anchor_title : 'Insérer/Modifier une ancre', +insert_anchor_name : 'Nom de l\'ancre', +theme_anchor_desc : 'Insérer / Modifier une ancre', +theme_insert_link_titlefield : 'Titre', +theme_clipboard_msg : 'Copier/Couper/Coller ne sont pas disponibles dans Mozilla et FireFox.\nDésirez-vous consulter de plus amples informations à ce sujet?', +theme_path : 'Chemin', +cut_desc : 'Couper', +copy_desc : 'Copier', +paste_desc : 'Coller', +link_list : 'Liste de liens', +image_list : 'Liste d\'images', +browse : 'Sélectionner', +image_props_desc : 'Propriétés de l\'image', +newdocument_desc : 'Nouveau Document', +class_name : 'Classe', +newdocument : 'Are you sure you want clear all contents?' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/he.js b/jscripts/tiny_mce/themes/advanced/langs/he.js new file mode 100644 index 000000000..87778f3f8 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/he.js @@ -0,0 +1,76 @@ +// HE lang variables by Liron Newman, http://eesh.net + +tinyMCE.addToLang('',{ +theme_style_select : '-- ñéâðåðåú --', +theme_code_desc : 'òøåê àú ÷åã ä-HTML', +theme_code_title : 'òåøê ÷åã HTML', +theme_code_wordwrap : 'âìéùú ùåøåú', +theme_sub_desc : 'ëúá úçúé', +theme_sup_desc : 'ëúá òéìé', +theme_hr_desc : 'äëðñ ÷å àåô÷é', +theme_removeformat_desc : 'äñø òéöåá', +theme_custom1_desc : 'äúéàåø ùìê ëàï', +insert_image_border : 'âáåì', +insert_image_dimensions : 'îéîãéí', +insert_image_vspace : 'çìì àðëé', +insert_image_hspace : 'çìì àåô÷é', +insert_image_align : 'ééùåø', +insert_image_align_default : 'áøéøú îçãì', +insert_image_align_baseline : 'ì÷å äáñéñ', +insert_image_align_top : 'ìîòìä', +insert_image_align_middle : 'ìàîöò', +insert_image_align_bottom : 'ìîèä', +insert_image_align_texttop : 'ìøàù äè÷ñè', +insert_image_align_absmiddle : 'ìàîöò îåçìè', +insert_image_align_absbottom : 'ì÷öä úçúåï îåçìè', +insert_image_align_left : 'ìùîàì', +insert_image_align_right : 'ìéîéï', +theme_font_size : 'âåãì âåôï', +theme_fontdefault : '-- îùôçú âåôðéí --', +theme_block : '-- òéöåá --', +theme_paragraph : 'ôñ÷ä', +theme_div : '÷èò', +theme_address : 'ëúåáú', +theme_pre : 'îòåöá îøàù', +theme_h1 : 'ëåúøú 1', +theme_h2 : 'ëåúøú 2', +theme_h3 : 'ëåúøú 3', +theme_h4 : 'ëåúøú 4', +theme_h5 : 'ëåúøú 5', +theme_h6 : 'ëåúøú 6', +theme_colorpicker_title : 'áçø öáò', +theme_colorpicker_apply : 'äçì', +theme_forecolor_desc : 'áçø öáò è÷ñè', +theme_backcolor_desc : 'áçø öáò ø÷ò', +theme_charmap_title : 'áçø úå îéåçã', +theme_charmap_desc : 'äëðñ úå îéåçã', +theme_visualaid_desc : 'äçìó îöá ÷ååéí îðçéí/øëéáéí áìúé-ðøàéí', +insert_anchor_title : 'äëðñ/òøåê òåâï', +insert_anchor_name : 'ùí äòåâï', +theme_anchor_desc : 'äëðñ/òøåê òåâï', +theme_insert_link_titlefield : 'ëåúøú', +theme_clipboard_msg : 'ôòåìåú äòú÷ä/âæéøä/äãá÷ä àéðï ðúîëåú úçú Mozilla å-Firefox.\näàí áøöåðê ì÷áì îéãò ðåñó àåãåú ðåùà æä?', +theme_path : 'ðúéá', +cut_desc : 'âæåø', +copy_desc : 'äòú÷', +paste_desc : 'äãá÷', +link_list : 'øùéîú ÷éùåøéí', +image_list : 'øùéîú úîåðåú', +browse : 'ñééø', +image_props_desc : 'îàôééðé úîåðä', +newdocument_desc : 'îñîê çãù', +class_name : 'îçì÷ä', +newdocument : 'äàí àúä áèåç ùáøöåðê ìð÷åú àú ëì äúåëï?', +about_title : 'àåãåú TinyMCE', +about : 'àåãåú', +license : 'øéùéåï', +plugins : 'úåñôéí', +plugin : 'úåñó', +author : 'îçáø', +version : 'âøñä', +loaded_plugins : 'úåñôéí ôòéìéí', +help : 'òæøä', +not_set : '-- ìà îåâãø --', +close : 'ñâéøä', +toolbar_focus : 'òáåø àì ëôúåøé äëìéí - Alt+Q, òáåø àì äòåøê - Alt-Z, òáåø àì ðúéá òéöåá - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/hu.js b/jscripts/tiny_mce/themes/advanced/langs/hu.js new file mode 100644 index 000000000..49535b002 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/hu.js @@ -0,0 +1,75 @@ +// HU lang variables + +tinyMCE.addToLang('',{ +theme_style_select : '-- Stílusok --', +theme_code_desc : 'HTML forrás szerkesztése', +theme_code_title : 'HTML forrás szerkesztõ', +theme_code_wordwrap : 'Sortördelés', +theme_sub_desc : 'Alsóindex', +theme_sup_desc : 'Felsõindex', +theme_hr_desc : 'Vizszíntes vonal beszúrása', +theme_removeformat_desc : 'Formázás eltávolítása', +theme_custom1_desc : 'Az egyéni leírásod jön ide', +insert_image_border : 'Keret', +insert_image_dimensions : 'Kiterjedés', +insert_image_vspace : 'Függõleges terület', +insert_image_hspace : 'Vizszintes terület', +insert_image_align : 'Elhelyezkedés', +insert_image_align_default : '-- Nincs beállítva --', +insert_image_align_baseline : 'Baseline', +insert_image_align_top : 'Felül', +insert_image_align_middle : 'Középen', +insert_image_align_bottom : 'Alul', +insert_image_align_texttop : 'Szövegfelett', +insert_image_align_absmiddle : 'Abszolút közép', +insert_image_align_absbottom : 'Abszolút alatt', +insert_image_align_left : 'Balra', +insert_image_align_right : 'Jobbra', +theme_font_size : '-- Betûméret --', +theme_fontdefault : '-- Betûcsalád --', +theme_block : '-- Formátum --', +theme_paragraph : 'Bekezdés', +theme_div : 'Div', +theme_address : 'Cím', +theme_pre : 'Elõreformázott', +theme_h1 : 'Fejléc 1', +theme_h2 : 'Fejléc 2', +theme_h3 : 'Fejléc 3', +theme_h4 : 'Fejléc 4', +theme_h5 : 'Fejléc 5', +theme_h6 : 'Fejléc 6', +theme_colorpicker_title : 'Színválasztás', +theme_colorpicker_apply : 'Alkalmaz', +theme_forecolor_desc : 'Szövegszín választás', +theme_backcolor_desc : 'Háttérszín választás', +theme_charmap_title : 'Egyéni karakter választás', +theme_charmap_desc : 'Egyéni karakter beszúrás', +theme_visualaid_desc : 'Sorjelölõk/láthatatlan elemek kapcsolása', +insert_anchor_title : 'Horgony nbeillesztése/szerkesztése', +insert_anchor_name : 'Horgony név', +theme_anchor_desc : 'Horgony nbeillesztése/szerkesztése', +theme_insert_link_titlefield : 'Cím', +theme_clipboard_msg : 'A Másolás/Kivágás/Beillesztés nem elérhetõ Mozillában and Firefox-ban.\nSzeretnél több információt errõl a problémáról?', +theme_path : 'Útvonal', +cut_desc : 'Kivágás', +copy_desc : 'Másolás', +paste_desc : 'Beillesztés', +link_list : 'Link lista', +image_list : 'Kép lista', +browse : 'Tallózás', +image_props_desc : 'Kép tulajdonságai', +newdocument_desc : 'Új dokumentum', +class_name : 'Osztály', +newdocument : 'Biztos hogy törölni akarod az összes tartalmat?', +about_title : 'TinyMCE névjegye', +about : 'Névjegy', +license : 'Licensz', +plugins : 'Bõvítmények', +plugin : 'Bõvítmény', +author : 'Szerzõ', +version : 'Verzió', +loaded_plugins : 'Betöltött bõvítmények', +help : 'Súgó', +not_set : '-- Nincs beállítva --', +close : 'Bezárás' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/is.js b/jscripts/tiny_mce/themes/advanced/langs/is.js new file mode 100644 index 000000000..dc92c62fb --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/is.js @@ -0,0 +1,76 @@ +// Iceland lang variables by Johannes Birgir Jensson + +tinyMCE.addToLang('',{ +theme_style_select : '-- Stílar --', +theme_code_desc : 'Breyta HTML kóða', +theme_code_title : 'HTML kóðaritill', +theme_code_wordwrap : 'Word wrap', +theme_sub_desc : 'Lágskrift', +theme_sup_desc : 'Háskrift', +theme_hr_desc : 'Setja inn stiku', +theme_removeformat_desc : 'Fjarlægja textasnið', +theme_custom1_desc : 'Þín lýsing hér', +insert_image_border : 'Rammi', +insert_image_dimensions : 'Víddir', +insert_image_vspace : 'Bil fyrir ofan og neðan', +insert_image_hspace : 'Bil til vinstri og hægri', +insert_image_align : 'Jöfnun', +insert_image_align_default : '-- Ekki valin --', +insert_image_align_baseline : 'Sama lína', +insert_image_align_top : 'Uppi', +insert_image_align_middle : 'Miðja', +insert_image_align_bottom : 'Niðri', +insert_image_align_texttop : 'Texti efst', +insert_image_align_absmiddle : 'Alveg í miðju', +insert_image_align_absbottom : 'Alveg neðst', +insert_image_align_left : 'Vinstri', +insert_image_align_right : 'Hægri', +theme_font_size : '-- Textastærð --', +theme_fontdefault : '-- Leturgerð --', +theme_block : '-- Textasnið --', +theme_paragraph : 'Málsgrein', +theme_div : 'Div', +theme_address : 'Heimilisfang', +theme_pre : 'Ritvél', +theme_h1 : 'Haus 1', +theme_h2 : 'Haus 2', +theme_h3 : 'Haus 3', +theme_h4 : 'Haus 4', +theme_h5 : 'Haus 5', +theme_h6 : 'Haus 6', +theme_colorpicker_title : 'Veldu lit', +theme_colorpicker_apply : 'Staðfesta', +theme_forecolor_desc : 'Veldu textalit', +theme_backcolor_desc : 'Veldu bakgrunnslit', +theme_charmap_title : 'Veldu sérstaf', +theme_charmap_desc : 'Setja sérstaf inn', +theme_visualaid_desc : 'Sýna/fela töflur, akkeri og fleira', +insert_anchor_title : 'Setja inn/breyta akkeri', +insert_anchor_name : 'Heiti akkeris', +theme_anchor_desc : 'Setja inn/breyta akkeri', +theme_insert_link_titlefield : 'Titill', +theme_clipboard_msg : 'Afrita/klippa/líma er ekki virkt í Mozilla og Firefox.\nViltu fá upplýsingar um hvernig þú getur kveikt á þeim?', +theme_path : 'Slóð', +cut_desc : 'Klippa', +copy_desc : 'Afrita', +paste_desc : 'Skeyta', +link_list : 'Tenglalisti', +image_list : 'Myndalisti', +browse : 'Vafra', +image_props_desc : 'Stillingar myndar', +newdocument_desc : 'Nýtt skjal', +class_name : 'Class', +newdocument : 'Ertu viss um að þú viljir hreinsa allt burtu?', +about_title : 'Um TinyMCE', +about : 'Um', +license : 'Leyfi', +plugins : 'Viðbætur', +plugin : 'Viðbót', +author : 'Höfundur', +version : 'Útgáfa', +loaded_plugins : 'Virkar viðbætur', +help : 'Hjálp', +not_set : '-- Ekki valið --', +close : 'Loka', +toolbar_focus : 'Flýtilykill fyrir takka - Alt+Q, Flýtilykill fyrir ritil - Alt-Z, Flýtilykill fyrir slóð - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/it.js b/jscripts/tiny_mce/themes/advanced/langs/it.js new file mode 100644 index 000000000..6ec4370e9 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/it.js @@ -0,0 +1,64 @@ +// Variabili di lingua IT - fabrix.xm@lombardiacom.it + +tinyMCE.addToLang('',{ +theme_style_select : 'Stili', +theme_code_desc : 'Edita il sorgente HTML', +theme_code_title : 'Editor Sorgente HTML', +theme_code_wordwrap : 'Word wrap', +theme_sub_desc : 'Pedice', +theme_sup_desc : 'Apice', +theme_hr_desc : 'Inserisci linea orizzontale', +theme_removeformat_desc : 'Rimuovi formattazione', +theme_custom1_desc : 'Scrivi qui la tua descrizione personalizzata', +insert_image_border : 'Bordo', +insert_image_dimensions : 'Dimensioni', +insert_image_vspace : 'Spazio verticale', +insert_image_hspace : 'Spazio orizzontale', +insert_image_align : 'Allineamento', +insert_image_align_default : 'Default', +insert_image_align_baseline : 'Baseline', +insert_image_align_top : 'Superiore', +insert_image_align_middle : 'Centrale', +insert_image_align_bottom : 'Inferiore', +insert_image_align_texttop : 'TextTop', +insert_image_align_absmiddle : 'Centro assoluto', +insert_image_align_absbottom : 'Inferiore assoluto', +insert_image_align_left : 'Sinistra', +insert_image_align_right : 'Destra', +theme_font_size : '-- Font size --', +theme_fontdefault : '-- Font family --', +theme_block : '-- Format --', +theme_paragraph : 'Paragrafo', +theme_div : 'Div', +theme_address : 'Indirizzo', +theme_pre : 'Preformattato', +theme_h1 : 'Intestazione 1', +theme_h2 : 'Intestazione 2', +theme_h3 : 'Intestazione 3', +theme_h4 : 'Intestazione 4', +theme_h5 : 'Intestazione 5', +theme_h6 : 'Intestazione 6', +theme_colorpicker_title : 'Seleziona un colore', +theme_colorpicker_apply : 'Applica', +theme_forecolor_desc : 'Seleziona il colore', +theme_backcolor_desc : 'Seleziona il colore di sfondo', +theme_charmap_title : 'Seleziona un carattere custom', +theme_charmap_desc : 'Inserisci un carattere custom', +theme_visualaid_desc : 'Mostra/nascondi linee guida e elementi invisibili', +insert_anchor_title : 'Inserisci/modifica àncora', +insert_anchor_name : 'Nome àncora', +theme_anchor_desc : 'Inserisci/modifica àncora', +theme_insert_link_titlefield : 'Titolo', +theme_clipboard_msg : 'Copia, Taglia e Incolla non sono disponibili in Mozilla e Firefox.\nVuoi maggiori dettegli su questo problema?', +theme_path : 'Percorso', +cut_desc : 'Taglia', +copy_desc : 'Copia', +paste_desc : 'Incolla', +link_list : 'Lista link', +image_list : 'Lista immagini', +browse : 'Sfoglia', +image_props_desc : 'Proprietà dell\'immagine', +newdocument_desc : 'Nuovo documento', +class_name : 'Classe', +newdocument : 'Sicuro di voler cancellare l\'intero contenuto?' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/ja.js b/jscripts/tiny_mce/themes/advanced/langs/ja.js new file mode 100644 index 000000000..08d0abfc5 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/ja.js @@ -0,0 +1,62 @@ +// JP lang variables + +tinyMCE.addToLang('',{ +theme_style_select : '$B%9%?%$%k(B', +theme_paragraph : '$BJ8L.(B', +theme_address : '$B%"%I%l%9(B', +theme_pre : '$B@07A:Q$_(B', +theme_h1 : 'H1', +theme_h2 : 'H2', +theme_h3 : 'H3', +theme_h4 : 'H4', +theme_h5 : 'H5', +theme_h6 : 'H6', +theme_div : 'Div', +insert_anchor_title : '$B%"%s%+!<$NA^F~(B/$BJT=8(B', +insert_anchor_name : '$B%"%s%+!<$NL>A0(B', +theme_anchor_desc : '$B%"%s%+!<$NA^F~(B/$BJT=8(B', +theme_code_desc : 'HTML$B$ND>@\JT=8(B', +theme_code_title : 'HTML$B$NJT=8(B', +theme_code_wordwrap : 'Word wrap', +theme_hr_desc : '$B?eJ?@~(B', +theme_removeformat_desc : '$B@07A>pJs:o=|(B', +theme_visualaid_desc : '$BJd=u>pJs$N;k3P2=(B($B%H%0%k(B)', +theme_sub_desc : '$BE:;z2<(B', +theme_sup_desc : '$BE:;z>e(B', +theme_charmap_desc : '$BFCGr(B', +insert_image_hspace : '$B2#M>Gr(B', +insert_image_align : '$B0LCV9g$o$;(B', +insert_image_align_default : '$B0EL[(B', +insert_image_align_baseline : '$B4p=`@~(B', +insert_image_align_top : '$B>e(B', +insert_image_align_middle : '$BCf(B', +insert_image_align_bottom : '$B2<(B', +insert_image_align_texttop : '$BJ8;z$N>e(B', +insert_image_align_absmiddle : '$B@dBP$KCf(B', +insert_image_align_absbottom : '$B@dBP$K2<(B', +insert_image_align_left : '$B:8(B', +insert_image_align_right : '$B1&(B', +theme_font_size : '-- Font size --', +theme_fontdefault : '-- Font family --', +theme_block : '-- Format --', +theme_colorpicker_title : '$B?\'$N;XDj(B', +theme_colorpicker_apply : '$BE,MQ(B', +theme_forecolor_desc : '$BA07J?\'(B', +theme_backcolor_desc : 'Select background color', +theme_clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?', +theme_path : 'Path', +cut_desc : 'Cut', +copy_desc : 'Copy', +paste_desc : 'Paste', +link_list : 'Link list', +image_list : 'Image list', +browse : 'Browse', +image_props_desc : 'Image properties', +newdocument_desc : 'New document', +class_name : '$B%/%i%9(B', +newdocument : 'Are you sure you want clear all contents?' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/ko.js b/jscripts/tiny_mce/themes/advanced/langs/ko.js new file mode 100644 index 000000000..cff48a8e6 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/ko.js @@ -0,0 +1,65 @@ +// KO lang variables + +tinyMCE.addToLang('',{ +theme_style_select : '½ºÅ¸ÀÏ', +theme_code_desc : 'HTML ¼Ò½º °íÄ¡±â', +theme_code_title : 'HTML ¼Ò½º ÆíÁý±â', +theme_code_wordwrap : 'Word wrap', +theme_code_save : 'ÀúÀå', +theme_sub_desc : '¾Æ·¡Ã·ÀÚ', +theme_sup_desc : 'À§Ã·ÀÚ', +theme_hr_desc : '°¡·ÎÁÙ ³Ö±â', +theme_removeformat_desc : '¼Ó¼º Áö¿ì±â', +theme_custom1_desc : 'Your custom description here', +insert_image_border : 'Å׵θ®', +insert_image_dimensions : 'Å©±â', +insert_image_vspace : '¼¼·Î ¿©¹é', +insert_image_hspace : '°¡·Î ¿©¹é', +insert_image_align : 'Á¤·Ä', +insert_image_align_default : '±âº»°ª', +insert_image_align_baseline : 'Baseline', +insert_image_align_top : 'Top', +insert_image_align_middle : 'Middle', +insert_image_align_bottom : 'Bottom', +insert_image_align_texttop : 'TextTop', +insert_image_align_absmiddle : 'Absolute Middle', +insert_image_align_absbottom : 'Absolute Bottom', +insert_image_align_left : 'Left', +insert_image_align_right : 'Right', +theme_font_size : '-- Font size --', +theme_fontdefault : '-- Font family --', +theme_block : '-- Format --', +theme_paragraph : '´Ü¶ô', +theme_div : 'Div', +theme_address : 'ÁÖ¼Ò', +theme_pre : '¼­½Ä ÀÖÀ½', +theme_h1 : 'Á¦¸ñ 1', +theme_h2 : 'Á¦¸ñ 2', +theme_h3 : 'Á¦¸ñ 3', +theme_h4 : 'Á¦¸ñ 4', +theme_h5 : 'Á¦¸ñ 5', +theme_h6 : 'Á¦¸ñ 6', +theme_colorpicker_title : '»ö»ó ¼±ÅÃ', +theme_colorpicker_apply : 'Àû¿ë', +theme_forecolor_desc : '±ÛÀÚ »ö»ó', +theme_backcolor_desc : 'Select background color', +theme_charmap_title : 'Select custom character', +theme_charmap_desc : 'Insert custom character', +theme_visualaid_desc : 'Toggle guidelines/invisible elements', +insert_anchor_title : '¾ÞÄ¿ ³Ö±â/°íÄ¡±â', +insert_anchor_name : '¾ÞÄ¿ À̸§', +theme_anchor_desc : '¾ÞÄ¿ ³Ö±â/°íÄ¡±â', +theme_insert_link_titlefield : 'Á¦¸ñ', +theme_clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?', +theme_path : 'Path', +cut_desc : 'Cut', +copy_desc : 'Copy', +paste_desc : 'Paste', +link_list : 'Link list', +image_list : 'Image list', +browse : 'Browse', +image_props_desc : 'Image properties', +newdocument_desc : 'New document', +class_name : 'Ŭ·¡½º', +newdocument : 'Are you sure you want clear all contents?' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/nb.js b/jscripts/tiny_mce/themes/advanced/langs/nb.js new file mode 100644 index 000000000..9dd4311a2 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/nb.js @@ -0,0 +1,77 @@ +// nb = Norwegian (bokmål) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +theme_style_select : 'Stiler', +theme_code_desc : 'Redigere HTML Koden', +theme_code_title : 'HTML Kildekode Redigering', +theme_code_wordwrap : 'Ord deling', +theme_sub_desc : 'Nedsenket skrift', +theme_sup_desc : 'Opphøyd skrift', +theme_hr_desc : 'Sett inn horisontal linje', +theme_removeformat_desc : 'Fjern formatering', +theme_custom1_desc : 'Din spesialfunksjons beskrivelse her', +insert_image_border : 'Ramme', +insert_image_dimensions : 'Dimensjoner', +insert_image_vspace : 'Vertikalt tomrom', +insert_image_hspace : 'Horisontalt tomrom', +insert_image_align : 'Justering', +insert_image_align_default : 'Intet', +insert_image_align_baseline : 'Bunnlinjen', +insert_image_align_top : 'Lengst opp', +insert_image_align_middle : 'Midten', +insert_image_align_bottom : 'Lengst ned', +insert_image_align_texttop : 'Tekstens topp', +insert_image_align_absmiddle : 'Absolutt midten', +insert_image_align_absbottom : 'Absolutt lengst ned', +insert_image_align_left : 'Venstre', +insert_image_align_right : 'Høyre', +insert_image_delta_width : 30, +insert_image_delta_height : 10, +theme_font_size : '-- Font størrelse --', +theme_fontdefault : '-- Font familie --', +theme_block : '-- Format --', +theme_paragraph : 'Paragraf', +theme_div : 'Div', +theme_address : 'Adresse', +theme_pre : 'Pre-formattert', +theme_h1 : 'Overskrift 1', +theme_h2 : 'Overskrift 2', +theme_h3 : 'Overskrift 3', +theme_h4 : 'Overskrift 4', +theme_h5 : 'Overskrift 5', +theme_h6 : 'Overskrift 6', +theme_colorpicker_title : 'Velg en farge', +theme_colorpicker_apply : 'Bruk', +theme_forecolor_desc : 'Velg forgrunnsfarge', +theme_backcolor_desc : 'Velg bakgrunnsfarge', +theme_charmap_title : 'Velg spesialtegn', +theme_charmap_desc : 'Sett inn spesialtegn', +theme_visualaid_desc : 'Slå av/på usynlige elementer', +insert_anchor_title : 'Opprette/endre anker', +insert_anchor_name : 'Ankernavn', +theme_anchor_desc : 'Opprette/endre anker', +theme_insert_link_titlefield : 'Tittel', +theme_clipboard_msg : 'Kopier/Klipp ut/Lim inn er ikke tilgjengelig i Mozilla/Firefox.\nVil du ha mere informasjon om dette?', +theme_path : 'Søkevei', +cut_desc : 'Klipp ut', +copy_desc : 'Kopier', +paste_desc : 'Lim inn', +link_list : 'Lenke liste', +image_list : 'Bilde liste', +browse : 'Bla gjennom', +image_props_desc : 'Bilde egenskaper', +newdocument_desc : 'Nytt dokument', +class_name : 'Stil', +newdocument : 'Er du sikker på at du vil tømme hele redigeringsområdet?', +about_title : 'Om TinyMCE', +about : 'Om', +license : 'Lisens', +plugins : 'Innstikksprogrammer', +plugin : 'Innstikksprogram', +author : 'Utviklere', +version : 'Versjon', +loaded_plugins : 'Lastet innstikksprogram', +help : 'Hjelp', +not_set : '-- Ikke satt --', +close : 'Stopp' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/nl.js b/jscripts/tiny_mce/themes/advanced/langs/nl.js new file mode 100644 index 000000000..bad5922db --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/nl.js @@ -0,0 +1,76 @@ +// NL lang variables + +tinyMCE.addToLang('',{ +theme_style_select : '-- Stijlen --', +theme_code_desc : 'HTML bron bewerken', +theme_code_title : 'HTML code-editor', +theme_code_wordwrap : 'Terugloop', +theme_sub_desc : 'Subscript', +theme_sup_desc : 'Superscript', +theme_hr_desc : 'Horizontale lijn invoegen', +theme_removeformat_desc : 'Opmaak verwijderen', +theme_custom1_desc : 'Tik hier een omschrijving', +insert_image_border : 'Rand', +insert_image_dimensions : 'Afmetingen', +insert_image_vspace : 'Verticale marge', +insert_image_hspace : 'Horizontale marge', +insert_image_align : 'Uitlijning', +insert_image_align_default : '-- geen --', +insert_image_align_baseline : 'Basislijn', +insert_image_align_top : 'Boven', +insert_image_align_middle : 'Midden', +insert_image_align_bottom : 'Onder', +insert_image_align_texttop : 'Bovenkant tekst', +insert_image_align_absmiddle : 'Absoluut midden', +insert_image_align_absbottom : 'Absoluut onder', +insert_image_align_left : 'Links', +insert_image_align_right : 'Rechts', +theme_font_size : '-- Lettergrootte --', +theme_fontdefault : '-- Lettertype --', +theme_block : '-- Paragraaf --', +theme_paragraph : 'Paragraaf', +theme_div : 'Blok', +theme_address : 'Adres', +theme_pre : 'Opgemaakt', +theme_h1 : 'Kop 1', +theme_h2 : 'Kop 2', +theme_h3 : 'Kop 3', +theme_h4 : 'Kop 4', +theme_h5 : 'Kop 5', +theme_h6 : 'Kop 6', +theme_colorpicker_title : 'Selecteer een kleur', +theme_colorpicker_apply : 'Toepassen', +theme_forecolor_desc : 'Een tekstkleur selecteren', +theme_backcolor_desc : 'Een achtergrondkleur selecteren', +theme_charmap_title : 'Speciale tekens invoegen', +theme_charmap_desc : 'Speciale tekens invoegen', +theme_visualaid_desc : 'Onzichtbare elementen en hulplijnen aan/uit', +insert_anchor_title : 'Bladwijzer invoegen/bewerken', +insert_anchor_name : 'Bladwijzer naam', +theme_anchor_desc : 'Bladwijzer invoegen/bewerken', +theme_insert_link_titlefield : 'titel', +theme_clipboard_msg : 'Kopiëren/Knippen/Plakken is uit veiligheidsoverwegingen niet direct beschikbaar in Mozilla en Firefox.\nWilt u meer informatie over deze kwestie?', +theme_path : 'Pad', +cut_desc : 'Knippen', +copy_desc : 'Kopiëren', +paste_desc : 'Plakken', +link_list : 'Hyperlinklijst', +image_list : 'Afbeeldinglijst', +browse : 'Bladeren', +image_props_desc : 'Eigenschappen van afbeelding', +newdocument_desc : 'Nieuw document', +class_name : 'Stijl', +newdocument : 'Weet u zeker dat u de hele inhoud wilt wissen?', +about_title : 'Over TinyMCE', +about : 'Over', +license : 'Licentie', +plugins : 'Plugins', +plugin : 'Plugin', +author : 'Author', +version : 'Versie', +loaded_plugins : 'Ingeladen plugins', +help : 'Help', +not_set : '-- geen --', +close : 'Sluiten', +toolbar_focus : 'Ga naar werkbalk knoppen - Alt+Q, Ga naar editor - Alt-Z, Ga naar pad - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/nn.js b/jscripts/tiny_mce/themes/advanced/langs/nn.js new file mode 100644 index 000000000..720982fba --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/nn.js @@ -0,0 +1,77 @@ +// nn = Norwegian (nynorsk) lang variables by Knut B. Jacobsen + +tinyMCE.addToLang('',{ +theme_style_select : 'Stiler', +theme_code_desc : 'Redigere HTML Koden', +theme_code_title : 'HTML Kildekode Redigering', +theme_code_wordwrap : 'Ord deling', +theme_sub_desc : 'Nedsenket skrift', +theme_sup_desc : 'Opphøgd skrift', +theme_hr_desc : 'Sett inn horisontal linje', +theme_removeformat_desc : 'Fjern formatering', +theme_custom1_desc : 'Din spesialfunksjons beskrivelse her', +insert_image_border : 'Ramme', +insert_image_dimensions : 'Dimensjoner', +insert_image_vspace : 'Vertikalt tomrom', +insert_image_hspace : 'Horisontalt tomrom', +insert_image_align : 'Justering', +insert_image_align_default : 'Intet', +insert_image_align_baseline : 'Bunnlinjen', +insert_image_align_top : 'Lengst opp', +insert_image_align_middle : 'Midten', +insert_image_align_bottom : 'Lengst ned', +insert_image_align_texttop : 'Tekstens topp', +insert_image_align_absmiddle : 'Absolutt midten', +insert_image_align_absbottom : 'Absolutt lengst ned', +insert_image_align_left : 'Venstre', +insert_image_align_right : 'Høgre', +insert_image_delta_width : 30, +insert_image_delta_height : 10, +theme_font_size : '-- Font størrelse --', +theme_fontdefault : '-- Font familie --', +theme_block : '-- Format --', +theme_paragraph : 'Paragraf', +theme_div : 'Div', +theme_address : 'Adresse', +theme_pre : 'Pre-formattert', +theme_h1 : 'Overskrift 1', +theme_h2 : 'Overskrift 2', +theme_h3 : 'Overskrift 3', +theme_h4 : 'Overskrift 4', +theme_h5 : 'Overskrift 5', +theme_h6 : 'Overskrift 6', +theme_colorpicker_title : 'Velg en farge', +theme_colorpicker_apply : 'Bruk', +theme_forecolor_desc : 'Velg forgrunnsfarge', +theme_backcolor_desc : 'Velg bakgrunnsfarge', +theme_charmap_title : 'Velg spesialtegn', +theme_charmap_desc : 'Sett inn spesialtegn', +theme_visualaid_desc : 'Slå av/på usynlige elementer', +insert_anchor_title : 'Opprette/endre anker', +insert_anchor_name : 'Ankernavn', +theme_anchor_desc : 'Opprette/endre anker', +theme_insert_link_titlefield : 'Tittel', +theme_clipboard_msg : 'Kopier/Klipp ut/Lim inn er ikke tilgjengelig i Mozilla/Firefox.\nVil du ha mere informasjon om dette?', +theme_path : 'Søkevei', +cut_desc : 'Klipp ut', +copy_desc : 'Kopier', +paste_desc : 'Lim inn', +link_list : 'Lenke liste', +image_list : 'Bilde liste', +browse : 'Bla gjennom', +image_props_desc : 'Bilde egenskaper', +newdocument_desc : 'Nytt dokument', +class_name : 'Stil', +newdocument : 'Er du sikker på at du vil tømme hele redigeringsområdet?', +about_title : 'Om TinyMCE', +about : 'Om', +license : 'Lisens', +plugins : 'Innstikksprogrammer', +plugin : 'Innstikksprogram', +author : 'Utviklere', +version : 'Versjon', +loaded_plugins : 'Lastet innstikksprogram', +help : 'Hjelp', +not_set : '-- Ikkje satt --', +close : 'Stopp' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/pl.js b/jscripts/tiny_mce/themes/advanced/langs/pl.js new file mode 100644 index 000000000..3abfee6b6 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/pl.js @@ -0,0 +1,79 @@ +// PL lang variables +// fixed by Wooya +// http://www.mfusion.prv.pl +// fixed by lemiel 14.11.2005 + +tinyMCE.addToLang('',{ +theme_style_select : 'Styl', +theme_code_desc : 'Edytuj zródd³o html', +theme_code_title : 'Edytor zród³a html', +theme_code_wordwrap : 'Zawijanie wierszy', +theme_sub_desc : 'Nadpisywanie', +theme_sup_desc : 'Podpisywanie', +theme_hr_desc : 'Wstaw poziom± liniê', +theme_removeformat_desc : 'Usuñ formatowanie', +theme_custom1_desc : 'Wstaw w³asny opis', +insert_image_border : 'Ramka', +insert_image_dimensions : 'Wymiary', +insert_image_vspace : 'Pionowy odstêp', +insert_image_hspace : 'Poziomy odstêp', +insert_image_align : 'Otaczanie', +insert_image_align_default : 'Domy¶lne', +insert_image_align_baseline : 'Do linii bazowej', +insert_image_align_top : 'Górne', +insert_image_align_middle : '¦rodkowe', +insert_image_align_bottom : 'Dolne', +insert_image_align_texttop : 'Tekst powy¿ej', +insert_image_align_absmiddle : 'Absolutny ¶rodek', +insert_image_align_absbottom : 'Absolutny dó³', +insert_image_align_left : 'Lewe', +insert_image_align_right : 'Prawe', +theme_font_size : '-- Rozmiar czcionki --', +theme_fontdefault : '-- Rodzina czcionki --', +theme_block : '-- Format --', +theme_paragraph : '-- Paragraf --', +theme_div : 'Div', +theme_address : 'Adres', +theme_pre : 'Preformatowanie', +theme_h1 : 'Nag³ówek 1', +theme_h2 : 'Nag³ówek 2', +theme_h3 : 'Nag³ówek 3', +theme_h4 : 'Nag³ówek 4', +theme_h5 : 'Nag³ówek 5', +theme_h6 : 'Nag³ówek 6', +theme_colorpicker_title : 'Wybierz kolor', +theme_colorpicker_apply : 'Wybierz', +theme_forecolor_desc : 'Wybierz kolor tekstu', +theme_backcolor_desc : 'Wybierz kolor t³a', +theme_charmap_title : 'Wybierz znak', +theme_charmap_desc : 'Wstaw znak', +theme_visualaid_desc : 'Prze³±cz linie prowadz±ce/niewidoczne elementy', +insert_anchor_title : 'Kotwica', +insert_anchor_name : 'Nazwa kotwicy', +theme_anchor_desc : 'Wstaw/Edytuj kotwicê', +theme_insert_link_titlefield : 'Tytu³', +theme_clipboard_msg : 'Kopiuj/Edytuj/Wklej nie jest dostêpne w przegl±darkach Mozilla i Firefox.\nPotrzebujesz wiêcej informacji na ten temat?', +theme_path : 'Œcie¿ka', +cut_desc : 'Wytnij', +copy_desc : 'Kopiuj', +paste_desc : 'Wklej', +link_list : 'Lista linków', +image_list : 'Lista obrazków', +browse : 'Przegl±daj', +image_props_desc : 'W³a¶ciwosci obrazka', +newdocument_desc : 'Nowy dokument', +class_name : 'Klasa', +newdocument : 'Czy jeste¶ pewien, ¿e chcesz wyczy¶ciæ zawarto¶æ tego dokumentu?', +about_title : 'O TinyMCE ...', +about : 'O ...', +license : 'Licencja', +plugins : 'Pluginy', +plugin : 'Plugin', +author : 'Autor', +version : 'Wersja', +loaded_plugins : 'Za³adowane pluginy', +help : 'Pomoc', +not_set : '-- Nie wybrano --', +close : 'Zamknij', +toolbar_focus : 'Skocz do przycisków narzêdzi - Alt+Q, Skocz do edytora - Alt-Z, Skocz do ¶cie¿ki elementu - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/pt.js b/jscripts/tiny_mce/themes/advanced/langs/pt.js new file mode 100644 index 000000000..3980d6c66 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/pt.js @@ -0,0 +1,65 @@ +// PT lang variables + +tinyMCE.addToLang('',{ +theme_style_select : 'Estilos CSS', +theme_code_desc : 'Editar Fonte HTML', +theme_code_title : 'Editor de fonte HTML', +theme_code_save : 'Guardar', +theme_code_wordwrap : 'Translinear palavras', +theme_sub_desc : 'Subscrito', +theme_sup_desc : 'Superscrito', +theme_hr_desc : 'Inserir linha horizontal', +theme_removeformat_desc : 'Remover formatação', +theme_custom1_desc : 'Descrição customizada aqui', +insert_image_border : 'Borda', +insert_image_dimensions : 'Dimensões', +insert_image_vspace : 'Espaçamento Vert.', +insert_image_hspace : 'Espaçamento Horiz.', +insert_image_align : 'Alinhamento', +insert_image_align_default : 'Por omissão', +insert_image_align_baseline : 'Linha de base', +insert_image_align_top : 'Topo', +insert_image_align_middle : 'Centrado', +insert_image_align_bottom : 'Fundo', +insert_image_align_texttop : 'Topo do Texto', +insert_image_align_absmiddle : 'Centrado absoluto', +insert_image_align_absbottom : 'Fundo absoluto', +insert_image_align_left : 'Esquerda', +insert_image_align_right : 'Direita', +theme_font_size : '-- Font size --', +theme_fontdefault : '-- Font family --', +theme_block : '-- Format --', +theme_paragraph : 'Parágrafo', +theme_div : 'Bloco HTML', +theme_address : 'Morada', +theme_pre : 'Pré formatado', +theme_h1 : 'Título 1', +theme_h2 : 'Título 2', +theme_h3 : 'Título 3', +theme_h4 : 'Título 4', +theme_h5 : 'Título 5', +theme_h6 : 'Título 6', +theme_colorpicker_title : 'Seleccione uma côr', +theme_colorpicker_apply : 'Aplicar', +theme_forecolor_desc : 'Seleccione côr da frente', +theme_backcolor_desc : 'Select background color', +theme_charmap_title : 'Seleccione símbolo customizado', +theme_charmap_desc : 'Inserir símbolo customizado', +theme_visualaid_desc : 'Ligar/Desligar guias/elementos invisíveis', +insert_anchor_title : 'Inserir/editar âncora', +insert_anchor_name : 'Nome da âncora', +theme_anchor_desc : 'Inserir/editar âncora', +theme_insert_link_titlefield : 'Título', +theme_clipboard_msg : 'Copiar/Cortar/Colar não está disponível em Mozilla e Firefox.\nPretende obter mais informação acerca deste assunto?', +theme_path : 'Path', +cut_desc : 'Cortar', +copy_desc : 'Copiar', +paste_desc : 'Colar', +link_list : 'Link list', +image_list : 'Image list', +browse : 'Browse', +image_props_desc : 'Image properties', +newdocument_desc : 'New document', +class_name : 'Classe de CSS', +newdocument : 'Are you sure you want clear all contents?' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/pt_br.js b/jscripts/tiny_mce/themes/advanced/langs/pt_br.js new file mode 100644 index 000000000..5f3786423 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/pt_br.js @@ -0,0 +1,115 @@ +/** + * pt_br lang variables + * Brazilian Portuguese + * + * Authors : ???? + * Revision and modifications: + * Marcio Barbosa (mpg) + * Last Updated : November 26, 2005 + * TinyMCE Version : 2.0RC4 + */ +tinyMCE.addToLang('',{ +theme_style_select : 'Estilos', +theme_code_desc : 'Editar Código HTML', +theme_code_title : 'Editor de Código HTML', +theme_code_wordwrap : 'Quebrar Linhas', +theme_sub_desc : 'Subscrito', +theme_sup_desc : 'Subrescrito', +theme_hr_desc : 'Inserir linha horizontal', +theme_removeformat_desc : 'Remover formatação', +theme_custom1_desc : 'Sua descrição personalizada aqui', +insert_image_border : 'Borda', +insert_image_dimensions : 'Dimensões', +insert_image_vspace : 'Espaço Vertical', +insert_image_hspace : 'Espaço Horizontal', +insert_image_align : 'Alinhamento', +insert_image_align_default : 'Padrão', +insert_image_align_baseline : 'Linha base', +insert_image_align_top : 'Topo', +insert_image_align_middle : 'Centro', +insert_image_align_bottom : 'Fundo', +insert_image_align_texttop : 'Texto ao Topo', +insert_image_align_absmiddle : 'Centro Absoluto', +insert_image_align_absbottom : 'Fundo Absoluto', +insert_image_align_left : 'Esquerda', +insert_image_align_right : 'Direita', +theme_font_size : '-- Corpo --', +theme_fontdefault : '-- Tipo de Fonte --', +theme_block : '-- Formato --', +theme_paragraph : 'Parágrafo', +theme_div : 'Div', +theme_address : 'Endereço', +theme_pre : 'Pré-formatado', +theme_h1 : 'Cabeçalho 1', +theme_h2 : 'Cabeçalho 2', +theme_h3 : 'Cabeçalho 3', +theme_h4 : 'Cabeçalho 4', +theme_h5 : 'Cabeçalho 5', +theme_h6 : 'Cabeçalho 6', +theme_colorpicker_title : 'Selecionar côr', +theme_colorpicker_apply : 'Aplicar', +theme_forecolor_desc : 'Selecionar côr do texto', +theme_backcolor_desc : 'Selecionar côr de fundo', +theme_charmap_title : 'Selecionar caracter especial', +theme_charmap_desc : 'Inserir caracter especial', +theme_charmap_alpha_desc : 'Caracteres alfabéticos', +theme_charmap_arrows_title : 'Flechas', +theme_charmap_arrows_desc : 'Caracteres de flechas', +theme_charmap_greek_title : 'Gregos', +theme_charmap_greek_desc : 'Caracteres Gregos', +theme_charmap_math_title : 'Mathematicos', +theme_charmap_math_desc : 'Caracteres mathematicos', +theme_charmap_misc_title : 'Diversos', +theme_charmap_misc_desc : 'Caracteres diversos', +theme_charmap_money_title : 'Moedas', +theme_charmap_money_desc : 'Caracteres de moedas', +theme_charmap_quotaion_title : 'Apóstrofes', +theme_charmap_quotaion_desc : 'Caracteres de Apóstrofe', +theme_visualaid_desc : 'Trocar as linhas de ajuda por elementos invisíveis', +insert_anchor_title : 'Inserir/editar âncora', +insert_anchor_name : 'Nome da âncora', +theme_anchor_desc : 'Inserir/editar âncora', +theme_insert_link_titlefield : 'Título', +theme_clipboard_msg : 'Não se pode utiliza os comando de Copiar / Cortar / Colar no Mozilla e Firefox.\r\nUse o teclado para Copiar (Ctrl+C) / Cortar (Ctrl+X) / Colar (Ctrl+V)\r\nQuer obter mais informação?', +theme_path : 'Rota', +cut_desc : 'Cortar (Ctrl+X)', +copy_desc : 'Copiar (Ctrl+C)', +paste_desc : 'Colar (Ctrl+V)', +link_list : 'Lista de links', +image_list : 'Lista de imagens', +browse : 'Navegar', +image_props_desc : 'Propriedades da imagem', +newdocument_desc : 'Novo documento', +class_name : 'Classe', +newdocument : 'Tem certesa que deseja apagar todo o conteúdo?', +about_title : 'Sobre o TinyMCE', +about : 'Sobre', +license : 'Licença', +plugins : 'Plugins', +plugin : 'Plugin', +author : 'Autor', +version : 'Versão', +loaded_plugins : 'Plugins carregados', +help : 'Ajuda', +not_set : '-- Por padrão --', +close : 'Fechar', +toolbar_focus : 'Ir para a barra de ferramentas - Alt+Q, Ir para o editor - Alt+Z, Ir para o elemento de destino - Alt+X', +theme_visualaid_desc : 'Tornar linhas visíveis/invisíveis', +insert_anchor_title : 'Inserir/editar âncora', +insert_anchor_name : 'Nome da âncora', +theme_anchor_desc : 'Inserir/editar âncora', +theme_insert_link_titlefield : 'Título', +theme_clipboard_msg : 'Copiar/Recortar/Colar não é permitido no Mozilla e Firefox.\nQuer mais informações sobre isso?', +theme_path : 'Caminho', +cut_desc : 'Recortar', +copy_desc : 'Copiar', +paste_desc : 'Colar', +link_list : 'Lista de Links', +image_list : 'Lista de Imagens', +browse : 'Navegar', +image_props_desc : 'Propriedades da Imagem', +newdocument_desc : 'Novo Documento', +class_name : 'Classe', +newdocument : 'Tem certeza que deseja limpar todo o conteúdo?', +theme_advanced_anchor_delta_width : 20 +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/readme.txt b/jscripts/tiny_mce/themes/advanced/langs/readme.txt new file mode 100644 index 000000000..ef48d2ba4 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/readme.txt @@ -0,0 +1,4 @@ +Theme specific language packs. + +The language pack codes are based on ISO-639-2 +http://www.loc.gov/standards/iso639-2/englangn.html diff --git a/jscripts/tiny_mce/themes/advanced/langs/ru.js b/jscripts/tiny_mce/themes/advanced/langs/ru.js new file mode 100644 index 000000000..c042cc450 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/ru.js @@ -0,0 +1,76 @@ +// Russian lang variables cp1251 + +tinyMCE.addToLang('',{ +theme_style_select : '-- Ñòèëè --', +theme_code_desc : 'Ðåäàêòèðîâàòü HTML êîäû', +theme_code_title : 'Ðåäàêòîð HTML êîäîâ', +theme_code_wordwrap : 'Ïåðåíîñ ïî ñëîâàì', +theme_sub_desc : 'Íèæíèé èíäåêñ', +theme_sup_desc : 'Âåðõíèé èíäåêñ', +theme_hr_desc : 'Âñòàâèòü ãîðèçîíòàëüíûé ðàçäåëèòåëü', +theme_removeformat_desc : 'Óáðàòü ôîðìàòèðîâàíèå', +theme_custom1_desc : 'Âàøå ïðîèçâîëüíîå îïèñàíèå', +insert_image_border : 'Ðàìêà', +insert_image_dimensions : 'Ðàçìåðû', +insert_image_vspace : 'Âåðòèêàëüíûé îòñòóï', +insert_image_hspace : 'Ãîðèçîíòàëüíûé îòñòóï', +insert_image_align : 'Âûðàâíèâàíèå', +insert_image_align_default : '-- Íå çàäàíî --', +insert_image_align_baseline : 'Ïî áàçîâîé ëèíèè', +insert_image_align_top : 'Ïî âåðõó', +insert_image_align_middle : 'Ïîñðåäèíå', +insert_image_align_bottom : 'Ïî íèçó', +insert_image_align_texttop : 'Ïî âåðõó òåêñòà', +insert_image_align_absmiddle : 'Àáñîëþòíî ïîñðåäèíå', +insert_image_align_absbottom : 'Àáñîëþòíî ñâåðõó', +insert_image_align_left : 'Âëåâî', +insert_image_align_right : 'Âïðàâî', +theme_font_size : '-- Ðàçìåð øðèôòà --', +theme_fontdefault : '-- Ñåìåéñòâî øðèôòîâ --', +theme_block : '-- Ôîðìàò --', +theme_paragraph : 'Àáçàö', +theme_div : 'Div', +theme_address : 'Ñòèëü àäðåñà', +theme_pre : ':`Ïðåäâàðèòåëüíî ôîðìàòèðîâàííûé', +theme_h1 : 'Çàãîëîâîê 1', +theme_h2 : 'Çàãîëîâîê 2', +theme_h3 : 'Çàãîëîâîê 3', +theme_h4 : 'Çàãîëîâîê 4', +theme_h5 : 'Çàãîëîâîê 5', +theme_h6 : 'Çàãîëîâîê 6', +theme_colorpicker_title : 'Âûáðàòü öâåò', +theme_colorpicker_apply : 'Ïðèìåíèòü', +theme_forecolor_desc : 'Âûáðàòü öâåò òåêñòà', +theme_backcolor_desc : 'Âûáðàòü öâåò ôîíà', +theme_charmap_title : 'Âûáîð ïðîèçâîëüíîãî ñèìâîëà', +theme_charmap_desc : 'Âñòàâèòü ïðîèçâîëüíûé ñèìâîë', +theme_visualaid_desc : 'Ïîêàçàòü ãðàíèöû ñêðûòûõ ýëåìåíòîâ', +insert_anchor_title : 'Âñòàâèòü/ðåäàêòèðîâàòü ÿêîðü', +insert_anchor_name : 'Èìÿ ÿêîðÿ', +theme_anchor_desc : 'Âñòàâèòü/ðåäàêòèðîâàòü ÿêîðü', +theme_insert_link_titlefield : 'Çàãîëîâîê', +theme_clipboard_msg : 'Êîïèðîâàòü/Âûðåçàòü/Âñòàâèòü íåäîñòóïíû äëÿ Mozilla è Firefox.\nÕîòèòå óçíàòü îá ýòîì ïîäðîáíåå?', +theme_path : 'Ïóòü', +cut_desc : 'Âûðåçàòü', +copy_desc : 'Êîïèðîâàòü', +paste_desc : 'Âñòàâèòü', +link_list : 'Ïåðå÷àíü ññûëîê', +image_list : 'Ïåðå÷åíü êàðòèíîê', +browse : 'Ïîäîáðàòü', +image_props_desc : 'Ñâîéñòâà êàðòèíêè', +newdocument_desc : 'Íîâûé äîêóìåíò', +class_name : 'Êëàññ', +newdocument : 'Âû óâåðåíû, ÷òî õîòèòå î÷èñòèòü âñ¸ ñîäåðæèìîå?', +about_title : 'Î TinyMCE', +about : 'Î TinyMCE', +license : 'Ëèöåíçèÿ', +plugins : 'Ïëàãèíû', +plugin : 'Ïëàãèí', +author : 'Àâòîð', +version : 'Âåðñèÿ', +loaded_plugins : 'Çàãðóæåííûå ïëàãèíû', +help : 'Ïîìîùü', +not_set : '-- íå óñòàíîâëåíî --', +close : 'Çàêðûòü', +toolbar_focus : 'Ïåðåìåñòèòü ôîêóñ íà ïàíåëü èíñòðóìåíòîâ - Alt+Q, Ïåðåìåñòèòü ôîêóñ â ðåäàêòîð - Alt-Z, Ïåðåìåñòèòü ôîêóñ íà ýëåìåíò ïóòè - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/ru_KOI8-R.js b/jscripts/tiny_mce/themes/advanced/langs/ru_KOI8-R.js new file mode 100644 index 000000000..3149c7ced --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/ru_KOI8-R.js @@ -0,0 +1,76 @@ +// Russian lang variables KOI8-R + +tinyMCE.addToLang('',{ +theme_style_select : '-- óÔÉÌÉ --', +theme_code_desc : 'òÅÄÁËÔÉÒÏ×ÁÔØ HTML ËÏÄÙ', +theme_code_title : 'òÅÄÁËÔÏÒ HTML ËÏÄÏ×', +theme_code_wordwrap : 'ðÅÒÅÎÏÓ ÐÏ ÓÌÏ×ÁÍ', +theme_sub_desc : 'îÉÖÎÉÊ ÉÎÄÅËÓ', +theme_sup_desc : '÷ÅÒÈÎÉÊ ÉÎÄÅËÓ', +theme_hr_desc : '÷ÓÔÁ×ÉÔØ ÇÏÒÉÚÏÎÔÁÌØÎÙÊ ÒÁÚÄÅÌÉÔÅÌØ', +theme_removeformat_desc : 'õÂÒÁÔØ ÆÏÒÍÁÔÉÒÏ×ÁÎÉÅ', +theme_custom1_desc : '÷ÁÛÅ ÐÒÏÉÚ×ÏÌØÎÏÅ ÏÐÉÓÁÎÉÅ', +insert_image_border : 'òÁÍËÁ', +insert_image_dimensions : 'òÁÚÍÅÒÙ', +insert_image_vspace : '÷ÅÒÔÉËÁÌØÎÙÊ ÏÔÓÔÕÐ', +insert_image_hspace : 'çÏÒÉÚÏÎÔÁÌØÎÙÊ ÏÔÓÔÕÐ', +insert_image_align : '÷ÙÒÁ×ÎÉ×ÁÎÉÅ', +insert_image_align_default : '-- îÅ ÚÁÄÁÎÏ --', +insert_image_align_baseline : 'ðÏ ÂÁÚÏ×ÏÊ ÌÉÎÉÉ', +insert_image_align_top : 'ðÏ ×ÅÒÈÕ', +insert_image_align_middle : 'ðÏÓÒÅÄÉÎÅ', +insert_image_align_bottom : 'ðÏ ÎÉÚÕ', +insert_image_align_texttop : 'ðÏ ×ÅÒÈÕ ÔÅËÓÔÁ', +insert_image_align_absmiddle : 'áÂÓÏÌÀÔÎÏ ÐÏÓÒÅÄÉÎÅ', +insert_image_align_absbottom : 'áÂÓÏÌÀÔÎÏ Ó×ÅÒÈÕ', +insert_image_align_left : '÷ÌÅ×Ï', +insert_image_align_right : '÷ÐÒÁ×Ï', +theme_font_size : '-- òÁÚÍÅÒ ÛÒÉÆÔÁ --', +theme_fontdefault : '-- óÅÍÅÊÓÔ×Ï ÛÒÉÆÔÏ× --', +theme_block : '-- æÏÒÍÁÔ --', +theme_paragraph : 'áÂÚÁÃ', +theme_div : 'Div', +theme_address : 'óÔÉÌØ ÁÄÒÅÓÁ', +theme_pre : ':`ðÒÅÄ×ÁÒÉÔÅÌØÎÏ ÆÏÒÍÁÔÉÒÏ×ÁÎÎÙÊ', +theme_h1 : 'úÁÇÏÌÏ×ÏË 1', +theme_h2 : 'úÁÇÏÌÏ×ÏË 2', +theme_h3 : 'úÁÇÏÌÏ×ÏË 3', +theme_h4 : 'úÁÇÏÌÏ×ÏË 4', +theme_h5 : 'úÁÇÏÌÏ×ÏË 5', +theme_h6 : 'úÁÇÏÌÏ×ÏË 6', +theme_colorpicker_title : '÷ÙÂÒÁÔØ Ã×ÅÔ', +theme_colorpicker_apply : 'ðÒÉÍÅÎÉÔØ', +theme_forecolor_desc : '÷ÙÂÒÁÔØ Ã×ÅÔ ÔÅËÓÔÁ', +theme_backcolor_desc : '÷ÙÂÒÁÔØ Ã×ÅÔ ÆÏÎÁ', +theme_charmap_title : '÷ÙÂÏÒ ÐÒÏÉÚ×ÏÌØÎÏÇÏ ÓÉÍ×ÏÌÁ', +theme_charmap_desc : '÷ÓÔÁ×ÉÔØ ÐÒÏÉÚ×ÏÌØÎÙÊ ÓÉÍ×ÏÌ', +theme_visualaid_desc : 'ðÏËÁÚÁÔØ ÇÒÁÎÉÃÙ ÓËÒÙÔÙÈ ÜÌÅÍÅÎÔÏ×', +insert_anchor_title : '÷ÓÔÁ×ÉÔØ/ÒÅÄÁËÔÉÒÏ×ÁÔØ ÑËÏÒØ', +insert_anchor_name : 'éÍÑ ÑËÏÒÑ', +theme_anchor_desc : '÷ÓÔÁ×ÉÔØ/ÒÅÄÁËÔÉÒÏ×ÁÔØ ÑËÏÒØ', +theme_insert_link_titlefield : 'úÁÇÏÌÏ×ÏË', +theme_clipboard_msg : 'ëÏÐÉÒÏ×ÁÔØ/÷ÙÒÅÚÁÔØ/÷ÓÔÁ×ÉÔØ ÎÅÄÏÓÔÕÐÎÙ ÄÌÑ Mozilla É Firefox.\nèÏÔÉÔÅ ÕÚÎÁÔØ Ï ÜÔÏÍ ÐÏÄÒÏÂÎÅÅ?', +theme_path : 'ðÕÔØ', +cut_desc : '÷ÙÒÅÚÁÔØ', +copy_desc : 'ëÏÐÉÒÏ×ÁÔØ', +paste_desc : '÷ÓÔÁ×ÉÔØ', +link_list : 'ðÅÒÅÞÁÎØ ÓÓÙÌÏË', +image_list : 'ðÅÒÅÞÅÎØ ËÁÒÔÉÎÏË', +browse : 'ðÏÄÏÂÒÁÔØ', +image_props_desc : 'ó×ÏÊÓÔ×Á ËÁÒÔÉÎËÉ', +newdocument_desc : 'îÏ×ÙÊ ÄÏËÕÍÅÎÔ', +class_name : 'ëÌÁÓÓ', +newdocument : '÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ÏÞÉÓÔÉÔØ ×Ó£ ÓÏÄÅÒÖÉÍÏÅ?', +about_title : 'ï TinyMCE', +about : 'ï TinyMCE', +license : 'ìÉÃÅÎÚÉÑ', +plugins : 'ðÌÁÇÉÎÙ', +plugin : 'ðÌÁÇÉÎ', +author : 'á×ÔÏÒ', +version : '÷ÅÒÓÉÑ', +loaded_plugins : 'úÁÇÒÕÖÅÎÎÙÅ ÐÌÁÇÉÎÙ', +help : 'ðÏÍÏÝØ', +not_set : '-- ÎÅ ÕÓÔÁÎÏ×ÌÅÎÏ --', +close : 'úÁËÒÙÔØ', +toolbar_focus : 'ðÅÒÅÍÅÓÔÉÔØ ÆÏËÕÓ ÎÁ ÐÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ× - Alt+Q, ðÅÒÅÍÅÓÔÉÔØ ÆÏËÕÓ × ÒÅÄÁËÔÏÒ - Alt-Z, ðÅÒÅÍÅÓÔÉÔØ ÆÏËÕÓ ÎÁ ÜÌÅÍÅÎÔ ÐÕÔÉ - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/ru_UTF-8.js b/jscripts/tiny_mce/themes/advanced/langs/ru_UTF-8.js new file mode 100644 index 000000000..ccb19872e --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/ru_UTF-8.js @@ -0,0 +1,76 @@ +// Russian lang variables UTF-8 + +tinyMCE.addToLang('',{ +theme_style_select : '-- Стили --', +theme_code_desc : 'Редактировать HTML коды', +theme_code_title : 'Редактор HTML кодов', +theme_code_wordwrap : 'Перенос по словам', +theme_sub_desc : 'Нижний индекс', +theme_sup_desc : 'Верхний индекс', +theme_hr_desc : 'Вставить горизонтальный разделитель', +theme_removeformat_desc : 'Убрать форматирование', +theme_custom1_desc : 'Ваше произвольное описание', +insert_image_border : 'Рамка', +insert_image_dimensions : 'Размеры', +insert_image_vspace : 'Вертикальный отступ', +insert_image_hspace : 'Горизонтальный отступ', +insert_image_align : 'Выравнивание', +insert_image_align_default : '-- Не задано --', +insert_image_align_baseline : 'По базовой линии', +insert_image_align_top : 'По верху', +insert_image_align_middle : 'Посредине', +insert_image_align_bottom : 'По низу', +insert_image_align_texttop : 'По верху текста', +insert_image_align_absmiddle : 'Абсолютно посредине', +insert_image_align_absbottom : 'Абсолютно сверху', +insert_image_align_left : 'Влево', +insert_image_align_right : 'Вправо', +theme_font_size : '-- Размер шрифта --', +theme_fontdefault : '-- Семейство шрифтов --', +theme_block : '-- Формат --', +theme_paragraph : 'Абзац', +theme_div : 'Div', +theme_address : 'Стиль адреса', +theme_pre : ':`Предварительно форматированный', +theme_h1 : 'Заголовок 1', +theme_h2 : 'Заголовок 2', +theme_h3 : 'Заголовок 3', +theme_h4 : 'Заголовок 4', +theme_h5 : 'Заголовок 5', +theme_h6 : 'Заголовок 6', +theme_colorpicker_title : 'Выбрать цвет', +theme_colorpicker_apply : 'Применить', +theme_forecolor_desc : 'Выбрать цвет текста', +theme_backcolor_desc : 'Выбрать цвет фона', +theme_charmap_title : 'Выбор произвольного символа', +theme_charmap_desc : 'Вставить произвольный символ', +theme_visualaid_desc : 'Показать границы скрытых элементов', +insert_anchor_title : 'Вставить/редактировать якорь', +insert_anchor_name : 'Имя якоря', +theme_anchor_desc : 'Вставить/редактировать якорь', +theme_insert_link_titlefield : 'Заголовок', +theme_clipboard_msg : 'Копировать/Вырезать/Вставить недоступны для Mozilla и Firefox.\nХотите узнать об этом подробнее?', +theme_path : 'Путь', +cut_desc : 'Вырезать', +copy_desc : 'Копировать', +paste_desc : 'Вставить', +link_list : 'Перечань ссылок', +image_list : 'Перечень картинок', +browse : 'Подобрать', +image_props_desc : 'Свойства картинки', +newdocument_desc : 'Новый документ', +class_name : 'Класс', +newdocument : 'Вы уверены, что хотите очистить всё содержимое?', +about_title : 'О TinyMCE', +about : 'О TinyMCE', +license : 'Лицензия', +plugins : 'Плагины', +plugin : 'Плагин', +author : 'Автор', +version : 'Версия', +loaded_plugins : 'Загруженные плагины', +help : 'Помощь', +not_set : '-- не установлено --', +close : 'Закрыть', +toolbar_focus : 'Переместить фокус на панель инструментов - Alt+Q, Переместить фокус в редактор - Alt-Z, Переместить фокус на элемент пути - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/sk.js b/jscripts/tiny_mce/themes/advanced/langs/sk.js new file mode 100644 index 000000000..d3b2d1532 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/sk.js @@ -0,0 +1,72 @@ +/** + * Slovak lang variables + * encoding: utf-8 + * + * @author Vladimir VASIL vvasil@post.sk + * + * $Id: sk.js,v 1.1 2005/11/22 20:56:45 spocke Exp $ + */ + + +tinyMCE.addToLang('',{ +theme_style_select : 'Å týly', +theme_code_desc : 'ZobraziÅ¥ HTML', +theme_code_title : 'Editácia HTML', +theme_code_wordwrap : 'Bez delení slov', +theme_sub_desc : 'Dolný index', +theme_sup_desc : 'Horný index', +theme_hr_desc : 'VložiÅ¥ vodorovný oddeľovač', +theme_removeformat_desc : 'ZruÅ¡iÅ¥ formátovanie', +theme_custom1_desc : 'Ľubovolný popisok', +insert_image_border : 'Rámček', +insert_image_dimensions : 'Rozmery', +insert_image_vspace : 'Vertikálný okraj', +insert_image_hspace : 'Horizontálný okraj', +insert_image_align : 'Zarovnánie', +insert_image_align_default : 'Výchozi', +insert_image_align_baseline : 'Na čiare', +insert_image_align_top : 'Nahor', +insert_image_align_middle : 'Na stred', +insert_image_align_bottom : 'Dole', +insert_image_align_texttop : 'Najvyšší bod textu', +insert_image_align_absmiddle : 'Stred riadku', +insert_image_align_absbottom : 'Spodok riadku', +insert_image_align_left : 'Vľavo', +insert_image_align_right : 'Vpravo', +theme_font_size : '-- VeľkosÅ¥ textu --', +theme_fontdefault : '-- Písmo --', +theme_block : '-- Formát --', +theme_paragraph : 'Odstavec', +theme_div : 'Div', +theme_address : 'Adresa', +theme_pre : 'Predformát', +theme_h1 : 'Nádpis 1', +theme_h2 : 'Nádpis 2', +theme_h3 : 'Nádpis 3', +theme_h4 : 'Nádpis 4', +theme_h5 : 'Nádpis 5', +theme_h6 : 'Nádpis 6', +theme_colorpicker_title : 'Výber farby', +theme_colorpicker_apply : 'VybraÅ¥', +theme_forecolor_desc : 'Farba popredia', +theme_backcolor_desc : 'Farba pozadia', +theme_charmap_title : 'Výber znaku', +theme_charmap_desc : 'VložiÅ¥ znak', +theme_visualaid_desc : 'Zapnúť značky/neviditeľné prvky', +insert_anchor_title : 'Vloženie/editácia záložky', +insert_anchor_name : 'Názov', +theme_anchor_desc : 'VložiÅ¥/editovaÅ¥ záložku', +theme_insert_link_titlefield : 'Názov', +theme_clipboard_msg : 'Funkcie KopírovaÅ¥/vystrihnúť/vložiÅ¥ niesú použiteľné v Mozille a Firefoxe.\nChcete viac informacií o tomto probléme?', +theme_path : 'Cesta', +cut_desc : 'Vystrihnúť', +copy_desc : 'KopírovaÅ¥', +paste_desc : 'VložiÅ¥', +link_list : 'Zoznam', +image_list : 'Zoznam', +browse : 'PrechádzaÅ¥', +image_props_desc : 'Vlastnosti obrázku', +newdocument_desc : 'Nový dokument', +newdocument : 'Ste si istý(á), že chcete vymazaÅ¥ vÅ¡etok obsah?' +}); + diff --git a/jscripts/tiny_mce/themes/advanced/langs/sv.js b/jscripts/tiny_mce/themes/advanced/langs/sv.js new file mode 100644 index 000000000..fc25a7fc6 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/sv.js @@ -0,0 +1,77 @@ +// SE lang variables + +tinyMCE.addToLang('',{ +theme_style_select : '-- Stilar --', +theme_code_desc : 'Editera HTML-koden', +theme_code_title : 'HTML-källkodseditor', +theme_code_wordwrap : 'Automatiskt radbyte', +theme_sub_desc : 'Nedsänkt text', +theme_sup_desc : 'Upphöjd text', +theme_hr_desc : 'Sätt in horisontell linje', +theme_removeformat_desc : 'Ta bort formatering', +theme_custom1_desc : 'Din specialbeskriving här', +insert_image_border : 'Ram', +insert_image_dimensions : 'Dimensioner', +insert_image_vspace : 'Vertikalt tomrum', +insert_image_hspace : 'Horisontellt tomrum', +insert_image_align : 'Justering', +insert_image_align_default : 'Ingen', +insert_image_align_baseline : 'Bottenlinjen', +insert_image_align_top : 'Längst upp', +insert_image_align_middle : 'Mitten', +insert_image_align_bottom : 'Längst ner', +insert_image_align_texttop : 'Textens top', +insert_image_align_absmiddle : 'Absoluta mitten', +insert_image_align_absbottom : 'Absolut längst ner', +insert_image_align_left : 'Vänster', +insert_image_align_right : 'Höger', +insert_image_delta_width : 30, +insert_image_delta_height : 10, +theme_font_size : '-- Fontstorlek --', +theme_fontdefault : '-- Font familj --', +theme_block : '-- Stycke --', +theme_paragraph : 'Paragraf', +theme_div : 'Div', +theme_address : 'Adress', +theme_pre : 'Förformatterad', +theme_h1 : 'Rubrik 1', +theme_h2 : 'Rubrik 2', +theme_h3 : 'Rubrik 3', +theme_h4 : 'Rubrik 4', +theme_h5 : 'Rubrik 5', +theme_h6 : 'Rubrik 6', +theme_colorpicker_title : 'Välj en färg', +theme_colorpicker_apply : 'Verkställ', +theme_forecolor_desc : 'Välj förgrundsfärg', +theme_backcolor_desc : 'Välj bakgrundsfärg', +theme_charmap_title : 'Välj specialtecken', +theme_charmap_desc : 'Sätt in specialtecken', +theme_visualaid_desc : 'Slå av/på osynliga element', +insert_anchor_title : 'Skapa/redigera ankare', +insert_anchor_name : 'Ankarnamn', +theme_anchor_desc : 'Skapa/redigera ankare', +theme_insert_link_titlefield : 'Titel', +theme_clipboard_msg : 'Klipput/Kopiera/Klistra fungerar inte Mozilla och Firefox. Vill du veta mer om detta?', +theme_path : 'Sökväg', +cut_desc : 'Klipp ut', +copy_desc : 'Kopiera', +paste_desc : 'Klistra in', +link_list : 'Länkar', +image_list : 'Bilder', +browse : 'Bläddra', +image_props_desc : 'Bild egenskaper', +newdocument_desc : 'Nytt dokument', +class_name : 'Stil', +newdocument : 'Är du säker på att du vill tömma hela redigerings ytan?', +about_title : 'Om TinyMCE', +about : 'Om', +license : 'Licens', +plugins : 'Insticksprogram', +plugin : 'Insticksprogram', +author : 'Utvecklare', +version : 'Version', +loaded_plugins : 'Laddade insticksprogram', +help : 'Hjälp', +not_set : '-- Inte satt --', +close : 'Stäng' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/tw.js b/jscripts/tiny_mce/themes/advanced/langs/tw.js new file mode 100644 index 000000000..4c9ba4499 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/tw.js @@ -0,0 +1,91 @@ +// TW lang variables contributed by Jim Kou + +tinyMCE.addToLang('',{ +bold_desc : '²ÊÅé', +bold_img : "bold.gif", +bullist_desc : '²Å¸¹¶µ¥Ø', +cancel : '¨ú®ø', +cleanup_desc : '²M°£', +help_desc : '»²§U»¡©ú', +image_desc : '¹Ï¤ù', +indent_desc : 'ÁY±Æ', +insert : '·s¼W', +insert_anchor_name : '¼Ðµù¦WºÙ', +insert_anchor_title : '·s¼W¼Ðµù', +insert_image_align : '¹ï»ô', +insert_image_align_absbottom : '±j¨î»ô¤U', +insert_image_align_absmiddle : '±j¨î¸m¤¤', +insert_image_align_baseline : '°ò·Ç½u', +insert_image_align_bottom : '»ô¤U', +insert_image_align_default : '¼Ð·Ç', +insert_image_align_left : '»ô¥ª', +insert_image_align_middle : '¸m¤¤', +insert_image_align_right : '»ô¥k', +insert_image_align_texttop : '¤å¦r¤W¤è', +insert_image_align_top : '»ô¤W', +insert_image_alt : '¹Ï¤ù»¡©ú', +insert_image_border : '¥~®Ø', +insert_image_dimensions : '¤Ø¤o', +insert_image_hspace : '¤ô¥­¶¡»Ø', +insert_image_src : '¹Ï¤ù¨Ó·½', +insert_image_title : '·s¼W¹Ï¤ù', +insert_image_vspace : '««ª½¶¡»Ø', +insert_link_target : '¥Ø¼Ð', +insert_link_target_blank : 'Åã¥Ü©ó·sµøµ¡¤¤', +insert_link_target_same : 'Åã¥Ü©ó¦P¤@µøµ¡¤¤', +insert_link_title : '·s¼W¶W³sµ²', +insert_link_url : '¶W³sµ²', +italic_desc : '±×Åé', +italic_img : "italic.gif", +justifycenter_desc : '»ô¤¤', +justifyfull_desc : '¶ñº¡', +justifyleft_desc : '»ô¥ª', +justifyright_desc : '»ô¥k', +link_desc : '«Ø¥ß³sµ²', +numlist_desc : '¼Æ¦r¶µ¥Ø', +outdent_desc : '¥Y±Æ', +redo_desc : '­«°µ', +striketrough_desc : '§R°£½u', +theme_address : '¦a§}', +theme_anchor_desc : '¼Ðµù', +theme_charmap_desc : '¯S®í¦r¤¸', +theme_charmap_title : '¯S®í¦r¤¸²M³æ', +theme_code_desc : 'Åã¥Ü HTML ­ì©l½X', +theme_code_wordwrap : 'Word wrap', +theme_code_title : 'HTML ­ì©l½X', +theme_colorpicker_apply : 'Åܧó', +theme_colorpicker_title : 'ÃC¦â', +theme_font_size : '-- Font size --', +theme_fontdefault : '-- Font family --', +theme_block : '-- Format --', +theme_forecolor_desc : '¦r«¬ÃC¦â', +theme_backcolor_desc : 'Select background color', +theme_h1 : '¼ÐÃD1', +theme_h2 : '¼ÐÃD2', +theme_h3 : '¼ÐÃD3', +theme_h4 : '¼ÐÃD4', +theme_h5 : '¼ÐÃD5', +theme_h6 : '¼ÐÃD6', +theme_hr_desc : '·s¼W¾î½u', +theme_paragraph : '¬q¸¨', +theme_pre : '¤º©w®æ¦¡', +theme_removeformat_desc : '²M°£®æ¦¡³]©w', +theme_style_select : '¼Ë¦¡', +theme_sub_desc : '¤U¼Ð', +theme_sup_desc : '¤W¼Ð', +theme_visualaid_desc : 'Åã¥Ü/ÁôÂëD¥i¨£ªº¤¸¯À', +underline_desc : '©³½u', +undo_desc : '´_­ì', +unlink_desc : '¨ú®ø³sµ²', +theme_clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?', +theme_path : 'Path', +cut_desc : 'Cut', +copy_desc : 'Copy', +paste_desc : 'Paste', +link_list : 'Link list', +image_list : 'Image list', +browse : 'Browse', +image_props_desc : 'Image properties', +newdocument_desc : 'New document', +newdocument : 'Are you sure you want clear all contents?' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/zh_cn.js b/jscripts/tiny_mce/themes/advanced/langs/zh_cn.js new file mode 100644 index 000000000..f471ec11f --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/zh_cn.js @@ -0,0 +1,76 @@ +// Simplified Chinese lang variables contributed by tom_cat (thomaswangyang@gmail.com) + +tinyMCE.addToLang('',{ +theme_style_select : '-- ¸ñʽ --', +theme_code_desc : '±à¼­HTMLÔ´´úÂë', +theme_code_title : 'HTMLÔ´´úÂë±à¼­Æ÷', +theme_code_wordwrap : '×Ô¶¯»»ÐÐ', +theme_sub_desc : 'ϱê', +theme_sup_desc : 'Éϱê', +theme_hr_desc : '²åÈëˮƽÏß', +theme_removeformat_desc : 'ÒƳý¸ñʽ', +theme_custom1_desc : 'ÕâÀïÌîдÓû§×Ô¶¨ÒåÃèÊö', +insert_image_border : '±ß¿ò', +insert_image_dimensions : 'άÊý', +insert_image_vspace : '´¹Ö±¼ä¾à', +insert_image_hspace : 'ˮƽ¼ä¾à', +insert_image_align : '¶ÔÆ뷽ʽ', +insert_image_align_default : '-- ĬÈÏ --', +insert_image_align_baseline : '»ùÏß', +insert_image_align_top : '¶¥¶Ë', +insert_image_align_middle : '¾ÓÖÐ', +insert_image_align_bottom : 'µ×²¿', +insert_image_align_texttop : 'ÎÄ×ÖÉÏ·½', +insert_image_align_absmiddle : '¾ø¶Ô¾ÓÖÐ', +insert_image_align_absbottom : '¾ø¶Ôµ×²¿', +insert_image_align_left : '×ó¶ÔÆë', +insert_image_align_right : 'ÓÒ¶ÔÆë', +theme_font_size : '-- ×ֺŠ--', +theme_fontdefault : '-- ×ÖÌå --', +theme_block : '-- ¸ñʽ --', +theme_paragraph : '¶ÎÂä', +theme_div : '²ã', +theme_address : 'µØÖ·', +theme_pre : 'Ô¤¸ñʽ»¯', +theme_h1 : '±êÌâ 1', +theme_h2 : '±êÌâ 2', +theme_h3 : '±êÌâ 3', +theme_h4 : '±êÌâ 4', +theme_h5 : '±êÌâ 5', +theme_h6 : '±êÌâ 6', +theme_colorpicker_title : 'Ñ¡ÔñÑÕÉ«', +theme_colorpicker_apply : 'Ó¦ÓÃ', +theme_forecolor_desc : 'Ñ¡ÔñÎÄ×ÖÑÕÉ«', +theme_backcolor_desc : 'Ñ¡Ôñ±³¾°ÑÕÉ«', +theme_charmap_title : 'Ñ¡ÔñÌØÊâ·ûºÅ', +theme_charmap_desc : '²åÈëÌØÊâ·ûºÅ', +theme_visualaid_desc : '¿ª¹Ø²»¿É¼ûÔªËØ', +insert_anchor_title : '²åÈë/±à¼­ êµã', +insert_anchor_name : 'êµãÃû³Æ', +theme_anchor_desc : '²åÈë/±à¼­ êµã', +theme_insert_link_titlefield : '±êÌâ', +theme_clipboard_msg : '¼ôÇÐ/¸´ÖÆ/Õ³Ìù¹¦ÄÜÔÚ Mozilla ºÍ Firefox ä¯ÀÀÆ÷Öв»Ö§³Ö¡£\nÄúÏ£Íû»ñµÃ¸ü¶àµÄÐÅÏ¢Âð£¿', +theme_path : '·¾¶', +cut_desc : '¼ôÇÐ', +copy_desc : '¸´ÖÆ', +paste_desc : 'Õ³Ìù', +link_list : 'Á´½ÓÁбí', +image_list : 'ͼÏñÁбí', +browse : 'ä¯ÀÀ', +image_props_desc : 'ͼÏñÊôÐÔ', +newdocument_desc : 'н¨¼äµµ', +class_name : 'Àà', +newdocument : 'ÄúÈ·ÈÏÒªÇå³ýËùÓÐÄÚÈÝÂð£¿', +about_title : '¹ØÓÚ TinyMCE', +about : '¹ØÓÚ', +license : 'ÊÚȨÊé', +plugins : 'ËùÓвå¼þ', +plugin : '²å¼þ', +author : '×÷Õß', +version : '°æ±¾', +loaded_plugins : '¶ÁÈ¡²å¼þ', +help : '°ïÖú', +not_set : '-- ¿ÕÉ趨 --', +close : '¹Ø±Õ', +toolbar_focus : 'Ìøµ½¹¤¾ß°´Å¥ - Alt+Q, Ìøµ½±à¼­Æ÷ - Alt-Z, Ìøµ½ÔªËØ·¾¶ - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/zh_tw.js b/jscripts/tiny_mce/themes/advanced/langs/zh_tw.js new file mode 100644 index 000000000..d148b2627 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/zh_tw.js @@ -0,0 +1,78 @@ +// Traditional Chinese BIG-5; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// ÁcÅ餤¤å BIG-5 ¡F¼Æ¦ìÀ³¥Î§{»s§@¡F twapweb_AT_gmail_DOT_com + + +tinyMCE.addToLang('',{ +theme_style_select : '-- ¦¡¼Ë --', +theme_code_desc : '½s¿è HTML ½X', +theme_code_title : 'HTML ½X½s¿è¾¹', +theme_code_wordwrap : '¦rµüÀô¶', +theme_sub_desc : '¤U¼Ð', +theme_sup_desc : '¤W¼Ð', +theme_hr_desc : '´¡¤J¤ô¥­½u', +theme_removeformat_desc : '²M°£®æ¦¡³]©w', +theme_custom1_desc : '¦Û­q»¡©ú¦b¦¹¿é¤J', +insert_image_border : '®Ø½u', +insert_image_dimensions : '¤Ø¤o', +insert_image_vspace : '¹Ï¹³¤W¤U°¼¶¡¶Z', +insert_image_hspace : '¹Ï¹³¥ª¥kÃ䶡¶Z', +insert_image_align : '««ª½¹ï»ô', +insert_image_align_default : '-- ¥¼³]¸m --', +insert_image_align_baseline : '©³½u', +insert_image_align_top : '³»ºÝ', +insert_image_align_middle : '¤¤½u', +insert_image_align_bottom : '©³³¡', +insert_image_align_texttop : '¤å¦r³»ºÝ', +insert_image_align_absmiddle : 'µ´¹ï¤¤½u', +insert_image_align_absbottom : 'µ´¹ï©³³¡', +insert_image_align_left : '¥ª', +insert_image_align_right : '¥k', +theme_font_size : '-- ¦rÅé¤j¤p --', +theme_fontdefault : '-- ¦rÅé¿ï¾Ü --', +theme_block : '-- ®æ¦¡ --', +theme_paragraph : '¬q¸¨', +theme_div : '¤À¬É', +theme_address : '¦ì¸m', +theme_pre : '¤º©w®æ¦¡', +theme_h1 : '¼ÐÃD¤@', +theme_h2 : '¼ÐÃD¤G', +theme_h3 : '¼ÐÃD¤T', +theme_h4 : '¼ÐÃD¥|', +theme_h5 : '¼ÐÃD¤­', +theme_h6 : '¼ÐÃD¤»', +theme_colorpicker_title : '¿ï¨úÃC¦â', +theme_colorpicker_apply : '®M¥Î', +theme_forecolor_desc : '¿ï¨ú¤å¦rÃC¦â', +theme_backcolor_desc : '¿ï¨ú­I´ºÃC¦â', +theme_charmap_title : '¿ï¨ú¦Û­q¦r¤¸', +theme_charmap_desc : '´¡¤J¦Û­q¦r¤¸', +theme_visualaid_desc : '¤Á´««ü¥Ü©Î«D¥i¨£¤¸¥ó', +insert_anchor_title : '´¡¤J©Î½s¿è³sµ²ÂI', +insert_anchor_name : '³sµ²ÂI¦WºÙ', +theme_anchor_desc : '´¡¤J©Î½s¿è³sµ²ÂI', +theme_insert_link_titlefield : '¼ÐÃD', +theme_clipboard_msg : '¦b Mozilla ©M Firefox ¤¤µLªk¨Ï¥Î½Æ»s©Î°Å¤U©Î¶K¤W¥\¯à¡C\n»Ý­n§ó¦hÃö©ó¦¹ªº°T®§¶Ü¡H', +theme_path : '¸ô®|', +cut_desc : '°Å¤U', +copy_desc : '½Æ»s', +paste_desc : '¶K¤W', +link_list : '³sµ²¦Cªí', +image_list : '¹ÏÀɦCªí', +browse : 'ÂsÄý', +image_props_desc : '¹ÏÀÉÄÝ©Ê', +newdocument_desc : '·s¤å¥ó', +class_name : '¤ÀÃþ', +newdocument : '½T©w­n²M°£¥þ³¡¤º®e¡H', +about_title : 'Ãö©ó TinyMCE', +about : 'Ãö©ó', +license : '±ÂÅv', +plugins : 'À³¥Î®M¥ó', +plugin : 'À³¥Î®M¥ó', +author : '§@ªÌ', +version : 'ª©¥»', +loaded_plugins : '¤w¸ü¤JÀ³¥Î®M¥ó', +help : '¨ó§U', +not_set : '-- ¥¼³]¸m --', +close : 'Ãö³¬', +toolbar_focus : '§Ö³t±Ò¥Î¤u¨ã¯Ã - Alt+Q¡F§Ö³t±Ò¥Î½s¿è¾¹ - Alt-Z¡F§Ö³t²¾¦Ü¤¸¥ó¸ô®| - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/langs/zh_tw_utf8.js b/jscripts/tiny_mce/themes/advanced/langs/zh_tw_utf8.js new file mode 100644 index 000000000..c45307a1b --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/langs/zh_tw_utf8.js @@ -0,0 +1,78 @@ +// Traditional Chinese UTF-8; Twapweb Site translated; twapweb_AT_gmail_DOT_com +// 繁體中文 UTF-8 ;數位應用坊製作; twapweb_AT_gmail_DOT_com + + +tinyMCE.addToLang('',{ +theme_style_select : '-- 式樣 --', +theme_code_desc : '編輯 HTML 碼', +theme_code_title : 'HTML 碼編輯器', +theme_code_wordwrap : '字詞環繞', +theme_sub_desc : '下標', +theme_sup_desc : '上標', +theme_hr_desc : '插入水平線', +theme_removeformat_desc : '清除格式設定', +theme_custom1_desc : '自訂說明在此輸入', +insert_image_border : '框線', +insert_image_dimensions : '尺寸', +insert_image_vspace : '圖像上下側間距', +insert_image_hspace : '圖像左右邊間距', +insert_image_align : '垂直對齊', +insert_image_align_default : '-- 未設置 --', +insert_image_align_baseline : '底線', +insert_image_align_top : '頂端', +insert_image_align_middle : '中線', +insert_image_align_bottom : '底部', +insert_image_align_texttop : '文字頂端', +insert_image_align_absmiddle : '絕對中線', +insert_image_align_absbottom : '絕對底部', +insert_image_align_left : 'å·¦', +insert_image_align_right : '右', +theme_font_size : '-- 字體大小 --', +theme_fontdefault : '-- 字體選擇 --', +theme_block : '-- 格式 --', +theme_paragraph : '段落', +theme_div : '分界', +theme_address : '位置', +theme_pre : '內定格式', +theme_h1 : '標題一', +theme_h2 : '標題二', +theme_h3 : '標題三', +theme_h4 : '標題四', +theme_h5 : '標題五', +theme_h6 : '標題六', +theme_colorpicker_title : '選取顏色', +theme_colorpicker_apply : '套用', +theme_forecolor_desc : '選取文字顏色', +theme_backcolor_desc : '選取背景顏色', +theme_charmap_title : '選取自訂字元', +theme_charmap_desc : '插入自訂字元', +theme_visualaid_desc : '切換指示或非可見元件', +insert_anchor_title : '插入或編輯連結點', +insert_anchor_name : '連結點名稱', +theme_anchor_desc : '插入或編輯連結點', +theme_insert_link_titlefield : '標題', +theme_clipboard_msg : '在 Mozilla 和 Firefox 中無法使用複製或剪下或貼上功能。\n需要更多關於此的訊息嗎?', +theme_path : '路徑', +cut_desc : '剪下', +copy_desc : '複製', +paste_desc : '貼上', +link_list : '連結列表', +image_list : '圖檔列表', +browse : '瀏覽', +image_props_desc : '圖檔屬性', +newdocument_desc : '新文件', +class_name : '分類', +newdocument : '確定要清除全部內容?', +about_title : '關於 TinyMCE', +about : '關於', +license : '授權', +plugins : '應用套件', +plugin : '應用套件', +author : '作者', +version : '版本', +loaded_plugins : '已載入應用套件', +help : '協助', +not_set : '-- 未設置 --', +close : '關閉', +toolbar_focus : '快速啟用工具紐 - Alt+Q;快速啟用編輯器 - Alt-Z;快速移至元件路徑 - Alt-X' +}); diff --git a/jscripts/tiny_mce/themes/advanced/link.htm b/jscripts/tiny_mce/themes/advanced/link.htm new file mode 100644 index 000000000..4e72eaad5 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/link.htm @@ -0,0 +1,100 @@ + + + {$lang_insert_link_title} + + + + + + + +

    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
     
    +
    +
    +
    + +
    +
    + +
    + +
    + +
    +
    +
    + + diff --git a/jscripts/tiny_mce/themes/advanced/source_editor.htm b/jscripts/tiny_mce/themes/advanced/source_editor.htm new file mode 100644 index 000000000..7cb4d7466 --- /dev/null +++ b/jscripts/tiny_mce/themes/advanced/source_editor.htm @@ -0,0 +1,30 @@ + + + + {$lang_theme_code_title} + + + + + +
    +
    {$lang_theme_code_title}
    + +
    + +
    + + + +
    +
    + +
    + +
    + +
    +
    +
    + + diff --git a/jscripts/tiny_mce/themes/simple/css/editor_content.css b/jscripts/tiny_mce/themes/simple/css/editor_content.css new file mode 100644 index 000000000..2506c807c --- /dev/null +++ b/jscripts/tiny_mce/themes/simple/css/editor_content.css @@ -0,0 +1,25 @@ +body, td, pre { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; +} + +body { + background-color: #FFFFFF; +} + +.mceVisualAid { + border: 1px dashed #BBBBBB; +} + +/* MSIE specific */ + +* html body { + scrollbar-3dlight-color: #F0F0EE; + scrollbar-arrow-color: #676662; + scrollbar-base-color: #F0F0EE; + scrollbar-darkshadow-color: #DDDDDD; + scrollbar-face-color: #E0E0DD; + scrollbar-highlight-color: #F0F0EE; + scrollbar-shadow-color: #F0F0EE; + scrollbar-track-color: #F5F5F5; +} diff --git a/jscripts/tiny_mce/themes/simple/css/editor_popup.css b/jscripts/tiny_mce/themes/simple/css/editor_popup.css new file mode 100644 index 000000000..f29b04a55 --- /dev/null +++ b/jscripts/tiny_mce/themes/simple/css/editor_popup.css @@ -0,0 +1,41 @@ +body { + background-color: #F0F0EE; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + scrollbar-3dlight-color: #F0F0EE; + scrollbar-arrow-color: #676662; + scrollbar-base-color: #F0F0EE; + scrollbar-darkshadow-color: #DDDDDD; + scrollbar-face-color: #E0E0DD; + scrollbar-highlight-color: #F0F0EE; + scrollbar-shadow-color: #F0F0EE; + scrollbar-track-color: #F5F5F5; +} + +td { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; +} + +input { + background: #FFFFFF; + border: 1px solid #cccccc; +} + +td, input, select, textarea { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; +} + +input, select, textarea { + border: 1px solid #808080; +} + +.input_noborder { + border: 0; +} + +.title { + font-size: 12px; + font-weight: bold; +} \ No newline at end of file diff --git a/jscripts/tiny_mce/themes/simple/css/editor_ui.css b/jscripts/tiny_mce/themes/simple/css/editor_ui.css new file mode 100644 index 000000000..6f5776820 --- /dev/null +++ b/jscripts/tiny_mce/themes/simple/css/editor_ui.css @@ -0,0 +1,125 @@ +.mceSeparatorLine { + border: 0; + padding: 0; + margin-left: 4px; + margin-right: 2px; +} + +.mceSelectList { + font-family: "MS Sans Serif"; + font-size: 7pt; + font-weight: normal; + margin-top: 2px; +} + +.mceLabel, .mceLabelDisabled { + font-family: "MS Sans Serif"; + font-size: 9pt; +} + +.mceLabel { + color: #000000; +} + +.mceLabelDisabled { + cursor: text; + color: #999999; +} + +.mceEditor { + background: #F0F0EE; + border: 1px solid #cccccc; +} + +.mceEditorArea { + font-family: "MS Sans Serif"; + background: #FFFFFF; +} + +.mceToolbar { + background: #F0F0EE; + border-top: 1px solid #cccccc; + line-height: 1px; + font-size: 1px; + padding-bottom: 1px; +} + +.mceEditorIframe { + border: 0; +} + +/* Button CSS rules */ + +a.mceButtonDisabled img, a.mceButtonNormal img, a.mceButtonSelected img { + width: 20px; + height: 20px; + cursor: default; + margin-top: 1px; + margin-left: 1px; +} + +a.mceButtonDisabled img { + border: 0 !important; +} + +a.mceButtonNormal img, a.mceButtonSelected img { + border: 1px solid #F0F0EE !important; +} + +a.mceButtonSelected img { + border: 1px solid #C0C0BB !important; +} + +a.mceButtonNormal img:hover, a.mceButtonSelected img:hover { + border: 1px solid #0A246A !important; + cursor: default; + background-color: #B6BDD2; +} + +a.mceButtonDisabled img { + -moz-opacity:0.3; + opacity: 0.3; + border: 1px solid #F0F0EE !important; + cursor: default; +} + +a.mceTiledButton img { + background-image: url('../images/buttons.gif'); + background-repeat: no-repeat; +} + +/* MSIE specific rules */ + +* html a.mceButtonNormal img, * html a.mceButtonSelected img, * html a.mceButtonDisabled img { + border: 0px !important; + margin-top: 2px; + margin-bottom: 1px; +} + +* html a.mceButtonDisabled img { + filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); + border: 0px !important; +} + +* html a.mceButtonDisabled { + border: 1px solid #F0F0EE !important; +} + +* html a.mceButtonNormal, * html a.mceButtonSelected { + border: 1px solid #F0F0EE; + cursor: default; +} + +* html a.mceButtonSelected { + border: 1px solid #C0C0BB; +} + +* html a.mceButtonNormal:hover, * html a.mceButtonSelected:hover { + border: 1px solid #0A246A; + cursor: default; + background-color: #B6BDD2; +} + +* html .mceSelectList { + margin-top: 2px; +} diff --git a/jscripts/tiny_mce/themes/simple/editor_template.js b/jscripts/tiny_mce/themes/simple/editor_template.js new file mode 100644 index 000000000..59cedc2ce --- /dev/null +++ b/jscripts/tiny_mce/themes/simple/editor_template.js @@ -0,0 +1,4 @@ +var TinyMCE_SimpleTheme={_buttonMap:'bold,bullist,cleanup,italic,numlist,redo,strikethrough,underline,undo',getEditorTemplate:function(){var html='';html+='';html+='';html+='
    ';html+='IFRAME';html+='
    ';html+=tinyMCE.getButtonHTML('bold','lang_bold_desc','{$themeurl}/images/{$lang_bold_img}','Bold');html+=tinyMCE.getButtonHTML('italic','lang_italic_desc','{$themeurl}/images/{$lang_italic_img}','Italic');html+=tinyMCE.getButtonHTML('underline','lang_underline_desc','{$themeurl}/images/{$lang_underline_img}','Underline');html+=tinyMCE.getButtonHTML('strikethrough','lang_striketrough_desc','{$themeurl}/images/strikethrough.gif','Strikethrough');html+='';html+=tinyMCE.getButtonHTML('undo','lang_undo_desc','{$themeurl}/images/undo.gif','Undo');html+=tinyMCE.getButtonHTML('redo','lang_redo_desc','{$themeurl}/images/redo.gif','Redo');html+='';html+=tinyMCE.getButtonHTML('cleanup','lang_cleanup_desc','{$themeurl}/images/cleanup.gif','mceCleanup') +html+='';html+=tinyMCE.getButtonHTML('bullist','lang_bullist_desc','{$themeurl}/images/bullist.gif','InsertUnorderedList') +html+=tinyMCE.getButtonHTML('numlist','lang_numlist_desc','{$themeurl}/images/numlist.gif','InsertOrderedList') +html+='
    ';return{delta_width:0,delta_height:20,html:html};},handleNodeChange:function(editor_id,node){tinyMCE.switchClass(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClass(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClass(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClass(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_numlist','mceButtonNormal');do{switch(node.nodeName.toLowerCase()){case"b":case"strong":tinyMCE.switchClass(editor_id+'_bold','mceButtonSelected');break;case"i":case"em":tinyMCE.switchClass(editor_id+'_italic','mceButtonSelected');break;case"u":tinyMCE.switchClass(editor_id+'_underline','mceButtonSelected');break;case"strike":tinyMCE.switchClass(editor_id+'_strikethrough','mceButtonSelected');break;case"ul":tinyMCE.switchClass(editor_id+'_bullist','mceButtonSelected');break;case"ol":tinyMCE.switchClass(editor_id+'_numlist','mceButtonSelected');break;}}while((node=node.parentNode)!=null);}};tinyMCE.addTheme("simple",TinyMCE_SimpleTheme);tinyMCE.addButtonMap(TinyMCE_SimpleTheme._buttonMap); \ No newline at end of file diff --git a/jscripts/tiny_mce/themes/simple/editor_template_src.js b/jscripts/tiny_mce/themes/simple/editor_template_src.js new file mode 100644 index 000000000..702f5058d --- /dev/null +++ b/jscripts/tiny_mce/themes/simple/editor_template_src.js @@ -0,0 +1,86 @@ +/** + * $RCSfile: editor_template_src.js,v $ + * $Revision: 1.9 $ + * $Date: 2006/04/18 13:32:53 $ + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +var TinyMCE_SimpleTheme = { + // List of button ids in tile map + _buttonMap : 'bold,bullist,cleanup,italic,numlist,redo,strikethrough,underline,undo', + + getEditorTemplate : function() { + var html = ''; + + html += ''; + html += ''; + html += '
    '; + html += 'IFRAME'; + html += '
    '; + html += tinyMCE.getButtonHTML('bold', 'lang_bold_desc', '{$themeurl}/images/{$lang_bold_img}', 'Bold'); + html += tinyMCE.getButtonHTML('italic', 'lang_italic_desc', '{$themeurl}/images/{$lang_italic_img}', 'Italic'); + html += tinyMCE.getButtonHTML('underline', 'lang_underline_desc', '{$themeurl}/images/{$lang_underline_img}', 'Underline'); + html += tinyMCE.getButtonHTML('strikethrough', 'lang_striketrough_desc', '{$themeurl}/images/strikethrough.gif', 'Strikethrough'); + html += ''; + html += tinyMCE.getButtonHTML('undo', 'lang_undo_desc', '{$themeurl}/images/undo.gif', 'Undo'); + html += tinyMCE.getButtonHTML('redo', 'lang_redo_desc', '{$themeurl}/images/redo.gif', 'Redo'); + html += ''; + html += tinyMCE.getButtonHTML('cleanup', 'lang_cleanup_desc', '{$themeurl}/images/cleanup.gif', 'mceCleanup') + html += ''; + html += tinyMCE.getButtonHTML('bullist', 'lang_bullist_desc', '{$themeurl}/images/bullist.gif', 'InsertUnorderedList') + html += tinyMCE.getButtonHTML('numlist', 'lang_numlist_desc', '{$themeurl}/images/numlist.gif', 'InsertOrderedList') + html += '
    '; + + return { + delta_width : 0, + delta_height : 20, + html : html + }; + }, + + handleNodeChange : function(editor_id, node) { + // Reset old states + tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal'); + tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal'); + + // Handle elements + do { + switch (node.nodeName.toLowerCase()) { + case "b": + case "strong": + tinyMCE.switchClass(editor_id + '_bold', 'mceButtonSelected'); + break; + + case "i": + case "em": + tinyMCE.switchClass(editor_id + '_italic', 'mceButtonSelected'); + break; + + case "u": + tinyMCE.switchClass(editor_id + '_underline', 'mceButtonSelected'); + break; + + case "strike": + tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonSelected'); + break; + + case "ul": + tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonSelected'); + break; + + case "ol": + tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonSelected'); + break; + } + } while ((node = node.parentNode) != null); + } +}; + +tinyMCE.addTheme("simple", TinyMCE_SimpleTheme); +tinyMCE.addButtonMap(TinyMCE_SimpleTheme._buttonMap); diff --git a/jscripts/tiny_mce/themes/simple/images/bold.gif b/jscripts/tiny_mce/themes/simple/images/bold.gif new file mode 100644 index 0000000000000000000000000000000000000000..d6a9cc2cd4117526156fa29c06156ba5971823c4 GIT binary patch literal 76 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*&Mzw-23{>3a?E=Bm(Rqw7V Z4AWqey4jFcx$b3$*C(Ir-+DzDtN~+a79aos literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/bold_de_se.gif b/jscripts/tiny_mce/themes/simple/images/bold_de_se.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b129de25e916946792c89f08a7b30b2f9dc8b72 GIT binary patch literal 73 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*UAzw-23e#sdnZdC`i8W!&j Xl@)6cxH+8$Fz@Ye(g^_`QkwFK@28xR?Ffgg~^shYqmVYseNeI`y fv!S2m6KACKPM+Zyy|O9RI8W2_`nTTOtPIuwq8S!> literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/bold_tw.gif b/jscripts/tiny_mce/themes/simple/images/bold_tw.gif new file mode 100644 index 0000000000000000000000000000000000000000..82085432c622fb9b195d45480ce0c00f80d24027 GIT binary patch literal 207 zcmV;=05JbYNk%w1VH5xq0J9DNySuyH-QDi)?jj;0%*@PHRaKdpnGq2YcXxM0L_~;) zh%+-YW@csp00960{{R30A^8LW000gEEC2ui02BZe000Dh(8)=wy*N7}G;WM{HHkzh zs6t%9fi%d0HcQepm#{3&(I_#A0+$;m0FJ}}WxKp?w}cH!tRNB$k|H1#RxPhVL6BGg z09nkC_M1X4*#RtJD4)}o#(?mXbR9t%Fa-%dPzMPG0V6gC3@He52a91h#Kfdz)l@%W&!*iMf|{-?85Jc}En;9`Q2fcl$iTqPpaWzB zRf;e$FdJ6vy7SNAl;>@M#YT=zObHxz&I%bBUa^s_ M6r5P1!pL9^0IPo@`~Uy| literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/buttons.gif b/jscripts/tiny_mce/themes/simple/images/buttons.gif new file mode 100644 index 0000000000000000000000000000000000000000..9d86222e6358fb519f5991c7610f66a245ca603a GIT binary patch literal 1054 zcmZ?wbhEHb+`=Hj@XU{aiHT|T!MFD5yY`%Vxn;|ie}4~6+5BPU{#TZ%+cxdK@alR^ zXxGQ;>gu4H>o$?I%%c|6PuTPQj@ zlcU}If|RV9+-%ftpI?)gR~OWD-L~lZr4!TAQ;%E4&f7G}D6a0<&ZGBr{U;q-D8x}mX=9XPKzcL zEt-|Yz`y_$1d@XdDE?$&WMJ@P&;dCN6ekSq{~P?8np;}i+B-VCx_f&2`X@}BGNYW4x_qfel;y_8&9IWvv7b$7boqYEO}$3pO}j(i7njD7lc(IJd{;$PCU?_34 zZqjvP=5c2OF6?YBi-=HAZeMupMYI@`OiTcqps-4VhZ@Jzuwxr;zkkhs@<`9dbD9er zxO}D@VDjs%xpsn$$8t+UoZkt7i_DfY%I^i$Y~3CxoUb{fgF|g@NV9@Chrz+TAGs?O zRrM!)nA4#7BB7a^<6qfbCEHB#PBsmZhaPslXRqBepEO5-i6e&f=gDez?*kf(xg}Iq z&Qo_R-QcBW?o;5T&dDJ-Q$_xdz~i34GNoA-lS?)nU|hLmyON^#9D{?r^Ed>Z1uhnB zKf$i8!KkXiYqDkTyv_~B&P|>4z`&6$x=50xe#(cR&KhnnEIRc%{Dc?;zNEfdsc6gj W>*b0i)3RQzT(N9bmU<%tgEat$sGB?h literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/cleanup.gif b/jscripts/tiny_mce/themes/simple/images/cleanup.gif new file mode 100644 index 0000000000000000000000000000000000000000..16491f6cfcf3e1123f08352c895f8010f791c469 GIT binary patch literal 256 zcmV+b0ssC-Nk%w1VH5xq0MrlwMm#2xdP3^ge4>(aXJcF2&#c0@g7@*TXJyAiI+Bx- z!osRT%E{EUw6tz+enw7G^6K)^$d=yS-J+Ue{{6y&f`-z%VxXFs!L^y{+>(HFVv>^L zOipLAk}~7mu>b%7A^8LW0018VEC2ui02BZe000Gj;3tk`X`X1RuBfCa3_CK)hB&I! z?6jS5DV>BNxhN371`1>FG$6!^gQF}JB8CHn;<-pFjYq{)@NCbANaf;iJjfX><#5Od z41@~dZSq94bpiqw6C4j!WCnJE77HB!h$k2WjE(>oEEpP%kC-wT1Ob;aBcK|jsHv(a GApkq`d~Wvu literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/italic.gif b/jscripts/tiny_mce/themes/simple/images/italic.gif new file mode 100644 index 0000000000000000000000000000000000000000..8bb330bd0bbf61fdb5ce86388ecbeae16465bc17 GIT binary patch literal 79 zcmZ?wbhEHb6k!lySjfl#1T8Hs)z#IEjEssuS%3n}3_2iDkURsE!kqq_+b+wcJF`+8$Fz@Ye(g^_`QkwFK@28xR?Ffgh1^shYqmVdFy0;Z@$ hzTc5`u943p7fMVz+n$-ed(#4|tKWK`2QxBQ0|3J`7vul{ literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/italic_tw.gif b/jscripts/tiny_mce/themes/simple/images/italic_tw.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f6eeaa2b2111e9995584a66644dacd01ebf33e4 GIT binary patch literal 274 zcmZ?wbhEHb6k!lyI3mCxFE7u}&!3;4KY#xG^XJd|`}?n7zdk-bUSD7T{rmU(_wT=d z|9*dee|>$uy}dmH1H=FS|A8d&K=CIFBLjl~gAPaw$W8{sAA<=#Bx}ZV~!Miqwc5(MoQ;hMLOK*yvJx*8l(jA^8LW000L7 zEC2ui02BZe0009tc)HyFFv>|=F}0bofd8LU3_`XHL13Hq)$A^8LW000jFEC2ui02BZe000D5@X1N5y*TU5@mkK(Nsfb@ zh`52taWqPx3Yb$cP21Nib_4)BqDn)z literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/separator.gif b/jscripts/tiny_mce/themes/simple/images/separator.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f39b809e98103422a7a8815d9e0ff23123034b5 GIT binary patch literal 57 zcmZ?wbhEHbWMU9un8?J?(9rN73>X*~6o0ZXGB7YP=m6P3N(4x7O<|q5`t188u7e^B F)&TE55J&(3 literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/spacer.gif b/jscripts/tiny_mce/themes/simple/images/spacer.gif new file mode 100644 index 0000000000000000000000000000000000000000..388486517fa8da13ebd150e8f65d5096c3e10c3a GIT binary patch literal 43 ncmZ?wbhEHbWMp7un7{x9ia%KxMSyG_5FaGNz{KRj$Y2csb)f_x literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/strikethrough.gif b/jscripts/tiny_mce/themes/simple/images/strikethrough.gif new file mode 100644 index 0000000000000000000000000000000000000000..3264635918e2237257811a745f3a7e31b4369432 GIT binary patch literal 83 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*jFzw-23{>5`RB^ury^=8j) h^eUTr??>*V8C&%_D;C}?e9svC>)iK$`!yICtN}048)X0h literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/underline.gif b/jscripts/tiny_mce/themes/simple/images/underline.gif new file mode 100644 index 0000000000000000000000000000000000000000..1dfeb5f6d06e21a25615a9eb0cbd2a74ab0efa42 GIT binary patch literal 88 zcmZ?wbhEHb6k!lySjfl#1l85mjEo?b;!hSJ#l)Zk5(UXKFlkQdUwQg1zxWJ?3%{OS koDe;yao*!zU(QKMRZNWnGjv6-o@%}Q>)iK!0SpY*0G3P}*Z=?k literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/underline_fr.gif b/jscripts/tiny_mce/themes/simple/images/underline_fr.gif new file mode 100644 index 0000000000000000000000000000000000000000..551d9148d302c5f58b3b20d2c6a642450889a7ef GIT binary patch literal 79 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*mGzw-23e(4zsAr}6}u9vvi dPIT?{=$xyxd19dGtWDy_KKDM~70ke34FHj_7K8u* literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/underline_ru.gif b/jscripts/tiny_mce/themes/simple/images/underline_ru.gif new file mode 100644 index 0000000000000000000000000000000000000000..b78e2a498fb9406ef378d7c543756db552d87cba GIT binary patch literal 77 zcmZ?wbhEHb6k!lyn83i`>+8$Fz@Ye(g^_`QkwFK@28xR?Ffgg~^shYqmVYseNK2Ny ft@O9qnGc`Wq;$3l?I>E+zBOCw^tWDnRt9STq^=gR literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/underline_tw.gif b/jscripts/tiny_mce/themes/simple/images/underline_tw.gif new file mode 100644 index 0000000000000000000000000000000000000000..b715390484c95c3d3311012dd541e2b46a2f4a78 GIT binary patch literal 245 zcmZ?wbhEHb6k!lyI3mihYSpUH(9n19-U$i{mY0{GIdf*_%$df<#%XD3=g*&4Qc`;V z{=J%-nvai9ety1-i;KOzeMd*f{{8!R@7~S8!0`Y7e;|nmDE?$&WMB|w&;h9d*~!3K zl%U#|k~uHKi*I6=T}Ytl*F$OTQv9tdV6_n`zCQJ Ua|%tL!OK2l4tMK(4MhfP08!6P_5c6? literal 0 HcmV?d00001 diff --git a/jscripts/tiny_mce/themes/simple/images/undo.gif b/jscripts/tiny_mce/themes/simple/images/undo.gif new file mode 100644 index 0000000000000000000000000000000000000000..520796d69defa118055d191eec33cc67f7551710 GIT binary patch literal 175 zcmV;g08sx&Nk%w1VH5xq0K*FaI$fTWtk6Go+_}Zyr?=K#e#T#ZwX4DHa-Hu#XSz{; z-OtzKVv^{Tv+z=g@&Et;A^8LW000jFEC2ui02BZe000DB@X1N5y*TU5^*Z3vJx60U zVAe<_A|#2DUTDd{g#kDRhWrRvKmt&#E(`|)VHiweM~gz>Krlp-Snncu!2ps)!r>e} d2m*##Qg9H=3xcDt9yk');this._def("font_size_classes",'');this._def("font_size_style_values",'xx-small,x-small,small,medium,large,x-large,xx-large',true);this._def("event_elements",'a,img',true);this._def("convert_urls",true);this._def("table_inline_editing",false);this._def("object_resizing",true);this._def("custom_shortcuts",true);this._def("convert_on_click",false);this._def("content_css",'');this._def("fix_list_elements",false);this._def("fix_table_elements",false);this._def("strict_loading_mode",document.contentType=='application/xhtml+xml');this._def("hidden_tab_class",'');this._def("display_tab_class",'');if(this.isMSIE&&!this.isOpera)this.settings.strict_loading_mode=false;if(this.isMSIE&&this.settings['browsers'].indexOf('msie')==-1)return;if(this.isGecko&&this.settings['browsers'].indexOf('gecko')==-1)return;if(this.isSafari&&this.settings['browsers'].indexOf('safari')==-1)return;if(this.isOpera&&this.settings['browsers'].indexOf('opera')==-1)return;var baseHREF=tinyMCE.settings['document_base_url'];var h=document.location.href;var p=h.indexOf('://');if(p>0&&document.location.protocol!="file:"){p=h.indexOf('/',p+3);h=h.substring(0,p);if(baseHREF.indexOf('://')==-1)baseHREF=h+baseHREF;tinyMCE.settings['document_base_url']=baseHREF;tinyMCE.settings['document_base_prefix']=h;}if(baseHREF.indexOf('?')!=-1)baseHREF=baseHREF.substring(0,baseHREF.indexOf('?'));this.settings['base_href']=baseHREF.substring(0,baseHREF.lastIndexOf('/'))+"/";theme=this.settings['theme'];this.blockRegExp=new RegExp("^(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|blockquote|center|dl|dt|dd|dir|fieldset|form|noscript|noframes|menu|isindex|samp)$","i");this.posKeyCodes=new Array(13,45,36,35,33,34,37,38,39,40);this.uniqueURL='javascript:TINYMCE_UNIQUEURL();';this.uniqueTag='';this.callbacks=new Array('onInit','getInfo','getEditorTemplate','setupContent','onChange','onPageLoad','handleNodeChange','initInstance','execCommand','getControlHTML','handleEvent','cleanup');this.settings['theme_href']=tinyMCE.baseURL+"/themes/"+theme;if(!tinyMCE.isMSIE)this.settings['force_br_newlines']=false;if(tinyMCE.getParam("popups_css",false)){var cssPath=tinyMCE.getParam("popups_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings['popups_css']=this.documentBasePath+"/"+cssPath;else this.settings['popups_css']=cssPath;}else this.settings['popups_css']=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_popup.css";if(tinyMCE.getParam("editor_css",false)){var cssPath=tinyMCE.getParam("editor_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings['editor_css']=this.documentBasePath+"/"+cssPath;else this.settings['editor_css']=cssPath;}else this.settings['editor_css']=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_ui.css";if(tinyMCE.settings['debug']){var msg="Debug: \n";msg+="baseURL: "+this.baseURL+"\n";msg+="documentBasePath: "+this.documentBasePath+"\n";msg+="content_css: "+this.settings['content_css']+"\n";msg+="popups_css: "+this.settings['popups_css']+"\n";msg+="editor_css: "+this.settings['editor_css']+"\n";alert(msg);}if(this.configs.length==0){if(this.isSafari&&this.getParam('safari_warning',false))alert("Safari support is very limited and should be considered experimental.\nSo there is no need to even submit bugreports on this early version.\nYou can disable this message by setting: safari_warning option to false");if(typeof(TinyMCECompressed)=="undefined"){tinyMCE.addEvent(window,"DOMContentLoaded",TinyMCE_Engine.prototype.onLoad);if(tinyMCE.isMSIE&&!tinyMCE.isOpera){if(document.body)tinyMCE.addEvent(document.body,"readystatechange",TinyMCE_Engine.prototype.onLoad);else tinyMCE.addEvent(document,"readystatechange",TinyMCE_Engine.prototype.onLoad);}tinyMCE.addEvent(window,"load",TinyMCE_Engine.prototype.onLoad);tinyMCE._addUnloadEvents();}}this.loadScript(tinyMCE.baseURL+'/themes/'+this.settings['theme']+'/editor_template'+tinyMCE.srcMode+'.js');this.loadScript(tinyMCE.baseURL+'/langs/'+this.settings['language']+'.js');this.loadCSS(this.settings['editor_css']);var p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(var i=0;i');this.loadedFiles[this.loadedFiles.length]=url;},loadNextScript:function(){var d=document,se;if(!tinyMCE.settings.strict_loading_mode)return;if(this.loadingIndex0){for(i=0,lflen=this.loadedFiles.length;i');this.loadedFiles[this.loadedFiles.length]=ar[x];}}}},importCSS:function(doc,css){var css_ary=css.replace(/\s+/,'').split(',');var csslen,elm,headArr,x,css_file;for(x=0,csslen=css_ary.length;x0){if(css_file.indexOf('://')==-1&&css_file.charAt(0)!='/')css_file=this.documentBasePath+"/"+css_file;if(typeof(doc.createStyleSheet)=="undefined"){elm=doc.createElement("link");elm.rel="stylesheet";elm.href=css_file;if((headArr=doc.getElementsByTagName("head"))!=null&&headArr.length>0)headArr[0].appendChild(elm);}else doc.createStyleSheet(css_file);}}},confirmAdd:function(e,settings){var elm=tinyMCE.isMSIE?event.srcElement:e.target;var elementId=elm.name?elm.name:elm.id;tinyMCE.settings=settings;if(tinyMCE.settings['convert_on_click']||(!elm.getAttribute('mce_noask')&&confirm(tinyMCELang['lang_edit_confirm'])))tinyMCE.addMCEControl(elm,elementId);elm.setAttribute('mce_noask','true');},updateContent:function(form_element_name){var formElement=document.getElementById(form_element_name);for(var n in tinyMCE.instances){var inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();if(inst.formElement==formElement){var doc=inst.getDoc();tinyMCE._setHTML(doc,inst.formElement.value);if(!tinyMCE.isMSIE)doc.body.innerHTML=tinyMCE._cleanupHTML(inst,doc,this.settings,doc.body,inst.visualAid);}}},addMCEControl:function(replace_element,form_element_name,target_document){var id="mce_editor_"+tinyMCE.idCounter++;var inst=new TinyMCE_Control(tinyMCE.settings);inst.editorId=id;this.instances[id]=inst;inst._onAdd(replace_element,form_element_name,target_document);},removeMCEControl:function(editor_id){var inst=tinyMCE.getInstanceById(editor_id);if(inst){inst.switchSettings();editor_id=inst.editorId;var html=tinyMCE.getContent(editor_id);var tmpInstances=new Array();for(var instanceName in tinyMCE.instances){var instance=tinyMCE.instances[instanceName];if(!tinyMCE.isInstance(instance))continue;if(instanceName!=editor_id)tmpInstances[instanceName]=instance;}tinyMCE.instances=tmpInstances;tinyMCE.selectedElement=null;tinyMCE.selectedInstance=null;var replaceElement=document.getElementById(editor_id+"_parent");var oldTargetElement=inst.oldTargetElement;var targetName=oldTargetElement.nodeName.toLowerCase();if(targetName=="textarea"||targetName=="input"){replaceElement.parentNode.removeChild(replaceElement);oldTargetElement.style.display="inline";oldTargetElement.value=html;}else{oldTargetElement.innerHTML=html;oldTargetElement.style.display='block';replaceElement.parentNode.insertBefore(oldTargetElement,replaceElement);replaceElement.parentNode.removeChild(replaceElement);}}},triggerSave:function(skip_cleanup,skip_callback){var inst,n;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.triggerSave(skip_cleanup,skip_callback);}},resetForm:function(form_index){var i,inst,n,formObj=document.forms[form_index];for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();for(i=0;i');content=content.replace(/"/g,'"');content=content.replace(/&/g,'&');}inst.switchSettings();if(!tinyMCE.isMSIE&&tinyMCE.getParam("setupcontent_reload",false)&&doc.title!="blank_page"){try{doc.location.href=tinyMCE.baseURL+"/blank.htm";}catch(ex){}window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",1000);return;}if(!head){window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",10);return;}tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/themes/"+inst.settings['theme']+"/css/editor_content.css");tinyMCE.importCSS(inst.getDoc(),inst.settings['content_css']);tinyMCE.dispatchCallback(inst,'init_instance_callback','initInstance',inst);if(tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')){inst.addShortcut('ctrl','z','lang_undo_desc','Undo');inst.addShortcut('ctrl','y','lang_redo_desc','Redo');}if(tinyMCE.isGecko){inst.addShortcut('ctrl','b','lang_bold_desc','Bold');inst.addShortcut('ctrl','i','lang_italic_desc','Italic');inst.addShortcut('ctrl','u','lang_underline_desc','Underline');}if(tinyMCE.getParam("convert_fonts_to_spans"))inst.getDoc().body.setAttribute('id','mceSpanFonts');if(tinyMCE.settings['nowrap'])doc.body.style.whiteSpace="nowrap";doc.body.dir=this.settings['directionality'];doc.editorId=editor_id;if(!tinyMCE.isMSIE)doc.documentElement.editorId=editor_id;inst.setBaseHREF(tinyMCE.settings['base_href']);if(tinyMCE.settings['convert_newlines_to_brs']){content=tinyMCE.regexpReplace(content,"\r\n","
    ","gi");content=tinyMCE.regexpReplace(content,"\r","
    ","gi");content=tinyMCE.regexpReplace(content,"\n","
    ","gi");}content=tinyMCE.storeAwayURLs(content);content=tinyMCE._customCleanup(inst,"insert_to_editor",content);if(tinyMCE.isMSIE){window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["'+editor_id+'"].getDoc(), "'+editor_id+'");}catch(e){}',500);if(tinyMCE.settings["force_br_newlines"])doc.styleSheets[0].addRule("p","margin: 0;");var body=inst.getBody();body.editorId=editor_id;}content=tinyMCE.cleanupHTMLCode(content);if(!tinyMCE.isMSIE){var contentElement=inst.getDoc().createElement("body");var doc=inst.getDoc();contentElement.innerHTML=content;if(tinyMCE.isGecko&&tinyMCE.settings['remove_lt_gt'])content=content.replace(new RegExp('<>','g'),"");if(tinyMCE.settings['cleanup_on_startup'])tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,doc,this.settings,contentElement));else{content=tinyMCE.regexpReplace(content,"","","gi");content=tinyMCE.regexpReplace(content,"","
    ","gi");content=tinyMCE.regexpReplace(content,"","
    ","gi");tinyMCE.setInnerHTML(inst.getBody(),content);}tinyMCE.convertAllRelativeURLs(inst.getBody());}else{if(tinyMCE.settings['cleanup_on_startup']){tinyMCE._setHTML(inst.getDoc(),content);eval('try {tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody()));} catch(e) {}');}else tinyMCE._setHTML(inst.getDoc(),content);}var parentElm=inst.targetDoc.getElementById(inst.editorId+'_parent');inst.formElement=tinyMCE.isGecko?parentElm.previousSibling:parentElm.nextSibling;tinyMCE.handleVisualAid(inst.getBody(),true,tinyMCE.settings['visual'],inst);tinyMCE.dispatchCallback(inst,'setupcontent_callback','setupContent',editor_id,inst.getBody(),inst.getDoc());if(!tinyMCE.isMSIE)tinyMCE.addEventHandlers(inst);if(tinyMCE.isMSIE){tinyMCE.addEvent(inst.getBody(),"blur",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(inst.getBody(),"beforedeactivate",TinyMCE_Engine.prototype._eventPatch);if(!tinyMCE.isOpera){tinyMCE.addEvent(doc.body,"mousemove",TinyMCE_Engine.prototype.onMouseMove);tinyMCE.addEvent(doc.body,"beforepaste",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(doc.body,"drop",TinyMCE_Engine.prototype._eventPatch);}}tinyMCE.selectedInstance=inst;tinyMCE.selectedElement=inst.contentWindow.document.body;tinyMCE._customCleanup(inst,"insert_to_editor_dom",inst.getBody());tinyMCE._customCleanup(inst,"setup_content_dom",inst.getBody());tinyMCE._setEventsEnabled(inst.getBody(),false);tinyMCE.cleanupAnchors(inst.getDoc());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(inst.getDoc());inst.startContent=tinyMCE.trim(inst.getBody().innerHTML);inst.undoRedo.add({content:inst.startContent});if(tinyMCE.isGecko){tinyMCE.selectNodes(inst.getBody(),function(n){if(n.nodeType==3||n.nodeType==8){n.nodeValue=n.nodeValue.replace(new RegExp('\\smce_src=\"[^\"]*\"','gi'),"");n.nodeValue=n.nodeValue.replace(new RegExp('\\smce_href=\"[^\"]*\"','gi'),"");}return false;});}tinyMCE._removeInternal(inst.getBody());tinyMCE.selectedInstance=inst;tinyMCE.triggerNodeChange(false,true);},storeAwayURLs:function(s){if(!s.match(/(mce_src|mce_href)/gi,s)){s=s.replace(new RegExp('src\\s*=\\s*\"([^ >\"]*)\"','gi'),'src="$1" mce_src="$1"');s=s.replace(new RegExp('href\\s*=\\s*\"([^ >\"]*)\"','gi'),'href="$1" mce_href="$1"');}return s;},_removeInternal:function(n){if(tinyMCE.isGecko){tinyMCE.selectNodes(n,function(n){if(n.nodeType==3||n.nodeType==8){n.nodeValue=n.nodeValue.replace(new RegExp('\\smce_src=\"[^\"]*\"','gi'),"");n.nodeValue=n.nodeValue.replace(new RegExp('\\smce_href=\"[^\"]*\"','gi'),"");}return false;});}},removeTinyMCEFormElements:function(form_obj){if(typeof(form_obj)=="undefined"||form_obj==null)return;if(form_obj.nodeName!="FORM"){if(form_obj.form)form_obj=form_obj.form;else form_obj=tinyMCE.getParentElement(form_obj,"form");}if(form_obj==null)return;for(var i=0;i");rng.collapse(false);rng.select();tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange(false);return false;}}if(e.keyCode==8||e.keyCode==46){tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(e.target,"a");tinyMCE.imgElement=tinyMCE.getParentElement(e.target,"img");tinyMCE.triggerNodeChange(false);}return false;break;case"keyup":case"keydown":tinyMCE.hideMenus();tinyMCE.hasMouseMoved=false;if(inst&&inst.handleShortcut(e))return false;if(e.target.editorId)tinyMCE.selectedInstance=tinyMCE.instances[e.target.editorId];else return;if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();var inst=tinyMCE.selectedInstance;if(tinyMCE.isGecko&&tinyMCE.settings['force_p_newlines']&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");e.preventDefault();return false;}}tinyMCE.selectedElement=null;tinyMCE.selectedNode=null;var elm=tinyMCE.selectedInstance.getFocusElement();tinyMCE.linkElement=tinyMCE.getParentElement(elm,"a");tinyMCE.imgElement=tinyMCE.getParentElement(elm,"img");tinyMCE.selectedElement=elm;if(tinyMCE.isGecko&&e.type=="keyup"&&e.keyCode==9)tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(),true,tinyMCE.settings['visual'],tinyMCE.selectedInstance);if(tinyMCE.isMSIE&&e.type=="keydown"&&e.keyCode==13)tinyMCE.enterKeyElement=tinyMCE.selectedInstance.getFocusElement();if(tinyMCE.isMSIE&&e.type=="keyup"&&e.keyCode==13){var elm=tinyMCE.enterKeyElement;if(elm){var re=new RegExp('^HR|IMG|BR$','g');var dre=new RegExp('^H[1-6]$','g');if(!elm.hasChildNodes()&&!re.test(elm.nodeName)){if(dre.test(elm.nodeName))elm.innerHTML="  ";else elm.innerHTML=" ";}}}var keys=tinyMCE.posKeyCodes;var posKey=false;for(var i=0;i';h+='';h+='';}else{h+='';h+='';h+='';}return h;},addButtonMap:function(m){var i,a=m.replace(/\s+/,'').split(',');for(i=0;i0);if(tinyMCE.settings['custom_undo_redo']){undoIndex=inst.undoRedo.undoIndex;undoLevels=inst.undoRedo.undoLevels.length;}tinyMCE.dispatchCallback(inst,'handle_node_change_callback','handleNodeChange',editorId,elm,undoIndex,undoLevels,inst.visualAid,anySelection,setup_content);}if(this.selectedInstance&&(typeof(focus)=="undefined"||focus))this.selectedInstance.contentWindow.focus();},_customCleanup:function(inst,type,content){var pl,po,i;var customCleanup=tinyMCE.settings['cleanup_callback'];if(customCleanup!=""&&eval("typeof("+customCleanup+")")!="undefined")content=eval(customCleanup+"(type, content, inst);");pl=inst.plugins;for(i=0;i0){for(i=ar.length-1;i>=0;i--){s=ar[i].substring(2,ar[i].length-1);if(s.indexOf('lang_')==0&&tinyMCELang[s])h=tinyMCE.replaceVar(h,s,tinyMCELang[s]);else if(as&&as[s])h=tinyMCE.replaceVar(h,s,as[s]);else if(tinyMCE.settings[s])h=tinyMCE.replaceVar(h,s,tinyMCE.settings[s]);}}h=tinyMCE.replaceVar(h,"themeurl",tinyMCE.themeURL);return h;},replaceVar:function(h,r,v){return h.replace(new RegExp('{\\\$'+r+'}','g'),v);},openWindow:function(template,args){var html,width,height,x,y,resizable,scrollbars,url;args['mce_template_file']=template['file'];args['mce_width']=template['width'];args['mce_height']=template['height'];tinyMCE.windowArgs=args;html=template['html'];if(!(width=parseInt(template['width'])))width=320;if(!(height=parseInt(template['height'])))height=200;if(tinyMCE.isMSIE)height+=40;else height+=20;x=parseInt(screen.width/2.0)-(width/2.0);y=parseInt(screen.height/2.0)-(height/2.0);resizable=(args&&args['resizable'])?args['resizable']:"no";scrollbars=(args&&args['scrollbars'])?args['scrollbars']:"no";if(template['file'].charAt(0)!='/'&&template['file'].indexOf('://')==-1)url=tinyMCE.baseURL+"/themes/"+tinyMCE.getParam("theme")+"/"+template['file'];else url=template['file'];for(var name in args){if(typeof(args[name])=='function')continue;url=tinyMCE.replaceVar(url,name,escape(args[name]));}if(html){html=tinyMCE.replaceVar(html,"css",this.settings['popups_css']);html=tinyMCE.applyTemplate(html,args);var win=window.open("","mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog=yes,minimizable="+resizable+",modal=yes,width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang['lang_popup_blocked']);return;}win.document.write(html);win.document.close();win.resizeTo(width,height);win.focus();}else{if((tinyMCE.isMSIE&&!tinyMCE.isOpera)&&resizable!='yes'&&tinyMCE.settings["dialog_type"]=="modal"){height+=10;var features="resizable:"+resizable+";scroll:"+scrollbars+";status:yes;center:yes;help:no;dialogWidth:"+width+"px;dialogHeight:"+height+"px;";window.showModalDialog(url,window,features);}else{var modal=(resizable=="yes")?"no":"yes";if(tinyMCE.isGecko&&tinyMCE.isMac)modal="no";if(template['close_previous']!="no")try{tinyMCE.lastWindow.close();}catch(ex){}var win=window.open(url,"mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog="+modal+",minimizable="+resizable+",modal="+modal+",width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang['lang_popup_blocked']);return;}if(template['close_previous']!="no")tinyMCE.lastWindow=win;eval('try { win.resizeTo(width, height); } catch(e) { }');if(tinyMCE.isGecko){if(win.document.defaultView.statusbar.visible)win.resizeBy(0,tinyMCE.isMac?10:24);}win.focus();}}},closeWindow:function(win){win.close();},getVisualAidClass:function(class_name,state){var aidClass=tinyMCE.settings['visual_table_class'];if(typeof(state)=="undefined")state=tinyMCE.settings['visual'];var classNames=new Array();var ar=class_name.split(' ');for(var i=0;i0)className+=" ";className+=classNames[i];}return className;},handleVisualAid:function(el,deep,state,inst,skip_dispatch){if(!el)return;if(!skip_dispatch)tinyMCE.dispatchCallback(inst,'handle_visual_aid_callback','handleVisualAid',el,deep,state,inst);var tableElement=null;switch(el.nodeName){case"TABLE":var oldW=el.style.width;var oldH=el.style.height;var bo=tinyMCE.getAttrib(el,"border");bo=bo==""||bo=="0"?true:false;tinyMCE.setAttrib(el,"class",tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el,"class"),state&&bo));el.style.width=oldW;el.style.height=oldH;for(var y=0;y0){for(var x=0;x0)tinyMCE.cssClasses=output;return output;},regexpReplace:function(in_str,reg_exp,replace_str,opts){if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';var re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str);},trim:function(s){return s.replace(/^\s*|\s*$/g,"");},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s;},getControlHTML:function(c){var i,l,n,o,v;l=tinyMCE.plugins;for(n in l){o=l[n];if(o.getControlHTML&&(v=o.getControlHTML(c))!='')return tinyMCE.replaceVar(v,"pluginurl",o.baseURL);}o=tinyMCE.themes[tinyMCE.settings['theme']];if(o.getControlHTML&&(v=o.getControlHTML(c))!='')return v;return'';},evalFunc:function(f,idx,a){var s='(',i;for(i=idx;i0)return true;if(ins!=null){for(i=0,l=ins.plugins;i0)return true;}}l=tinyMCE.themes;for(on in l){o=l[on];if(o[n]&&(v=tinyMCE.evalFunc(o[n],3,a))==s&&m>0)return true;}return false;},xmlEncode:function(s){s=""+s;s=s.replace(/&/g,'&');s=s.replace(new RegExp('"','g'),'"');s=s.replace(/\'/g,''');s=s.replace(//g,'>');return s;},extend:function(p,np){var o={};o.parent=p;for(n in p)o[n]=p[n];for(n in np)o[n]=np[n];return o;},hideMenus:function(){var e=tinyMCE.lastSelectedMenuBtn;if(tinyMCE.lastMenu){tinyMCE.lastMenu.hide();tinyMCE.lastMenu=null;}if(e){tinyMCE.switchClass(e,tinyMCE.lastMenuBtnClass);tinyMCE.lastSelectedMenuBtn=null;}},explode:function(d,s){var ar=s.split(d),oar=new Array(),i;for(i=0;i0){for(i=0;i1&&tinyMCE.currentConfig!=this.settings['index']){tinyMCE.settings=this.settings;tinyMCE.currentConfig=this.settings['index'];}},getBody:function(){return this.getDoc().body;},getDoc:function(){return this.contentWindow.document;},getWin:function(){return this.contentWindow;},addShortcut:function(m,k,d,cmd,ui,va){var n=typeof(k)=="number",ie=tinyMCE.isMSIE,c,sc,i;var scl=this.shortcuts;if(!tinyMCE.getParam('custom_shortcuts'))return false;m=m.toLowerCase();k=ie&&!n?k.toUpperCase():k;c=n?null:k.charCodeAt(0);d=d&&d.indexOf('lang_')==0?tinyMCE.getLang(d):d;sc={alt:m.indexOf('alt')!=-1,ctrl:m.indexOf('ctrl')!=-1,shift:m.indexOf('shift')!=-1,charCode:c,keyCode:n?k:(ie?c:null),desc:d,cmd:cmd,ui:ui,val:va};for(i=0;i0)rng.pasteHTML('
    '+rng.htmlText+"
    ");tinyMCE.triggerNodeChange();return;}}}switch(command){case"mceRepaint":this.repaint();return true;case"InsertUnorderedList":case"InsertOrderedList":var tag=(command=="InsertUnorderedList")?"ul":"ol";if(tinyMCE.isSafari)this.execCommand("mceInsertContent",false,"<"+tag+">
  •  
  • <"+tag+">");else this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"Strikethrough":if(tinyMCE.isSafari)this.execCommand("mceInsertContent",false,""+this.selection.getSelectedHTML()+"");else this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"mceSelectNode":this.selection.selectNode(value);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=value;break;case"FormatBlock":if(value==null||value==""){var elm=tinyMCE.getParentElement(this.getFocusElement(),"p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");if(elm)this.execCommand("mceRemoveNode",false,elm);}else{if(tinyMCE.isGecko&&new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>','gi').test(value))value=value.replace(/[^a-z]/gi,'');if(tinyMCE.isMSIE&&new RegExp('blockquote|code|samp','gi').test(value)){var b=this.selection.getBookmark();this.getDoc().execCommand("FormatBlock",false,'

    ');tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()),value);this.selection.moveToBookmark(b);}else this.getDoc().execCommand("FormatBlock",false,value);}tinyMCE.triggerNodeChange();break;case"mceRemoveNode":if(!value)value=tinyMCE.getParentElement(this.getFocusElement());if(tinyMCE.isMSIE){value.outerHTML=value.innerHTML;}else{var rng=value.ownerDocument.createRange();rng.setStartBefore(value);rng.setEndAfter(value);rng.deleteContents();rng.insertNode(rng.createContextualFragment(value.innerHTML));}tinyMCE.triggerNodeChange();break;case"mceSelectNodeDepth":var parentNode=this.getFocusElement();for(var i=0;parentNode;i++){if(parentNode.nodeName.toLowerCase()=="body")break;if(parentNode.nodeName.toLowerCase()=="#text"){i--;parentNode=parentNode.parentNode;continue;}if(i==value){this.selection.selectNode(parentNode,false);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=parentNode;return;}parentNode=parentNode.parentNode;}break;case"SetStyleInfo":var rng=this.getRng();var sel=this.getSel();var scmd=value['command'];var sname=value['name'];var svalue=value['value']==null?'':value['value'];var wrapper=value['wrapper']?value['wrapper']:"span";var parentElm=null;var invalidRe=new RegExp("^BODY|HTML$","g");var invalidParentsRe=tinyMCE.settings['merge_styles_invalid_parents']!=''?new RegExp(tinyMCE.settings['merge_styles_invalid_parents'],"gi"):null;if(tinyMCE.isMSIE){if(rng.item)parentElm=rng.item(0);else{var pelm=rng.parentElement();var prng=doc.selection.createRange();prng.moveToElementText(pelm);if(rng.htmlText==prng.htmlText||rng.boundingWidth==0){if(invalidParentsRe==null||!invalidParentsRe.test(pelm.nodeName))parentElm=pelm;}}}else{var felm=this.getFocusElement();if(sel.isCollapsed||(new RegExp('td|tr|tbody|table','gi').test(felm.nodeName)&&sel.anchorNode==felm.parentNode))parentElm=felm;}if(parentElm&&!invalidRe.test(parentElm.nodeName)){if(scmd=="setstyle")tinyMCE.setStyleAttrib(parentElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(parentElm,sname,svalue);if(scmd=="removeformat"){parentElm.style.cssText='';tinyMCE.setAttrib(parentElm,'class','');}var ch=tinyMCE.getNodeTree(parentElm,new Array(),1);for(var z=0;z=0;i--){var elm=nodes[i];var isNew=tinyMCE.getAttrib(elm,"mce_new")=="true";elm.removeAttribute("mce_new");if(elm.childNodes&&elm.childNodes.length==1&&elm.childNodes[0].nodeType==1){this._mergeElements(scmd,elm,elm.childNodes[0],isNew);continue;}if(elm.parentNode.childNodes.length==1&&!invalidRe.test(elm.nodeName)&&!invalidRe.test(elm.parentNode.nodeName)){if(invalidParentsRe==null||!invalidParentsRe.test(elm.parentNode.nodeName))this._mergeElements(scmd,elm.parentNode,elm,false);}}var nodes=doc.getElementsByTagName(wrapper);for(var i=nodes.length-1;i>=0;i--){var elm=nodes[i];var isEmpty=true;var tmp=doc.createElement("body");tmp.appendChild(elm.cloneNode(false));tmp.innerHTML=tmp.innerHTML.replace(new RegExp('style=""|class=""','gi'),'');if(new RegExp('','gi').test(tmp.innerHTML)){for(var x=0;x0){value=tinyMCE.replaceVar(value,"selection",selectedText);tinyMCE.execCommand('mceInsertContent',false,value);}tinyMCE.triggerNodeChange();break;case"mceSetAttribute":if(typeof(value)=='object'){var targetElms=(typeof(value['targets'])=="undefined")?"p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address":value['targets'];var targetNode=tinyMCE.getParentElement(this.getFocusElement(),targetElms);if(targetNode){targetNode.setAttribute(value['name'],value['value']);tinyMCE.triggerNodeChange();}}break;case"mceSetCSSClass":this.execCommand("SetStyleInfo",false,{command:"setattrib",name:"class",value:value});break;case"mceInsertRawHTML":var key='tiny_mce_marker';this.execCommand('mceBeginUndoLevel');this.execCommand('mceInsertContent',false,key);var scrollX=this.getDoc().body.scrollLeft+this.getDoc().documentElement.scrollLeft;var scrollY=this.getDoc().body.scrollTop+this.getDoc().documentElement.scrollTop;var html=this.getBody().innerHTML;if((pos=html.indexOf(key))!=-1)tinyMCE.setInnerHTML(this.getBody(),html.substring(0,pos)+value+html.substring(pos+key.length));this.contentWindow.scrollTo(scrollX,scrollY);this.execCommand('mceEndUndoLevel');break;case"mceInsertContent":if(!value)value='';var insertHTMLFailed=false;this.getWin().focus();if(tinyMCE.isGecko||tinyMCE.isOpera){try{if(value.indexOf('<')==-1&&!value.match(/(&| |<|>)/g)){var r=this.getRng();var n=this.getDoc().createTextNode(tinyMCE.entityDecode(value));var s=this.getSel();var r2=r.cloneRange();s.removeAllRanges();r.deleteContents();r.insertNode(n);r2.selectNode(n);r2.collapse(false);s.removeAllRanges();s.addRange(r2);}else{value=tinyMCE.fixGeckoBaseHREFBug(1,this.getDoc(),value);this.getDoc().execCommand('inserthtml',false,value);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value);}}catch(ex){insertHTMLFailed=true;}if(!insertHTMLFailed){tinyMCE.triggerNodeChange();return;}}if(tinyMCE.isOpera&&insertHTMLFailed){this.getDoc().execCommand("insertimage",false,tinyMCE.uniqueURL);var ar=tinyMCE.getElementsByAttributeValue(this.getBody(),"img","src",tinyMCE.uniqueURL);ar[0].outerHTML=value;return;}if(!tinyMCE.isMSIE){var isHTML=value.indexOf('<')!=-1;var sel=this.getSel();var rng=this.getRng();if(isHTML){if(tinyMCE.isSafari){var tmpRng=this.getDoc().createRange();tmpRng.setStart(this.getBody(),0);tmpRng.setEnd(this.getBody(),0);value=tmpRng.createContextualFragment(value);}else value=rng.createContextualFragment(value);}else{var el=document.createElement("div");el.innerHTML=value;value=el.firstChild.nodeValue;value=doc.createTextNode(value);}if(tinyMCE.isSafari&&!isHTML){this.execCommand('InsertText',false,value.nodeValue);tinyMCE.triggerNodeChange();return true;}else if(tinyMCE.isSafari&&isHTML){rng.deleteContents();rng.insertNode(value);tinyMCE.triggerNodeChange();return true;}rng.deleteContents();if(rng.startContainer.nodeType==3){var node=rng.startContainer.splitText(rng.startOffset);node.parentNode.insertBefore(value,node);}else rng.insertNode(value);if(!isHTML){sel.selectAllChildren(doc.body);sel.removeAllRanges();var rng=doc.createRange();rng.selectNode(value);rng.collapse(false);sel.addRange(rng);}else rng.collapse(false);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value);}else{var rng=doc.selection.createRange();var c=value.indexOf('";}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i';return h;},_serializeAttribute:function(n,r,an){var av='',t,os=this.settings.on_save;if(os&&(an.indexOf('mce_')==0||an.indexOf('_moz')==0))return'';if(os&&this.mceAttribs[an])av=this._getAttrib(n,this.mceAttribs[an]);if(av.length==0)av=this._getAttrib(n,an);if(av.length==0&&r.defaultAttribs&&(t=r.defaultAttribs[an])){av=t;if(av=="mce_empty")return" "+an+'=""';}if(r.forceAttribs&&(t=r.forceAttribs[an]))av=t;if(os&&av.length!=0&&this.settings.url_converter.length!=0&&/^(src|href|longdesc)$/.test(an))av=eval(this.settings.url_converter+'(this, n, av)');if(av.length!=0&&r.validAttribValues&&r.validAttribValues[an]&&!r.validAttribValues[an].test(av))return"";if(av.length!=0&&av=="{$uid}")av="uid_"+(this.idCount++);if(av.length!=0)return" "+an+"="+'"'+this.xmlEncode(av)+'"';return"";},formatHTML:function(h){var s=this.settings,p='',i=0,li=0,o='',l;h=h.replace(/\r/g,'');h='\n'+h;h=h.replace(new RegExp('\\n\\s+','gi'),'\n');h=h.replace(this.nlBeforeRe,'\n<$1$2>');h=h.replace(this.nlAfterRe,'<$1$2>\n');h=h.replace(this.nlBeforeAfterRe,'\n<$1$2$3>\n');h+='\n';while((i=h.indexOf('\n',i+1))!=-1){if((l=h.substring(li+1,i)).length!=0){if(this.ouRe.test(l)&&p.length>=s.indent_levels)p=p.substring(s.indent_levels);o+=p+l+'\n';if(this.inRe.test(l))p+=this.inStr;}li=i;}return o;},xmlEncode:function(s){var i,l,e,o='',c;this._setupEntities();switch(this.settings.entity_encoding){case"raw":return tinyMCE.xmlEncode(s);case"named":for(i=0,l=s.length;i127||c==60||c==62||c==38||c==39||c==34)o+='&#'+c+";";else o+=String.fromCharCode(c);}return o;}return s;},split:function(re,s){var c=s.split(re);var i,l,o=new Array();for(i=0,l=c.length;i/g,'>');h=h.replace(/]*)>\u00A0?<\/p>/gi,' 

    ');h=h.replace(/]*)>\s* \s*<\/p>/gi,' 

    ');h=h.replace(/]*)>\s+<\/p>/gi,' 

    ');e.innerHTML=tinyMCE.uniqueTag+h;e.firstChild.removeNode(true);nl=e.getElementsByTagName("p");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.nodeName=='P'&&!n.hasChildNodes()&&!n.mce_keep)n.parentNode.removeChild(n);}}else{h=this.fixGeckoBaseHREFBug(1,e,h);e.innerHTML=h;this.fixGeckoBaseHREFBug(2,e,h);}};TinyMCE_Engine.prototype.getOuterHTML=function(e){if(tinyMCE.isMSIE)return e.outerHTML;var d=e.ownerDocument.createElement("body");d.appendChild(e);return d.innerHTML;};TinyMCE_Engine.prototype.setOuterHTML=function(e,h){if(tinyMCE.isMSIE){e.outerHTML=h;return;}var d=e.ownerDocument.createElement("body");d.innerHTML=h;e.parentNode.replaceChild(d.firstChild,e);};TinyMCE_Engine.prototype._getElementById=function(id,d){var e,i,j,f;if(typeof(d)=="undefined")d=document;e=d.getElementById(id);if(!e){f=d.forms;for(i=0;i-1;i--){if(ar[i].specified&&ar[i].nodeValue)ne.setAttribute(ar[i].nodeName.toLowerCase(),ar[i].nodeValue);}ar=e.childNodes;for(i=0;i=strTok2.length){for(var i=0;i=strTok2.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break;}}}if(strTok1.length=strTok1.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break;}}}if(breakPoint==1)return targetURL.path;for(var i=0;i<(strTok1.length-(breakPoint-1));i++)outPath+="../";for(var i=breakPoint-1;i=0;i--){if(baseURLParts[i].length==0)continue;newBaseURLParts[newBaseURLParts.length]=baseURLParts[i];}baseURLParts=newBaseURLParts.reverse();var newRelURLParts=new Array();var numBack=0;for(var i=relURLParts.length-1;i>=0;i--){if(relURLParts[i].length==0||relURLParts[i]==".")continue;if(relURLParts[i]=='..'){numBack++;continue;}if(numBack>0){numBack--;continue;}newRelURLParts[newRelURLParts.length]=relURLParts[i];}relURLParts=newRelURLParts.reverse();var len=baseURLParts.length-numBack;var absPath=(len<=0?"":"/")+baseURLParts.slice(0,len).join('/')+"/"+relURLParts.join('/');var start="",end="";relURL.protocol=baseURL.protocol;relURL.host=baseURL.host;relURL.port=baseURL.port;if(relURL.path.charAt(relURL.path.length-1)=="/")absPath+="/";relURL.path=absPath;return this.serializeURL(relURL);};TinyMCE_Engine.prototype.convertURL=function(url,node,on_save){var prot=document.location.protocol;var host=document.location.hostname;var port=document.location.port;if(prot=="file:")return url;url=tinyMCE.regexpReplace(url,'(http|https):///','/');if(url.indexOf('mailto:')!=-1||url.indexOf('javascript:')!=-1||tinyMCE.regexpReplace(url,'[ \t\r\n\+]|%20','').charAt(0)=="#")return url;if(!tinyMCE.isMSIE&&!on_save&&url.indexOf("://")==-1&&url.charAt(0)!='/')return tinyMCE.settings['base_href']+url;if(on_save&&tinyMCE.getParam('relative_urls')){var curl=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],url);if(curl.charAt(0)=='/')curl=tinyMCE.settings['document_base_prefix']+curl;var urlParts=tinyMCE.parseURL(curl);var tmpUrlParts=tinyMCE.parseURL(tinyMCE.settings['document_base_url']);if(urlParts['host']==tmpUrlParts['host']&&(urlParts['port']==tmpUrlParts['port']))return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings['document_base_url'],curl);}if(!tinyMCE.getParam('relative_urls')){var urlParts=tinyMCE.parseURL(url);var baseUrlParts=tinyMCE.parseURL(tinyMCE.settings['base_href']);url=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],url);if(urlParts['anchor']&&urlParts['path']==baseUrlParts['path'])return"#"+urlParts['anchor'];}if(tinyMCE.getParam('remove_script_host')){var start="",portPart="";if(port!="")portPart=":"+port;start=prot+"//"+host+portPart+"/";if(url.indexOf(start)==0)url=url.substring(start.length-1);}return url;};TinyMCE_Engine.prototype.convertAllRelativeURLs=function(body){var elms=body.getElementsByTagName("img");for(var i=0;ibookmark.index){try{rng.addElement(nl[bookmark.index]);}catch(ex){}}}else{rng=inst.getSel().createRange();rng.moveToElementText(inst.getBody());rng.collapse(true);rng.moveStart('character',bookmark.start);rng.moveEnd('character',bookmark.length);}rng.select();win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true;}if(tinyMCE.isGecko&&bookmark.rng){sel.removeAllRanges();sel.addRange(bookmark.rng);win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true;}if(tinyMCE.isGecko){rng=doc.createRange();nl=doc.getElementsByTagName(bookmark.startTag);if(nl.length>bookmark.start)rng.setStart(nl[bookmark.start].childNodes[bookmark.startIndex],bookmark.startOffset);nl=doc.getElementsByTagName(bookmark.endTag);if(nl.length>bookmark.end)rng.setEnd(nl[bookmark.end].childNodes[bookmark.endIndex],bookmark.endOffset);sel.removeAllRanges();sel.addRange(rng);win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true;}return false;},selectNode:function(node,collapse,select_text_node,to_start){var inst=this.instance,sel,rng,nodes;if(!node)return;if(typeof(collapse)=="undefined")collapse=true;if(typeof(select_text_node)=="undefined")select_text_node=false;if(typeof(to_start)=="undefined")to_start=true;if(tinyMCE.isMSIE){rng=inst.getBody().createTextRange();try{rng.moveToElementText(node);if(collapse)rng.collapse(to_start);rng.select();}catch(e){}}else{sel=this.getSel();if(!sel)return;if(tinyMCE.isSafari){sel.setBaseAndExtent(node,0,node,node.innerText.length);if(collapse){if(to_start)sel.collapseToStart();else sel.collapseToEnd();}this.scrollToNode(node);return;}rng=inst.getDoc().createRange();if(select_text_node){nodes=tinyMCE.getNodeTree(node,new Array(),3);if(nodes.length>0)rng.selectNodeContents(nodes[0]);else rng.selectNodeContents(node);}else rng.selectNode(node);if(collapse){if(!to_start&&node.nodeType==3){rng.setStart(node,node.nodeValue.length);rng.setEnd(node,node.nodeValue.length);}else rng.collapse(to_start);}sel.removeAllRanges();sel.addRange(rng);}this.scrollToNode(node);tinyMCE.selectedElement=null;if(node.nodeType==1)tinyMCE.selectedElement=node;},scrollToNode:function(node){var inst=this.instance;var pos,doc,scrollX,scrollY,height;pos=tinyMCE.getAbsPosition(node);doc=inst.getDoc();scrollX=doc.body.scrollLeft+doc.documentElement.scrollLeft;scrollY=doc.body.scrollTop+doc.documentElement.scrollTop;height=tinyMCE.isMSIE?document.getElementById(inst.editorId).style.pixelHeight:inst.targetElement.clientHeight;if(!tinyMCE.settings['auto_resize']&&!(pos.absTop>scrollY&&pos.absTop<(scrollY-25+height)))inst.contentWindow.scrollTo(pos.absLeft,pos.absTop-height+25);},getSel:function(){var inst=this.instance;if(tinyMCE.isMSIE&&!tinyMCE.isOpera)return inst.getDoc().selection;return inst.contentWindow.getSelection();},getRng:function(){var inst=this.instance;var sel=this.getSel();if(sel==null)return null;if(tinyMCE.isMSIE&&!tinyMCE.isOpera)return sel.createRange();if(tinyMCE.isSafari&&!sel.getRangeAt)return''+window.getSelection();return sel.getRangeAt(0);},getFocusElement:function(){var inst=this.instance;if(tinyMCE.isMSIE&&!tinyMCE.isOpera){var doc=inst.getDoc();var rng=doc.selection.createRange();var elm=rng.item?rng.item(0):rng.parentElement();}else{if(inst.isHidden())return inst.getBody();var sel=this.getSel();var rng=this.getRng();if(!sel||!rng)return null;var elm=rng.commonAncestorContainer;if(!rng.collapsed){if(rng.startContainer==rng.endContainer){if(rng.startOffset-rng.endOffset<2){if(rng.startContainer.hasChildNodes())elm=rng.startContainer.childNodes[rng.startOffset];}}}elm=tinyMCE.getParentElement(elm);}return elm;}};function TinyMCE_UndoRedo(inst){this.instance=inst;this.undoLevels=new Array();this.undoIndex=0;this.typingUndoIndex=-1;this.undoRedo=true;};TinyMCE_UndoRedo.prototype={add:function(l){var b;if(l){this.undoLevels[this.undoLevels.length]=l;return true;}var inst=this.instance;if(this.typingUndoIndex!=-1){this.undoIndex=this.typingUndoIndex;}var newHTML=tinyMCE.trim(inst.getBody().innerHTML);if(this.undoLevels[this.undoIndex]&&newHTML!=this.undoLevels[this.undoIndex].content){tinyMCE.dispatchCallback(inst,'onchange_callback','onChange',inst);var customUndoLevels=tinyMCE.settings['custom_undo_redo_levels'];if(customUndoLevels!=-1&&this.undoLevels.length>customUndoLevels){for(var i=0;i0){this.undoIndex--;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark);}},redo:function(){var inst=this.instance;tinyMCE.execCommand("mceEndTyping");if(this.undoIndex<(this.undoLevels.length-1)){this.undoIndex++;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark);}tinyMCE.triggerNodeChange();}};var TinyMCE_ForceParagraphs={_insertPara:function(inst,e){function isEmpty(para){function isEmptyHTML(html){return html.replace(new RegExp('[ \t\r\n]+','g'),'').toLowerCase()=="";}if(para.getElementsByTagName("img").length>0)return false;if(para.getElementsByTagName("table").length>0)return false;if(para.getElementsByTagName("hr").length>0)return false;var nodes=tinyMCE.getNodeTree(para,new Array(),3);for(var i=0;i <"+blockName+"> ";paraAfter=body.childNodes[1];}inst.selection.selectNode(paraAfter,true,true);return true;}if(startChop.nodeName==blockName)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);rngBefore.setEnd(startNode,startOffset);paraBefore.appendChild(rngBefore.cloneContents());rngAfter.setEndAfter(endChop);rngAfter.setStart(endNode,endOffset);var contents=rngAfter.cloneContents();if(contents.firstChild&&contents.firstChild.nodeName==blockName){paraAfter.innerHTML=contents.firstChild.innerHTML;}else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";var rng=doc.createRange();if(!startChop.previousSibling&&startChop.parentNode.nodeName.toUpperCase()==blockName){rng.setStartBefore(startChop.parentNode);}else{if(rngBefore.startContainer.nodeName.toUpperCase()==blockName&&rngBefore.startOffset==0)rng.setStartBefore(rngBefore.startContainer);else rng.setStart(rngBefore.startContainer,rngBefore.startOffset);}if(!endChop.nextSibling&&endChop.parentNode.nodeName.toUpperCase()==blockName)rng.setEndAfter(endChop.parentNode);else rng.setEnd(rngAfter.endContainer,rngAfter.endOffset);rng.deleteContents();rng.insertNode(paraAfter);rng.insertNode(paraBefore);paraAfter.normalize();paraBefore.normalize();inst.selection.selectNode(paraAfter,true,true);return true;},_handleBackSpace:function(inst){var r=inst.getRng(),sn=r.startContainer,nv,s=false;if(sn&&sn.nextSibling&&sn.nextSibling.nodeName=="BR"){nv=sn.nodeValue;if(nv!=null&&nv.length>=r.startOffset&&nv.charAt(r.startOffset-1)==' ')s=true;if(nv!=null&&r.startOffset==nv.length)sn.nextSibling.parentNode.removeChild(sn.nextSibling);}return s;}};function TinyMCE_Layer(id,bm){this.id=id;this.blockerElement=null;this.events=false;this.element=null;this.blockMode=typeof(bm)!='undefined'?bm:true;this.doc=document;};TinyMCE_Layer.prototype={moveRelativeTo:function(re,p){var rep=this.getAbsPosition(re);var w=parseInt(re.offsetWidth);var h=parseInt(re.offsetHeight);var e=this.getElement();var ew=parseInt(e.offsetWidth);var eh=parseInt(e.offsetHeight);var x,y;switch(p){case"tl":x=rep.absLeft;y=rep.absTop;break;case"tr":x=rep.absLeft+w;y=rep.absTop;break;case"bl":x=rep.absLeft;y=rep.absTop+h;break;case"br":x=rep.absLeft+w;y=rep.absTop+h;break;case"cc":x=rep.absLeft+(w/2)-(ew/2);y=rep.absTop+(h/2)-(eh/2);break;}this.moveTo(x,y);},moveBy:function(x,y){var e=this.getElement();this.moveTo(parseInt(e.style.left)+x,parseInt(e.style.top)+y);},moveTo:function(x,y){var e=this.getElement();e.style.left=x+"px";e.style.top=y+"px";this.updateBlocker();},resizeBy:function(w,h){var e=this.getElement();this.resizeTo(parseInt(e.style.width)+w,parseInt(e.style.height)+h);},resizeTo:function(w,h){var e=this.getElement();if(w!=null)e.style.width=w+"px";if(h!=null)e.style.height=h+"px";this.updateBlocker();},show:function(){this.getElement().style.display='block';this.updateBlocker();},hide:function(){this.getElement().style.display='none';this.updateBlocker();},isVisible:function(){return this.getElement().style.display=='block';},getElement:function(){if(!this.element)this.element=this.doc.getElementById(this.id);return this.element;},setBlockMode:function(s){this.blockMode=s;},updateBlocker:function(){var e,b,x,y,w,h;b=this.getBlocker();if(b){if(this.blockMode){e=this.getElement();x=this.parseInt(e.style.left);y=this.parseInt(e.style.top);w=this.parseInt(e.offsetWidth);h=this.parseInt(e.offsetHeight);b.style.left=x+'px';b.style.top=y+'px';b.style.width=w+'px';b.style.height=h+'px';b.style.display=e.style.display;}else b.style.display='none';}},getBlocker:function(){var d,b;if(!this.blockerElement&&this.blockMode){d=this.doc;b=d.createElement("iframe");b.style.cssText='display: none; position: absolute; left: 0; top: 0';b.src='javascript:false;';b.frameBorder='0';b.scrolling='no';d.body.appendChild(b);this.blockerElement=b;}return this.blockerElement;},getAbsPosition:function(n){var p={absLeft:0,absTop:0};while(n){p.absLeft+=n.offsetLeft;p.absTop+=n.offsetTop;n=n.offsetParent;}return p;},create:function(n,c,p){var d=this.doc,e=d.createElement(n);e.setAttribute('id',this.id);if(c)e.className=c;if(!p)p=d.body;p.appendChild(e);return this.element=e;},parseInt:function(s){if(s==null||s=='')return 0;return parseInt(s);}};function TinyMCE_Menu(){var id;if(typeof(tinyMCE.menuCounter)=="undefined")tinyMCE.menuCounter=0;id="mc_menu_"+tinyMCE.menuCounter++;TinyMCE_Layer.call(this,id,true);this.id=id;this.items=new Array();this.needsUpdate=true;};TinyMCE_Menu.prototype=tinyMCE.extend(TinyMCE_Layer.prototype,{init:function(s){var n;this.settings={separator_class:'mceMenuSeparator',title_class:'mceMenuTitle',disabled_class:'mceMenuDisabled',menu_class:'mceMenu',drop_menu:true};for(n in s)this.settings[n]=s[n];this.create('div',this.settings.menu_class);},clear:function(){this.items=new Array();},addTitle:function(t){this.add({type:'title',text:t});},addDisabled:function(t){this.add({type:'disabled',text:t});},addSeparator:function(){this.add({type:'separator'});},addItem:function(t,js){this.add({text:t,js:js});},add:function(mi){this.items[this.items.length]=mi;this.needsUpdate=true;},update:function(){var e=this.getElement(),h='',i,t,m=this.items,s=this.settings;if(this.settings.drop_menu)h+='';h+='';for(i=0;i';}h+='
    ';break;case'title':h+='
    '+t+'';break;case'disabled':h+='
    '+t+'';break;default:h+='
    '+t+'';}h+='
    ';e.innerHTML=h;this.needsUpdate=false;this.updateBlocker();},show:function(){var nl,i;if(tinyMCE.lastMenu==this)return;if(this.needsUpdate)this.update();if(tinyMCE.lastMenu&&tinyMCE.lastMenu!=this)tinyMCE.lastMenu.hide();TinyMCE_Layer.prototype.show.call(this);if(!tinyMCE.isOpera){}tinyMCE.lastMenu=this;}});TinyMCE_Engine.prototype.debug=function(){var m="",e,a,i;e=document.getElementById("tinymce_debug");if(!e){var d=document.createElement("div");d.setAttribute("className","debugger");d.className="debugger";d.innerHTML='Debug output:';document.body.appendChild(d);e=document.getElementById("tinymce_debug");}a=this.debug.arguments;for(i=0;i'); + + tinyMCE.addEvent(window, "load", this.onLoad); +}; + + +TinyMCE_Popup.prototype.onLoad = function() { + var dir, i, elms, body = document.body; + + if (tinyMCE.getWindowArg('mce_replacevariables', true)) + body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs); + + dir = tinyMCE.selectedInstance.settings['directionality']; + if (dir == "rtl" && document.forms && document.forms.length > 0) { + elms = document.forms[0].elements; + for (i=0; i=0; i--) { + if (wrapper.hasChildNodes()) + wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild); + else + wrapper.appendChild(nodes[i].cloneNode(true)); + + nodes[i].parentNode.removeChild(nodes[i]); + } + + // Add wrapper + doc.body.appendChild(wrapper); + + // Create iframe + iframe = document.createElement("iframe"); + iframe.id = "mcWinIframe"; + iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings['default_document']; + iframe.width = "100%"; + iframe.height = "100%"; + iframe.style.margin = '0'; + + // Add iframe + doc.body.appendChild(iframe); + + // Measure iframe + iframe = document.getElementById('mcWinIframe'); + dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth; + dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight; + + // Resize window + // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy); + window.resizeBy(dx, dy); + + // Hide iframe and show wrapper + body.style.margin = oldMargin; + iframe.style.display = 'none'; + wrapper.style.display = 'block'; + } +}; + + +TinyMCE_Popup.prototype.resizeToContent = function() { + var isMSIE = (navigator.appName == "Microsoft Internet Explorer"); + var isOpera = (navigator.userAgent.indexOf("Opera") != -1); + + if (isOpera) + return; + + if (isMSIE) { + try { window.resizeTo(10, 10); } catch (e) {} + + var elm = document.body; + var width = elm.offsetWidth; + var height = elm.offsetHeight; + var dx = (elm.scrollWidth - width) + 4; + var dy = elm.scrollHeight - height; + + try { window.resizeBy(dx, dy); } catch (e) {} + } else { + window.scrollBy(1000, 1000); + if (window.scrollX > 0 || window.scrollY > 0) { + window.resizeBy(window.innerWidth * 2, window.innerHeight * 2); + window.sizeToContent(); + window.scrollTo(0, 0); + var x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0); + var y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0); + window.moveTo(x, y); + } + } +}; + + +TinyMCE_Popup.prototype.getWindowArg = function(name, default_value) { + return tinyMCE.getWindowArg(name, default_value); +}; + + +TinyMCE_Popup.prototype.restoreSelection = function() { + if (this.storeSelection) { + var inst = tinyMCE.selectedInstance; + + inst.getWin().focus(); + + if (inst.selectionBookmark) + inst.selection.moveToBookmark(inst.selectionBookmark); + } +}; + + +TinyMCE_Popup.prototype.execCommand = function(command, user_interface, value) { + var inst = tinyMCE.selectedInstance; + + this.restoreSelection(); + inst.execCommand(command, user_interface, value); + + // Store selection + if (this.storeSelection) + inst.selectionBookmark = inst.selection.getBookmark(true); +}; + + +TinyMCE_Popup.prototype.close = function() { + tinyMCE.closeWindow(window); +}; + + +TinyMCE_Popup.prototype.pickColor = function(e, element_id) { + tinyMCE.selectedInstance.execCommand('mceColorPicker', true, { + element_id : element_id, + document : document, + window : window, + store_selection : false + }); +}; + + +TinyMCE_Popup.prototype.openBrowser = function(element_id, type, option) { + var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); + var url = document.getElementById(element_id).value; + + tinyMCE.setWindowArg("window", window); + tinyMCE.setWindowArg("document", document); + + // Call to external callback + if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined") + alert("Callback function: " + cb + " could not be found."); + else + eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);"); +}; + + +TinyMCE_Popup.prototype.importClass = function(c) { + window[c] = function() {}; + + for (var n in window.opener[c].prototype) + window[c].prototype[n] = window.opener[c].prototype[n]; + + window[c].constructor = window.opener[c].constructor; +}; + +// Setup global instance +var tinyMCEPopup = new TinyMCE_Popup(); + +tinyMCEPopup.init(); diff --git a/jscripts/tiny_mce/tiny_mce_src.js b/jscripts/tiny_mce/tiny_mce_src.js new file mode 100644 index 000000000..710a8b67f --- /dev/null +++ b/jscripts/tiny_mce/tiny_mce_src.js @@ -0,0 +1,6719 @@ + +/* file:jscripts/tiny_mce/classes/TinyMCE_Engine.class.js */ + +function TinyMCE_Engine() { + this.majorVersion = "2"; + this.minorVersion = "0.6.1"; + this.releaseDate = "2006-05-04"; + + this.instances = new Array(); + this.switchClassCache = new Array(); + this.windowArgs = new Array(); + this.loadedFiles = new Array(); + this.pendingFiles = new Array(); + this.loadingIndex = 0; + this.configs = new Array(); + this.currentConfig = 0; + this.eventHandlers = new Array(); + + // Browser check + var ua = navigator.userAgent; + this.isMSIE = (navigator.appName == "Microsoft Internet Explorer"); + this.isMSIE5 = this.isMSIE && (ua.indexOf('MSIE 5') != -1); + this.isMSIE5_0 = this.isMSIE && (ua.indexOf('MSIE 5.0') != -1); + this.isGecko = ua.indexOf('Gecko') != -1; + this.isSafari = ua.indexOf('Safari') != -1; + this.isOpera = ua.indexOf('Opera') != -1; + this.isMac = ua.indexOf('Mac') != -1; + this.isNS7 = ua.indexOf('Netscape/7') != -1; + this.isNS71 = ua.indexOf('Netscape/7.1') != -1; + this.dialogCounter = 0; + this.plugins = new Array(); + this.themes = new Array(); + this.menus = new Array(); + this.loadedPlugins = new Array(); + this.buttonMap = new Array(); + this.isLoaded = false; + + // Fake MSIE on Opera and if Opera fakes IE, Gecko or Safari cancel those + if (this.isOpera) { + this.isMSIE = true; + this.isGecko = false; + this.isSafari = false; + } + + // TinyMCE editor id instance counter + this.idCounter = 0; +}; + +TinyMCE_Engine.prototype = { + init : function(settings) { + var theme; + + this.settings = settings; + + // Check if valid browser has execcommand support + if (typeof(document.execCommand) == 'undefined') + return; + + // Get script base path + if (!tinyMCE.baseURL) { + var elements = document.getElementsByTagName('script'); + + for (var i=0; i'); + this._def("font_size_classes", ''); + this._def("font_size_style_values", 'xx-small,x-small,small,medium,large,x-large,xx-large', true); + this._def("event_elements", 'a,img', true); + this._def("convert_urls", true); + this._def("table_inline_editing", false); + this._def("object_resizing", true); + this._def("custom_shortcuts", true); + this._def("convert_on_click", false); + this._def("content_css", ''); + this._def("fix_list_elements", false); + this._def("fix_table_elements", false); + this._def("strict_loading_mode", document.contentType == 'application/xhtml+xml'); + this._def("hidden_tab_class", ''); + this._def("display_tab_class", ''); + + // Force strict loading mode to false on non Gecko browsers + if (this.isMSIE && !this.isOpera) + this.settings.strict_loading_mode = false; + + // Browser check IE + if (this.isMSIE && this.settings['browsers'].indexOf('msie') == -1) + return; + + // Browser check Gecko + if (this.isGecko && this.settings['browsers'].indexOf('gecko') == -1) + return; + + // Browser check Safari + if (this.isSafari && this.settings['browsers'].indexOf('safari') == -1) + return; + + // Browser check Opera + if (this.isOpera && this.settings['browsers'].indexOf('opera') == -1) + return; + + // If not super absolute make it so + var baseHREF = tinyMCE.settings['document_base_url']; + var h = document.location.href; + var p = h.indexOf('://'); + if (p > 0 && document.location.protocol != "file:") { + p = h.indexOf('/', p + 3); + h = h.substring(0, p); + + if (baseHREF.indexOf('://') == -1) + baseHREF = h + baseHREF; + + tinyMCE.settings['document_base_url'] = baseHREF; + tinyMCE.settings['document_base_prefix'] = h; + } + + // Trim away query part + if (baseHREF.indexOf('?') != -1) + baseHREF = baseHREF.substring(0, baseHREF.indexOf('?')); + + this.settings['base_href'] = baseHREF.substring(0, baseHREF.lastIndexOf('/')) + "/"; + + theme = this.settings['theme']; + this.blockRegExp = new RegExp("^(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|blockquote|center|dl|dt|dd|dir|fieldset|form|noscript|noframes|menu|isindex|samp)$", "i"); + this.posKeyCodes = new Array(13,45,36,35,33,34,37,38,39,40); + this.uniqueURL = 'javascript:TINYMCE_UNIQUEURL();'; // Make unique URL non real URL + this.uniqueTag = ''; + this.callbacks = new Array('onInit', 'getInfo', 'getEditorTemplate', 'setupContent', 'onChange', 'onPageLoad', 'handleNodeChange', 'initInstance', 'execCommand', 'getControlHTML', 'handleEvent', 'cleanup'); + + // Theme url + this.settings['theme_href'] = tinyMCE.baseURL + "/themes/" + theme; + + if (!tinyMCE.isMSIE) + this.settings['force_br_newlines'] = false; + + if (tinyMCE.getParam("popups_css", false)) { + var cssPath = tinyMCE.getParam("popups_css", ""); + + // Is relative + if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/') + this.settings['popups_css'] = this.documentBasePath + "/" + cssPath; + else + this.settings['popups_css'] = cssPath; + } else + this.settings['popups_css'] = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_popup.css"; + + if (tinyMCE.getParam("editor_css", false)) { + var cssPath = tinyMCE.getParam("editor_css", ""); + + // Is relative + if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/') + this.settings['editor_css'] = this.documentBasePath + "/" + cssPath; + else + this.settings['editor_css'] = cssPath; + } else + this.settings['editor_css'] = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_ui.css"; + + if (tinyMCE.settings['debug']) { + var msg = "Debug: \n"; + + msg += "baseURL: " + this.baseURL + "\n"; + msg += "documentBasePath: " + this.documentBasePath + "\n"; + msg += "content_css: " + this.settings['content_css'] + "\n"; + msg += "popups_css: " + this.settings['popups_css'] + "\n"; + msg += "editor_css: " + this.settings['editor_css'] + "\n"; + + alert(msg); + } + + // Only do this once + if (this.configs.length == 0) { + // Is Safari enabled + if (this.isSafari && this.getParam('safari_warning', false)) + alert("Safari support is very limited and should be considered experimental.\nSo there is no need to even submit bugreports on this early version.\nYou can disable this message by setting: safari_warning option to false"); + + if (typeof(TinyMCECompressed) == "undefined") { + tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCE_Engine.prototype.onLoad); + + if (tinyMCE.isMSIE && !tinyMCE.isOpera) { + if (document.body) + tinyMCE.addEvent(document.body, "readystatechange", TinyMCE_Engine.prototype.onLoad); + else + tinyMCE.addEvent(document, "readystatechange", TinyMCE_Engine.prototype.onLoad); + } + + tinyMCE.addEvent(window, "load", TinyMCE_Engine.prototype.onLoad); + tinyMCE._addUnloadEvents(); + } + } + + this.loadScript(tinyMCE.baseURL + '/themes/' + this.settings['theme'] + '/editor_template' + tinyMCE.srcMode + '.js'); + this.loadScript(tinyMCE.baseURL + '/langs/' + this.settings['language'] + '.js'); + this.loadCSS(this.settings['editor_css']); + + // Add plugins + var p = tinyMCE.getParam('plugins', '', true, ','); + if (p.length > 0) { + for (var i=0; i'); + + this.loadedFiles[this.loadedFiles.length] = url; + }, + + loadNextScript : function() { + var d = document, se; + + if (!tinyMCE.settings.strict_loading_mode) + return; + + if (this.loadingIndex < this.pendingFiles.length) { + se = d.createElementNS('http://www.w3.org/1999/xhtml', 'script'); + se.setAttribute('language', 'javascript'); + se.setAttribute('type', 'text/javascript'); + se.setAttribute('src', this.pendingFiles[this.loadingIndex++]); + + d.getElementsByTagName("head")[0].appendChild(se); + } else + this.loadingIndex = -1; // Done with loading + }, + + loadCSS : function(url) { + var ar = url.replace(/\s+/, '').split(','); + var lflen = 0, csslen = 0; + var skip = false; + var x = 0, i = 0, nl, le; + + for (x = 0,csslen = ar.length; x 0) { + /* Make sure it doesn't exist. */ + for (i=0, lflen=this.loadedFiles.length; i'); + + this.loadedFiles[this.loadedFiles.length] = ar[x]; + } + } + } + }, + + importCSS : function(doc, css) { + var css_ary = css.replace(/\s+/, '').split(','); + var csslen, elm, headArr, x, css_file; + + for (x = 0, csslen = css_ary.length; x 0) { + // Is relative, make absolute + if (css_file.indexOf('://') == -1 && css_file.charAt(0) != '/') + css_file = this.documentBasePath + "/" + css_file; + + if (typeof(doc.createStyleSheet) == "undefined") { + elm = doc.createElement("link"); + + elm.rel = "stylesheet"; + elm.href = css_file; + + if ((headArr = doc.getElementsByTagName("head")) != null && headArr.length > 0) + headArr[0].appendChild(elm); + } else + doc.createStyleSheet(css_file); + } + } + }, + + confirmAdd : function(e, settings) { + var elm = tinyMCE.isMSIE ? event.srcElement : e.target; + var elementId = elm.name ? elm.name : elm.id; + + tinyMCE.settings = settings; + + if (tinyMCE.settings['convert_on_click'] || (!elm.getAttribute('mce_noask') && confirm(tinyMCELang['lang_edit_confirm']))) + tinyMCE.addMCEControl(elm, elementId); + + elm.setAttribute('mce_noask', 'true'); + }, + + updateContent : function(form_element_name) { + // Find MCE instance linked to given form element and copy it's value + var formElement = document.getElementById(form_element_name); + for (var n in tinyMCE.instances) { + var inst = tinyMCE.instances[n]; + if (!tinyMCE.isInstance(inst)) + continue; + + inst.switchSettings(); + + if (inst.formElement == formElement) { + var doc = inst.getDoc(); + + tinyMCE._setHTML(doc, inst.formElement.value); + + if (!tinyMCE.isMSIE) + doc.body.innerHTML = tinyMCE._cleanupHTML(inst, doc, this.settings, doc.body, inst.visualAid); + } + } + }, + + addMCEControl : function(replace_element, form_element_name, target_document) { + var id = "mce_editor_" + tinyMCE.idCounter++; + var inst = new TinyMCE_Control(tinyMCE.settings); + + inst.editorId = id; + this.instances[id] = inst; + + inst._onAdd(replace_element, form_element_name, target_document); + }, + + removeMCEControl : function(editor_id) { + var inst = tinyMCE.getInstanceById(editor_id); + + if (inst) { + inst.switchSettings(); + + editor_id = inst.editorId; + var html = tinyMCE.getContent(editor_id); + + // Remove editor instance from instances array + var tmpInstances = new Array(); + for (var instanceName in tinyMCE.instances) { + var instance = tinyMCE.instances[instanceName]; + if (!tinyMCE.isInstance(instance)) + continue; + + if (instanceName != editor_id) + tmpInstances[instanceName] = instance; + } + tinyMCE.instances = tmpInstances; + + tinyMCE.selectedElement = null; + tinyMCE.selectedInstance = null; + + // Remove element + var replaceElement = document.getElementById(editor_id + "_parent"); + var oldTargetElement = inst.oldTargetElement; + var targetName = oldTargetElement.nodeName.toLowerCase(); + + if (targetName == "textarea" || targetName == "input") { + // Just show the old text area + replaceElement.parentNode.removeChild(replaceElement); + oldTargetElement.style.display = "inline"; + oldTargetElement.value = html; + } else { + oldTargetElement.innerHTML = html; + oldTargetElement.style.display = 'block'; + + replaceElement.parentNode.insertBefore(oldTargetElement, replaceElement); + replaceElement.parentNode.removeChild(replaceElement); + } + } + }, + + triggerSave : function(skip_cleanup, skip_callback) { + var inst, n; + + // Default to false + if (typeof(skip_cleanup) == "undefined") + skip_cleanup = false; + + // Default to false + if (typeof(skip_callback) == "undefined") + skip_callback = false; + + // Cleanup and set all form fields + for (n in tinyMCE.instances) { + inst = tinyMCE.instances[n]; + + if (!tinyMCE.isInstance(inst)) + continue; + + inst.triggerSave(skip_cleanup, skip_callback); + } + }, + + resetForm : function(form_index) { + var i, inst, n, formObj = document.forms[form_index]; + + for (n in tinyMCE.instances) { + inst = tinyMCE.instances[n]; + + if (!tinyMCE.isInstance(inst)) + continue; + + inst.switchSettings(); + + for (i=0; i'); + content = content.replace(/"/g, '"'); + content = content.replace(/&/g, '&'); + } + + inst.switchSettings(); + + // Not loaded correctly hit it again, Mozilla bug #997860 + if (!tinyMCE.isMSIE && tinyMCE.getParam("setupcontent_reload", false) && doc.title != "blank_page") { + // This part will remove the designMode status + // Failes first time in Firefox 1.5b2 on Mac + try {doc.location.href = tinyMCE.baseURL + "/blank.htm";} catch (ex) {} + window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 1000); + return; + } + + if (!head) { + window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 10); + return; + } + + // Import theme specific content CSS the user specific + tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/themes/" + inst.settings['theme'] + "/css/editor_content.css"); + tinyMCE.importCSS(inst.getDoc(), inst.settings['content_css']); + tinyMCE.dispatchCallback(inst, 'init_instance_callback', 'initInstance', inst); + + // Setup keyboard shortcuts + if (tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')) { + inst.addShortcut('ctrl', 'z', 'lang_undo_desc', 'Undo'); + inst.addShortcut('ctrl', 'y', 'lang_redo_desc', 'Redo'); + } + + // Add default shortcuts for gecko + if (tinyMCE.isGecko) { + inst.addShortcut('ctrl', 'b', 'lang_bold_desc', 'Bold'); + inst.addShortcut('ctrl', 'i', 'lang_italic_desc', 'Italic'); + inst.addShortcut('ctrl', 'u', 'lang_underline_desc', 'Underline'); + } + + // Setup span styles + if (tinyMCE.getParam("convert_fonts_to_spans")) + inst.getDoc().body.setAttribute('id', 'mceSpanFonts'); + + if (tinyMCE.settings['nowrap']) + doc.body.style.whiteSpace = "nowrap"; + + doc.body.dir = this.settings['directionality']; + doc.editorId = editor_id; + + // Add on document element in Mozilla + if (!tinyMCE.isMSIE) + doc.documentElement.editorId = editor_id; + + inst.setBaseHREF(tinyMCE.settings['base_href']); + + // Replace new line characters to BRs + if (tinyMCE.settings['convert_newlines_to_brs']) { + content = tinyMCE.regexpReplace(content, "\r\n", "
    ", "gi"); + content = tinyMCE.regexpReplace(content, "\r", "
    ", "gi"); + content = tinyMCE.regexpReplace(content, "\n", "
    ", "gi"); + } + + // Open closed anchors + // content = content.replace(new RegExp('', 'gi'), ''); + + // Call custom cleanup code + content = tinyMCE.storeAwayURLs(content); + content = tinyMCE._customCleanup(inst, "insert_to_editor", content); + + if (tinyMCE.isMSIE) { + // Ugly!!! + window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["' + editor_id + '"].getDoc(), "' + editor_id + '");}catch(e){}', 500); + + if (tinyMCE.settings["force_br_newlines"]) + doc.styleSheets[0].addRule("p", "margin: 0;"); + + var body = inst.getBody(); + body.editorId = editor_id; + } + + content = tinyMCE.cleanupHTMLCode(content); + + // Fix for bug #958637 + if (!tinyMCE.isMSIE) { + var contentElement = inst.getDoc().createElement("body"); + var doc = inst.getDoc(); + + contentElement.innerHTML = content; + + // Remove weridness! + if (tinyMCE.isGecko && tinyMCE.settings['remove_lt_gt']) + content = content.replace(new RegExp('<>', 'g'), ""); + + if (tinyMCE.settings['cleanup_on_startup']) + tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, this.settings, contentElement)); + else { + // Convert all strong/em to b/i + content = tinyMCE.regexpReplace(content, "", "", "gi"); + content = tinyMCE.regexpReplace(content, "", "
    ", "gi"); + content = tinyMCE.regexpReplace(content, "", "", "gi"); + tinyMCE.setInnerHTML(inst.getBody(), content); + } + + tinyMCE.convertAllRelativeURLs(inst.getBody()); + } else { + if (tinyMCE.settings['cleanup_on_startup']) { + tinyMCE._setHTML(inst.getDoc(), content); + + // Produces permission denied error in MSIE 5.5 + eval('try {tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody()));} catch(e) {}'); + } else + tinyMCE._setHTML(inst.getDoc(), content); + } + + // Fix for bug #957681 + //inst.getDoc().designMode = inst.getDoc().designMode; + + // Setup element references + var parentElm = inst.targetDoc.getElementById(inst.editorId + '_parent'); + inst.formElement = tinyMCE.isGecko ? parentElm.previousSibling : parentElm.nextSibling; + + tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual'], inst); + tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc()); + + // Re-add design mode on mozilla + if (!tinyMCE.isMSIE) + tinyMCE.addEventHandlers(inst); + + // Add blur handler + if (tinyMCE.isMSIE) { + tinyMCE.addEvent(inst.getBody(), "blur", TinyMCE_Engine.prototype._eventPatch); + tinyMCE.addEvent(inst.getBody(), "beforedeactivate", TinyMCE_Engine.prototype._eventPatch); // Bug #1439953 + + // Workaround for drag drop/copy paste base href bug + if (!tinyMCE.isOpera) { + tinyMCE.addEvent(doc.body, "mousemove", TinyMCE_Engine.prototype.onMouseMove); + tinyMCE.addEvent(doc.body, "beforepaste", TinyMCE_Engine.prototype._eventPatch); + tinyMCE.addEvent(doc.body, "drop", TinyMCE_Engine.prototype._eventPatch); + } + } + + // Trigger node change, this call locks buttons for tables and so forth + tinyMCE.selectedInstance = inst; + tinyMCE.selectedElement = inst.contentWindow.document.body; + + // Call custom DOM cleanup + tinyMCE._customCleanup(inst, "insert_to_editor_dom", inst.getBody()); + tinyMCE._customCleanup(inst, "setup_content_dom", inst.getBody()); + tinyMCE._setEventsEnabled(inst.getBody(), false); + tinyMCE.cleanupAnchors(inst.getDoc()); + + if (tinyMCE.getParam("convert_fonts_to_spans")) + tinyMCE.convertSpansToFonts(inst.getDoc()); + + inst.startContent = tinyMCE.trim(inst.getBody().innerHTML); + inst.undoRedo.add({ content : inst.startContent }); + + // Cleanup any mess left from storyAwayURLs + if (tinyMCE.isGecko) { + // Remove mce_src from textnodes and comments + tinyMCE.selectNodes(inst.getBody(), function(n) { + if (n.nodeType == 3 || n.nodeType == 8) { + n.nodeValue = n.nodeValue.replace(new RegExp('\\smce_src=\"[^\"]*\"', 'gi'), ""); + n.nodeValue = n.nodeValue.replace(new RegExp('\\smce_href=\"[^\"]*\"', 'gi'), ""); + } + + return false; + }); + } + + // Cleanup any mess left from storyAwayURLs + tinyMCE._removeInternal(inst.getBody()); + + tinyMCE.selectedInstance = inst; + tinyMCE.triggerNodeChange(false, true); + }, + + storeAwayURLs : function(s) { + // Remove all mce_src, mce_href and replace them with new ones + // s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), ''); + // s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), ''); + + if (!s.match(/(mce_src|mce_href)/gi, s)) { + s = s.replace(new RegExp('src\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'src="$1" mce_src="$1"'); + s = s.replace(new RegExp('href\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'href="$1" mce_href="$1"'); + } + + return s; + }, + + _removeInternal : function(n) { + if (tinyMCE.isGecko) { + // Remove mce_src from textnodes and comments + tinyMCE.selectNodes(n, function(n) { + if (n.nodeType == 3 || n.nodeType == 8) { + n.nodeValue = n.nodeValue.replace(new RegExp('\\smce_src=\"[^\"]*\"', 'gi'), ""); + n.nodeValue = n.nodeValue.replace(new RegExp('\\smce_href=\"[^\"]*\"', 'gi'), ""); + } + + return false; + }); + } + }, + + removeTinyMCEFormElements : function(form_obj) { + // Check if form is valid + if (typeof(form_obj) == "undefined" || form_obj == null) + return; + + // If not a form, find the form + if (form_obj.nodeName != "FORM") { + if (form_obj.form) + form_obj = form_obj.form; + else + form_obj = tinyMCE.getParentElement(form_obj, "form"); + } + + // Still nothing + if (form_obj == null) + return; + + // Disable all UI form elements that TinyMCE created + for (var i=0; i"); + rng.collapse(false); + rng.select(); + + tinyMCE.execCommand("mceAddUndoLevel"); + tinyMCE.triggerNodeChange(false); + return false; + } + } + + // Backspace or delete + if (e.keyCode == 8 || e.keyCode == 46) { + tinyMCE.selectedElement = e.target; + tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a"); + tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img"); + tinyMCE.triggerNodeChange(false); + } + + return false; + break; + + case "keyup": + case "keydown": + tinyMCE.hideMenus(); + tinyMCE.hasMouseMoved = false; + + if (inst && inst.handleShortcut(e)) + return false; + + if (e.target.editorId) + tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId]; + else + return; + + if (tinyMCE.selectedInstance) + tinyMCE.selectedInstance.switchSettings(); + + var inst = tinyMCE.selectedInstance; + + // Handle backspace + if (tinyMCE.isGecko && tinyMCE.settings['force_p_newlines'] && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) { + // Insert P element instead of BR + if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) { + // Cancel event + tinyMCE.execCommand("mceAddUndoLevel"); + e.preventDefault(); + return false; + } + } + + tinyMCE.selectedElement = null; + tinyMCE.selectedNode = null; + var elm = tinyMCE.selectedInstance.getFocusElement(); + tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a"); + tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img"); + tinyMCE.selectedElement = elm; + + // Update visualaids on tabs + if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9) + tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings['visual'], tinyMCE.selectedInstance); + + // Fix empty elements on return/enter, check where enter occured + if (tinyMCE.isMSIE && e.type == "keydown" && e.keyCode == 13) + tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement(); + + // Fix empty elements on return/enter + if (tinyMCE.isMSIE && e.type == "keyup" && e.keyCode == 13) { + var elm = tinyMCE.enterKeyElement; + if (elm) { + var re = new RegExp('^HR|IMG|BR$','g'); // Skip these + var dre = new RegExp('^H[1-6]$','g'); // Add double on these + + if (!elm.hasChildNodes() && !re.test(elm.nodeName)) { + if (dre.test(elm.nodeName)) + elm.innerHTML = "  "; + else + elm.innerHTML = " "; + } + } + } + + // Check if it's a position key + var keys = tinyMCE.posKeyCodes; + var posKey = false; + for (var i=0; i'; + h += ''; + h += ''; + } else { + // Normal button + h += ''; + h += ''; + h += ''; + } + + return h; + }, + + addButtonMap : function(m) { + var i, a = m.replace(/\s+/, '').split(','); + + for (i=0; i 0); + + if (tinyMCE.settings['custom_undo_redo']) { + undoIndex = inst.undoRedo.undoIndex; + undoLevels = inst.undoRedo.undoLevels.length; + } + + tinyMCE.dispatchCallback(inst, 'handle_node_change_callback', 'handleNodeChange', editorId, elm, undoIndex, undoLevels, inst.visualAid, anySelection, setup_content); + } + + if (this.selectedInstance && (typeof(focus) == "undefined" || focus)) + this.selectedInstance.contentWindow.focus(); + }, + + _customCleanup : function(inst, type, content) { + var pl, po, i; + + // Call custom cleanup + var customCleanup = tinyMCE.settings['cleanup_callback']; + if (customCleanup != "" && eval("typeof(" + customCleanup + ")") != "undefined") + content = eval(customCleanup + "(type, content, inst);"); + + // Trigger plugin cleanups + pl = inst.plugins; + for (i=0; i 0) { + for (i=ar.length-1; i>=0; i--) { + s = ar[i].substring(2, ar[i].length-1); + + if (s.indexOf('lang_') == 0 && tinyMCELang[s]) + h = tinyMCE.replaceVar(h, s, tinyMCELang[s]); + else if (as && as[s]) + h = tinyMCE.replaceVar(h, s, as[s]); + else if (tinyMCE.settings[s]) + h = tinyMCE.replaceVar(h, s, tinyMCE.settings[s]); + } + } + + h = tinyMCE.replaceVar(h, "themeurl", tinyMCE.themeURL); + + return h; + }, + + replaceVar : function(h, r, v) { + return h.replace(new RegExp('{\\\$' + r + '}', 'g'), v); + }, + + openWindow : function(template, args) { + var html, width, height, x, y, resizable, scrollbars, url; + + args['mce_template_file'] = template['file']; + args['mce_width'] = template['width']; + args['mce_height'] = template['height']; + tinyMCE.windowArgs = args; + + html = template['html']; + if (!(width = parseInt(template['width']))) + width = 320; + + if (!(height = parseInt(template['height']))) + height = 200; + + // Add to height in M$ due to SP2 WHY DON'T YOU GUYS IMPLEMENT innerWidth of windows!! + if (tinyMCE.isMSIE) + height += 40; + else + height += 20; + + x = parseInt(screen.width / 2.0) - (width / 2.0); + y = parseInt(screen.height / 2.0) - (height / 2.0); + + resizable = (args && args['resizable']) ? args['resizable'] : "no"; + scrollbars = (args && args['scrollbars']) ? args['scrollbars'] : "no"; + + if (template['file'].charAt(0) != '/' && template['file'].indexOf('://') == -1) + url = tinyMCE.baseURL + "/themes/" + tinyMCE.getParam("theme") + "/" + template['file']; + else + url = template['file']; + + // Replace all args as variables in URL + for (var name in args) { + if (typeof(args[name]) == 'function') + continue; + + url = tinyMCE.replaceVar(url, name, escape(args[name])); + } + + if (html) { + html = tinyMCE.replaceVar(html, "css", this.settings['popups_css']); + html = tinyMCE.applyTemplate(html, args); + + var win = window.open("", "mcePopup" + new Date().getTime(), "top=" + y + ",left=" + x + ",scrollbars=" + scrollbars + ",dialog=yes,minimizable=" + resizable + ",modal=yes,width=" + width + ",height=" + height + ",resizable=" + resizable); + if (win == null) { + alert(tinyMCELang['lang_popup_blocked']); + return; + } + + win.document.write(html); + win.document.close(); + win.resizeTo(width, height); + win.focus(); + } else { + if ((tinyMCE.isMSIE && !tinyMCE.isOpera) && resizable != 'yes' && tinyMCE.settings["dialog_type"] == "modal") { + height += 10; + + var features = "resizable:" + resizable + + ";scroll:" + + scrollbars + ";status:yes;center:yes;help:no;dialogWidth:" + + width + "px;dialogHeight:" + height + "px;"; + + window.showModalDialog(url, window, features); + } else { + var modal = (resizable == "yes") ? "no" : "yes"; + + if (tinyMCE.isGecko && tinyMCE.isMac) + modal = "no"; + + if (template['close_previous'] != "no") + try {tinyMCE.lastWindow.close();} catch (ex) {} + + var win = window.open(url, "mcePopup" + new Date().getTime(), "top=" + y + ",left=" + x + ",scrollbars=" + scrollbars + ",dialog=" + modal + ",minimizable=" + resizable + ",modal=" + modal + ",width=" + width + ",height=" + height + ",resizable=" + resizable); + if (win == null) { + alert(tinyMCELang['lang_popup_blocked']); + return; + } + + if (template['close_previous'] != "no") + tinyMCE.lastWindow = win; + + eval('try { win.resizeTo(width, height); } catch(e) { }'); + + // Make it bigger if statusbar is forced + if (tinyMCE.isGecko) { + if (win.document.defaultView.statusbar.visible) + win.resizeBy(0, tinyMCE.isMac ? 10 : 24); + } + + win.focus(); + } + } + }, + + closeWindow : function(win) { + win.close(); + }, + + getVisualAidClass : function(class_name, state) { + var aidClass = tinyMCE.settings['visual_table_class']; + + if (typeof(state) == "undefined") + state = tinyMCE.settings['visual']; + + // Split + var classNames = new Array(); + var ar = class_name.split(' '); + for (var i=0; i 0) + className += " "; + + className += classNames[i]; + } + + return className; + }, + + handleVisualAid : function(el, deep, state, inst, skip_dispatch) { + if (!el) + return; + + if (!skip_dispatch) + tinyMCE.dispatchCallback(inst, 'handle_visual_aid_callback', 'handleVisualAid', el, deep, state, inst); + + var tableElement = null; + + switch (el.nodeName) { + case "TABLE": + var oldW = el.style.width; + var oldH = el.style.height; + var bo = tinyMCE.getAttrib(el, "border"); + + bo = bo == "" || bo == "0" ? true : false; + + tinyMCE.setAttrib(el, "class", tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el, "class"), state && bo)); + + el.style.width = oldW; + el.style.height = oldH; + + for (var y=0; y<\/o:p>", "
    "); + html = tinyMCE.regexpReplace(html, " <\/o:p>", ""); + html = tinyMCE.regexpReplace(html, "", ""); + html = tinyMCE.regexpReplace(html, "

    <\/p>", ""); + html = tinyMCE.regexpReplace(html, "

    <\/p>\r\n

    <\/p>", ""); + html = tinyMCE.regexpReplace(html, "

     <\/p>", "
    "); + html = tinyMCE.regexpReplace(html, "

    \s*(

    \s*)?", "

    "); + html = tinyMCE.regexpReplace(html, "<\/p>\s*(<\/p>\s*)?", "

    "); + }*/ + + // Always set the htmlText output + tinyMCE.setInnerHTML(doc.body, html); + } + + tinyMCE.cleanupAnchors(doc); + + if (tinyMCE.getParam("convert_fonts_to_spans")) + tinyMCE.convertSpansToFonts(doc); + }, + + getEditorId : function(form_element) { + var inst = this.getInstanceById(form_element); + if (!inst) + return null; + + return inst.editorId; + }, + + getInstanceById : function(editor_id) { + var inst = this.instances[editor_id]; + if (!inst) { + for (var n in tinyMCE.instances) { + var instance = tinyMCE.instances[n]; + if (!tinyMCE.isInstance(instance)) + continue; + + if (instance.formTargetElementId == editor_id) { + inst = instance; + break; + } + } + } + + return inst; + }, + + queryInstanceCommandValue : function(editor_id, command) { + var inst = tinyMCE.getInstanceById(editor_id); + if (inst) + return inst.queryCommandValue(command); + + return false; + }, + + queryInstanceCommandState : function(editor_id, command) { + var inst = tinyMCE.getInstanceById(editor_id); + if (inst) + return inst.queryCommandState(command); + + return null; + }, + + setWindowArg : function(n, v) { + this.windowArgs[n] = v; + }, + + getWindowArg : function(n, d) { + return (typeof(this.windowArgs[n]) == "undefined") ? d : this.windowArgs[n]; + }, + + getCSSClasses : function(editor_id, doc) { + var output = new Array(); + + // Is cached, use that + if (typeof(tinyMCE.cssClasses) != "undefined") + return tinyMCE.cssClasses; + + if (typeof(editor_id) == "undefined" && typeof(doc) == "undefined") { + var instance; + + for (var instanceName in tinyMCE.instances) { + instance = tinyMCE.instances[instanceName]; + if (!tinyMCE.isInstance(instance)) + continue; + + break; + } + + doc = instance.getDoc(); + } + + if (typeof(doc) == "undefined") { + var instance = tinyMCE.getInstanceById(editor_id); + doc = instance.getDoc(); + } + + if (doc) { + var styles = doc.styleSheets; + + if (styles && styles.length > 0) { + for (var x=0; x 0) + tinyMCE.cssClasses = output; + + return output; + }, + + regexpReplace : function(in_str, reg_exp, replace_str, opts) { + if (in_str == null) + return in_str; + + if (typeof(opts) == "undefined") + opts = 'g'; + + var re = new RegExp(reg_exp, opts); + return in_str.replace(re, replace_str); + }, + + trim : function(s) { + return s.replace(/^\s*|\s*$/g, ""); + }, + + cleanupEventStr : function(s) { + s = "" + s; + s = s.replace('function anonymous()\n{\n', ''); + s = s.replace('\n}', ''); + s = s.replace(/^return true;/gi, ''); // Remove event blocker + + return s; + }, + + getControlHTML : function(c) { + var i, l, n, o, v; + + l = tinyMCE.plugins; + for (n in l) { + o = l[n]; + + if (o.getControlHTML && (v = o.getControlHTML(c)) != '') + return tinyMCE.replaceVar(v, "pluginurl", o.baseURL); + } + + o = tinyMCE.themes[tinyMCE.settings['theme']]; + if (o.getControlHTML && (v = o.getControlHTML(c)) != '') + return v; + + return ''; + }, + + evalFunc : function(f, idx, a) { + var s = '(', i; + + for (i=idx; i 0) + return true; + + if (ins != null) { + for (i=0, l = ins.plugins; i 0) + return true; + } + } + + l = tinyMCE.themes; + for (on in l) { + o = l[on]; + + if (o[n] && (v = tinyMCE.evalFunc(o[n], 3, a)) == s && m > 0) + return true; + } + + return false; + }, + + xmlEncode : function(s) { + s = "" + s; + s = s.replace(/&/g, '&'); + s = s.replace(new RegExp('"', 'g'), '"'); + s = s.replace(/\'/g, '''); // ' is not working in MSIE + s = s.replace(//g, '>'); + + return s; + }, + + extend : function(p, np) { + var o = {}; + + o.parent = p; + + for (n in p) + o[n] = p[n]; + + for (n in np) + o[n] = np[n]; + + return o; + }, + + hideMenus : function() { + var e = tinyMCE.lastSelectedMenuBtn; + + if (tinyMCE.lastMenu) { + tinyMCE.lastMenu.hide(); + tinyMCE.lastMenu = null; + } + + if (e) { + tinyMCE.switchClass(e, tinyMCE.lastMenuBtnClass); + tinyMCE.lastSelectedMenuBtn = null; + } + }, + + explode : function(d, s) { + var ar = s.split(d), oar = new Array(), i; + + for (i = 0; i 0) { + for (i=0; i 1 && tinyMCE.currentConfig != this.settings['index']) { + tinyMCE.settings = this.settings; + tinyMCE.currentConfig = this.settings['index']; + } + }, + + getBody : function() { + return this.getDoc().body; + }, + + getDoc : function() { + return this.contentWindow.document; + }, + + getWin : function() { + return this.contentWindow; + }, + + addShortcut : function(m, k, d, cmd, ui, va) { + var n = typeof(k) == "number", ie = tinyMCE.isMSIE, c, sc, i; + var scl = this.shortcuts; + + if (!tinyMCE.getParam('custom_shortcuts')) + return false; + + m = m.toLowerCase(); + k = ie && !n ? k.toUpperCase() : k; + c = n ? null : k.charCodeAt(0); + d = d && d.indexOf('lang_') == 0 ? tinyMCE.getLang(d) : d; + + sc = { + alt : m.indexOf('alt') != -1, + ctrl : m.indexOf('ctrl') != -1, + shift : m.indexOf('shift') != -1, + charCode : c, + keyCode : n ? k : (ie ? c : null), + desc : d, + cmd : cmd, + ui : ui, + val : va + }; + + for (i=0; i 0) + rng.pasteHTML('
    ' + rng.htmlText + "
    "); + + tinyMCE.triggerNodeChange(); + return; + } + } + } + + switch (command) { + case "mceRepaint": + this.repaint(); + return true; + + case "InsertUnorderedList": + case "InsertOrderedList": + var tag = (command == "InsertUnorderedList") ? "ul" : "ol"; + + if (tinyMCE.isSafari) + this.execCommand("mceInsertContent", false, "<" + tag + ">
  •  
  • <" + tag + ">"); + else + this.getDoc().execCommand(command, user_interface, value); + + tinyMCE.triggerNodeChange(); + break; + + case "Strikethrough": + if (tinyMCE.isSafari) + this.execCommand("mceInsertContent", false, "" + this.selection.getSelectedHTML() + ""); + else + this.getDoc().execCommand(command, user_interface, value); + + tinyMCE.triggerNodeChange(); + break; + + case "mceSelectNode": + this.selection.selectNode(value); + tinyMCE.triggerNodeChange(); + tinyMCE.selectedNode = value; + break; + + case "FormatBlock": + if (value == null || value == "") { + var elm = tinyMCE.getParentElement(this.getFocusElement(), "p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp"); + + if (elm) + this.execCommand("mceRemoveNode", false, elm); + } else { + if (tinyMCE.isGecko && new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>', 'gi').test(value)) + value = value.replace(/[^a-z]/gi, ''); + + if (tinyMCE.isMSIE && new RegExp('blockquote|code|samp', 'gi').test(value)) { + var b = this.selection.getBookmark(); + this.getDoc().execCommand("FormatBlock", false, '

    '); + tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()), value); + this.selection.moveToBookmark(b); + } else + this.getDoc().execCommand("FormatBlock", false, value); + } + + tinyMCE.triggerNodeChange(); + + break; + + case "mceRemoveNode": + if (!value) + value = tinyMCE.getParentElement(this.getFocusElement()); + + if (tinyMCE.isMSIE) { + value.outerHTML = value.innerHTML; + } else { + var rng = value.ownerDocument.createRange(); + rng.setStartBefore(value); + rng.setEndAfter(value); + rng.deleteContents(); + rng.insertNode(rng.createContextualFragment(value.innerHTML)); + } + + tinyMCE.triggerNodeChange(); + + break; + + case "mceSelectNodeDepth": + var parentNode = this.getFocusElement(); + for (var i=0; parentNode; i++) { + if (parentNode.nodeName.toLowerCase() == "body") + break; + + if (parentNode.nodeName.toLowerCase() == "#text") { + i--; + parentNode = parentNode.parentNode; + continue; + } + + if (i == value) { + this.selection.selectNode(parentNode, false); + tinyMCE.triggerNodeChange(); + tinyMCE.selectedNode = parentNode; + return; + } + + parentNode = parentNode.parentNode; + } + + break; + + case "SetStyleInfo": + var rng = this.getRng(); + var sel = this.getSel(); + var scmd = value['command']; + var sname = value['name']; + var svalue = value['value'] == null ? '' : value['value']; + //var svalue = value['value'] == null ? '' : value['value']; + var wrapper = value['wrapper'] ? value['wrapper'] : "span"; + var parentElm = null; + var invalidRe = new RegExp("^BODY|HTML$", "g"); + var invalidParentsRe = tinyMCE.settings['merge_styles_invalid_parents'] != '' ? new RegExp(tinyMCE.settings['merge_styles_invalid_parents'], "gi") : null; + + // Whole element selected check + if (tinyMCE.isMSIE) { + // Control range + if (rng.item) + parentElm = rng.item(0); + else { + var pelm = rng.parentElement(); + var prng = doc.selection.createRange(); + prng.moveToElementText(pelm); + + if (rng.htmlText == prng.htmlText || rng.boundingWidth == 0) { + if (invalidParentsRe == null || !invalidParentsRe.test(pelm.nodeName)) + parentElm = pelm; + } + } + } else { + var felm = this.getFocusElement(); + if (sel.isCollapsed || (new RegExp('td|tr|tbody|table', 'gi').test(felm.nodeName) && sel.anchorNode == felm.parentNode)) + parentElm = felm; + } + + // Whole element selected + if (parentElm && !invalidRe.test(parentElm.nodeName)) { + if (scmd == "setstyle") + tinyMCE.setStyleAttrib(parentElm, sname, svalue); + + if (scmd == "setattrib") + tinyMCE.setAttrib(parentElm, sname, svalue); + + if (scmd == "removeformat") { + parentElm.style.cssText = ''; + tinyMCE.setAttrib(parentElm, 'class', ''); + } + + // Remove style/attribs from all children + var ch = tinyMCE.getNodeTree(parentElm, new Array(), 1); + for (var z=0; z=0; i--) { + var elm = nodes[i]; + var isNew = tinyMCE.getAttrib(elm, "mce_new") == "true"; + + elm.removeAttribute("mce_new"); + + // Is only child a element + if (elm.childNodes && elm.childNodes.length == 1 && elm.childNodes[0].nodeType == 1) { + //tinyMCE.debug("merge1" + isNew); + this._mergeElements(scmd, elm, elm.childNodes[0], isNew); + continue; + } + + // Is I the only child + if (elm.parentNode.childNodes.length == 1 && !invalidRe.test(elm.nodeName) && !invalidRe.test(elm.parentNode.nodeName)) { + //tinyMCE.debug("merge2" + isNew + "," + elm.nodeName + "," + elm.parentNode.nodeName); + if (invalidParentsRe == null || !invalidParentsRe.test(elm.parentNode.nodeName)) + this._mergeElements(scmd, elm.parentNode, elm, false); + } + } + + // Remove empty wrappers + var nodes = doc.getElementsByTagName(wrapper); + for (var i=nodes.length-1; i>=0; i--) { + var elm = nodes[i]; + var isEmpty = true; + + // Check if it has any attribs + var tmp = doc.createElement("body"); + tmp.appendChild(elm.cloneNode(false)); + + // Is empty span, remove it + tmp.innerHTML = tmp.innerHTML.replace(new RegExp('style=""|class=""', 'gi'), ''); + //tinyMCE.debug(tmp.innerHTML); + if (new RegExp('', 'gi').test(tmp.innerHTML)) { + for (var x=0; x 0) { + value = tinyMCE.replaceVar(value, "selection", selectedText); + tinyMCE.execCommand('mceInsertContent', false, value); + } + + tinyMCE.triggerNodeChange(); + break; + + case "mceSetAttribute": + if (typeof(value) == 'object') { + var targetElms = (typeof(value['targets']) == "undefined") ? "p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address" : value['targets']; + var targetNode = tinyMCE.getParentElement(this.getFocusElement(), targetElms); + + if (targetNode) { + targetNode.setAttribute(value['name'], value['value']); + tinyMCE.triggerNodeChange(); + } + } + break; + + case "mceSetCSSClass": + this.execCommand("SetStyleInfo", false, {command : "setattrib", name : "class", value : value}); + break; + + case "mceInsertRawHTML": + var key = 'tiny_mce_marker'; + + this.execCommand('mceBeginUndoLevel'); + + // Insert marker key + this.execCommand('mceInsertContent', false, key); + + // Store away scroll pos + var scrollX = this.getDoc().body.scrollLeft + this.getDoc().documentElement.scrollLeft; + var scrollY = this.getDoc().body.scrollTop + this.getDoc().documentElement.scrollTop; + + // Find marker and replace with RAW HTML + var html = this.getBody().innerHTML; + if ((pos = html.indexOf(key)) != -1) + tinyMCE.setInnerHTML(this.getBody(), html.substring(0, pos) + value + html.substring(pos + key.length)); + + // Restore scoll pos + this.contentWindow.scrollTo(scrollX, scrollY); + + this.execCommand('mceEndUndoLevel'); + + break; + + case "mceInsertContent": + // Force empty string + if (!value) + value = ''; + + var insertHTMLFailed = false; + this.getWin().focus(); + + if (tinyMCE.isGecko || tinyMCE.isOpera) { + try { + // Is plain text or HTML, &,   etc will be encoded wrong in FF + if (value.indexOf('<') == -1 && !value.match(/(&| |<|>)/g)) { + var r = this.getRng(); + var n = this.getDoc().createTextNode(tinyMCE.entityDecode(value)); + var s = this.getSel(); + var r2 = r.cloneRange(); + + // Insert text at cursor position + s.removeAllRanges(); + r.deleteContents(); + r.insertNode(n); + + // Move the cursor to the end of text + r2.selectNode(n); + r2.collapse(false); + s.removeAllRanges(); + s.addRange(r2); + } else { + value = tinyMCE.fixGeckoBaseHREFBug(1, this.getDoc(), value); + this.getDoc().execCommand('inserthtml', false, value); + tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value); + } + } catch (ex) { + insertHTMLFailed = true; + } + + if (!insertHTMLFailed) { + tinyMCE.triggerNodeChange(); + return; + } + } + + // Ugly hack in Opera due to non working "inserthtml" + if (tinyMCE.isOpera && insertHTMLFailed) { + this.getDoc().execCommand("insertimage", false, tinyMCE.uniqueURL); + var ar = tinyMCE.getElementsByAttributeValue(this.getBody(), "img", "src", tinyMCE.uniqueURL); + ar[0].outerHTML = value; + return; + } + + if (!tinyMCE.isMSIE) { + var isHTML = value.indexOf('<') != -1; + var sel = this.getSel(); + var rng = this.getRng(); + + if (isHTML) { + if (tinyMCE.isSafari) { + var tmpRng = this.getDoc().createRange(); + + tmpRng.setStart(this.getBody(), 0); + tmpRng.setEnd(this.getBody(), 0); + + value = tmpRng.createContextualFragment(value); + } else + value = rng.createContextualFragment(value); + } else { + // Setup text node + var el = document.createElement("div"); + el.innerHTML = value; + value = el.firstChild.nodeValue; + value = doc.createTextNode(value); + } + + // Insert plain text in Safari + if (tinyMCE.isSafari && !isHTML) { + this.execCommand('InsertText', false, value.nodeValue); + tinyMCE.triggerNodeChange(); + return true; + } else if (tinyMCE.isSafari && isHTML) { + rng.deleteContents(); + rng.insertNode(value); + tinyMCE.triggerNodeChange(); + return true; + } + + rng.deleteContents(); + + // If target node is text do special treatment, (Mozilla 1.3 fix) + if (rng.startContainer.nodeType == 3) { + var node = rng.startContainer.splitText(rng.startOffset); + node.parentNode.insertBefore(value, node); + } else + rng.insertNode(value); + + if (!isHTML) { + // Removes weird selection trails + sel.selectAllChildren(doc.body); + sel.removeAllRanges(); + + // Move cursor to end of content + var rng = doc.createRange(); + + rng.selectNode(value); + rng.collapse(false); + + sel.addRange(rng); + } else + rng.collapse(false); + + tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value); + } else { + var rng = doc.selection.createRange(); + var c = value.indexOf('"; + } + + if (hc) { + cn = n.childNodes; + + for (i=0, l=cn.length; i'; + + return h; + }, + + _serializeAttribute : function(n, r, an) { + var av = '', t, os = this.settings.on_save; + + if (os && (an.indexOf('mce_') == 0 || an.indexOf('_moz') == 0)) + return ''; + + if (os && this.mceAttribs[an]) + av = this._getAttrib(n, this.mceAttribs[an]); + + if (av.length == 0) + av = this._getAttrib(n, an); + + if (av.length == 0 && r.defaultAttribs && (t = r.defaultAttribs[an])) { + av = t; + + if (av == "mce_empty") + return " " + an + '=""'; + } + + if (r.forceAttribs && (t = r.forceAttribs[an])) + av = t; + + if (os && av.length != 0 && this.settings.url_converter.length != 0 && /^(src|href|longdesc)$/.test(an)) + av = eval(this.settings.url_converter + '(this, n, av)'); + + if (av.length != 0 && r.validAttribValues && r.validAttribValues[an] && !r.validAttribValues[an].test(av)) + return ""; + + if (av.length != 0 && av == "{$uid}") + av = "uid_" + (this.idCount++); + + if (av.length != 0) + return " " + an + "=" + '"' + this.xmlEncode(av) + '"'; + + return ""; + }, + + formatHTML : function(h) { + var s = this.settings, p = '', i = 0, li = 0, o = '', l; + + h = h.replace(/\r/g, ''); // Windows sux, isn't carriage return a thing of the past :) + h = '\n' + h; + h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting + h = h.replace(this.nlBeforeRe, '\n<$1$2>'); + h = h.replace(this.nlAfterRe, '<$1$2>\n'); + h = h.replace(this.nlBeforeAfterRe, '\n<$1$2$3>\n'); + h += '\n'; + + //tinyMCE.debug(h); + + while ((i = h.indexOf('\n', i + 1)) != -1) { + if ((l = h.substring(li + 1, i)).length != 0) { + if (this.ouRe.test(l) && p.length >= s.indent_levels) + p = p.substring(s.indent_levels); + + o += p + l + '\n'; + + if (this.inRe.test(l)) + p += this.inStr; + } + + li = i; + } + + //tinyMCE.debug(h); + + return o; + }, + + xmlEncode : function(s) { + var i, l, e, o = '', c; + + this._setupEntities(); // Will intialize lookup table + + switch (this.settings.entity_encoding) { + case "raw": + return tinyMCE.xmlEncode(s); + + case "named": + for (i=0, l=s.length; i 127 || c == 60 || c == 62 || c == 38 || c == 39 || c == 34) + o += '&#' + c + ";"; + else + o += String.fromCharCode(c); + } + + return o; + } + + return s; + }, + + split : function(re, s) { + var c = s.split(re); + var i, l, o = new Array(); + + for (i=0, l=c.length; i gets converted to


    . + h = h.replace(/\s\/>/g, '>'); + + // Since MSIE auto generated emtpy P tags some times we must tell it to keep the real ones + h = h.replace(/]*)>\u00A0?<\/p>/gi, ' 

    '); // Keep empty paragraphs + h = h.replace(/]*)>\s* \s*<\/p>/gi, ' 

    '); // Keep empty paragraphs + h = h.replace(/]*)>\s+<\/p>/gi, ' 

    '); // Keep empty paragraphs + + // Remove first comment + e.innerHTML = tinyMCE.uniqueTag + h; + e.firstChild.removeNode(true); + + // Remove weird auto generated empty paragraphs unless it's supposed to be there + nl = e.getElementsByTagName("p"); + for (i=nl.length-1; i>=0; i--) { + n = nl[i]; + + if (n.nodeName == 'P' && !n.hasChildNodes() && !n.mce_keep) + n.parentNode.removeChild(n); + } + } else { + h = this.fixGeckoBaseHREFBug(1, e, h); + e.innerHTML = h; + this.fixGeckoBaseHREFBug(2, e, h); + } +}; + +TinyMCE_Engine.prototype.getOuterHTML = function(e) { + if (tinyMCE.isMSIE) + return e.outerHTML; + + var d = e.ownerDocument.createElement("body"); + d.appendChild(e); + return d.innerHTML; +}; + +TinyMCE_Engine.prototype.setOuterHTML = function(e, h) { + if (tinyMCE.isMSIE) { + e.outerHTML = h; + return; + } + + var d = e.ownerDocument.createElement("body"); + d.innerHTML = h; + e.parentNode.replaceChild(d.firstChild, e); +}; + +TinyMCE_Engine.prototype._getElementById = function(id, d) { + var e, i, j, f; + + if (typeof(d) == "undefined") + d = document; + + e = d.getElementById(id); + if (!e) { + f = d.forms; + + for (i=0; i-1; i--) { + if (ar[i].specified && ar[i].nodeValue) + ne.setAttribute(ar[i].nodeName.toLowerCase(), ar[i].nodeValue); + } + + ar = e.childNodes; + for (i=0; i= strTok2.length) { + for (var i=0; i= strTok2.length || strTok1[i] != strTok2[i]) { + breakPoint = i + 1; + break; + } + } + } + + if (strTok1.length < strTok2.length) { + for (var i=0; i= strTok1.length || strTok1[i] != strTok2[i]) { + breakPoint = i + 1; + break; + } + } + } + + if (breakPoint == 1) + return targetURL.path; + + for (var i=0; i<(strTok1.length-(breakPoint-1)); i++) + outPath += "../"; + + for (var i=breakPoint-1; i=0; i--) { + if (baseURLParts[i].length == 0) + continue; + + newBaseURLParts[newBaseURLParts.length] = baseURLParts[i]; + } + baseURLParts = newBaseURLParts.reverse(); + + // Merge relURLParts chunks + var newRelURLParts = new Array(); + var numBack = 0; + for (var i=relURLParts.length-1; i>=0; i--) { + if (relURLParts[i].length == 0 || relURLParts[i] == ".") + continue; + + if (relURLParts[i] == '..') { + numBack++; + continue; + } + + if (numBack > 0) { + numBack--; + continue; + } + + newRelURLParts[newRelURLParts.length] = relURLParts[i]; + } + + relURLParts = newRelURLParts.reverse(); + + // Remove end from absolute path + var len = baseURLParts.length-numBack; + var absPath = (len <= 0 ? "" : "/") + baseURLParts.slice(0, len).join('/') + "/" + relURLParts.join('/'); + var start = "", end = ""; + + // Build output URL + relURL.protocol = baseURL.protocol; + relURL.host = baseURL.host; + relURL.port = baseURL.port; + + // Re-add trailing slash if it's removed + if (relURL.path.charAt(relURL.path.length-1) == "/") + absPath += "/"; + + relURL.path = absPath; + + return this.serializeURL(relURL); +}; + +TinyMCE_Engine.prototype.convertURL = function(url, node, on_save) { + var prot = document.location.protocol; + var host = document.location.hostname; + var port = document.location.port; + + // Pass through file protocol + if (prot == "file:") + return url; + + // Something is wrong, remove weirdness + url = tinyMCE.regexpReplace(url, '(http|https):///', '/'); + + // Mailto link or anchor (Pass through) + if (url.indexOf('mailto:') != -1 || url.indexOf('javascript:') != -1 || tinyMCE.regexpReplace(url,'[ \t\r\n\+]|%20','').charAt(0) == "#") + return url; + + // Fix relative/Mozilla + if (!tinyMCE.isMSIE && !on_save && url.indexOf("://") == -1 && url.charAt(0) != '/') + return tinyMCE.settings['base_href'] + url; + + // Handle relative URLs + if (on_save && tinyMCE.getParam('relative_urls')) { + var curl = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], url); + if (curl.charAt(0) == '/') + curl = tinyMCE.settings['document_base_prefix'] + curl; + + var urlParts = tinyMCE.parseURL(curl); + var tmpUrlParts = tinyMCE.parseURL(tinyMCE.settings['document_base_url']); + + // Force relative + if (urlParts['host'] == tmpUrlParts['host'] && (urlParts['port'] == tmpUrlParts['port'])) + return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings['document_base_url'], curl); + } + + // Handle absolute URLs + if (!tinyMCE.getParam('relative_urls')) { + var urlParts = tinyMCE.parseURL(url); + var baseUrlParts = tinyMCE.parseURL(tinyMCE.settings['base_href']); + + // Force absolute URLs from relative URLs + url = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], url); + + // If anchor and path is the same page + if (urlParts['anchor'] && urlParts['path'] == baseUrlParts['path']) + return "#" + urlParts['anchor']; + } + + // Remove current domain + if (tinyMCE.getParam('remove_script_host')) { + var start = "", portPart = ""; + + if (port != "") + portPart = ":" + port; + + start = prot + "//" + host + portPart + "/"; + + if (url.indexOf(start) == 0) + url = url.substring(start.length-1); + } + + return url; +}; + +TinyMCE_Engine.prototype.convertAllRelativeURLs = function(body) { + // Convert all image URL:s to absolute URL + var elms = body.getElementsByTagName("img"); + for (var i=0; i bookmark.index) { + try { + rng.addElement(nl[bookmark.index]); + } catch (ex) { + // Might be thrown if the node no longer exists + } + } + } else { + rng = inst.getSel().createRange(); + rng.moveToElementText(inst.getBody()); + rng.collapse(true); + rng.moveStart('character', bookmark.start); + rng.moveEnd('character', bookmark.length); + } + + rng.select(); + + win.scrollTo(bookmark.scrollX, bookmark.scrollY); + return true; + } + + if (tinyMCE.isGecko && bookmark.rng) { + sel.removeAllRanges(); + sel.addRange(bookmark.rng); + win.scrollTo(bookmark.scrollX, bookmark.scrollY); + return true; + } + + if (tinyMCE.isGecko) { + // try { + rng = doc.createRange(); + + nl = doc.getElementsByTagName(bookmark.startTag); + if (nl.length > bookmark.start) + rng.setStart(nl[bookmark.start].childNodes[bookmark.startIndex], bookmark.startOffset); + + nl = doc.getElementsByTagName(bookmark.endTag); + if (nl.length > bookmark.end) + rng.setEnd(nl[bookmark.end].childNodes[bookmark.endIndex], bookmark.endOffset); + + sel.removeAllRanges(); + sel.addRange(rng); + /* } catch { + // Ignore + }*/ + + win.scrollTo(bookmark.scrollX, bookmark.scrollY); + return true; + } + + return false; + }, + + selectNode : function(node, collapse, select_text_node, to_start) { + var inst = this.instance, sel, rng, nodes; + + if (!node) + return; + + if (typeof(collapse) == "undefined") + collapse = true; + + if (typeof(select_text_node) == "undefined") + select_text_node = false; + + if (typeof(to_start) == "undefined") + to_start = true; + + if (tinyMCE.isMSIE) { + rng = inst.getBody().createTextRange(); + + try { + rng.moveToElementText(node); + + if (collapse) + rng.collapse(to_start); + + rng.select(); + } catch (e) { + // Throws illigal agrument in MSIE some times + } + } else { + sel = this.getSel(); + + if (!sel) + return; + + if (tinyMCE.isSafari) { + sel.setBaseAndExtent(node, 0, node, node.innerText.length); + + if (collapse) { + if (to_start) + sel.collapseToStart(); + else + sel.collapseToEnd(); + } + + this.scrollToNode(node); + + return; + } + + rng = inst.getDoc().createRange(); + + if (select_text_node) { + // Find first textnode in tree + nodes = tinyMCE.getNodeTree(node, new Array(), 3); + if (nodes.length > 0) + rng.selectNodeContents(nodes[0]); + else + rng.selectNodeContents(node); + } else + rng.selectNode(node); + + if (collapse) { + // Special treatment of textnode collapse + if (!to_start && node.nodeType == 3) { + rng.setStart(node, node.nodeValue.length); + rng.setEnd(node, node.nodeValue.length); + } else + rng.collapse(to_start); + } + + sel.removeAllRanges(); + sel.addRange(rng); + } + + this.scrollToNode(node); + + // Set selected element + tinyMCE.selectedElement = null; + if (node.nodeType == 1) + tinyMCE.selectedElement = node; + }, + + scrollToNode : function(node) { + var inst = this.instance; + var pos, doc, scrollX, scrollY, height; + + // Scroll to node position + pos = tinyMCE.getAbsPosition(node); + doc = inst.getDoc(); + scrollX = doc.body.scrollLeft + doc.documentElement.scrollLeft; + scrollY = doc.body.scrollTop + doc.documentElement.scrollTop; + height = tinyMCE.isMSIE ? document.getElementById(inst.editorId).style.pixelHeight : inst.targetElement.clientHeight; + + // Only scroll if out of visible area + if (!tinyMCE.settings['auto_resize'] && !(pos.absTop > scrollY && pos.absTop < (scrollY - 25 + height))) + inst.contentWindow.scrollTo(pos.absLeft, pos.absTop - height + 25); + }, + + getSel : function() { + var inst = this.instance; + + if (tinyMCE.isMSIE && !tinyMCE.isOpera) + return inst.getDoc().selection; + + return inst.contentWindow.getSelection(); + }, + + getRng : function() { + var inst = this.instance; + var sel = this.getSel(); + + if (sel == null) + return null; + + if (tinyMCE.isMSIE && !tinyMCE.isOpera) + return sel.createRange(); + + if (tinyMCE.isSafari && !sel.getRangeAt) + return '' + window.getSelection(); + + return sel.getRangeAt(0); + }, + + getFocusElement : function() { + var inst = this.instance; + + if (tinyMCE.isMSIE && !tinyMCE.isOpera) { + var doc = inst.getDoc(); + var rng = doc.selection.createRange(); + + // if (rng.collapse) + // rng.collapse(true); + + var elm = rng.item ? rng.item(0) : rng.parentElement(); + } else { + if (inst.isHidden()) + return inst.getBody(); + + var sel = this.getSel(); + var rng = this.getRng(); + + if (!sel || !rng) + return null; + + var elm = rng.commonAncestorContainer; + //var elm = (sel && sel.anchorNode) ? sel.anchorNode : null; + + // Handle selection a image or other control like element such as anchors + if (!rng.collapsed) { + // Is selection small + if (rng.startContainer == rng.endContainer) { + if (rng.startOffset - rng.endOffset < 2) { + if (rng.startContainer.hasChildNodes()) + elm = rng.startContainer.childNodes[rng.startOffset]; + } + } + } + + // Get the element parent of the node + elm = tinyMCE.getParentElement(elm); + + //if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") + // elm = tinyMCE.selectedElement; + } + + return elm; + } +}; + +/* file:jscripts/tiny_mce/classes/TinyMCE_UndoRedo.class.js */ + +function TinyMCE_UndoRedo(inst) { + this.instance = inst; + this.undoLevels = new Array(); + this.undoIndex = 0; + this.typingUndoIndex = -1; + this.undoRedo = true; +}; + +TinyMCE_UndoRedo.prototype = { + add : function(l) { + var b; + + if (l) { + this.undoLevels[this.undoLevels.length] = l; + return true; + } + + var inst = this.instance; + + if (this.typingUndoIndex != -1) { + this.undoIndex = this.typingUndoIndex; + // tinyMCE.debug("Override: " + this.undoIndex); + } + + var newHTML = tinyMCE.trim(inst.getBody().innerHTML); + if (this.undoLevels[this.undoIndex] && newHTML != this.undoLevels[this.undoIndex].content) { + //tinyMCE.debug(newHTML, this.undoLevels[this.undoIndex]); + + tinyMCE.dispatchCallback(inst, 'onchange_callback', 'onChange', inst); + + // Time to compress + var customUndoLevels = tinyMCE.settings['custom_undo_redo_levels']; + if (customUndoLevels != -1 && this.undoLevels.length > customUndoLevels) { + for (var i=0; i 0) { + this.undoIndex--; + tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content); + inst.repaint(); + if (inst.settings.custom_undo_redo_restore_selection) + inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark); + } + + // tinyMCE.debug("Undo - undo levels:" + this.undoLevels.length + ", undo index: " + this.undoIndex); + }, + + redo : function() { + var inst = this.instance; + + tinyMCE.execCommand("mceEndTyping"); + + if (this.undoIndex < (this.undoLevels.length-1)) { + this.undoIndex++; + tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content); + inst.repaint(); +// if (this.undoIndex > 0) +// inst.selection.moveToBookmark(this.undoLevels[this.undoIndex-1].bookmark); + if (inst.settings.custom_undo_redo_restore_selection) + inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark); + // tinyMCE.debug("Redo - undo levels:" + this.undoLevels.length + ", undo index: " + this.undoIndex); + } + + tinyMCE.triggerNodeChange(); + } +}; + +/* file:jscripts/tiny_mce/classes/TinyMCE_ForceParagraphs.class.js */ + +var TinyMCE_ForceParagraphs = { + _insertPara : function(inst, e) { + function isEmpty(para) { + function isEmptyHTML(html) { + return html.replace(new RegExp('[ \t\r\n]+', 'g'), '').toLowerCase() == ""; + } + + // Check for images + if (para.getElementsByTagName("img").length > 0) + return false; + + // Check for tables + if (para.getElementsByTagName("table").length > 0) + return false; + + // Check for HRs + if (para.getElementsByTagName("hr").length > 0) + return false; + + // Check all textnodes + var nodes = tinyMCE.getNodeTree(para, new Array(), 3); + for (var i=0; i <" + blockName + "> "; + paraAfter = body.childNodes[1]; + } + + inst.selection.selectNode(paraAfter, true, true); + + return true; + } + + // Place first part within new paragraph + if (startChop.nodeName == blockName) + rngBefore.setStart(startChop, 0); + else + rngBefore.setStartBefore(startChop); + + rngBefore.setEnd(startNode, startOffset); + paraBefore.appendChild(rngBefore.cloneContents()); + + // Place secound part within new paragraph + rngAfter.setEndAfter(endChop); + rngAfter.setStart(endNode, endOffset); + var contents = rngAfter.cloneContents(); + + if (contents.firstChild && contents.firstChild.nodeName == blockName) { + /* var nodes = contents.firstChild.childNodes; + for (var i=0; i= r.startOffset && nv.charAt(r.startOffset - 1) == ' ') + s = true; + + // Only remove BRs if we are at the end of line #bug 1464152 + if (nv != null && r.startOffset == nv.length) + sn.nextSibling.parentNode.removeChild(sn.nextSibling); + } + + return s; + } +}; + +/* file:jscripts/tiny_mce/classes/TinyMCE_Layer.class.js */ + +function TinyMCE_Layer(id, bm) { + this.id = id; + this.blockerElement = null; + this.events = false; + this.element = null; + this.blockMode = typeof(bm) != 'undefined' ? bm : true; + this.doc = document; +}; + +TinyMCE_Layer.prototype = { + moveRelativeTo : function(re, p) { + var rep = this.getAbsPosition(re); + var w = parseInt(re.offsetWidth); + var h = parseInt(re.offsetHeight); + var e = this.getElement(); + var ew = parseInt(e.offsetWidth); + var eh = parseInt(e.offsetHeight); + var x, y; + + switch (p) { + case "tl": + x = rep.absLeft; + y = rep.absTop; + break; + + case "tr": + x = rep.absLeft + w; + y = rep.absTop; + break; + + case "bl": + x = rep.absLeft; + y = rep.absTop + h; + break; + + case "br": + x = rep.absLeft + w; + y = rep.absTop + h; + break; + + case "cc": + x = rep.absLeft + (w / 2) - (ew / 2); + y = rep.absTop + (h / 2) - (eh / 2); + break; + } + + this.moveTo(x, y); + }, + + moveBy : function(x, y) { + var e = this.getElement(); + this.moveTo(parseInt(e.style.left) + x, parseInt(e.style.top) + y); + }, + + moveTo : function(x, y) { + var e = this.getElement(); + + e.style.left = x + "px"; + e.style.top = y + "px"; + + this.updateBlocker(); + }, + + resizeBy : function(w, h) { + var e = this.getElement(); + this.resizeTo(parseInt(e.style.width) + w, parseInt(e.style.height) + h); + }, + + resizeTo : function(w, h) { + var e = this.getElement(); + + if (w != null) + e.style.width = w + "px"; + + if (h != null) + e.style.height = h + "px"; + + this.updateBlocker(); + }, + + show : function() { + this.getElement().style.display = 'block'; + this.updateBlocker(); + }, + + hide : function() { + this.getElement().style.display = 'none'; + this.updateBlocker(); + }, + + isVisible : function() { + return this.getElement().style.display == 'block'; + }, + + getElement : function() { + if (!this.element) + this.element = this.doc.getElementById(this.id); + + return this.element; + }, + + setBlockMode : function(s) { + this.blockMode = s; + }, + + updateBlocker : function() { + var e, b, x, y, w, h; + + b = this.getBlocker(); + if (b) { + if (this.blockMode) { + e = this.getElement(); + x = this.parseInt(e.style.left); + y = this.parseInt(e.style.top); + w = this.parseInt(e.offsetWidth); + h = this.parseInt(e.offsetHeight); + + b.style.left = x + 'px'; + b.style.top = y + 'px'; + b.style.width = w + 'px'; + b.style.height = h + 'px'; + b.style.display = e.style.display; + } else + b.style.display = 'none'; + } + }, + + getBlocker : function() { + var d, b; + + if (!this.blockerElement && this.blockMode) { + d = this.doc; + b = d.createElement("iframe"); + + b.style.cssText = 'display: none; position: absolute; left: 0; top: 0'; + b.src = 'javascript:false;'; + b.frameBorder = '0'; + b.scrolling = 'no'; + + d.body.appendChild(b); + this.blockerElement = b; + } + + return this.blockerElement; + }, + + getAbsPosition : function(n) { + var p = {absLeft : 0, absTop : 0}; + + while (n) { + p.absLeft += n.offsetLeft; + p.absTop += n.offsetTop; + n = n.offsetParent; + } + + return p; + }, + + create : function(n, c, p) { + var d = this.doc, e = d.createElement(n); + + e.setAttribute('id', this.id); + + if (c) + e.className = c; + + if (!p) + p = d.body; + + p.appendChild(e); + + return this.element = e; + }, + + parseInt : function(s) { + if (s == null || s == '') + return 0; + + return parseInt(s); + } +}; + +/* file:jscripts/tiny_mce/classes/TinyMCE_Menu.class.js */ + +function TinyMCE_Menu() { + var id; + + if (typeof(tinyMCE.menuCounter) == "undefined") + tinyMCE.menuCounter = 0; + + id = "mc_menu_" + tinyMCE.menuCounter++; + + TinyMCE_Layer.call(this, id, true); + + this.id = id; + this.items = new Array(); + this.needsUpdate = true; +}; + +// Extends the TinyMCE_Layer class +TinyMCE_Menu.prototype = tinyMCE.extend(TinyMCE_Layer.prototype, { + init : function(s) { + var n; + + // Default params + this.settings = { + separator_class : 'mceMenuSeparator', + title_class : 'mceMenuTitle', + disabled_class : 'mceMenuDisabled', + menu_class : 'mceMenu', + drop_menu : true + }; + + for (n in s) + this.settings[n] = s[n]; + + this.create('div', this.settings.menu_class); + }, + + clear : function() { + this.items = new Array(); + }, + + addTitle : function(t) { + this.add({type : 'title', text : t}); + }, + + addDisabled : function(t) { + this.add({type : 'disabled', text : t}); + }, + + addSeparator : function() { + this.add({type : 'separator'}); + }, + + addItem : function(t, js) { + this.add({text : t, js : js}); + }, + + add : function(mi) { + this.items[this.items.length] = mi; + this.needsUpdate = true; + }, + + update : function() { + var e = this.getElement(), h = '', i, t, m = this.items, s = this.settings; + + if (this.settings.drop_menu) + h += ''; + + h += ''; + + for (i=0; i'; + } + + h += '
    '; + break; + + case 'title': + h += '
    ' + t + ''; + break; + + case 'disabled': + h += '
    ' + t + ''; + break; + + default: + h += '
    ' + t + ''; + } + + h += '
    '; + + e.innerHTML = h; + + this.needsUpdate = false; + this.updateBlocker(); + }, + + show : function() { + var nl, i; + + if (tinyMCE.lastMenu == this) + return; + + if (this.needsUpdate) + this.update(); + + if (tinyMCE.lastMenu && tinyMCE.lastMenu != this) + tinyMCE.lastMenu.hide(); + + TinyMCE_Layer.prototype.show.call(this); + + if (!tinyMCE.isOpera) { + // Accessibility stuff +/* nl = this.getElement().getElementsByTagName("a"); + if (nl.length > 0) + nl[0].focus();*/ + } + + tinyMCE.lastMenu = this; + } +}); + +/* file:jscripts/tiny_mce/classes/TinyMCE_Debug.class.js */ + +TinyMCE_Engine.prototype.debug = function() { + var m = "", e, a, i; + + e = document.getElementById("tinymce_debug"); + if (!e) { + var d = document.createElement("div"); + d.setAttribute("className", "debugger"); + d.className = "debugger"; + d.innerHTML = 'Debug output:'; + + document.body.appendChild(d); + e = document.getElementById("tinymce_debug"); + } + + a = this.debug.arguments; + for (i=0; i'; + html += ''; + + return html; +} + +function pickColor(e, target_form_element) { + if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown") + tinyMCEPopup.pickColor(e, target_form_element); +} + +function updateColor(img_id, form_element_id) { + document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value; +} + +function setBrowserDisabled(id, state) { + var img = document.getElementById(id); + var lnk = document.getElementById(id + "_link"); + + if (lnk) { + if (state) { + lnk.setAttribute("realhref", lnk.getAttribute("href")); + lnk.removeAttribute("href"); + tinyMCE.switchClass(img, 'mceButtonDisabled', true); + } else { + lnk.setAttribute("href", lnk.getAttribute("realhref")); + tinyMCE.switchClass(img, 'mceButtonNormal', false); + } + } +} + +function getBrowserHTML(id, target_form_element, type, prefix) { + var option = prefix + "_" + type + "_browser_callback"; + var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); + if (cb == null) + return ""; + + var html = ""; + + html += ''; + html += ''; + + return html; +} + +function openBrower(img_id, target_form_element, type, option) { + var img = document.getElementById(img_id); + + if (img.className != "mceButtonDisabled") + tinyMCEPopup.openBrowser(target_form_element, type, option); +} + +function selectByValue(form_obj, field_name, value, add_custom, ignore_case) { + if (!form_obj || !form_obj.elements[field_name]) + return; + + var sel = form_obj.elements[field_name]; + + var found = false; + for (var i=0; i x && mx < x + w && my > y && my < y + h)) { + MCLayer.visibleLayer = null; + + if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my)) + return true; + + l.hide(); + } + } + }, + + addCSSClass : function(e, c) { + this.removeCSSClass(e, c); + var a = this.explode(' ', e.className); + a[a.length] = c; + e.className = a.join(' '); + }, + + removeCSSClass : function(e, c) { + var a = this.explode(' ', e.className), i; + + for (i=0; i 0); +} + +function validateSelection(form_name, element_name) { + return (document.forms[form_name].elements[element_name].selectedIndex > 0); +} + +function validateCheckBox(form_name, element_name) { + return document.forms[form_name].elements[element_name].checked; +} + +function validateCleanString(form_name, element_name) { + return testRegExp(form_name, element_name, '^[A-Za-z0-9_]+$'); +} + +function validateEmail(form_name, element_name) { + return testRegExp(form_name, element_name, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$'); +} + +function validateAbsUrl(form_name, element_name) { + return testRegExp(form_name, element_name, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+$'); +} + +function validateNumber(form_name, element_name, allow_blank) { + return (!allow_blank && value == '') ? false : testRegExp(form_name, element_name, '^-?[0-9]*\\.?[0-9]*$'); +} + +function validateSize(form_name, element_name,) { + return testRegExp(form_name, element_name, '^[0-9]+(px|%)?$'); +} + +function validateID(form_name, element_name,) { + return testRegExp(form_name, element_name, '^[A-Za-z_]([A-Za-z0-9_])*$'); +} diff --git a/jscripts/wz_jsgraphics.js b/jscripts/wz_jsgraphics.js new file mode 100644 index 000000000..e91ddb509 --- /dev/null +++ b/jscripts/wz_jsgraphics.js @@ -0,0 +1,943 @@ +/* This notice must be untouched at all times. + +wz_jsgraphics.js v. 2.36 +The latest version is available at +http://www.walterzorn.com +or http://www.devira.com +or http://www.walterzorn.de + +Copyright (c) 2002-2004 Walter Zorn. All rights reserved. +Created 3. 11. 2002 by Walter Zorn (Web: http://www.walterzorn.com ) +Last modified: 21. 6. 2006 + +Performance optimizations for Internet Explorer +by Thomas Frank and John Holdsworth. +fillPolygon method implemented by Matthieu Haller. + +High Performance JavaScript Graphics Library. +Provides methods +- to draw lines, rectangles, ellipses, polygons + with specifiable line thickness, +- to fill rectangles and ellipses +- to draw text. +NOTE: Operations, functions and branching have rather been optimized +to efficiency and speed than to shortness of source code. + +LICENSE: LGPL + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License (LGPL) as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA, +or see http://www.gnu.org/copyleft/lesser.html +*/ + + +var jg_ihtm, jg_ie, jg_fast, jg_dom, jg_moz, +jg_n4 = (document.layers && typeof document.classes != "undefined"); + + +function chkDHTM(x, i) +{ + x = document.body || null; + jg_ie = x && typeof x.insertAdjacentHTML != "undefined"; + jg_dom = (x && !jg_ie && + typeof x.appendChild != "undefined" && + typeof document.createRange != "undefined" && + typeof (i = document.createRange()).setStartBefore != "undefined" && + typeof i.createContextualFragment != "undefined"); + jg_ihtm = !jg_ie && !jg_dom && x && typeof x.innerHTML != "undefined"; + jg_fast = jg_ie && document.all && !window.opera; + jg_moz = jg_dom && typeof x.style.MozOpacity != "undefined"; +} + + +function pntDoc() +{ + this.wnd.document.write(jg_fast? this.htmRpc() : this.htm); + this.htm = ''; +} + + +function pntCnvDom() +{ + var x = this.wnd.document.createRange(); + x.setStartBefore(this.cnv); + x = x.createContextualFragment(jg_fast? this.htmRpc() : this.htm); + if(this.cnv) this.cnv.appendChild(x); + this.htm = ''; +} + + +function pntCnvIe() +{ + if(this.cnv) this.cnv.insertAdjacentHTML("BeforeEnd", jg_fast? this.htmRpc() : this.htm); + this.htm = ''; +} + + +function pntCnvIhtm() +{ + if(this.cnv) this.cnv.innerHTML += this.htm; + this.htm = ''; +} + + +function pntCnv() +{ + this.htm = ''; +} + + +function mkDiv(x, y, w, h) +{ + this.htm += '
    <\/div>'; +} + + +function mkDivIe(x, y, w, h) +{ + this.htm += '%%'+this.color+';'+x+';'+y+';'+w+';'+h+';'; +} + + +function mkDivPrt(x, y, w, h) +{ + this.htm += '
    <\/div>'; +} + + +function mkLyr(x, y, w, h) +{ + this.htm += '<\/layer>\n'; +} + + +var regex = /%%([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);/g; +function htmRpc() +{ + return this.htm.replace( + regex, + '
    \n'); +} + + +function htmPrtRpc() +{ + return this.htm.replace( + regex, + '
    \n'); +} + + +function mkLin(x1, y1, x2, y2) +{ + if (x1 > x2) + { + var _x2 = x2; + var _y2 = y2; + x2 = x1; + y2 = y1; + x1 = _x2; + y1 = _y2; + } + var dx = x2-x1, dy = Math.abs(y2-y1), + x = x1, y = y1, + yIncr = (y1 > y2)? -1 : 1; + + if (dx >= dy) + { + var pr = dy<<1, + pru = pr - (dx<<1), + p = pr-dx, + ox = x; + while ((dx--) > 0) + { + ++x; + if (p > 0) + { + this.mkDiv(ox, y, x-ox, 1); + y += yIncr; + p += pru; + ox = x; + } + else p += pr; + } + this.mkDiv(ox, y, x2-ox+1, 1); + } + + else + { + var pr = dx<<1, + pru = pr - (dy<<1), + p = pr-dy, + oy = y; + if (y2 <= y1) + { + while ((dy--) > 0) + { + if (p > 0) + { + this.mkDiv(x++, y, 1, oy-y+1); + y += yIncr; + p += pru; + oy = y; + } + else + { + y += yIncr; + p += pr; + } + } + this.mkDiv(x2, y2, 1, oy-y2+1); + } + else + { + while ((dy--) > 0) + { + y += yIncr; + if (p > 0) + { + this.mkDiv(x++, oy, 1, y-oy); + p += pru; + oy = y; + } + else p += pr; + } + this.mkDiv(x2, oy, 1, y2-oy+1); + } + } +} + + +function mkLin2D(x1, y1, x2, y2) +{ + if (x1 > x2) + { + var _x2 = x2; + var _y2 = y2; + x2 = x1; + y2 = y1; + x1 = _x2; + y1 = _y2; + } + var dx = x2-x1, dy = Math.abs(y2-y1), + x = x1, y = y1, + yIncr = (y1 > y2)? -1 : 1; + + var s = this.stroke; + if (dx >= dy) + { + if (dx > 0 && s-3 > 0) + { + var _s = (s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy) / dx; + _s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1; + } + else var _s = s; + var ad = Math.ceil(s/2); + + var pr = dy<<1, + pru = pr - (dx<<1), + p = pr-dx, + ox = x; + while ((dx--) > 0) + { + ++x; + if (p > 0) + { + this.mkDiv(ox, y, x-ox+ad, _s); + y += yIncr; + p += pru; + ox = x; + } + else p += pr; + } + this.mkDiv(ox, y, x2-ox+ad+1, _s); + } + + else + { + if (s-3 > 0) + { + var _s = (s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy) / dy; + _s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1; + } + else var _s = s; + var ad = Math.round(s/2); + + var pr = dx<<1, + pru = pr - (dy<<1), + p = pr-dy, + oy = y; + if (y2 <= y1) + { + ++ad; + while ((dy--) > 0) + { + if (p > 0) + { + this.mkDiv(x++, y, _s, oy-y+ad); + y += yIncr; + p += pru; + oy = y; + } + else + { + y += yIncr; + p += pr; + } + } + this.mkDiv(x2, y2, _s, oy-y2+ad); + } + else + { + while ((dy--) > 0) + { + y += yIncr; + if (p > 0) + { + this.mkDiv(x++, oy, _s, y-oy+ad); + p += pru; + oy = y; + } + else p += pr; + } + this.mkDiv(x2, oy, _s, y2-oy+ad+1); + } + } +} + + +function mkLinDott(x1, y1, x2, y2) +{ + if (x1 > x2) + { + var _x2 = x2; + var _y2 = y2; + x2 = x1; + y2 = y1; + x1 = _x2; + y1 = _y2; + } + var dx = x2-x1, dy = Math.abs(y2-y1), + x = x1, y = y1, + yIncr = (y1 > y2)? -1 : 1, + drw = true; + if (dx >= dy) + { + var pr = dy<<1, + pru = pr - (dx<<1), + p = pr-dx; + while ((dx--) > 0) + { + if (drw) this.mkDiv(x, y, 1, 1); + drw = !drw; + if (p > 0) + { + y += yIncr; + p += pru; + } + else p += pr; + ++x; + } + if (drw) this.mkDiv(x, y, 1, 1); + } + + else + { + var pr = dx<<1, + pru = pr - (dy<<1), + p = pr-dy; + while ((dy--) > 0) + { + if (drw) this.mkDiv(x, y, 1, 1); + drw = !drw; + y += yIncr; + if (p > 0) + { + ++x; + p += pru; + } + else p += pr; + } + if (drw) this.mkDiv(x, y, 1, 1); + } +} + + +function mkOv(left, top, width, height) +{ + var a = width>>1, b = height>>1, + wod = width&1, hod = (height&1)+1, + cx = left+a, cy = top+b, + x = 0, y = b, + ox = 0, oy = b, + aa = (a*a)<<1, bb = (b*b)<<1, + st = (aa>>1)*(1-(b<<1)) + bb, + tt = (bb>>1) - aa*((b<<1)-1), + w, h; + while (y > 0) + { + if (st < 0) + { + st += bb*((x<<1)+3); + tt += (bb<<1)*(++x); + } + else if (tt < 0) + { + st += bb*((x<<1)+3) - (aa<<1)*(y-1); + tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3); + w = x-ox; + h = oy-y; + if (w&2 && h&2) + { + this.mkOvQds(cx, cy, -x+2, ox+wod, -oy, oy-1+hod, 1, 1); + this.mkOvQds(cx, cy, -x+1, x-1+wod, -y-1, y+hod, 1, 1); + } + else this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, oy-h+hod, w, h); + ox = x; + oy = y; + } + else + { + tt -= aa*((y<<1)-3); + st -= (aa<<1)*(--y); + } + } + this.mkDiv(cx-a, cy-oy, a-ox+1, (oy<<1)+hod); + this.mkDiv(cx+ox+wod, cy-oy, a-ox+1, (oy<<1)+hod); +} + + +function mkOv2D(left, top, width, height) +{ + var s = this.stroke; + width += s-1; + height += s-1; + var a = width>>1, b = height>>1, + wod = width&1, hod = (height&1)+1, + cx = left+a, cy = top+b, + x = 0, y = b, + aa = (a*a)<<1, bb = (b*b)<<1, + st = (aa>>1)*(1-(b<<1)) + bb, + tt = (bb>>1) - aa*((b<<1)-1); + + if (s-4 < 0 && (!(s-2) || width-51 > 0 && height-51 > 0)) + { + var ox = 0, oy = b, + w, h, + pxl, pxr, pxt, pxb, pxw; + while (y > 0) + { + if (st < 0) + { + st += bb*((x<<1)+3); + tt += (bb<<1)*(++x); + } + else if (tt < 0) + { + st += bb*((x<<1)+3) - (aa<<1)*(y-1); + tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3); + w = x-ox; + h = oy-y; + + if (w-1) + { + pxw = w+1+(s&1); + h = s; + } + else if (h-1) + { + pxw = s; + h += 1+(s&1); + } + else pxw = h = s; + this.mkOvQds(cx, cy, -x+1, ox-pxw+w+wod, -oy, -h+oy+hod, pxw, h); + ox = x; + oy = y; + } + else + { + tt -= aa*((y<<1)-3); + st -= (aa<<1)*(--y); + } + } + this.mkDiv(cx-a, cy-oy, s, (oy<<1)+hod); + this.mkDiv(cx+a+wod-s+1, cy-oy, s, (oy<<1)+hod); + } + + else + { + var _a = (width-((s-1)<<1))>>1, + _b = (height-((s-1)<<1))>>1, + _x = 0, _y = _b, + _aa = (_a*_a)<<1, _bb = (_b*_b)<<1, + _st = (_aa>>1)*(1-(_b<<1)) + _bb, + _tt = (_bb>>1) - _aa*((_b<<1)-1), + + pxl = new Array(), + pxt = new Array(), + _pxb = new Array(); + pxl[0] = 0; + pxt[0] = b; + _pxb[0] = _b-1; + while (y > 0) + { + if (st < 0) + { + st += bb*((x<<1)+3); + tt += (bb<<1)*(++x); + pxl[pxl.length] = x; + pxt[pxt.length] = y; + } + else if (tt < 0) + { + st += bb*((x<<1)+3) - (aa<<1)*(y-1); + tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3); + pxl[pxl.length] = x; + pxt[pxt.length] = y; + } + else + { + tt -= aa*((y<<1)-3); + st -= (aa<<1)*(--y); + } + + if (_y > 0) + { + if (_st < 0) + { + _st += _bb*((_x<<1)+3); + _tt += (_bb<<1)*(++_x); + _pxb[_pxb.length] = _y-1; + } + else if (_tt < 0) + { + _st += _bb*((_x<<1)+3) - (_aa<<1)*(_y-1); + _tt += (_bb<<1)*(++_x) - _aa*(((_y--)<<1)-3); + _pxb[_pxb.length] = _y-1; + } + else + { + _tt -= _aa*((_y<<1)-3); + _st -= (_aa<<1)*(--_y); + _pxb[_pxb.length-1]--; + } + } + } + + var ox = 0, oy = b, + _oy = _pxb[0], + l = pxl.length, + w, h; + for (var i = 0; i < l; i++) + { + if (typeof _pxb[i] != "undefined") + { + if (_pxb[i] < _oy || pxt[i] < oy) + { + x = pxl[i]; + this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, _oy+hod, x-ox, oy-_oy); + ox = x; + oy = pxt[i]; + _oy = _pxb[i]; + } + } + else + { + x = pxl[i]; + this.mkDiv(cx-x+1, cy-oy, 1, (oy<<1)+hod); + this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); + ox = x; + oy = pxt[i]; + } + } + this.mkDiv(cx-a, cy-oy, 1, (oy<<1)+hod); + this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); + } +} + + +function mkOvDott(left, top, width, height) +{ + var a = width>>1, b = height>>1, + wod = width&1, hod = height&1, + cx = left+a, cy = top+b, + x = 0, y = b, + aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1, + st = (aa2>>1)*(1-(b<<1)) + bb, + tt = (bb>>1) - aa2*((b<<1)-1), + drw = true; + while (y > 0) + { + if (st < 0) + { + st += bb*((x<<1)+3); + tt += (bb<<1)*(++x); + } + else if (tt < 0) + { + st += bb*((x<<1)+3) - aa4*(y-1); + tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-3); + } + else + { + tt -= aa2*((y<<1)-3); + st -= aa4*(--y); + } + if (drw) this.mkOvQds(cx, cy, -x, x+wod, -y, y+hod, 1, 1); + drw = !drw; + } +} + + +function mkRect(x, y, w, h) +{ + var s = this.stroke; + this.mkDiv(x, y, w, s); + this.mkDiv(x+w, y, s, h); + this.mkDiv(x, y+h, w+s, s); + this.mkDiv(x, y+s, s, h-s); +} + + +function mkRectDott(x, y, w, h) +{ + this.drawLine(x, y, x+w, y); + this.drawLine(x+w, y, x+w, y+h); + this.drawLine(x, y+h, x+w, y+h); + this.drawLine(x, y, x, y+h); +} + + +function jsgFont() +{ + this.PLAIN = 'font-weight:normal;'; + this.BOLD = 'font-weight:bold;'; + this.ITALIC = 'font-style:italic;'; + this.ITALIC_BOLD = this.ITALIC + this.BOLD; + this.BOLD_ITALIC = this.ITALIC_BOLD; +} +var Font = new jsgFont(); + + +function jsgStroke() +{ + this.DOTTED = -1; +} +var Stroke = new jsgStroke(); + + +function jsGraphics(id, wnd) +{ + this.setColor = new Function('arg', 'this.color = arg.toLowerCase();'); + + this.setStroke = function(x) + { + this.stroke = x; + if (!(x+1)) + { + this.drawLine = mkLinDott; + this.mkOv = mkOvDott; + this.drawRect = mkRectDott; + } + else if (x-1 > 0) + { + this.drawLine = mkLin2D; + this.mkOv = mkOv2D; + this.drawRect = mkRect; + } + else + { + this.drawLine = mkLin; + this.mkOv = mkOv; + this.drawRect = mkRect; + } + }; + + + this.setPrintable = function(arg) + { + this.printable = arg; + if (jg_fast) + { + this.mkDiv = mkDivIe; + this.htmRpc = arg? htmPrtRpc : htmRpc; + } + else this.mkDiv = jg_n4? mkLyr : arg? mkDivPrt : mkDiv; + }; + + + this.setFont = function(fam, sz, sty) + { + this.ftFam = fam; + this.ftSz = sz; + this.ftSty = sty || Font.PLAIN; + }; + + + this.drawPolyline = this.drawPolyLine = function(x, y, s) + { + for (var i=0 ; i>1, b = (h -= 1)>>1, + wod = (w&1)+1, hod = (h&1)+1, + cx = left+a, cy = top+b, + x = 0, y = b, + ox = 0, oy = b, + aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1, + st = (aa2>>1)*(1-(b<<1)) + bb, + tt = (bb>>1) - aa2*((b<<1)-1), + pxl, dw, dh; + if (w+1) while (y > 0) + { + if (st < 0) + { + st += bb*((x<<1)+3); + tt += (bb<<1)*(++x); + } + else if (tt < 0) + { + st += bb*((x<<1)+3) - aa4*(y-1); + pxl = cx-x; + dw = (x<<1)+wod; + tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-3); + dh = oy-y; + this.mkDiv(pxl, cy-oy, dw, dh); + this.mkDiv(pxl, cy+y+hod, dw, dh); + ox = x; + oy = y; + } + else + { + tt -= aa2*((y<<1)-3); + st -= aa4*(--y); + } + } + this.mkDiv(cx-a, cy-oy, w+1, (oy<<1)+hod); + }; + + +/* fillPolygon method, implemented by Matthieu Haller. +This javascript function is an adaptation of the gdImageFilledPolygon for Walter Zorn lib. +C source of GD 1.8.4 found at http://www.boutell.com/gd/ + +THANKS to Kirsten Schulz for the polygon fixes! + +The intersection finding technique of this code could be improved +by remembering the previous intertersection, and by using the slope. +That could help to adjust intersections to produce a nice +interior_extrema. */ + this.fillPolygon = function(array_x, array_y) + { + var i; + var y; + var miny, maxy; + var x1, y1; + var x2, y2; + var ind1, ind2; + var ints; + + var n = array_x.length; + + if (!n) return; + + + miny = array_y[0]; + maxy = array_y[0]; + for (i = 1; i < n; i++) + { + if (array_y[i] < miny) + miny = array_y[i]; + + if (array_y[i] > maxy) + maxy = array_y[i]; + } + for (y = miny; y <= maxy; y++) + { + var polyInts = new Array(); + ints = 0; + for (i = 0; i < n; i++) + { + if (!i) + { + ind1 = n-1; + ind2 = 0; + } + else + { + ind1 = i-1; + ind2 = i; + } + y1 = array_y[ind1]; + y2 = array_y[ind2]; + if (y1 < y2) + { + x1 = array_x[ind1]; + x2 = array_x[ind2]; + } + else if (y1 > y2) + { + y2 = array_y[ind1]; + y1 = array_y[ind2]; + x2 = array_x[ind1]; + x1 = array_x[ind2]; + } + else continue; + + // modified 11. 2. 2004 Walter Zorn + if ((y >= y1) && (y < y2)) + polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1); + + else if ((y == maxy) && (y > y1) && (y <= y2)) + polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1); + } + polyInts.sort(integer_compare); + for (i = 0; i < ints; i+=2) + this.mkDiv(polyInts[i], y, polyInts[i+1]-polyInts[i]+1, 1); + } + }; + + + this.drawString = function(txt, x, y) + { + this.htm += '
    '+ + txt + + '<\/div>'; + }; + + +/* drawStringRect() added by Rick Blommers. +Allows to specify the size of the text rectangle and to align the +text both horizontally (e.g. right) and vertically within that rectangle */ + this.drawStringRect = function(txt, x, y, width, halign) + { + this.htm += '
    '+ + txt + + '<\/div>'; + }; + + + this.drawImage = function(imgSrc, x, y, w, h, a) + { + this.htm += '
    '+ + ''+ + '<\/div>'; + }; + + + this.clear = function() + { + this.htm = ""; + if (this.cnv) this.cnv.innerHTML = this.defhtm; + }; + + + this.mkOvQds = function(cx, cy, xl, xr, yt, yb, w, h) + { + this.mkDiv(xr+cx, yt+cy, w, h); + this.mkDiv(xr+cx, yb+cy, w, h); + this.mkDiv(xl+cx, yb+cy, w, h); + this.mkDiv(xl+cx, yt+cy, w, h); + }; + + this.setStroke(1); + this.setFont('verdana,geneva,helvetica,sans-serif', String.fromCharCode(0x31, 0x32, 0x70, 0x78), Font.PLAIN); + this.color = '#000000'; + this.htm = ''; + this.wnd = wnd || window; + + if (!(jg_ie || jg_dom || jg_ihtm)) chkDHTM(); + if (typeof id != 'string' || !id) this.paint = pntDoc; + else + { + this.cnv = document.all? (this.wnd.document.all[id] || null) + : document.getElementById? (this.wnd.document.getElementById(id) || null) + : null; + this.defhtm = (this.cnv && this.cnv.innerHTML)? this.cnv.innerHTML : ''; + this.paint = jg_dom? pntCnvDom : jg_ie? pntCnvIe : jg_ihtm? pntCnvIhtm : pntCnv; + } + + this.setPrintable(false); +} + + + +function integer_compare(x,y) +{ + return (x < y) ? -1 : ((x > y)*1); +} + diff --git a/license/gpl_licence.txt b/license/gpl_licence.txt new file mode 100644 index 000000000..a8ab76ef5 --- /dev/null +++ b/license/gpl_licence.txt @@ -0,0 +1,280 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/links/add.php b/links/add.php new file mode 100644 index 000000000..9f2101753 --- /dev/null +++ b/links/add.php @@ -0,0 +1,139 @@ +addInfo('NOT_ENROLLED'); + require(AT_INCLUDE_PATH.'header.inc.php'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +require (AT_INCLUDE_PATH.'lib/links.inc.php'); + +if (!manage_links()) { + $_pages['links/index.php']['children'] = array('links/add.php'); +} + +if (!isset($_POST['url'])) { + $_POST['url'] = "http://"; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; +} else if (isset($_POST['add_link']) && isset($_POST['submit'])) { + $missing_fields = array(); + if ($_POST['cat'] == 0 || $_POST['cat'] == '') { + $missing_fields[] = _AT('category'); + } + if (trim($_POST['title']) == '') { + $missing_fields[] = _AT('title'); + } + if (trim($_POST['url']) == '' || $_POST['url'] == 'http://') { + $missing_fields[] = _AT('url'); + } + if (trim($_POST['description']) == '') { + $missing_fields[] = _AT('description'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + + if (!$msg->containsErrors() && isset($_POST['submit'])) { + + $_POST['cat'] = intval($_POST['cat']); + $_POST['title'] = $addslashes($_POST['title']); + $_POST['url'] == $addslashes($_POST['url']); + $_POST['description'] = $addslashes($_POST['description']); + + $name = get_display_name($_SESSION['member_id']); + $email = ''; + + $approved = 0; //not approved for student submissions + + $sql = "INSERT INTO ".TABLE_PREFIX."links VALUES (NULL, $_POST[cat], '$_POST[url]', '$_POST[title]', '$_POST[description]', $approved, '$name', '$email', NOW(), 0)"; + mysql_query($sql, $db); + + $msg->addFeedback('LINK_ADDED'); + + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; + } else { + $_POST['title'] = stripslashes($_POST['title']); + $_POST['url'] == stripslashes($_POST['url']); + $_POST['description'] = stripslashes($_POST['description']); + } +} +$onload = 'document.form.title.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$categories = get_link_categories(); + +if (empty($categories)) { + $msg->addInfo('NO_LINK_CATEGORIES'); + $msg->printInfos(); + require(AT_INCLUDE_PATH.'footer.inc.php'); +} else { +?> +
    + + +
    +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/links/index.php b/links/index.php new file mode 100644 index 000000000..53f6d2e7b --- /dev/null +++ b/links/index.php @@ -0,0 +1,194 @@ + 'desc', 'desc' => 'asc'); +$cols = array('LinkName' => 1, 'name' => 1, 'description' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'LinkName'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'LinkName'; +} else { + // no order set + $order = 'asc'; + $col = 'LinkName'; +} + +//search +if ($_GET['search']) { + $_GET['search'] = trim($_GET['search']); + $page_string .= SEP.'search='.urlencode($_GET['search']); + $search = $addslashes($_GET['search']); + $search = str_replace(array('%','_'), array('\%', '\_'), $search); + $search = '%'.$search.'%'; + $search = "((LinkName LIKE '$search') OR (description LIKE '$search'))"; +} else { + $search = '1'; +} + +//view links of a child category +if ($_GET['cat_parent_id']) { + $children = get_child_categories ($_GET['cat_parent_id'], $categories); + $cat_sql = "C.cat_id IN ($children $_GET[cat_parent_id])"; + $parent_id = intval($_GET['cat_parent_id']); +} else { + $cat_sql = '1'; + $parent_id = 0; +} + +//get links +$tmp_groups = implode(',', $_SESSION['groups']); + +if (!empty($tmp_groups)) { + $sql = "SELECT * FROM ".TABLE_PREFIX."links L INNER JOIN ".TABLE_PREFIX."links_categories C USING (cat_id) WHERE ((owner_id=$_SESSION[course_id] AND owner_type=".LINK_CAT_COURSE.") OR (owner_id IN ($tmp_groups) AND owner_type=".LINK_CAT_GROUP.")) AND L.Approved=1 AND $search AND $cat_sql ORDER BY $col $order"; +} else { + $sql = "SELECT * FROM ".TABLE_PREFIX."links L INNER JOIN ".TABLE_PREFIX."links_categories C USING (cat_id) WHERE (owner_id=$_SESSION[course_id] AND owner_type=".LINK_CAT_COURSE.") AND L.Approved=1 AND $search AND $cat_sql ORDER BY $col $order"; +} +$result = mysql_query($sql, $db); +$num_results = mysql_num_rows($result); + +?> + 0 || isset($_GET['filter'])): ?> +
    + +
    +
    +

    +
    + +
    + +
    + + + +
    + +
    +
    + +
    + + +
    + + +
    +
    +
    + + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + \ No newline at end of file diff --git a/login.php b/login.php new file mode 100644 index 000000000..370a32add --- /dev/null +++ b/login.php @@ -0,0 +1,170 @@ +containsFeedbacks()) { + if (isset($_COOKIE['ATLogin'])) { + $cookie_login = $_COOKIE['ATLogin']; + } + if (isset($_COOKIE['ATPass'])) { + $cookie_pass = $_COOKIE['ATPass']; + } +} + +if (!isset($_SESSION['token']) || !$_SESSION['token']) { + $_SESSION['token'] = sha1(mt_rand()); +} + +if (isset($cookie_login, $cookie_pass) && !isset($_POST['submit'])) { + /* auto login */ + $this_login = $cookie_login; + $this_password = $cookie_pass; + $auto_login = 1; + $used_cookie = true; +} else if (isset($_POST['submit'])) { + /* form post login */ + + if (strlen($_POST['form_password_hidden']) < 40) { //
    +
    + 0) && $this->side_menu): ?> +
    + +
    + + + + \ No newline at end of file diff --git a/themes/blumin/include/header.tmpl.php b/themes/blumin/include/header.tmpl.php new file mode 100644 index 000000000..7274176e6 --- /dev/null +++ b/themes/blumin/include/header.tmpl.php @@ -0,0 +1,228 @@ +lang_code the ISO language code + * SITE_NAME the site name from the config file + * $this->page_title the name of this page to use in the + * $this->lang_charset the ISO language character set + * $this->content_base_href the <base href> to use for this page + * $this->base_path the absolute path to this atutor installation + * $this->rtl_css if set, the path to the RTL style sheet + * $this->banner_style -deprecated- + * $this->theme the directory name of the current theme + * $this->base_href the full url to this atutor installation + * $this->onload javascript onload() calls + * $this->img the absolute path to this theme's images/ directory + * $this->sequence_links associative array of 'previous', 'next', and/or 'resume' links + * $this->path associative array of path to this page: aka bread crumbs + * $this->rel_url the relative url from the installation root to this page + * $this->nav_courses associative array of this user's enrolled courses + * $this->section_title the title of this section (course, public, admin, my start page) + * $this->top_level_pages associative array of the top level navigation + * $this->current_top_level_page the full path to the current top level page with file name + * $this->sub_level_pages associate array of sub level navigation + * $this->back_to_page if set, the path and file name to the part of this page (if parent is not a top level nav) + * $this->current_sub_level_page the full path to the current sub level page with file name + * $this->guide the full path and file name to the guide page + * ====================================== + * top_level_pages array(array('url', 'title')) the top level pages. ATutor default creates tabs. + * section_title string the name of the current section. either name of the course, administration, my start page, etc. + * page_title string the title of the current page. + * path array(array('url', 'title')) the path to the current page. + * back_to_page array('url', 'title') the link back to the part of the current page, if needed. + * current_top_level_page string full url to the current top level page in "top_leve_pages" + * current_sub_level_page string full url to the current sub level page in the "sub_level_pages" + * sub_level_pages array(array('url', 'title')) the sub level pages. + */ + +// will have to be moved to the header.inc.php +global $system_courses, $_custom_css; + +?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html lang="<?php echo $this->lang_code; ?>"> +<head> + <title><?php echo SITE_NAME; ?> : <?php echo $this->page_title; ?> + + + + + + + + + rtl_css; ?> + + + + + custom_css; ?> + + + + + +
    <?php echo _AT('goto_content'); ?> ALT+c <?php echo _AT('goto_menu'); ?> ALT+m

    section_title; ?> 0) && ($_SESSION['enroll'] == AT_ENROLL_NO)) : ?> + - +

    +
    + + + +
    +
    + + +
    + + +
    + +   + +   + +
    + +sub_level_pages): ?> + + + + + + + + +
    +
    side_menu): ?> + style="margin-right:0px;width:99%;" + + > + + +
    + guide): ?> + page_title; ?> + + 0 && $system_courses[$_SESSION['course_id']]['side_menu']): ?> + + +
    + + + + +

    page_title; ?>

    + + +printAll(); ?> \ No newline at end of file diff --git a/themes/blumin/include/side_menu.tmpl.php b/themes/blumin/include/side_menu.tmpl.php new file mode 100644 index 000000000..48f1cf9d2 --- /dev/null +++ b/themes/blumin/include/side_menu.tmpl.php @@ -0,0 +1,8 @@ + + + 0) && $this->side_menu): ?> + side_menu as $dropdown_file): ?> + + +
     
    + diff --git a/themes/blumin/print.css b/themes/blumin/print.css new file mode 100644 index 000000000..48b2bc1c2 --- /dev/null +++ b/themes/blumin/print.css @@ -0,0 +1,13 @@ +body { + background-color: White; + font-family: Helvetica, arial, sans serif; + margin: 0px; + margin-top: 0px; + color: black; + border: 0px; +} + +div#side-menu, div#member-links, span#side-menushowlink, div#rightcolumn, div#suv-nav-logout, div#top-links, span#side-menuhidelink, div#sequence-links, select#jumpmenu, a#guide, div#gototop, input#jump-button, div#topnavlistcontainer, a#guide, div#breadcrumbs, div#jump-area, table.tabbed-table, div#sub-navigation, div#sequence-links, div#language, div#toc, fieldset#shortcuts { + display: none; +} + diff --git a/themes/blumin/readme.txt b/themes/blumin/readme.txt new file mode 100644 index 000000000..71cb1e0a7 --- /dev/null +++ b/themes/blumin/readme.txt @@ -0,0 +1,9 @@ + +Theme: Plone-like +Date: March 2005 + + +Installing: See section "Installing a New Theme" in the themes_readme.txt file located in docs/themes/. + +Licence: Falls under the GPL agreement. See http://www.gnu.org/copyleft/gpl.html. + \ No newline at end of file diff --git a/themes/blumin/screenshot.gif b/themes/blumin/screenshot.gif new file mode 100644 index 0000000000000000000000000000000000000000..bc1161c516c64040014e19946c938d599771a280 GIT binary patch literal 1393 zcmV-%1&;bhNk%w1VYvW)0J8u9ovWHdX?9U4Z1C{#si~<=O-;?s&6t>&y}iBZ>FI54 zZQtMDjI6r=007?S?EnA&A^8LV00000EC2ui0J#8u000F4@X1N5y*TU5yZ>M)j$~<` zXsWJk>%MR-&vb3yc&@WegY~zba46gvXTVFcMr`_yP}j0D#Z{x&)m5@(KC@s|x4JkK z8im7xqG%*0hK6A>Xec_}NBNvyhyO}nRDy9$a}oq{69;w^3k?K#f)s^Bhk%$5PDFG) z2m=oT2tA+=agh>d4W*-(8e4S@pP{3xnV6eH6Nv~Fqo{QU5|4?8jHMe}yuOgPfMZ{6 zZxjiQ5^abD4{52|k{8ky)pyQe&=XrriE9dxiCn_p7U`4aQ0H9rnqP4S)pKzcJaY9) zA3b|u@I44e&Dw)%1md70FlriyEet1&LzqQjB2>HonoTI6;6S_wX3Tt0CNd;Qjz<*6 znk9-91xAV_6gqiP-%L<7ZNa>!ZyzNm1PdXHMX(@-N<*3s&7p9Z88m7vY-HnRWl=p> z`%E26wyfE+Xw#})%eJlCw{YXiolCc_-Me`6>fOt?uiw9b0}E!$ps?Y?h!ZPb%($`R z#Tgz;o=my2}>s~$E zLT?lS)Y`tCd$)1Wzf-dao_6@_;>V+JPCkKp3Fc^>yAHq|x`XbUyXOWUp8Ij@wM~eZ zfW12f_w2b(fd3%4efBi8w}xJvKko1VeixwsZs?)ML3{YsH(!DaV!)hy3Pvb{eysT? z;C~lp*q?aD6?k2P4>njIb|bzAAA%CbK;dc@wm4va(!q8b2`Glh;EfU1Xkra3l4jv| z=3%H|c|j65BaJ7{2jPhAEy<*fB2F0NlpP+a9t|W)N#&NVd3c?ZF=Xk1WrlHSCU0b> zspguKo$2PAaK7|%vs_CYjcIxS;poS{ysH74Kz^SOFs_Lq&w(9Duu*NFuthCl@>#eiWrt7Y2 zeRYEXyqe&vuO1M~0kGwKp{y9iHk*O}u@{|yYz#g?`vW>sI2-M=MWD09vJ~jDPf_{^ zVD7XJoIAm}z^c2hxz`%h?YQ|gp-H`hh&xEN-OkHzzf4i~NDaEU)Wwy6g^I560qxYcjz$ zhnsWF8uQ%owH@1xa>_X?OhL;OOPp@SGMBt@!aqM9w9y_59W~V|KihM@Bb&o+JL^3FAAIY-JAiv@wc~aB?w<8-JnPU$pS$$VKX3i@q$PjX^3?zC zeD%b8&;0e^Bd_^r#8dD4`010czWea=cD`us8()0z-Q#b+{=@rT|LmjDo?T)W9RSiv zfOR3DZi;s&1kwd_5R9M%C+HX}RgNPLyr2;>s6icYu!A`GAP8+B!V%`jg!U*Q3RSd1 zXQ;4+E_fjfSs=q1s-T88L_z1!g{~aFV24NZ;e diff --git a/themes/blumin/theme_info.xml b/themes/blumin/theme_info.xml new file mode 100644 index 000000000..1672b7ddb --- /dev/null +++ b/themes/blumin/theme_info.xml @@ -0,0 +1,11 @@ + + + + + + blumin + 1.6 + 2006-04-21 + plone-like. + + diff --git a/themes/default/confirmmessage.tmpl.php b/themes/default/confirmmessage.tmpl.php new file mode 100644 index 000000000..17ffdcfe7 --- /dev/null +++ b/themes/default/confirmmessage.tmpl.php @@ -0,0 +1,32 @@ + + +
    +hidden_vars)): ?> + hidden_vars; ?> + + +
    +
    + item)) : ?> + item as $e) : ?> +

    + + +
    + +
    + + +
    +
    +
    \ No newline at end of file diff --git a/themes/default/content.tmpl.php b/themes/default/content.tmpl.php new file mode 100644 index 000000000..b5bcf1f1f --- /dev/null +++ b/themes/default/content.tmpl.php @@ -0,0 +1,32 @@ + + +shortcuts): ?> +
    +
      + shortcuts as $link): ?> +
    • + +
    +
    + + + +
    + body; ?> +
    + +
    + content_info; ?> +
    \ No newline at end of file diff --git a/themes/default/errormessage.tmpl.php b/themes/default/errormessage.tmpl.php new file mode 100644 index 000000000..bea7c6351 --- /dev/null +++ b/themes/default/errormessage.tmpl.php @@ -0,0 +1,21 @@ + +
    +

    + item)) : ?> +
      + item as $e) : ?> +
    • + +
    + +
    \ No newline at end of file diff --git a/themes/default/feedbackmessage.tmpl.php b/themes/default/feedbackmessage.tmpl.php new file mode 100644 index 000000000..a7214d0a2 --- /dev/null +++ b/themes/default/feedbackmessage.tmpl.php @@ -0,0 +1,20 @@ + +
    + item)) : ?> +
      + item as $e) : ?> +
    • + +
    + +
    \ No newline at end of file diff --git a/themes/default/forms.css b/themes/default/forms.css new file mode 100644 index 000000000..f7c921eec --- /dev/null +++ b/themes/default/forms.css @@ -0,0 +1,124 @@ +div.input-form { + width: 80%; + margin-left:auto; + margin-right:auto; + border: 1px solid #f0f0f0; + margin-bottom: 20px; +} + +div.input-form div.row h3 { + margin-left: 0px; +} + + +div.input-form div.row { + background-color: #fdfdfd; + padding:8px; +} + +div.input-form .footer { + border-top: 1px solid #f0f0f0; +} + +div.input-form p { + margin-left: 0px; +} + +div.input-form input { + cursor: pointer; +} +div.input-form textarea { + border: 1px solid #999; + width: 98%; + background-color: white; + padding: 2px; + margin-right: 2px; +} + +div.input-form textarea:focus { + border:1px solid blue; + background-color: white; + padding: 2px; +} + +div.input-form input[type=text], div.input-form input[type=password] { + border: 1px solid #999; + background-color: white; + padding: 2px; + max-width: 60%; +} + +div.input-form input:focus { + border: 1px solid blue; + padding: 2px +} + +div.input-form div.buttons { + text-align: right; + padding:8px; +} +div.input-form div.buttons input { + border: 1px solid #999; + background-color: white; + padding: 2px; + padding-left: 10px; + padding-right: 10px; + min-width: 100px; + margin-left: 5px; +} +div.input-form div.buttons input:hover { + background-color: #f5f5ff; + border: 1px solid blue; +} + + +/* editor tabs */ +table.etabbed-table { + background-color: white; +} +table.etabbed-table td#left-empty-tab { + background-color: transparent; + width: 15px; + border-bottom: 1px solid #9DAB9A; +} +table.etabbed-table td#right-empty-tab { + text-align: right; + background-color: transparent; + border-bottom: 1px solid #9DAB9A; + padding-right: 5px; +} + +table.etabbed-table td.tab-spacer { + background-color: transparent; + width: 5px; + border-bottom: 1px solid #9DAB9A; +} + +table.etabbed-table td.tab { + padding-top: 2px; + padding-bottom: 2px; + width: 110px; + background-color: white; + border-bottom: 1px solid #9DAB9A; + border-left: 1px solid #9DAB9A; + border-top: 1px solid #9DAB9A; + border-right: 1px solid #9DAB9A; + font-weight:normal; + text-align:center; +} + +table.etabbed-table td.selected { + padding-top: 2px; + padding-bottom: 2px; + width: 110px; + background-color: #fdfdfd; + border-left: 1px solid #9DAB9A; + border-top: 1px solid #9DAB9A; + border-right: 1px solid #9DAB9A; + font-weight:bold; + text-align:center; +} + +table.etabbed-table td.tab:hover { + background-color: #fdfdfd; +} \ No newline at end of file diff --git a/themes/default/ie_styles.css b/themes/default/ie_styles.css new file mode 100644 index 000000000..7200f83c4 --- /dev/null +++ b/themes/default/ie_styles.css @@ -0,0 +1,19 @@ +/* IE specific styles */ + +ul#topnavlist { + zoom:100%; + margin:0px; +} + +ul#topnavlist li { + zoom:100%; + padding:0.3em; + padding-bottom:0.3em; + margin:0px; + margin-bottom:-1px; +} + +label { + zoom:100%; + margin:0px; +} \ No newline at end of file diff --git a/themes/default/images/arrow_ltr.gif b/themes/default/images/arrow_ltr.gif new file mode 100644 index 0000000000000000000000000000000000000000..90da978cdef95e4467e1ff4bbd0e8435211621d1 GIT binary patch literal 88 zcmZ?wbhEHbRAUfhXkY+=|Ns9h{$yblVPIs?0r5dH3{3hx{VPwu nm4HXrm6WuMs!j86A6jg4`COLwPS>eQ*@o3ftXK6-z8fT z#M|$&Sa7CHYnM_(t7k!*L7%Jh7fUJbg&TGpR_#0R=u4WVkgvms9||Fw!mJ;6s4q#} z{xN_@fmyIFm(xvNNu0~y$JMDzq0c8yh_S7oou6T71dIDkNtXjvp3Q5%neOmr%lrrJ=^sz;KJO@aHC*?c z701`R7hkQLek;%8$@J>)Pj23Ci2wfR`n|fC-(TLIF=oII6o0aS73hFSkev*y=?bcS zDVkv!tHPeV+P04C_zR!ghX49XywvuxcwP*iAY;q^@`CjQ4qK*^7mOze*s^e5nmk2p zV{4{>^bD?zO`1ZpXUJ`AUn!V9L!x1i+yR51{~Oep3>lkR+Vomgn>#zSyHtAm8>dWF HWUvMR))`rY literal 0 HcmV?d00001 diff --git a/themes/default/images/guide.gif b/themes/default/images/guide.gif new file mode 100644 index 0000000000000000000000000000000000000000..124c24a8e17b968965ab90ab911aa5342f73d42d GIT binary patch literal 122 zcmZ?wbhEHb(2!KRGL&N|7U=B!N6pV(zNC^SOpDc_F49pBVAPBOe48~J%Xq^NHtvXmm6j9Me(CTir&_TM|p|)nSiXHj|Iut<%7a?~PJOqV; zPzAx&R>9+PlL&f47eVLZUq z!Xh+6YAu<2xP@!D6bp*xVHT!gQl#ir54BJY6*w{);vp8IA#8;;V339-w5YKdY@oqn zSV~akgt@D`ls?vynYpQ(lw4R)RC85VK|Q4CbukxpK^}fUlWFWgKO|5HYrr54OIqQ< zVz7Y*OUk(_lM`wtWhDAoOQvcn_=;RuP&82!e8g!CfEVo;jasb44`?!t9dJT03SkWx zq?v>kJXj1i&{8L=Zp!3@a50QTA8W}}>T#5>&AqGGoUm+eu2Q{?(dByMU5z$&)Daqm zh18I)n>0KMxPj(5a3#z`6RQr)uN|Fzd|_qt-2KkNT6cN?Y^FyczS;B_WbVni@xuD_4U!inXz{dzJC~* h?Y{ZBb#MH{v9nj6v}ax(em=D}^>+Qs`p}SE{Rd!Jm6iYi literal 0 HcmV?d00001 diff --git a/themes/default/images/pen.gif b/themes/default/images/pen.gif new file mode 100644 index 0000000000000000000000000000000000000000..bff8964cc652344457d3f4c912a68c9532532572 GIT binary patch literal 84 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

    h?i{w!RYgH80C_Q>kCV77ce>aR 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 literal 0 HcmV?d00001 diff --git a/themes/default/images/resume.gif b/themes/default/images/resume.gif new file mode 100644 index 0000000000000000000000000000000000000000..b80d5eb10ca57f9ec9229458a86b1d35b466d092 GIT binary patch literal 919 zcmcJOy-Uz>5XP^NG9n0~7ttVTvNxzBFlvZiEt@iEsKDMX95e_Cnx!J4r9e1K(3YT} z9Hf^qg~+(3hC*5-92%Xf>H6I7f9SU3?w)&|=f2;Qr%rSqxZEaf@>?V;BGWT1Q!}Nq zhz!rL49$=#dZc^0rE9uWuSJ@tS(>IvjcTNNs-U@=U$)Se2D zun3KiT1)00Zs8g(#e$-Fn1yMW6e)VuLoHN81&)k{c!-5)2wPzd7^GndEov+V8)&c? zmJ(DsVeaZKrH{2_W^U>xB^MSH)m+t8P!B13UCc#YkcS`8WEwlr4+#{)8Zb!1l2&-I z7;K=yl5(!fsz9JVE6iw6wA8{H3;6*z|qZTXi1DZ@@2b>U$LRbR^ zX(pis4;F(BwA6{Jn=&~eTnr=8$67L#dK~3zbMGoPCoG$rt5k1ebh+MmSEG#`b%aJ? zAvL7yCJm1QZlHM%TnY2g#H!6#C$?RBxOZfB&&{c86Z5xUe4YIGb9s4rVPSy>O2dDO z&c7`yL>6UN;n$y#)?t}j)6p|M`C+7W!;Xuerl;oauit+9+`HM)jYErX27ZjKdwO)| z!pz{>w<|C741Pbfuchm3|NP^w^Y=P_J!(JWyH~&JesHU^cYObyD}8_Zo_~3A?8d6& m<1|9{1wEQ|~cj0`#qKmd|qU=rkM>MYpxh9^7okX7up Kkgp*O4Aua#=@0M# literal 0 HcmV?d00001 diff --git a/themes/default/images/sort.gif b/themes/default/images/sort.gif new file mode 100644 index 0000000000000000000000000000000000000000..097d27e6db05c09ad1cb596d38729b8b0813f5f5 GIT binary patch literal 64 zcmZ?wbhEHbGKMbG0F}(f2@Z>qe!zT=<&M+K5$*_Ab!`AH#v*s{N zpUF^L$539uP*}u}ox_lk$&i}Hkd(|28O7l4!Qkk`U}w)@YQ|t>%%G#oAS%kh&(FZa z!@$YOz|72W>C&Y$XU?2FdGf%41AF)GUAlDXoH=u*O`A4(^5ov$-jU2?qN1Ff zoaE$WCnqN}Gc#jjoEfOLTT#K0DFU`Bz5j#R%#;;TtsLe{K( z!5*_1R8*gE9`j}3TmNC@4}%%Z4F?`2REPxfm00O^^mOZV$rv11GeNRAQ_4e=mw|91@48|iURz*0(ZXN34P!uYGV(FqSR6A9rMJKTifewP8;NWs7_W@K22A7Ib zsv?S=+)i{1DwGc0ly2R$U=ft~%l|VNINr-8dGb6@-a9uleR_PMBOTe5if;RK+oMa? zt?2jr$?qxI9z6L*@Z0|j6)_PPiP}V_Dr%xG8lqW6Q!x{Bu@KAZbrm;p7Z35Q(NGDK zaEXv8rjjaYk}et0F5rR&i($I6_EeavtA=XUS~4>=R|~Z)78KpoT|LyZNYNXn;ToZl zaAZ`|G+i?^*$QjGAPq}sQDZUKK!e3_mY~WBHw&{YeXJ#OHxKhHxv-!ZZV?uVdPvc0 z>6T%MJp6zr)7XK2NT3kbfI%9Tw8DeMU;_aDK- zgbdu0JTP?r?ed5F1N&Bv^hUm)x%hPQ$NR0$((2;+$&4XXwT>bcYXku(wCjJ2vpp+&6 literal 0 HcmV?d00001 diff --git a/themes/default/include/box.tmpl.php b/themes/default/include/box.tmpl.php new file mode 100644 index 000000000..fb049c441 --- /dev/null +++ b/themes/default/include/box.tmpl.php @@ -0,0 +1,7 @@ + + +
    +

    title; ?>

    +
    + dropdown_contents; ?> +
    \ No newline at end of file diff --git a/themes/default/include/fm_footer.tmpl.php b/themes/default/include/fm_footer.tmpl.php new file mode 100644 index 000000000..d733a1ffd --- /dev/null +++ b/themes/default/include/fm_footer.tmpl.php @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/themes/default/include/fm_header.tmpl.php b/themes/default/include/fm_header.tmpl.php new file mode 100644 index 000000000..840ce20aa --- /dev/null +++ b/themes/default/include/fm_header.tmpl.php @@ -0,0 +1,41 @@ + + + + <?php echo SITE_NAME; ?> : <?php echo $this->page_title; ?> + + + + + + + + rtl_css; ?> + + + + + + + +
    + +printAll(); ?> \ No newline at end of file diff --git a/themes/default/include/footer.tmpl.php b/themes/default/include/footer.tmpl.php new file mode 100644 index 000000000..e8c99a02f --- /dev/null +++ b/themes/default/include/footer.tmpl.php @@ -0,0 +1,46 @@ + + + 0): ?> + +
    +
    + +
    + + + + + 0) && $this->side_menu): ?> + + + side_menu as $dropdown_file): ?> + + + + + + + + +

    + + +
    + + + + + \ No newline at end of file diff --git a/themes/default/include/header.tmpl.php b/themes/default/include/header.tmpl.php new file mode 100644 index 000000000..2e2e492b8 --- /dev/null +++ b/themes/default/include/header.tmpl.php @@ -0,0 +1,330 @@ +lang_code the ISO language code + * SITE_NAME the site name from the config file + * $this->page_title the name of this page to use in the + * $this->lang_charset the ISO language character set + * $this->content_base_href the <base href> to use for this page + * $this->base_path the absolute path to this atutor installation + * $this->rtl_css if set, the path to the RTL style sheet + * $this->banner_style -deprecated- + * $this->theme the directory name of the current theme + * $this->base_href the full url to this atutor installation + * $this->onload javascript onload() calls + * $this->img the absolute path to this theme's images/ directory + * $this->sequence_links associative array of 'previous', 'next', and/or 'resume' links + * $this->path associative array of path to this page: aka bread crumbs + * $this->rel_url the relative url from the installation root to this page + * $this->nav_courses associative array of this user's enrolled courses + * $this->section_title the title of this section (course, public, admin, my start page) + * $this->top_level_pages associative array of the top level navigation + * $this->current_top_level_page the full path to the current top level page with file name + * $this->sub_level_pages associate array of sub level navigation + * $this->back_to_page if set, the path and file name to the part of this page (if parent is not a top level nav) + * $this->current_sub_level_page the full path to the current sub level page with file name + * $this->guide the full path and file name to the guide page + * ====================================== + * top_level_pages array(array('url', 'title')) the top level pages. ATutor default creates tabs. + * section_title string the name of the current section. either name of the course, administration, my start page, etc. + * page_title string the title of the current page. + * path array(array('url', 'title')) the path to the current page. + * back_to_page array('url', 'title') the link back to the part of the current page, if needed. + * current_top_level_page string full url to the current top level page in "top_leve_pages" + * current_sub_level_page string full url to the current sub level page in the "sub_level_pages" + * sub_level_pages array(array('url', 'title')) the sub level pages. + */ + +// will have to be moved to the header.inc.php +global $system_courses, $_custom_css; + +?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html lang="<?php echo $this->lang_code; ?>"> +<head> + <title><?php echo SITE_NAME; ?> : <?php echo $this->page_title; ?> + + + + + + + + + rtl_css; ?> + + + + + custom_css; ?> + + + + + + +
    + + + +
    + + + + +
    + + +
    + + + +
    + + '.stripslashes(SITE_NAME).''; + else: + echo '
    '; + endif; ?> +

    section_title; ?> + 0) && ($_SESSION['enroll'] == AT_ENROLL_NO)) : ?> + - +

    + +
    + + +
    +
    + + +
    current_date; ?>
    +sub_level_pages): ?> + + + + + + + + 0): ?> + + 0) && $this->side_menu): ?> + + + + + + +
    + + + + + +
    + guide): ?> + page_title; ?> + + 0 && $system_courses[$_SESSION['course_id']]['side_menu']): ?> + + +
    + + + +

    page_title; ?>

    + + +printAll(); ?> diff --git a/themes/default/index.tmpl.php b/themes/default/index.tmpl.php new file mode 100644 index 000000000..28ff52774 --- /dev/null +++ b/themes/default/index.tmpl.php @@ -0,0 +1,45 @@ + + +banner): ?>banner; ?> + +
    + +
    + +announcements): ?> +

    + announcements as $item): ?> +
    +

    +

     

    +
    + + + num_pages > 1): ?> + : | + num_pages; $i++): ?> + current_page): ?> + + + + + | + + + diff --git a/themes/default/infomessage.tmpl.php b/themes/default/infomessage.tmpl.php new file mode 100644 index 000000000..cea188b25 --- /dev/null +++ b/themes/default/infomessage.tmpl.php @@ -0,0 +1,18 @@ + + +
    + item)) : ?> +
      + item as $i) : ?> +
    • + +
    + +
    \ No newline at end of file diff --git a/themes/default/login.tmpl.php b/themes/default/login.tmpl.php new file mode 100644 index 000000000..21382b29a --- /dev/null +++ b/themes/default/login.tmpl.php @@ -0,0 +1,61 @@ + + + + + + +
    +
    +
    + + + + +

    +

    +
    + + +
    +

    title; ?>

    +
    + + +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +

    +

    + + +

    + +
    + +
    + +
    +
    +
    +
    + \ No newline at end of file diff --git a/themes/default/password_change.tmpl.php b/themes/default/password_change.tmpl.php new file mode 100644 index 000000000..ca96846ab --- /dev/null +++ b/themes/default/password_change.tmpl.php @@ -0,0 +1,32 @@ + + +
    + + + + + +
    +
    + +
    + +
    +
    *

    +
    + ·
    + ·
    +
    + +
    +
    *

    + +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/themes/default/password_reminder.tmpl.php b/themes/default/password_reminder.tmpl.php new file mode 100644 index 000000000..fcb79cf40 --- /dev/null +++ b/themes/default/password_reminder.tmpl.php @@ -0,0 +1,22 @@ + + +
    + + +
    +
    + +
    + +
    +
    *

    + +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/themes/default/password_reminder_feedback.tmpl.php b/themes/default/password_reminder_feedback.tmpl.php new file mode 100644 index 000000000..39ead0e7a --- /dev/null +++ b/themes/default/password_reminder_feedback.tmpl.php @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/themes/default/print.css b/themes/default/print.css new file mode 100644 index 000000000..cbecd5ccc --- /dev/null +++ b/themes/default/print.css @@ -0,0 +1,13 @@ +body { + background-color: White; + font-family: Helvetica, arial, sans serif; + margin: 0px; + margin-top: 0px; + color: black; + border: 0px; +} + +div#side-menu, div#member-links, span#side-menushowlink, span#side-menuhidelink, div#sequence-links, select#jumpmenu, a#guide, div#gototop, input#jump-button, div#topnavlistcontainer, a#guide, div#breadcrumbs, div#jump-area, table.tabbed-table, div#sub-navigation, div#sequence-links, div#language, div#toc, fieldset#shortcuts { + display: none; +} + diff --git a/themes/default/profile.tmpl.php b/themes/default/profile.tmpl.php new file mode 100644 index 000000000..5ec9f5336 --- /dev/null +++ b/themes/default/profile.tmpl.php @@ -0,0 +1,65 @@ + +
    +
    +

    + +
    +
    +
    + row['private_email']): ?> + + + row['email']; ?> + +
    + +
    +
    + row['website']) { + echo ''.AT_print($this->row['website'], 'members.website').''; + } else { + echo '--'; + } ?> +
    + +
    +
    + row['phone']) { + echo $this->row['phone']; + } else { + echo '--'; + } + ?> + + +
    +
    status; ?>
    + + getModule('_standard/profile_pictures'); + if ($mod->isEnabled() === TRUE): ?> +
    +
    row['member_id'])): ?> + row['member_id']); ?> + + + +
    + +
    +
    +
    +
    diff --git a/themes/default/readme.txt b/themes/default/readme.txt new file mode 100644 index 000000000..88e88efe3 --- /dev/null +++ b/themes/default/readme.txt @@ -0,0 +1,6 @@ + +Theme: ATutor Default +Date: May 2005 + +Licence: Falls under the GPL agreement. See http://www.gnu.org/copyleft/gpl.html. + \ No newline at end of file diff --git a/themes/default/registration.tmpl.php b/themes/default/registration.tmpl.php new file mode 100644 index 000000000..83329769d --- /dev/null +++ b/themes/default/registration.tmpl.php @@ -0,0 +1,185 @@ + + +
    + + +
    + + +
    +

    +
    + +
    +
    *

    +
    +
    + +
    +
    *

    +
    +
    + + +
    +

    +
    + +
    +
    *

    + + + + + +
    + ·
    + ·
    + +
    + + +
    +
    *

    +
    + ·
    + ·
    +
    + +
    +
    *

    + +
    + + +
    +
    *

    + + /> +
    + +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    *

    + +
    + + + +
    +
    *

    + + /> + + /> + + + /> + + /> + + +
    + + +
    +

    +
    + + getModule('_standard/profile_pictures'); + if (admin_authenticate(AT_ADMIN_PRIV_USERS, TRUE) && $_POST['member_id'] && $mod->isEnabled() === TRUE): ?> +
    +
    + + + + + + +
    + + + + +
    +
    +
    +
    +
    + /> +
    + + + +
    +
    + +
    + +
    +
    + /> /> /> +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/themes/default/rtl.css b/themes/default/rtl.css new file mode 100644 index 000000000..b95ecf0ff --- /dev/null +++ b/themes/default/rtl.css @@ -0,0 +1,14 @@ +/* for right to left languages */ +html, body { + direction: rtl; +} + +/* required for mozilla browsers*/ +.img-size-tree { + vertical-align: middle; + margin-top: 0px; + height:1.45em; + width:1.45em; + text-align: right.; + float: right; +} \ No newline at end of file diff --git a/themes/default/screenshot.gif b/themes/default/screenshot.gif new file mode 100644 index 0000000000000000000000000000000000000000..8273db65fc46623b99b63c1ad43fdc3c1273f007 GIT binary patch literal 8496 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 literal 0 HcmV?d00001 diff --git a/themes/default/styles.css b/themes/default/styles.css new file mode 100644 index 000000000..818c4346a --- /dev/null +++ b/themes/default/styles.css @@ -0,0 +1,1285 @@ +/* main body attributes */ +body { + font-family: Helevetica, Arial, sans-serif; + margin-top: 0px; + margin-left: 0px; + margin-right: 0px; + /* max-width: 760px; */ + margin-bottom: 0px; + font-size: small; + background-color: white; + /*border-right: 1px solid #788CB3;*/ +} + +html,body { + height: 100%; +} + +/* heading attributes */ +h1, h2, h3, h4, h5, h6 { + font-family: trebuchet ms, Arial, sans-serif; + margin-bottom: 0px; + margin-top: 0px; + margin-left: 5px; + margin-right: 0px; + color: #384F89; /* #152065; #D15600; */ +} + +/* paragraph attributes */ +p { + font-family: Helevetica, Arial, sans-serif; + margin-bottom: 10px; + margin-top: 0px; + margin-left: 5px; + margin-right: 0px; +} + + +/* for filemanager */ +li.folders { + list-style: disc url(../../images/folder.gif) outside; + font-family: Helevetica, Arial, sans-serif; + margin-bottom: 0px; + margin-top: 0px; + margin-right: 0px; +} + +/* link attributes */ +a:link { + font-family: Helevetica, Arial, sans-serif; + color: #384F89; + text-decoration: underline; +} +a:visited { + font-family: Helevetica, Arial, sans-serif; + color: #384F89; + text-decoration: underline; +} +a:hover { + font-family: Helevetica, Arial, sans-serif; + color: black; + text-decoration: underline; +} + +/* Table of content attributes*/ +div#toc{ + font-family: Helevetica, Arial, sans-serif; + background-color: #eeeeee; + padding-right: 3px; + margin: 0px 5px 5px 5px; + border: 1px #98AAB1 solid; + float: left; + font-size: smaller; +} + +/* table border */ +.tableborder { + border: 1px #606060 solid; +} + +/* button */ +.button input { + border: 1px solid #999; + background-color: white; + padding: 2px; + +} + +.button input:hover { + background-color: #f5f5ff; + border: 1px solid blue; + cursor: pointer; +} + +input.button { + border: 1px solid #999; + background-color: white; + padding: 2px; + padding-left: 10px; + padding-right: 10px; +} +input.button:hover { + background-color: #f5f5ff; + border: 1px solid blue; +} + +/* page breakline */ +hr { + color: #98AAB1; + background-color: white; + height: 1px; +} + +/* Editor boxes */ +.editorsmallbox { + font-family: Helevetica, Arial, sans-serif; + background-color: #EEEEEE; + padding: 2px; + padding-right: 3px; + border: 1px #99CCCC solid; +} +.editorlargebox { + font-family: Helevetica, Arial, sans-serif; + background-color: #EEEEEE; + margin-left:1em; + padding-left: .2em; + padding-right: .5em; + padding-top: .5em; + padding-bottom: .4em; + border: 1px #99CCCC solid; +} + +/* feedback for translators and install */ +.feedback2 { + font-family : Arial, Helvetica, Arial Cyr, Arial Ua, sans-serif; + color : white; + background: green; + font-weight : bold; + padding: 4px; + } + +/* search results */ +.highlight, a.highlight { + background-color: yellow; +} + +a .highlight{ + background-color: yellow; + text-decoration: underline; +} + +.results { + padding-left: 20px; +} + +h5.search-results { + background-color: #FFF5A4; + color: #006699; + padding: 1px; + margin-bottom: 5px; + margin-top: 10px; + margin-left: 5px; +} + +small.search-info { + color: #006699; +} + +p.search-description { + background-color: #FFFCE5; + color: #006699; +} + +/* date attributes */ +small.date { + font-family: Verdana, Helevetica, Arial, sans-serif; + color: #8CACBB; + margin-bottom: 0px; + margin-top: 0px; + margin-left: 5px; + margin-right: 0px; + font-size:small; +} + +/* content editor tabs */ + +.etable { + border-left:1pt solid black; + border-right:1pt solid black; + border-bottom:1pt solid black; + width:90%; +} + +/* button link on tab */ +.buttontab { + font-family: Helvetica, Arial, Helvetica, sans-serif; + background-color: #ffffff; + border: 0px; + color: black; + font-size:small; +} + +/* button link for enrollment tabs */ +.buttontab2 { + font-family: Helvetica, Arial, Helvetica, sans-serif; + background-color: #EFEFEF; + border: 0px; + color: black; + font-size:small; +} + +/* tab itself */ +.etab { + background-color: #ffffff; + border-top: 1px #98AAB1 solid; + border-left: 1px #98AAB1 solid; + border-right: 1px #98AAB1 solid; + text-align: center; +} + +.etab-selected { + background-color: #EFEFEF; + border-top: 1px #98AAB1 solid; + border-left: 1px #98AAB1 solid; + border-right: 1px #98AAB1 solid; + text-align: center; + padding: 2px; + font-weight:bold; +} + +div.top { + /* Top section */ + background: transparent; + margin: 0; + padding: 0; +} +div.etabs { + background: transparent; + border-collapse: collapse; + border-bottom-color: #8CACBB; + border-bottom-style: solid; + border-bottom-width: 1px; + padding: 0.5em 0em 0em 2em; + white-space: nowrap; + font-size:smaller; +} + +div.etabs plain { + background: transparent; + border-color: #8CACBB; + border-width: 1px; + border-style: solid solid none solid; + color: #436976; + font-weight: normal; + height: 1.2em; + margin-right: 0.5em; + padding: 0em 2em; + text-transform: lowercase; +} + +div.etabs selected { + background: #DEE7EC; + border: 1px solid #8CACBB; + border-bottom: #DEE7EC 1px solid; + color: #436976; + font-weight: normal; +} + +/* status bar */ +div.saved, div.unsaved { + text-align:right; + padding-right:20px; + padding-top:5px; + padding-bottom:10px; +} + +div.saved input, div.unsaved input { + border: 1px solid black; + background-color: white; + font-weight: normal; +} + +div.saved input:focus, div.unsaved input:focus { + border: 1px solid black; + background-color: white; + font-weight: normal; +} + +#body_text { + width:75%; +} + +/* side menu heading */ +td.dropdown-heading { + background-color: #D4E5FD; + color: #006699; + border-left: 1px solid #EAF2FE; + border-right: 1px solid #EAF2FE; + border-top: 1px solid #EAF2FE; + font-weight: bold; + padding: 2px; +} + +/* side menu content */ +td.dropdown { + padding: 2px; + background-color: white; + color: black; + border-left: 1px solid #EAF2FE; + border-right: 1px solid #EAF2FE; + border-bottom: 1px solid #EAF2FE; + font-weight: normal; +} + + +td.dropdown strong { + color: #51286C; +} + +/* test listing on home page */ + +.test-box { + background-color: #FFF5A4; + color: #006699; + border-left: 1px solid #006699; + border-right: 1px solid #006699; + border-top: 1px solid #006699; + font-weight: bold; + padding: 2px; +} + +/* message boxes */ +div#feedback { + width: 50%; + margin-left: auto; + margin-right: auto; + margin-top: 15px; + margin-bottom: 15px; + border: 1px solid green; + padding: 5px; + background-color: #c3fffc; + color: green; + font-weight: bold; +} + +div#help { + width: 50%; + margin-left: auto; + margin-right: auto; + margin-top: 15px; + margin-bottom: 15px; + border: 1px solid blue; + padding: 5px; + background-color: #c3ffff; + color: blue; +} + +div#info { + width: 50%; + margin-left: auto; + margin-right: auto; + margin-top: 15px; + margin-bottom: 15px; + border: 1px solid #2905A1; + padding: 5px; + background-color: #E1D7E8; + color: #2905A1; + font-weight: bold; +} + +div#warning { + width: 50%; + margin-left: auto; + margin-right: auto; + margin-top: 15px; + margin-bottom: 15px; + border: 1px solid #FF8400; + padding: 5px; + background-color: #FFF6ED; + color: #D95900; + font-weight: bold; +} + +/***************************************************************/ +/* NEW STUFF */ + +/* main navigation tabs */ +a#back-to { + padding-left: 20px; + background-image: url(images/back.gif); + background-repeat: no-repeat; + background-position: 0px 0px; + height:1.45em; + width:1.45em; +} + +div#breadcrumbs { + margin-bottom: 0px; + margin-top: 0px; + padding-left: 5px; + padding-right: 5px; + padding-bottom: 10px; + font-size: small; + background-color: #EBF4F9; + color: black; + border-bottom: dashed 1pt #A7D2F8; +} +div#breadcrumbs a:link, div#breadcrumbs a:visited, div#member-links a:link, div#member-links a:visited { + color: black; + text-decoration:none; +} +div#breadcrumbs a:hover, div#member-links a:hover { + text-decoration:underline; +} + +div#breadcrumbs a:focus, div#member-links a:focus { + text-decoration:none; + color: #AFAFAF; +} + +div#member-links { + margin-top:3px; + padding-right:5px; +} + +h2.page-title { + margin-bottom: 10px; + margin-top: 4px; + margin-left: 5px; + border-bottom: 1px solid #f0f0f0; + clear: left; +} + +h1 { + margin-bottom: 5px; +} + +div#sub-navigation { + padding: 5px; + background-color: white; /*#FFFCE5;*/ + /* border-bottom: 1px solid #9DAB9A;*/ + color: #9DAB9A; + margin-bottom:0px; +} + +div#sub-navigation strong { + color: black; +} + +div#help { + border-left: 1px solid black; + border-right: 1px solid black; + border-bottom: 1px solid black; + padding-left: 5px; + padding-right: 5px; + padding-bottom: 5px; + background-color: #efefef; + margin-left: 5px; + margin-right: 5px; + font-size: small; +} + +h3#help-title { + margin-left: 5px; + margin-right: 5px; + border-left: 1px solid black; + border-right: 1px solid black; + padding: 1px; + background-color: #efefef; +} +.line { + border-bottom: 1px solid black; +} +div#help p { + padding: 0px; + margin: 0px; +} + +div#toctoggle { + float: left; + font-size: smaller; + padding-left: 10px; +} + +div#top-links { + position: relative; + padding-right: 5px; + line-height: 170%; + margin-top: 3px; +} + +a#editor-link { + background-color: #EFEFEF; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 15px; + padding-right: 8px; + border: 1px solid #cccccc; + font-weight: normal; + text-decoration: none; +} + +a#editor-link:hover { + background-color: #fafafa; + border: 1px solid #aaaaaa; +} + +a#editor-link.off { + background-image: url(images/pen.gif); + background-repeat: no-repeat; + background-position: 0px 2px; +} +a#editor-link.on { + background-image: url(images/pen2.gif); + background-repeat: no-repeat; + background-position: 0px 2px; +} + + +/* for data tables */ +table.data { + border: 1px solid #e0e0e0; + width: 90%; + margin-left: auto; + margin-right: auto; + border-spacing: 0px; + border-collapse: collapse; +} + +table.data th { + background-color: #fafafa; + border-bottom: 1px solid #e0e0e0; + padding: 2px; + white-space: nowrap; + +} + +table.data th a { + color: black; + padding-right: 15px; + margin-right: 15px; + background-image: url('images/sort.gif'); + background-repeat: no-repeat; + background-position: right; + text-decoration:none; +} + +table.data th a:hover { + text-decoration: underline; +} + +table.data tbody th { + text-align: left; + background-color: #fdfdfd; + cursor: auto; + border-bottom: 0px; + border-top: 1px solid #e0e0e0; +} + +table.data td { + padding: 3px; +} +table.data td.indent { + padding-left: 12px; +} + +table.data col.sort { + background-color: #fafafa; +} + +table.data tbody tr:hover, table.data tbody tr:hover th { + background-color: #f5f5ff; + cursor: pointer; +} +table.data.static tbody tr:hover th { + background-color: #fdfdfd; + cursor: auto; +} + + +table.data tbody tr.selected, table.data tbody tr.selected th { + background-color: #f5f5ff; +} + +table.data tfoot { + background-color: #fafafa; + border-top: 1px solid #e0e0e0; +} + +table.data tfoot tr:first-child td { + padding: 5px; + background-image: url('images/arrow_ltr.gif'); + background-repeat: no-repeat; + background-position: 4px 5px; + padding-left: 40px; +} +table.data.static tfoot td, table.data.static tfoot tr:first-child td { + padding: 5px; + background-image: none; + padding-left: 0px; +} + +table.data tfoot input { + border: 1px solid #999; + background-color: white; + padding: 2px; + padding-left: 10px; + padding-right: 10px; + max-width: 60%; + min-width: 100px; + margin-left: 5px; +} + +/* used for static tables with no form elements */ +table.data.static tbody tr:hover { + background-color: transparent; + cursor: auto; +} + +table.data tfoot input[type=submit]:hover { + background-color: #f5f5ff; + cursor: pointer; +} + +/* course browser */ + +div#browse { + margin-left: auto; + margin-right: auto; + width: 80%; +} + +div.browse-selected { + background-image: url('images/side_arrow.gif'); + background-repeat: no-repeat; + padding-left: 9px; + background-position: center left; +} + +div.browse-unselected { + padding-left: 9px; +} + +ul.browse-list { + list-style: none; + padding:0px; +} + +/* feedback/errors */ +div#error { + width: 50%; + margin-left: auto; + margin-right: auto; + margin-top: 15px; + margin-bottom: 15px; + border: 1px solid red; + padding: 5px; + background-color: #fffcf3; + color: red; + background: #FBF4ED url(images/error-large.gif) no-repeat scroll 5px 5px; + padding-left: 25px; + font-weight: bold; +} +div#error h4 { + color: black; + margin-left: 0px; +} + +div#error ul, div#feedback ul, div#help ul { + position: relative; + list-style: none; + margin: 0px; + padding-left: 0px; +} +div#error li + li, div#feedback li + li { + margin-top: 5px; +} + +acronym { + cursor: help; +} + +div.news p { + margin-left: 10px; +} +div.news span.date { + color: #ACACAC; +} + +/* home page links */ +ul#home-links { + list-style: none; +} +ul#home-links li { + display: inline; + float: left; + padding: 0.5em; + text-align: center; + margin: 0.1em; + width: 8.5em; + height: 7.0em; +} +ul#home-links li a { + text-decoration: none; + border: 1px transparent; + font-weight: bold; +} +ul#home-links li a img { + border: 0px; + display: block; +} + +a.sortable { + color: blue; + text-decoration: underline; + font-weight: bold; +} + +div.dropdown { + width: 200px; + padding: 2px; + background-color: white; + color: black; + border-left: 1px solid #EAF2FE; + border-right: 1px solid #EAF2FE; + border-bottom: 1px solid #EAF2FE; + font-weight: normal; +} + +div.dropdown-heading { + background-color: #DFE1C7; + color: #006699; + border-left: 1px solid #EAF2FE; + border-right: 1px solid #EAF2FE; + border-top: 1px solid #EAF2FE; + font-weight: bold; + padding: 2px; +} + +div.required { + font-weight: bold; + color: red; + font-size: xx-large; + float: left; + position: relative; + margin-top: -5px; + height: 15px; + padding-right: 2px; +} + +div#content-text { + margin-left: 10px; + padding-right: 5px; +} + +div#content-text li { + margin-left: 15px; +} + +div#content-info { + margin: 5px; + font-size: smaller; + color: #cacaca; + clear: both; +} + +form { + clear: none; + display:inline; +} + +/* images in jump select box */ +option#start-page { + color: black; + text-decoration: none; + padding-left: 15px; + border-bottom: 1px solid black; +} + +#jump-button { + padding: 0px; + margin: 1px; + background-color: #A7D2F8; + color: black; + border: 1px solid gray; + cursor: pointer; +} +#jump-button:focus, #jump-button:hover { + padding: 0px; + border: 1px solid #cccccc; + cursor: pointer; +} +#jumpmenu, optgroup { + font-size: smaller; +} + +/* paging */ +div.paging { + width: 98%; + text-align: center; + padding: 5px; + margin: 10px; +} +div.paging ul, div.paging ul li { + display: inline; + padding: 0px; + margin: 0px; +} +div.paging ul li a { + padding: 7px; + background-color: #fafaff; + text-decoration: none; +} +div.paging ul li a:hover, div.paging ul li a.current { + background-color: #aaf; + color: white; + font-weight: bold; +} + +/* users/index.php */ +div.course { + position: relative; + width: 300px; + height: 10.5em; + border: rgb(204, 204, 204) 1px solid; + background-color: white; + float: left; + margin: 3px; + padding: 3px; +} + +div.course.break { + clear: left; +} + +div.course h2 { + border: 0px; + font-weight: normal; + font-size: large; + +} + +div.course:hover { + background-color:#D1E3ED; + border: #AAAAAA 1px solid; +} + +div.course a { + text-decoration: none; +} + +div.course:hover a { + color: #006699; +} + +div.course a:hover { + color: #000000; +} + +div.course p { + font-size: small; +} + +div.course p a { + font-weight: bold; +} + +div.course img.icon { + float: left; + margin: 2px; + height:6.8em; + width:6.8em; +} + +div.course div.shortcuts { + text-align: right; + clear: left; + vertical-align: middle; +} + +fieldset#shortcuts { + float: right; + background-color: #FAFAFA; + border: 1px solid #AAAAAA; + margin: -5px 5px 5px 5px; + padding-right: 10px; + padding-bottom: 5px; + padding-left: 10px; +} + +legend { + padding-right: 10px; + padding-left: 10px; + border: 1px solid #AAAAAA; +} + +fieldset { + margin-bottom: 10px; +} +#shortcuts legend { + color: #FFA500; + background-color: white; +} +#shortcuts ul { + position: relative; + margin-top: 0px; + margin-bottom: 0px; + margin-left: 0px; + list-style-type: none; + padding-left: 0px; +} + + +/* side-menu */ +h4.box { + margin-top: 10px; + font-family: Helevetica, Arial, sans-serif; + background: #efefef; + border: 1px solid #afafaf; + color: black; + white-space:nowrap; + padding: 0em 1em 0em 1em; + display: inline; + font-weight:normal; + margin-left: 0px; +} + +div.box { + background: transparent; + border-collapse: collapse; + border: 1px solid #afafaf; + padding: 1em; + font-size: 85%; +} + +div.box a:link { + text-decoration: none; +} + +div.box a:visited { + color: #51286C; + text-decoration: none; +} + +div.box a:hover { + text-decoration: underline; +} + +a#guide { + background-image: url('images/guide.gif'); background-repeat: no-repeat; background-position: 7px 5px; + background-color: #eee; + padding: 2px 10px 2px 28px; + border: 1px solid #ccc; +} + +label { + cursor: pointer; +} + +/* AChat Styles */ +body.chat { + background-color: #EBF4F9; + border-right: #006699 solid 1px; +} + +table.chat-display { + border: #006699 solid 1px; + line-height:150%; +} + +/* image relative sizing */ + +/* course home imgs */ +.img-size-home { + height:3.85em; + width:3.9em; + margin-left: auto; + margin-right: auto; +} +/* prev/next imgs */ +.img-size-prevnext { + height:1.45em; + width:1.45em; +} + +/* star */ +.img-size-star { + height:1.15em; + width:1.2em; +} + +/* tree */ +.img-size-tree { + vertical-align: middle; + margin-top: 0px; + height:1.45em; + width:1.45em; +} + +/* filemanager */ +.img-size-fm1 { + vertical-align: middle; + margin-top: 0px; + height:1.35em; + width:1.5em; +} +.img-size-fm2 { + vertical-align: middle; + margin-top: 0px; + height:1.25em; + width:1.25em; +} + +.img-size-fm3 { + vertical-align: middle; + margin-top: 0px; + height:1.2em; + width:.86em; +} + +.img-size-fm4 { + vertical-align: middle; + margin-top: 0px; + height:1.15em; + width:1.4em; +} + +/* asc/desc arrows */ +.img-size-ascdesc { + height: 1.95em; + width: 1.95em; +} + +.scormfeedback { + font-family : Arial, Helvetica, Arial Cyr, Arial Ua, sans-serif; + color: #152065; /* #D15600; */ + background: white; + font-weight : normal; + padding: 10px; + border: 1px solid black; +} + +.scormitem { + font-family : Arial, Helvetica, Arial Cyr, Arial Ua, sans-serif; + color: #152065; /* #D15600; */ + background: white; + font-weight : normal; + padding: 0px; + display: inline; +} + +.scorminput { + padding: 2px; +} + +.scorminput:hover { +} + +#rte { + float: right; + padding: 0px; + width: 0px; + height: 0px; +} + +.header { + background-image:url('images/pencils.jpg'); + background-repeat:no-repeat; + background-color: #EBF4F9 /*#F9F9F9*/; + background-position:top right; +} + +/* enrollment tabs */ +#navlist { + padding: 0px; + margin-left: 0; + margin-right: auto; + margin-left: auto; + margin-bottom: 4px; + white-space: nowrap; +} + +#navlist li { + list-style: none; + display: inline; + margin: 0px; +} + +#navlist li a { + padding: 3px 9px; + border: 1px solid #e0e0e0; + border-bottom: none; + background: #fafafa; + text-decoration: none; + margin-left: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + white-space: nowrap; +} + +#navlist li a:hover, #navlist li a.active { + color: #000; + background: #fff; +} + +/* MAIN TABS */ +div#topnavlistcontainer { + border-bottom: 1px solid #70A1CA; +} +ul#topnavlist { + padding: 0px; + margin-right: auto; + margin-left: auto; + margin-bottom: 3px; + margin-top: 0px; + white-space: nowrap; +} + +ul#topnavlist li { + list-style: none; + display: inline; + margin: 0px; +} + +ul#topnavlist li a { + padding: 3px 9px; + border: 1px solid #70A1CA; + background: #F4F9FE; + text-decoration: none; + margin-left: 1px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + white-space: nowrap; + font-weight: bold; +} +ul#topnavlist li:first-child a { + margin-left: 10px; +} + +ul#topnavlist li a:hover, ul#topnavlist li a.active, ul#topnavlist li a:focus { + color: #000; + background: white; + border-bottom: 1px solid white; +} + +div#container { + text-align: left; + margin: 0px auto; + padding: 0px; + border:0; + width: 90%; +} + +div.column { + border: 1px solid #e0e0e0; + float: left; + width: 45%; + margin: 5px; + padding: 0px; + min-width: 170px; +} + +div.column h3 { + margin-left: 0px; +} + +div.insidecol { + min-height: 170px; + height: 170px; + padding:5px; +} +div[class] .insidecol { + height: auto; +} + +ul.horizontal { + padding: 0px; + margin: 0px; +} +ul.horizontal li { + list-style: none; + display: inline; + margin: 0px; + padding-right: 10px; +} + +ul.rss_feed { + padding-left:7px; + margin-left:7px; + padding-top: 0px; + margin-top:0px; + margin-bottom:0px; +} + +/* the tools page */ +/* ol#tools>li */ li.top-tool { +list-style: none; +padding: 2px 2px 2px 15px; +margin-bottom: 5px; +line-height: 200%; +background-color: #fdfdfd; +border-bottom: 1px solid #efefef; +-moz-border-radius: 4px; +border: 1px solid #eeeeff;} + +ol#tools>li:hover { + border: 1px solid #e0e0e0; + background-color: #f5f5ff; +} + +li.top-tool a { font-weight: bold; } /* ol#tools>li>a */ + +li.child-tool a { + font-size: x-small; + font-weight: normal; +} + +/* ol#tools>li>ul, */ ul.child-top-tool { + margin-top: -5px; + padding-left: 0px; + margin-left: 0px; + display: inline; +} +ul.child-top-tool:before { + content: " : "; +} + +/* ol#tools>li>ul>li, */ li.child-tool { + display: inline; + margin-right: 5px; + font-size: x-small; +} + +a.user { + background: url('images/user.gif') no-repeat; + background-position: left center; + padding-left: 20px; + padding-top: 5px; + padding-bottom: 5px; +} +a.user.instructor { + background-image: url('images/instructor.gif'); +} + +p.fm-desc { + font-size: small; +} +/* profile page */ +dl#public-profile { + width: 100%; +} +dl#public-profile dt { + float: left; + font-weight: bold; + width: 30%; + text-align: right; + clear: left; + border-right: 1px solid #f0f0f0; + padding: 5px 5px 5px 0px; + vertical-align: middle; + margin-right: 5px; +} +dl#public-profile dd { + margin-bottom: 5px; + clear: right; + padding: 5px 0px 5px 5px; +} + +/** forum stuff **/ +#forum-thread li { clear:left; border:1px solid #eee; border-bottom: 1px solid #f0f0f0; float:left; width: 98%; list-style: none; } +#forum-thread li.even { background: #fdfdfd; border-top: none; } +#forum-thread li.odd { background: #fff; } +div.forum-post-author { float:left; width:150px; padding:8px 10px; } +div.forum-post-author a.title { font-size: 1.1em; line-height: 1.2em; font-weight: bold; text-decoration:none; } +div.forum-post-author img.profile-picture { border: 2px solid #f0f0f0; } +div.forum-post-content { margin-left: 150px; padding: 5px 0px 18px 18px; } +div.forum-post-content h3 { font-weight: 500; } +div.forum-post-ctrl { float: right; padding-right: 5px; color: #a1a1a1; } +div.forum-post-ctrl a { text-decoration: none; } +div.forum-post-ctrl span { color: black; background-color: #fefdc2; padding: 3px; } +div.forum-post-content p.date { color: #a1a1a1; border-bottom: 1px solid #f0f0f0; } +div.forum-post-content div.body p { margin-bottom:20px; } + +/** inbox stuff - reuses some of the forum layout **/ +#inbox-msg li { clear:left; border:1px solid #eee; border-bottom: 1px solid #f0f0f0; width: 98%; list-style: none; } + diff --git a/themes/default/test_questions/footer.tmpl.php b/themes/default/test_questions/footer.tmpl.php new file mode 100644 index 000000000..7f5eaa32e --- /dev/null +++ b/themes/default/test_questions/footer.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/default/test_questions/header.tmpl.php b/themes/default/test_questions/header.tmpl.php new file mode 100644 index 000000000..0f1063881 --- /dev/null +++ b/themes/default/test_questions/header.tmpl.php @@ -0,0 +1,17 @@ +
    + weight): ?> +
    + score !== FALSE && $this->question_id): ?> + / + score !== FALSE): ?> + score; ?> / + + weight; ?> +
    + + +

    number; ?>: type; ?>

    + + +
    +
    \ No newline at end of file diff --git a/themes/default/test_questions/likert.tmpl.php b/themes/default/test_questions/likert.tmpl.php new file mode 100644 index 000000000..19d59ec92 --- /dev/null +++ b/themes/default/test_questions/likert.tmpl.php @@ -0,0 +1,12 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +
      + num_choices; $i++): ?> +
    • + +
    • + +
    • + +
    • +
    \ No newline at end of file diff --git a/themes/default/test_questions/likert_qti_2p1.tmpl.php b/themes/default/test_questions/likert_qti_2p1.tmpl.php new file mode 100644 index 000000000..580bd19db --- /dev/null +++ b/themes/default/test_questions/likert_qti_2p1.tmpl.php @@ -0,0 +1,24 @@ +encoding; ?>"?> + + + + + + row['question']; ?> + num_choices; $i++): ?> + row['choice_'.$i]; ?> + + + + + \ No newline at end of file diff --git a/themes/default/test_questions/likert_result.tmpl.php b/themes/default/test_questions/likert_result.tmpl.php new file mode 100644 index 000000000..b60a0476f --- /dev/null +++ b/themes/default/test_questions/likert_result.tmpl.php @@ -0,0 +1,16 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +
      + + row['choice_'.$i] != ''): ?> +
    • + answer == $i): ?> + <?php echo _AT('checked'); ?> + + <?php echo _AT('unchecked'); ?> + + row['choice_'.$i], 'tests_answers.answer'); ?> +
    • + + +
    \ No newline at end of file diff --git a/themes/default/test_questions/likert_stats.tmpl.php b/themes/default/test_questions/likert_stats.tmpl.php new file mode 100644 index 000000000..0a42a767c --- /dev/null +++ b/themes/default/test_questions/likert_stats.tmpl.php @@ -0,0 +1,28 @@ +
    + + + + + + + num_choices; $i++): ?> + + + + + + + + + num_choices; $j++): ?> + + + + + + + num_choices; $j++): ?> + + + +
    row['question']; ?>num_blanks;?> / num_results; ?>average;?> / num_choices; ?>answers[$j]['count']; ?> / num_results; ?>
    num_results ? round($this->num_blanks/$this->num_results*100) : 0; ?>%-num_results ? round($this->answers[$j]['count']/$this->num_results*100) : 0; ?>%
    \ No newline at end of file diff --git a/themes/default/test_questions/long.tmpl.php b/themes/default/test_questions/long.tmpl.php new file mode 100644 index 000000000..6c4991618 --- /dev/null +++ b/themes/default/test_questions/long.tmpl.php @@ -0,0 +1,15 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +row['properties'] == 1): /* one word */ ?> + + +row['properties'] == 2): /* sentence */ ?> + + +row['properties'] == 3): /* paragraph */ ?> + + +row['properties'] == 4): /* page */ ?> + + + \ No newline at end of file diff --git a/themes/default/test_questions/long_qti_2p1.tmpl.php b/themes/default/test_questions/long_qti_2p1.tmpl.php new file mode 100644 index 000000000..ea2a0f407 --- /dev/null +++ b/themes/default/test_questions/long_qti_2p1.tmpl.php @@ -0,0 +1,31 @@ +encoding; ?>"?> + + + + + row['feedback']): ?> + + + + + + + + row['question']; ?> + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/default/test_questions/long_result.tmpl.php b/themes/default/test_questions/long_result.tmpl.php new file mode 100644 index 000000000..0f942618e --- /dev/null +++ b/themes/default/test_questions/long_result.tmpl.php @@ -0,0 +1,3 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +

    answer, 'tests_answers.answer'); ?>

    diff --git a/themes/default/test_questions/long_stats.tmpl.php b/themes/default/test_questions/long_stats.tmpl.php new file mode 100644 index 000000000..6da523cd9 --- /dev/null +++ b/themes/default/test_questions/long_stats.tmpl.php @@ -0,0 +1,21 @@ +
    + + + + + + + + + + + + + +
    row['question']; ?>num_blanks; ?> / num_results; ?> + answers)-$this->num_blanks) > 0): ?> + (answers)-$this->num_blanks); ?>) + + + +
    \ No newline at end of file diff --git a/themes/default/test_questions/manifest_qti_2p1.tmpl.php b/themes/default/test_questions/manifest_qti_2p1.tmpl.php new file mode 100644 index 000000000..208d53150 --- /dev/null +++ b/themes/default/test_questions/manifest_qti_2p1.tmpl.php @@ -0,0 +1,29 @@ +encoding; ?>"?> + + + IMS Content + 1.2 + + + + + + resources as $resource): ?> + + + + + + + + + + + dependencies as $dependency_href): ?> + + + + + + + \ No newline at end of file diff --git a/themes/default/test_questions/matching.tmpl.php b/themes/default/test_questions/matching.tmpl.php new file mode 100644 index 000000000..911dacd9b --- /dev/null +++ b/themes/default/test_questions/matching.tmpl.php @@ -0,0 +1,28 @@ +

    row['question'], 'tests_questions.question'); ?>

    + + + + + + +
    +
      + num_choices; $i++): ?> +
    • + + row['choice_'. $i]; ?> +
    • + +
    +
    +
      + num_options; $i++): ?> +
    • letters[$i]; ?>. row['option_'. $i]; ?>
    • + +
    +
    \ No newline at end of file diff --git a/themes/default/test_questions/matching_qti_2p1.tmpl.php b/themes/default/test_questions/matching_qti_2p1.tmpl.php new file mode 100644 index 000000000..2954585b7 --- /dev/null +++ b/themes/default/test_questions/matching_qti_2p1.tmpl.php @@ -0,0 +1,54 @@ +encoding; ?>"?> + + + + + num_choices; $i++): ?> + row['answer_'.$i] > -1): ?> + Choice Optionrow['answer_'.$i]; ?> + + + + + num_choices; $i++): ?> + row['answer_'.$i] > -1): ?> + + + + + row['feedback']): ?> + + + + + + + row['question']; ?> + + num_choices; $i++): ?> + row['choice_'.$i]; ?> + + + + + num_options; $i++): ?> + row['option_'.$i]; ?> + + + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/default/test_questions/matching_result.tmpl.php b/themes/default/test_questions/matching_result.tmpl.php new file mode 100644 index 000000000..24a51e38e --- /dev/null +++ b/themes/default/test_questions/matching_result.tmpl.php @@ -0,0 +1,37 @@ +

    row['question'], 'tests_questions.question'); ?>

    + + + + + + +
    +
      + + row['choice_'. $i] != ''): ?> +
    • + row['answer_'.$i] == $this->answers[$i]): ?> + <?php echo _AT('correct_answer'); ?> + + <?php echo _AT('wrong_answer'); ?> + row['answer_'.$i] >= 0): ?> + (letters[$this->row['answer_'.$i]]; ?>) + + + answers[$i] != '' && $this->answers[$i] >= 0): ?> + letters[$this->answers[$i]]; ?>. + + -. + + row['choice_'. $i]; ?> +
    • + + +
    +
    +
      + num_options; $i++): ?> +
    • letters[$i]; ?>. row['option_'. $i]; ?>
    • + +
    +
    \ No newline at end of file diff --git a/themes/default/test_questions/matching_stats.tmpl.php b/themes/default/test_questions/matching_stats.tmpl.php new file mode 100644 index 000000000..4225b430d --- /dev/null +++ b/themes/default/test_questions/matching_stats.tmpl.php @@ -0,0 +1,27 @@ +
    + + + + + num_choices; $i++): ?> + 15) { + $q['choice_'.$i] = substr($q['choice_'.$i], 0, 15).'…'; + } + ?> + + + + + + + num_choices; $j++): ?> + + + + + num_choices; $j++): ?> + + + +
    row['choice_'.$i]); ?>
    row['question']; ?>answers[$j]['count']; ?> / num_results; ?>
    num_results ? round($this->answers[$j]['count']/$this->num_results*100) : 0; ?>%
    \ No newline at end of file diff --git a/themes/default/test_questions/matchingdd.tmpl.php b/themes/default/test_questions/matchingdd.tmpl.php new file mode 100644 index 000000000..7b5e25cc7 --- /dev/null +++ b/themes/default/test_questions/matchingdd.tmpl.php @@ -0,0 +1,6 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +num_choices; $i++): ?> + + + \ No newline at end of file diff --git a/themes/default/test_questions/matchingdd_qti_2p1.tmpl.php b/themes/default/test_questions/matchingdd_qti_2p1.tmpl.php new file mode 100644 index 000000000..dff8d9b43 --- /dev/null +++ b/themes/default/test_questions/matchingdd_qti_2p1.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/default/test_questions/matchingdd_result.tmpl.php b/themes/default/test_questions/matchingdd_result.tmpl.php new file mode 100644 index 000000000..0054a6d6d --- /dev/null +++ b/themes/default/test_questions/matchingdd_result.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/default/test_questions/matchingdd_stats.tmpl.php b/themes/default/test_questions/matchingdd_stats.tmpl.php new file mode 100644 index 000000000..2006efded --- /dev/null +++ b/themes/default/test_questions/matchingdd_stats.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/default/test_questions/multianswer.tmpl.php b/themes/default/test_questions/multianswer.tmpl.php new file mode 100644 index 000000000..b91276060 --- /dev/null +++ b/themes/default/test_questions/multianswer.tmpl.php @@ -0,0 +1,10 @@ +

    row['question'], 'tests_questions.question'); ?>

    + + + +
      + num_choices; $i++): ?> +
    • + + +
    \ No newline at end of file diff --git a/themes/default/test_questions/multianswer_qti_2p1.tmpl.php b/themes/default/test_questions/multianswer_qti_2p1.tmpl.php new file mode 100644 index 000000000..8537ab7e8 --- /dev/null +++ b/themes/default/test_questions/multianswer_qti_2p1.tmpl.php @@ -0,0 +1,46 @@ +encoding; ?>"?> + + + + + num_choices; $i++): ?> + row['answer_'.$i]): ?> + Choice + + + + + num_choices; $i++): ?> + row['answer_'.$i]): ?> + + + + + row['feedback']): ?> + + + + + + + row['question']; ?> + num_choices; $i++): ?> + row['choice_'.$i]; ?> + + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/default/test_questions/multianswer_result.tmpl.php b/themes/default/test_questions/multianswer_result.tmpl.php new file mode 100644 index 000000000..d5203213e --- /dev/null +++ b/themes/default/test_questions/multianswer_result.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/default/test_questions/multianswer_stats.tmpl.php b/themes/default/test_questions/multianswer_stats.tmpl.php new file mode 100644 index 000000000..140367f61 --- /dev/null +++ b/themes/default/test_questions/multianswer_stats.tmpl.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/default/test_questions/multichoice.tmpl.php b/themes/default/test_questions/multichoice.tmpl.php new file mode 100644 index 000000000..a769eab38 --- /dev/null +++ b/themes/default/test_questions/multichoice.tmpl.php @@ -0,0 +1,11 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +
      + num_choices; $i++): ?> +
    • + + +
    • + +
    • +
    \ No newline at end of file diff --git a/themes/default/test_questions/multichoice_qti_2p1.tmpl.php b/themes/default/test_questions/multichoice_qti_2p1.tmpl.php new file mode 100644 index 000000000..b2b2961a0 --- /dev/null +++ b/themes/default/test_questions/multichoice_qti_2p1.tmpl.php @@ -0,0 +1,39 @@ +encoding; ?>"?> + + + + + num_choices; $i++): ?> + row['answer_'.$i]): ?> + Choice + + + + row['feedback']): ?> + + + + + + + row['question']; ?> + num_choices; $i++): ?> + row['choice_'.$i]; ?> + + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/default/test_questions/multichoice_result.tmpl.php b/themes/default/test_questions/multichoice_result.tmpl.php new file mode 100644 index 000000000..3c028fd10 --- /dev/null +++ b/themes/default/test_questions/multichoice_result.tmpl.php @@ -0,0 +1,23 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +
      + + row['choice_'.$i] != ''): ?> +
    • + row['answer_'.$i] == 1) && in_array($i, $this->answers)): ?> + <?php echo _AT('correct_answer'); ?> + row['answer_'.$i] == 1) || in_array($i, $this->answers)): ?> + <?php echo _AT('wrong_answer'); ?> + + + + + answers)): ?> + <?php echo _AT('checked'); ?> + + <?php echo _AT('unchecked'); ?> + + row['choice_'.$i], 'tests_questions.choice_'.$i); ?> + + +
    \ No newline at end of file diff --git a/themes/default/test_questions/multichoice_stats.tmpl.php b/themes/default/test_questions/multichoice_stats.tmpl.php new file mode 100644 index 000000000..0c3c500f0 --- /dev/null +++ b/themes/default/test_questions/multichoice_stats.tmpl.php @@ -0,0 +1,33 @@ +
    + + + + + + num_choices; $i++): ?> + row['choice_'.$i]) > 15) { + $this->row['choice_'.$i] = substr($this->row['choice_'.$i], 0, 15).'...'; + } + ?> + row['answer_'.$i]): ?> + + + + + + + + + + + num_choices; $j++): ?> + + + + + + num_choices; $j++): ?> + + + +
    row['choice_'.$i]); ?>row['choice_'.$i]); ?>
    row['question']; ?>num_blanks; ?> / num_results; ?>answers[$j]['count']; ?> / num_results; ?>
    num_results ? round($this->num_blanks/$this->num_results*100) : 0; ?>%num_results ? round($this->answers[$j]['count']/$this->num_results*100) : 0; ?>%
    \ No newline at end of file diff --git a/themes/default/test_questions/ordering.tmpl.php b/themes/default/test_questions/ordering.tmpl.php new file mode 100644 index 000000000..49fe27006 --- /dev/null +++ b/themes/default/test_questions/ordering.tmpl.php @@ -0,0 +1,14 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +
      + num_choices; $i++): ?> +
    • + +
    • + +
    \ No newline at end of file diff --git a/themes/default/test_questions/ordering_qti_2p1.tmpl.php b/themes/default/test_questions/ordering_qti_2p1.tmpl.php new file mode 100644 index 000000000..e73894604 --- /dev/null +++ b/themes/default/test_questions/ordering_qti_2p1.tmpl.php @@ -0,0 +1,37 @@ +encoding; ?>"?> + + + + + + num_choices; $i++): ?> + Choice + + + row['feedback']): ?> + + + + + + + row['question']; ?> + num_choices; $i++): ?> + row['choice_'.$i]; ?> + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/default/test_questions/ordering_result.tmpl.php b/themes/default/test_questions/ordering_result.tmpl.php new file mode 100644 index 000000000..91257c1d6 --- /dev/null +++ b/themes/default/test_questions/ordering_result.tmpl.php @@ -0,0 +1,14 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +
      + num_choices; $i++): ?> +
    1. + answers[$i]): ?> + <?php echo _AT('correct_answer'); ?> + + <?php echo _AT('wrong_answer'); ?> + + . row['choice_'.$i], 'tests_questions.choice_'.$i); ?> +
    2. + +
    \ No newline at end of file diff --git a/themes/default/test_questions/ordering_stats.tmpl.php b/themes/default/test_questions/ordering_stats.tmpl.php new file mode 100644 index 000000000..b670dbba9 --- /dev/null +++ b/themes/default/test_questions/ordering_stats.tmpl.php @@ -0,0 +1,23 @@ +
    + + + + + num_choices; $i++): ?> + row['choice_'.$i]) > 15) { $this->row['choice_'.$i] = substr($this->row['choice_'.$i], 0, 15).'...'; } ?> + + + + + + + num_choices; $j++): ?> + + + + + num_choices; $j++): ?> + + + +
    row['choice_'.$i]); ?>
    row['question']; ?>answers[$j]; ?> / num_results; ?>
    num_results ? round($this->answers[$j]/$this->num_results*100) : 0; ?>%
    \ No newline at end of file diff --git a/themes/default/test_questions/truefalse.tmpl.php b/themes/default/test_questions/truefalse.tmpl.php new file mode 100644 index 000000000..21d852ace --- /dev/null +++ b/themes/default/test_questions/truefalse.tmpl.php @@ -0,0 +1,7 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +

    + +

    + +

    \ No newline at end of file diff --git a/themes/default/test_questions/truefalse_qti_2p1.tmpl.php b/themes/default/test_questions/truefalse_qti_2p1.tmpl.php new file mode 100644 index 000000000..cdb60112b --- /dev/null +++ b/themes/default/test_questions/truefalse_qti_2p1.tmpl.php @@ -0,0 +1,38 @@ +encoding; ?>"?> + + + + + row['answer_0'] == 1): ?> + ChoiceT + + ChoiceF + + + row['feedback']): ?> + + + + + + + row['question']; ?> + + + + + + row['feedback']): ?> + row['feedback']; ?> + + \ No newline at end of file diff --git a/themes/default/test_questions/truefalse_result.tmpl.php b/themes/default/test_questions/truefalse_result.tmpl.php new file mode 100644 index 000000000..b9213fe53 --- /dev/null +++ b/themes/default/test_questions/truefalse_result.tmpl.php @@ -0,0 +1,36 @@ +

    row['question'], 'tests_questions.question'); ?>

    + +

    + row['answer_0'] == 1) && ($this->answers == 1)): ?> + <?php echo _AT('correct_answer'); ?> + row['answer_0'] == 1): ?> + <?php echo _AT('wrong_answer'); ?> + + + + + answers == 1): ?> + <?php echo _AT('checked'); ?> + + <?php echo _AT('unchecked'); ?> + + + +

    + +

    + row['answer_0'] == 2) && ($this->answers == 2)): ?> + <?php echo _AT('correct_answer'); ?> + row['answer_0'] == 2): ?> + <?php echo _AT('wrong_answer'); ?> + + + + + answers == 2): ?> + <?php echo _AT('checked'); ?> + + <?php echo _AT('unchecked'); ?> + + +

    diff --git a/themes/default/test_questions/truefalse_stats.tmpl.php b/themes/default/test_questions/truefalse_stats.tmpl.php new file mode 100644 index 000000000..e99003df0 --- /dev/null +++ b/themes/default/test_questions/truefalse_stats.tmpl.php @@ -0,0 +1,31 @@ +
    + + + + + +row['answer_0'] == 1): ?> + + +row['answer_0'] == 2): ?> + + + + + + + + + + + + + + + + + + + +
    Correct checkmarkCorrect checkmark
    row['question']; ?>num_blanks; ?> / num_results; ?>num_true; ?> / num_results; ?>num_false; ?> / num_results; ?>
    num_results ? round($this->num_blanks/$this->num_results*100) : 0; ?>%num_results ? round($this->num_true/$this->num_results*100) : 0; ?>%num_results ? round($this->num_false/$this->num_results*100) : 0; ?>%
    + diff --git a/themes/default/theme.cfg.php b/themes/default/theme.cfg.php new file mode 100644 index 000000000..b00140c6a --- /dev/null +++ b/themes/default/theme.cfg.php @@ -0,0 +1,43 @@ + \ No newline at end of file diff --git a/themes/default/users/browse.tmpl.php b/themes/default/users/browse.tmpl.php new file mode 100644 index 000000000..d0feb83ef --- /dev/null +++ b/themes/default/users/browse.tmpl.php @@ -0,0 +1,94 @@ + + +
    +
    +

    + +
      + cats as $cat_id => $cat_name): + echo '
    • '; + if ($cat_id == $this->cat): ?> +
      + +
      + + +
      +
    • + +

    + +
    + +
    +

    cats[$this->cat]; ?>

    + + courses)): + $cur_sub_cat = ''; ?> + +
      +
    • + show_course == 0): ?> +
      + +
      + + +
      +
    • + + courses as $course_id=>$info): + if (isset($this->sub_cats) && array_key_exists($info['cat_id'], $this->sub_cats) && ($cur_sub_cat != $this->sub_cats[$info['cat_id']])): + $cur_sub_cat = $this->sub_cats[$info['cat_id']];?> +

      + +
    • + +
      + +
      + + +
      +
    • + + +
    + +
    +
    + +
    +

    : + show_course == 0) { + echo _AT('all_courses'); + } else { + echo $this->course_row[0]['title']; + } + ?>

    + + + course_row as $this->course_row): ?> + +
    +

    course_row['title']; ?>

     - +

    course_row['description']; ?>

    +

    + course_row['login']; + echo ' - '._AT('contact_instructor').'
    '; + ?> + course_row['access']); ?>

    + +
    +

    + +
    +
    +
    + + \ No newline at end of file diff --git a/themes/default/users/email_change.tmpl.php b/themes/default/users/email_change.tmpl.php new file mode 100644 index 000000000..34a2bc14c --- /dev/null +++ b/themes/default/users/email_change.tmpl.php @@ -0,0 +1,35 @@ + + + + + +
    + + +
    + +
    +
    *

    +
    +
    + +
    +
    *

    + +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/themes/default/users/index.tmpl.php b/themes/default/users/index.tmpl.php new file mode 100644 index 000000000..9339330f8 --- /dev/null +++ b/themes/default/users/index.tmpl.php @@ -0,0 +1,72 @@ + + +courses && get_instructor_status()): ?> + printInfos('NO_COURSES_INST'); ?> +courses): ?> + printInfos('NO_COURSES'); ?> + + +courses as $row):?> +
    +
    '; + $link2 = ''; + + if ($_SESSION['member_id'] == $row['member_id']) { + //if instructor + echo _AT('instructor'); + } else if ($row['approved'] == 'a') { + //if alumni + echo _AT('alumni'); + } else if ($row['approved'] == 'n') { + //if notenrolled + echo _AT('pending_approval'); + $link = $link2 = ""; + } else { + //if no role and enrolled + echo _AT('student1'); + } ?> +
    +
    + + + + + + + + + + + + - + + +
    + +

    + : + '._AT('send_message').''; ?> +
    + :
    + + + + : + + + + +
    +

    + + +
    + +
    + +
    +
    + + + \ No newline at end of file diff --git a/themes/default/users/password_change.tmpl.php b/themes/default/users/password_change.tmpl.php new file mode 100644 index 000000000..f52ac937e --- /dev/null +++ b/themes/default/users/password_change.tmpl.php @@ -0,0 +1,31 @@ + + +
    + + +
    + +
    +
    *

    +
    +
    + +
    +
    *

    +
    + ·
    + ·
    +
    + +
    +
    *

    + +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/themes/default/users/preferences.tmpl.php b/themes/default/users/preferences.tmpl.php new file mode 100644 index 000000000..43358f65c --- /dev/null +++ b/themes/default/users/preferences.tmpl.php @@ -0,0 +1,120 @@ + + +
    +
    +
    + + + +
    + + +
    + +
    +
    + notify == 1) { + $yes = ' checked="checked"'; + } else { + $no = ' checked="checked"'; + } + ?> + /> + /> +
    + +
    +
    + /> + /> +
    + +
    +
    + /> + /> +
    + +
    +
    /> + /> +
    + +
    +
    + /> + /> +
    + +
    + +
    + /> + /> + /> +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/themes/default/users/profile.tmpl.php b/themes/default/users/profile.tmpl.php new file mode 100644 index 000000000..333a67f3c --- /dev/null +++ b/themes/default/users/profile.tmpl.php @@ -0,0 +1,131 @@ + + +
    + +
    + +
    +

    +
    + +
    +
    + + + +
    +
    +
    + + /> +
    +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    *

    + +
    + + + +
    +
    *

    + + /> + + /> + + + /> + + /> + + +
    + + +
    +

    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    + +
    +
    + /> /> /> +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/themes/default/warningmessage.tmpl.php b/themes/default/warningmessage.tmpl.php new file mode 100644 index 000000000..c8ed8daa9 --- /dev/null +++ b/themes/default/warningmessage.tmpl.php @@ -0,0 +1,20 @@ + + +
    + item)) : ?> +
      + item as $e) : ?> +
    • + +
    + +
    \ No newline at end of file diff --git a/themes/default_classic/ie_styles.css b/themes/default_classic/ie_styles.css new file mode 100644 index 000000000..7200f83c4 --- /dev/null +++ b/themes/default_classic/ie_styles.css @@ -0,0 +1,19 @@ +/* IE specific styles */ + +ul#topnavlist { + zoom:100%; + margin:0px; +} + +ul#topnavlist li { + zoom:100%; + padding:0.3em; + padding-bottom:0.3em; + margin:0px; + margin-bottom:-1px; +} + +label { + zoom:100%; + margin:0px; +} \ No newline at end of file diff --git a/themes/default_classic/images/guide.gif b/themes/default_classic/images/guide.gif new file mode 100644 index 0000000000000000000000000000000000000000..124c24a8e17b968965ab90ab911aa5342f73d42d GIT binary patch literal 122 zcmZ?wbhEHbGKMbG0F}(f2@Z>qe!zT=<&M+K5$*_Ab!`AH#v*s{N zpUF^L$539uP*}u}ox_lk$&i}Hkd(|28O7l4!Qkk`U}w)@YQ|t>%%G#oAS%kh&(FZa z!@$YOz|72W>C&Y$XU?2FdGf%41AF)GUAlDXoH=u*O`A4(^5ov$-jU2?qN1Ff zoaE$WCnqN}Gc#jjoEfOLTT#K0DFU`Bz5j#R%#;;TtsLe{K( z!5*_1R8*gE9`j}3TmNC@4}%%Z4F?`2REPxfm00O^^mOZV$rv11GeNRAQ_4e=mw| + + 0): ?> +
    + + +
    + + side_menu as $dropdown_file): ?> + + + +
    +

    + + +
    +
    + + \ No newline at end of file diff --git a/themes/default_classic/include/header.tmpl.php b/themes/default_classic/include/header.tmpl.php new file mode 100644 index 000000000..7c58dca6a --- /dev/null +++ b/themes/default_classic/include/header.tmpl.php @@ -0,0 +1,304 @@ + + + + <?php echo SITE_NAME; ?> : <?php echo $this->page_title; ?> + + + + + + + + + + + rtl_css; ?> + + + + + + custom_css; ?> + + + + + +
    + = 0)): ?> + + +
    + + + + +
    + + +
    + + + + +
    +
    + '.stripslashes(SITE_NAME).''; + endif; ?> + +

    + + <?php echo SITE_NAME; ?> + + + section_title; ?> + 0) && ($_SESSION['enroll'] == AT_ENROLL_NO)) : ?> + - +

    +
    + +
     
    + +
    + + +
    +
    + + +
    current_date; ?>
    +sub_level_pages): ?> + + + + + + + + 0): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + guide): ?> + page_title; ?> + + + 0): ?> + + +
    + + + +

    page_title; ?>

    + + +printAll(); ?> \ No newline at end of file diff --git a/themes/default_classic/print.css b/themes/default_classic/print.css new file mode 100644 index 000000000..cbecd5ccc --- /dev/null +++ b/themes/default_classic/print.css @@ -0,0 +1,13 @@ +body { + background-color: White; + font-family: Helvetica, arial, sans serif; + margin: 0px; + margin-top: 0px; + color: black; + border: 0px; +} + +div#side-menu, div#member-links, span#side-menushowlink, span#side-menuhidelink, div#sequence-links, select#jumpmenu, a#guide, div#gototop, input#jump-button, div#topnavlistcontainer, a#guide, div#breadcrumbs, div#jump-area, table.tabbed-table, div#sub-navigation, div#sequence-links, div#language, div#toc, fieldset#shortcuts { + display: none; +} + diff --git a/themes/default_classic/rtl.css b/themes/default_classic/rtl.css new file mode 100644 index 000000000..b95ecf0ff --- /dev/null +++ b/themes/default_classic/rtl.css @@ -0,0 +1,14 @@ +/* for right to left languages */ +html, body { + direction: rtl; +} + +/* required for mozilla browsers*/ +.img-size-tree { + vertical-align: middle; + margin-top: 0px; + height:1.45em; + width:1.45em; + text-align: right.; + float: right; +} \ No newline at end of file diff --git a/themes/default_classic/screenshot.gif b/themes/default_classic/screenshot.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c5df000f8afcdcf27400d924c4d2406bb7ae0e8 GIT binary patch literal 9001 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 literal 0 HcmV?d00001 diff --git a/themes/default_classic/styles.css b/themes/default_classic/styles.css new file mode 100644 index 000000000..1740aed3a --- /dev/null +++ b/themes/default_classic/styles.css @@ -0,0 +1,1209 @@ +/* main body attributes */ +body { + font-family: Helevetica, Arial, sans-serif; + margin-top: 0px; + margin-left: 0px; + margin-right: 0px; + /* max-width: 760px; */ + margin-bottom: 0px; + font-size: small; + background-color: white; + /*border-right: 1px solid #788CB3;*/ + width:100%; +} + +html,body { + height: 100%; +} + +/* heading attributes */ +h1, h2, h3, h4, h5, h6 { + font-family: trebuchet ms, Arial, sans-serif; + margin-bottom: 0px; + margin-top: 0px; + margin-left: 5px; + margin-right: 0px; + color: #152065; /* #D15600; */ +} + +/* paragraph attributes */ +p { + font-family: Helevetica, Arial, sans-serif; + margin-bottom: 10px; + margin-top: 0px; + margin-left: 5px; + margin-right: 0px; +} + +/* list attributes */ +ul { + font-family: Helevetica, Arial, sans-serif; + margin-bottom: 0px; + margin-top: 0px; + margin-right: 0px; +} + +li { + font-family: Helevetica, Arial, sans-serif; + margin-bottom: 0px; + margin-top: 0px; + margin-right: 0px; +} + +/* for filemanager */ +li.folders { + list-style: disc url('../../images/folder.gif') outside; + font-family: Helevetica, Arial, sans-serif; + margin-bottom: 0px; + margin-top: 0px; + margin-right: 0px; +} + +/* link attributes */ +a:link { + font-family: Helevetica, Arial, sans-serif; + color: #384F89; + text-decoration: underline; +} +a:visited { + font-family: Helevetica, Arial, sans-serif; + color: #51286C; + text-decoration: underline; +} +a:hover { + font-family: Helevetica, Arial, sans-serif; + color: black; + text-decoration: underline; +} + +/* Table of content attributes*/ +div#toc{ + font-family: Helevetica, Arial, sans-serif; + background-color: #eeeeee; + padding: 5px; + margin: 0px 5px 5px 5px; + border: 1px #98AAB1 solid; + float: left; + font-size: smaller; +} + +/* table border */ +.tableborder { + border: 1px #606060 solid; +} + +/* main submit button */ +.button { + font-family: Helevetica, Arial, sans-serif; + background-color: #EBEDF6; + font-weight: bold; + border: #354A81 solid 1px; +} + +input.button { + border: 1px solid #999; + background-color: white; + padding: 2px; + padding-left: 10px; + padding-right: 10px; + min-width: 100px; + margin-left: 5px; +} +input.button:hover { + background-color: #f5f5ff; + border: 1px solid blue; +} + +/* page breakline */ +hr { + color: #98AAB1; + background-color: white; + height: 1px; +} + +/* Editor boxes */ +.editorsmallbox { + font-family: Helevetica, Arial, sans-serif; + background-color: #EEEEEE; + padding: 2px; + padding-right: 3px; + border: 1px #99CCCC solid; +} +.editorlargebox { + font-family: Helevetica, Arial, sans-serif; + background-color: #EEEEEE; + margin-left:1em; + padding-left: .2em; + padding-right: .5em; + padding-top: .5em; + padding-bottom: .4em; + border: 1px #99CCCC solid; +} + +/* feedback for translators and install */ +.feedback2 { + font-family : Arial, Helvetica, Arial Cyr, Arial Ua, sans-serif; + color : white; + background: green; + font-weight : bold; + padding: 4px; + } + +/* search results */ +.highlight, a.highlight { + background-color: yellow; +} + +a .highlight{ + background-color: yellow; + text-decoration: underline; +} + +.results { + padding-left: 20px; +} + +h5.search-results { + background-color: #FFF5A4; + color: #006699; + padding: 1px; + margin-bottom: 5px; + margin-top: 10px; + margin-left: 5px; +} + +small.search-info { + color: #006699; +} + +p.search-description { + background-color: #FFFCE5; + color: #006699; +} + +/* date attributes */ +small.date { + font-family: Verdana, Helevetica, Arial, sans-serif; + color: #8CACBB; + margin-bottom: 0px; + margin-top: 0px; + margin-left: 5px; + margin-right: 0px; + font-size:small; +} + +/* content editor tabs */ + +.etable { + border-left:1pt solid black; + border-right:1pt solid black; + border-bottom:1pt solid black; + width:90%; +} + +/* button link on tab */ +.buttontab { + font-family: Helvetica, Arial, Helvetica, sans-serif; + background-color: #ffffff; + border: 0px; + color: black; + font-size:small; +} + +/* button link for enrollment tabs */ +.buttontab2 { + font-family: Helvetica, Arial, Helvetica, sans-serif; + background-color: #EFEFEF; + border: 0px; + color: black; + font-size:small; +} + +/* tab itself */ +.etab { + background-color: #ffffff; + border-top: 1px #98AAB1 solid; + border-left: 1px #98AAB1 solid; + border-right: 1px #98AAB1 solid; + text-align: center; +} + +.etab-selected { + background-color: #EFEFEF; + border-top: 1px #98AAB1 solid; + border-left: 1px #98AAB1 solid; + border-right: 1px #98AAB1 solid; + text-align: center; + padding: 2px; + font-weight:bold; +} + +div.top { + /* Top section */ + background: transparent; + margin: 0; + padding: 0; +} +div.etabs { + background: transparent; + border-collapse: collapse; + border-bottom-color: #8CACBB; + border-bottom-style: solid; + border-bottom-width: 1px; + padding: 0.5em 0em 0em 2em; + white-space: nowrap; + font-size:smaller; +} + +div.etabs plain { + background: transparent; + border-color: #8CACBB; + border-width: 1px; + border-style: solid solid none solid; + color: #436976; + font-weight: normal; + height: 1.2em; + margin-right: 0.5em; + padding: 0em 2em; + text-transform: lowercase; +} + +div.etabs selected { + background: #DEE7EC; + border: 1px solid #8CACBB; + border-bottom: #DEE7EC 1px solid; + color: #436976; + font-weight: normal; +} + + + +/* status bar */ +.unsaved, .saved { + text-align:right; + padding-right:20px; + padding-top:5px; + padding-bottom:10px; +} + +.saved input, .unsaved input { + border: 1px solid black; + background-color: white; + font-weight: normal; +} + +#body_text { + width:75%; +} + +/* side menu heading */ +td.dropdown-heading { + background-color: #D4E5FD; + color: #006699; + border-left: 1px solid #EAF2FE; + border-right: 1px solid #EAF2FE; + border-top: 1px solid #EAF2FE; + font-weight: bold; + padding: 2px; +} + +td.dropdown-heading a, td.dropdown-heading a:hover, td.dropdown-heading a:visited { + text-decoration: none; +} + +td.dropdown-heading.closed { + border-bottom: 1px solid #EAF2FE; +} + +/* side menu content */ +td.dropdown { + padding: 2px; + background-color: white; + color: black; + border-left: 1px solid #EAF2FE; + border-right: 1px solid #EAF2FE; + border-bottom: 1px solid #EAF2FE; + font-weight: normal; +} +td.dropdown a, td.dropdown a:visited { + color: #006699; + text-decoration: none; +} +td.dropdown a:hover { + color: #006699; + text-decoration: underline; +} + +td.dropdown strong { + color: #51286C; +} + +/* test listing on home page */ + +.test-box { + background-color: #FFF5A4; + color: #006699; + border-left: 1px solid #006699; + border-right: 1px solid #006699; + border-top: 1px solid #006699; + font-weight: bold; + padding: 2px; +} + +/* message boxes */ +div#feedback { + width: 50%; + margin-left: auto; + margin-right: auto; + margin-top: 15px; + margin-bottom: 15px; + border: 1px solid green; + padding: 5px; + background-color: #c3fffc; + color: green; + font-weight: bold; +} + +div#help { + width: 50%; + margin-left: auto; + margin-right: auto; + margin-top: 15px; + margin-bottom: 15px; + border: 1px solid blue; + padding: 5px; + background-color: #c3ffff; + color: blue; +} + +div#info { + width: 50%; + margin-left: auto; + margin-right: auto; + margin-top: 15px; + margin-bottom: 15px; + border: 1px solid #2905A1; + padding: 5px; + background-color: #CDE3E8; + color: #2905A1; + font-weight: bold; +} + +div#warning { + width: 50%; + margin-left: auto; + margin-right: auto; + margin-top: 15px; + margin-bottom: 15px; + border: 1px solid #FF8400; + padding: 5px; + background-color: #FFF6ED; + color: #D95900; + font-weight: bold; +} + +/***************************************************************/ +/* NEW STUFF */ + +a#back-to { + padding-left: 20px; + background-image: url('../default/images/back.gif'); + background-repeat: no-repeat; + background-position: 0px 0px; + height:1.45em; + width:1.45em; +} + +div#breadcrumbs { + margin-bottom: 0px; + margin-top: 0px; + padding-left: 5px; + padding-right: 5px; + padding-bottom: 10px; + font-size: small; + background-color: #788CB3; + color: white; +} +div#breadcrumbs a, div#member-links a { + color: white; +} +div#breadcrumbs a:hover, div#member-links a:hover{ + text-decoration:none; +} + +div#breadcrumbs a:focus, div#member-links a:focus { + text-decoration:none; + font-weight: bold; + color: #FFFF00; +} + +div#member-links { + margin-top:3px; + padding-right:5px; +} + +h2.page-title { + margin-bottom: 10px; + margin-top: 10px; + margin-left: 5px; + border-bottom: 1px solid #f0f0f0; + clear: left; +} + +h1 { + margin-bottom: 5px; +} + +div#sub-navigation { + padding: 5px; + background-color: #FFFCE5; + border-bottom: 1px solid #9DAB9A; + color: #9DAB9A; +} + +div#sub-navigation strong { + color: black; +} + +div#help { + border-left: 1px solid black; + border-right: 1px solid black; + border-bottom: 1px solid black; + padding-left: 5px; + padding-right: 5px; + padding-bottom: 5px; + background-color: #efefef; + margin-left: 5px; + margin-right: 5px; + font-size: small; +} + +h3#help-title { + margin-left: 5px; + margin-right: 5px; + border-left: 1px solid black; + border-right: 1px solid black; + padding: 1px; + background-color: #efefef; +} +.line { + border-bottom: 1px solid black; +} +div#help p { + padding: 0px; + margin: 0px; +} + +div#toctoggle { + float: left; + font-size: smaller; + padding-left: 10px; +} + +h1#section-title { + margin-left: 5px; + clear: none; + display:inline; + background-color: white; +} + +div#top-links { + position: relative; + padding-right: 5px; + line-height: 170%; + margin-top: 3px; +} + +a#editor-link { + background-color: #EFEFEF; + padding-top: 1px; + padding-bottom: 1px; + padding-left: 15px; + padding-right: 8px; + border: 1px solid #cccccc; + font-weight: normal; + text-decoration: none; +} + +a#editor-link:hover { + background-color: #fafafa; + border: 1px solid #aaaaaa; +} + +a#editor-link.off { + background-image: url('../default/images/pen.gif'); + background-repeat: no-repeat; + background-position: 0px 2px; +} +a#editor-link.on { + background-image: url('../default/images/pen2.gif'); + background-repeat: no-repeat; + background-position: 0px 2px; +} + + +/* for data tables */ +table.data { + border: 1px solid #f0f0f0; + width: 90%; + margin-left: auto; + margin-right: auto; + border-spacing: 0px; + border-collapse: collapse; +} + +table.data th { + background-color: #fafafa; + padding: 3px; + white-space: nowrap; +} + +table.data tbody { + background-color: #fdfdfd; +} + +table.data tbody th { + text-align: left; + background-color: #fdfdfd; + cursor: auto; +} + +table.data td { + padding: 3px; +} + +table.data col.sort + td { + padding: 7px; + background-color: red; +} + +table.data tbody tr:hover { + background-color: #f5f5ff; + cursor: pointer; +} + +table.data tbody tr.selected { + background-color: #f5f5ff; + cursor: auto; +} + +table.data tfoot { + background-color: #fafafa; +} + +table.data tfoot tr:first-child td { + padding: 5px; + background-image: url('../default/images/arrow_ltr.gif'); + background-repeat: no-repeat; + background-position: 4px 5px; + padding-left: 40px; +} + +table.data.static tfoot td, table.data.static tfoot tr:first-child td { + padding: 5px; + background-image: none; + padding-left: 0px; +} + +table.data tfoot input { + border: 1px solid #999; + background-color: white; + padding: 2px; + padding-left: 10px; + padding-right: 10px; + max-width: 60%; + min-width: 100px; + margin-left: 5px; +} + +/* used for static tables with no form elements */ +table.data.static tbody tr:hover { + background-color: transparent; + cursor: auto; +} + +table.data tfoot input[type=submit]:hover { + background-color: #f5f5ff; +} + +/* course browser */ + +div#browse { + margin-left: auto; + margin-right: auto; + width: 80%; +} + +div.browse-selected { + background-image: url('../default/images/side_arrow.gif'); + background-repeat: no-repeat; + padding-left: 9px; + background-position: center left; +} + +div.browse-unselected { + padding-left: 9px; +} + +ul.browse-list { + list-style: none; + padding:0px; +} + +/* feedback/errors */ +div#error { + width: 50%; + margin-left: auto; + margin-right: auto; + margin-top: 15px; + margin-bottom: 15px; + border: 1px solid red; + padding: 5px; + background-color: #fffcf3; + color: red; + background: #FBF4ED url('../default/images/error-large.gif') no-repeat scroll 5px 5px; + padding-left: 25px; + font-weight: bold; +} +div#error h4 { + color: black; + margin-left: 0px; +} + +div#error ul, div#feedback ul, div#help ul { + position: relative; + list-style: none; + margin-left: 0px; + padding-left: 0px; +} +div#error li + li, div#feedback li + li { + margin-top: 5px; +} + +acronym { + cursor: help; +} + +div.news p { + margin-left: 10px; +} +div.news span.date { + color: #ACACAC; +} + +/* home page links */ +ul#home-links { + list-style: none; +} +ul#home-links li { + display: inline; + float: left; + padding: 0.5em; + text-align: center; + margin: 0.2em; + width: 7.9em; + height: 7.4em; +} +ul#home-links li a { + text-decoration: none; + border: 1px transparent; + font-weight: bold; +} +ul#home-links li a img { + border: 0px; + display: block; +} + +a.sortable { + color: blue; + text-decoration: underline; + font-weight: bold; +} + +/* sequence links */ +div#sequence-links { + float: right; + margin-top: 10px; + padding-right: 5px; +} +div#sequence-links a { + text-decoration: none; +} + +div.dropdown { + width: 200px; + padding: 2px; + background-color: white; + color: black; + border-left: 1px solid #EAF2FE; + border-right: 1px solid #EAF2FE; + border-bottom: 1px solid #EAF2FE; + font-weight: normal; +} + +div.dropdown-heading { + background-color: #DFE1C7; + color: #006699; + border-left: 1px solid #EAF2FE; + border-right: 1px solid #EAF2FE; + border-top: 1px solid #EAF2FE; + font-weight: bold; + padding: 2px; +} + +div.required { + font-weight: bold; + color: red; + font-size: xx-large; + float: left; + position: relative; + margin-top: -5px; + height: 15px; + padding-right: 2px; +} + +div#content-text { + margin-left: 5px; + padding-right: 5px; +} + +div#content-info { + margin: 5px; + font-size: smaller; + color: #cacaca; + clear: both; +} + +form { + clear: none; + display:inline; +} + +/* images in jump select box */ +option#start-page { + color: black; + text-decoration: none; + padding-left: 15px; + border-bottom: 1px solid black; +} + +#jump-button { + padding: 0px; + background-color: #5E6D89; + color: white; + border: 1px solid #cccccc; + cursor: pointer; +} +#jump-button:focus, #jump-button:hover { + padding: 0px; + background-color: #AE8DA9; + color: white; + border: 1px solid #cccccc; + cursor: pointer; +} +#jumpmenu, optgroup { + font-size: smaller; +} + +/* paging */ +div.paging { + width: 100%; + text-align: center; + margin: 0.5em auto; +} +div.paging ul { + list-style: none; + display: inline; + padding: 0px; + border: 1px solid #000; +} +div.paging li { + display: inline; + padding-left: 2px; + padding-right: 2px; + padding-top: 0px; + padding-bottom: 0px; +} + +div.paging li a { + text-decoration: none; + padding-left: 4px; + padding-right: 4px; + border-left: 1px solid white; + border-right: 1px solid white; +} + +div.paging li a:hover, div.paging li a.current { + background-color: #efefef; + border-left: 1px solid #000; + border-right: 1px solid #000; +} + + +/* users/index.php */ + +div.course { + position: relative; + width: 300px; + border: rgb(204, 204, 204) 1px solid; + background-color: #FFFCE5; + float: left; + margin: 3px; + padding: 3px; + height: 10.5em; +} + +div.course.break { + clear: left; +} + +div.course h2 { + border: 0px; + font-weight: normal; + font-size: large; + +} + +div.course:hover { + background-color: #FFF8C8; + border: #AAAAAA 1px solid; +} + +div.course a { + text-decoration: none; +} + +div.course:hover a { + color: #006699; +} + +div.course a:hover { + color: #000000; +} + +div.course p { + font-size: small; +} + +div.course p a { + font-weight: bold; +} + +div.course img.icon { + float: left; + margin: 2px; + height:6.1em; + width:6.1em; +} + +div.course div.shortcuts { + text-align: right; + clear: left; + vertical-align: middle; +} + +fieldset#shortcuts { + float: right; + background-color: #FAFAFA; + border: 1px solid #AAAAAA; + margin: -5px 5px 5px 5px; + padding-right: 10px; + padding-bottom: 5px; + padding-left: 10px; +} + +legend { + padding-right: 10px; + padding-left: 10px; +} + +fieldset { + margin-bottom: 10px; +} +#shortcuts legend { + color: orange; + background-color: white; +} +#shortcuts ul { + position: relative; + margin-top: 0px; + margin-bottom: 0px; + margin-left: 0px; + list-style-type: none; + padding-left: 0px; +} + + +/* side-menu */ +h4.box { + margin-top: 10px; + font-family: Helevetica, Arial, sans-serif; + background: #788CB3; + border: 1px solid #788CB3; + color: white; + padding: 0em 1em 0em 1em; + display: inline; + font-weight:normal; + margin-left: 0px; + margin-top: 1000px; + white-space:nowrap; +} + +div.box { + background: transparent; + border-collapse: collapse; + border-left: 1px solid #788CB3; + border-top: 1px solid #788CB3; + border-bottom: 1px solid #788CB3; + border-right: 1px solid #788CB3; + padding: 1em; + font-size: 85%; +} + +div.box a { + text-decoration: none; +} + +div.box a:hover { + text-decoration: underline; +} + +/* image relative sizing */ + +/* course home imgs */ +.img-size-home { + height:3.85em; + width:3.9em; + margin-left: auto; + margin-right: auto; +} +/* prev/next imgs */ +.img-size-prevnext { + height:1.45em; + width:1.45em; +} + +/* star */ +.img-size-star { + height:1.15em; + width:1.2em; +} + +/* tree */ +.img-size-tree { + vertical-align: middle; + margin-top: 0px; + height:1.45em; + width:1.45em; +} + +/* filemanager */ +.img-size-fm1 { + vertical-align: middle; + margin-top: 0px; + height:1.35em; + width:1.5em; +} +.img-size-fm2 { + vertical-align: middle; + margin-top: 0px; + height:1.25em; + width:1.25em; +} + +.img-size-fm3 { + vertical-align: middle; + margin-top: 0px; + height:1.2em; + width:.86em; +} + +.img-size-fm4 { + vertical-align: middle; + margin-top: 0px; + height:1.15em; + width:1.4em; +} + +/* asc/desc arrows */ +.img-size-ascdesc { + height:1.95em; + width:1.95em; +} + +a#guide { + background-image: url('images/guide.gif'); background-repeat: no-repeat; background-position: 7px 5px; + background-color: #eee; + padding: 2px 10px 2px 28px; + border: 1px solid #ccc; +} + +/* enrollment tabs */ +#navlist { + padding: 0px; + margin-left: 0; + margin-right: auto; + margin-left: auto; + margin-bottom: 4px; + white-space: nowrap; +} + +#navlist li { + list-style: none; + display: inline; + margin: 0px; +} + +#navlist li a { + padding: 3px 9px; + border: 1px solid #e0e0e0; + border-bottom: none; + background: #fafafa; + text-decoration: none; + margin-left: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + white-space: nowrap; +} + +#navlist li a:hover, #navlist li a.active { + color: #000; + background: #fff; +} + +/* MAIN TABS */ +div#topnavlistcontainer { + border-bottom: 1px solid #9DAB9A; +} +ul#topnavlist { + padding: 0px; + margin-right: auto; + margin-left: auto; + margin-bottom: 3px; + white-space: nowrap; + margin-top: -20px; +} + +ul#topnavlist li { + list-style: none; + display: inline; + margin: 0px; +} + +ul#topnavlist li a { + padding: 3px 9px; + border: 1px solid #9DAB9A; + background: #FFF8C8; + text-decoration: none; + margin-left: 3px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + white-space: nowrap; + font-weight: bold; +} +ul#topnavlist li:first-child a { + margin-left: 8px; +} + +ul#topnavlist li a:hover, ul#topnavlist li a.active, ul#topnavlist li a:focus { + color: #000; + background: #FFFCE5; + border-bottom: 1px solid #FFFCE5; +} + +div#container { + text-align: left; + margin: 0px auto; + padding: 0px; + border:0; + width: 90%; +} + +div.column { + border: 1px solid #e0e0e0; + float: left; + width: 30%; + margin: 5px; + padding: 0px; + min-width: 170px; +} + +div.column h3 { + margin-left: 0px; +} + +div.insidecol { + min-height: 170px; + height: 170px; + padding:5px; +} +div[class] .insidecol { + height: auto; +} +ul.horizontal{ + padding: 0px; + margin: 0px; +} +ul.horizontal li { + list-style: none; + display: inline; + margin: 0px; + padding-right: 10px; +} + +ul.rss_feed { + padding-left:7px; + margin-left:7px; + padding-top: 0px; + margin-top:0px; + margin-bottom:0px;' +} + +/* the tools page */ +ol#tools { width: 90%; } +/* ol#tools>li */ li.top-tool { padding: 2px 2px 2px 15px; margin-bottom: 5px; line-height: 200%; background-color: #fdfdfd; border-bottom: 1px solid #efefef; -moz-border-radius: 4px; list-style-position: inside; border: 1px solid #eeeeff;} + +ol#tools>li:hover { + border: 1px solid #e0e0e0; + background-color: #f5f5ff; +} + +/* ol#tools>li>a */ li.top-tool a { font-weight: bold; } + +li.child-tool a { font-size: x-small; font-weight: normal; } + +/* ol#tools>li>ul, */ ul.child-top-tool { + margin-top: -5px; + padding-left: 0px; + margin-left: 0px; + display: inline; +} +ul.child-top-tool:before { + content: " : "; +} + +/* ol#tools>li>ul>li, */ li.child-tool { + display: inline; + margin-right: 5px; + font-size: x-small; +} +/* profile page */ +dl#public-profile { + width: 100%; +} +dl#public-profile dt { + float: left; + font-weight: bold; + width: 30%; + text-align: right; + clear: left; + border-right: 1px solid #f0f0f0; + padding: 5px 5px 5px 0px; + vertical-align: middle; + margin-right: 5px; +} +dl#public-profile dd { + margin-bottom: 5px; + clear: right; + padding: 5px 0px 5px 5px; +} \ No newline at end of file diff --git a/themes/default_classic/theme.cfg.php b/themes/default_classic/theme.cfg.php new file mode 100644 index 000000000..7bf17a0bb --- /dev/null +++ b/themes/default_classic/theme.cfg.php @@ -0,0 +1,42 @@ + diff --git a/themes/themes_readme.txt b/themes/themes_readme.txt new file mode 100644 index 000000000..b50c95979 --- /dev/null +++ b/themes/themes_readme.txt @@ -0,0 +1,87 @@ +=========================================== + ATutor Themes Documentation +=========================================== + +In this file: + - Introduction + - Installing a New Theme + - File & Directory Structure + - Theme Configuration File + - Creating a Theme + + ************** + +Introduction +------------ +An ATutor theme is a set of template files with images and a stylesheet that +change the overall look and feel of an ATutor installation. An installation +may have one or more themes installed at one time; a user is given the ability +of selecting a single theme to be used while they are logged-in. + +This document briefly explains the structure of an individual theme directory. + + ************** + +Installing a New Theme +---------------------- + +Access the Themes area of the Administration section. + + ************** + +File & Directory Sturcture +-------------------------- + +All themes go in /themes/. + +All theme specific files are in /themes/[theme_name]/, where +`[theme_name]` is the directory name of the theme. The `theme_name` need not be +the exact name of the theme (ie. a theme named `Blueberry Cheesecake` may exist +in a directory called `bb_cc`). The actual name of the theme is specified +in that theme's configuration file. + +The theme may be renamed however, if another theme by the same name already exists. + +The files below are in the theme directory: + + - theme_info.xml - The configuration file (see "Theme Configuration File" below) + - screenshot.jpg - 200x125 pixel screenshot of the theme + +Any additional files or images may be placed in sub-directories. +Example: /[theme_name]/images/ may be used for theme specific images. + + ************** + +Theme Configuration File - theme_info.xml +---------------------------------------- + +Each theme has a configuration file that must exist and must be named 'theme_info.xml' . +If the theme_info.xml file cannot be found in the theme's directory then the theme will +not be made available to use. The fields in the theme_info.xml file are documented in the +file; they describe such things as the name of the theme, its author, and the default +course banner style. + + ************** + +Creating a Theme +---------------- + +The best way to start your own theme is by exporting one of the themes displayed on the Theme Manager. +The theme is exported onto your desktop as a '.zip' file. +You must extract the contents of this file in order to change them. +You should then edit the theme_info.xml file to give it a name. +Once those changes are made you should zip the files and import them using the import theme function. +The name of the zip file should be the name you want to give your theme, sunstituting '_' for spaces. + +The theme files described above are basically PHP files. You do not need to know a lot +about PHP to create a theme; most of the syntax if straight forward and uses mostly +if-statements and foreach-loops. For additional information on PHP check out: php.net . + +The theme files contain variables which look like $this->[something]. Those variables get +set by ATutor and may contain simple text or in some cases arrays (or vectors) of text. + +The first theme files that should be created are the header.tmpl.php, footer.tmpl.php and +styles.css . Editing those three files alone will let you dramatically change the look +and feel of an ATutor installation. Once those files are complete you can move on to the +in-course files; those are files that only get used when viewing a course. The in-course +files format the dropdowns and the overall look of the course. \ No newline at end of file diff --git a/tile.php b/tile.php new file mode 100644 index 000000000..c2efcbec8 --- /dev/null +++ b/tile.php @@ -0,0 +1,158 @@ + +
    + +
    +
    +
    + +
    + +
    +
    + + />
    + />
    + />
    + />
    + />
    + /> +
    + +
    + +
    +
    +
    +
    +getError(); + if ($error) { + // Display the error + + $msg->addError('TILE_UNAVAILABLE'); + $msg->printAll(); + + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + // Create the proxy + $proxy = $client->getProxy(); + } else { + // Create the client instance + $proxy = new soapclient(AT_TILE_WSDL); + } + + $search_input = array('query' => $_GET['query'], 'field' => $_GET['field'], 'content' => 'contentPackage'); + + $results = $proxy->doSearch($search_input); + + + if ($results) { + $num_results = count($results); + } else { + $num_results = 0; + } + echo '

    '. _AT('results_found', $num_results).'

    '; + if ($num_results) { + echo '
      '; + foreach ($results as $result) { + + $xml_parser = xml_parser_create(); + + xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); /* conform to W3C specs */ + xml_set_element_handler($xml_parser, 'startElement', 'endElement'); + xml_set_character_data_handler($xml_parser, 'characterData'); + + if (!xml_parse($xml_parser, $result, true)) { + die(sprintf("XML error: %s at line %d", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser))); + } + + xml_parser_free($xml_parser); + + $tile_title = str_replace('<', '<', $tile_title); + + echo '
    1. ' . $tile_title . ' - '; + echo ''._AT('preview').''; + echo ' | '._AT('download').''; + echo '
      '; + if (strlen($tile_description) > 200) { + echo '' . $tile_description . ''; + } else { + echo $tile_description; + } + + echo '
    2. '; + + unset($tile_title); + unset($tile_description); + unset($tile_identifier); + } + echo '
    '; + } +} + require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/access.php b/tools/access.php new file mode 100644 index 000000000..9b285f2af --- /dev/null +++ b/tools/access.php @@ -0,0 +1,157 @@ +addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} else if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} else if (isset($_POST['submit'])) { + $auth = intval($_POST['auth']); + + //expiry date + if (intval($_POST['expiry_date'])) { + $day_expire = intval($_POST['day_expire']); + $month_expire = intval($_POST['month_expire']); + $year_expire = intval($_POST['year_expire']); + $hour_expire = intval($_POST['hour_expire']); + $min_expire = intval($_POST['min_expire']); + + if (strlen($month_expire) == 1){ + $month_expire = "0$month_expire"; + } + if (strlen($day_expire) == 1){ + $day_expire = "0$day_expire"; + } + if (strlen($hour_expire) == 1){ + $hour_expire = "0$hour_expire"; + } + if (strlen($min_expire) == 1){ + $min_expire = "0$min_expire"; + } + $expiry_date = "$year_expire-$month_expire-$day_expire $hour_expire:$min_expire:00"; + } else { + $expiry_date = 0; + } + + $sql = "UPDATE ".TABLE_PREFIX."course_access SET `expiry_date`='$expiry_date', enabled=$auth WHERE course_id=".$_SESSION['course_id']; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.$_SERVER['PHP_SELF']); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($system_courses[$_SESSION['course_id']]['access'] == 'public') { + // if this course is public, then we can't use this feature + $msg->printInfos('ACCESS_PUBLIC'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$sql = "SELECT password, expiry_date+0 AS expiry_date, enabled FROM ".TABLE_PREFIX."course_access WHERE course_id=".$_SESSION['course_id']; +$result = mysql_query($sql, $db); + +if ($row = mysql_fetch_assoc($result)) { + $enabled = $row['enabled']; + $password = $row['password']; + $expiry = $row['expiry_date']; +} else { + $enabled = 0; + $password = strtoupper(substr(md5(rand()), 3, 8)); + $expiry = 0; + $sql = "INSERT INTO ".TABLE_PREFIX."course_access VALUES ('$password', {$_SESSION['course_id']},'0000-00-00 00:00:00', 0)"; + $result = mysql_query($sql, $db); +} +$url = AT_BASE_HREF.'acl.php?'.$password; + +?> +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + /> /> +
    + +
    +
    + + + />
    + + /> + +
    + +
    + + +
    +
    +
    + \ No newline at end of file diff --git a/tools/backup/create.php b/tools/backup/create.php new file mode 100644 index 000000000..a5cdd19e8 --- /dev/null +++ b/tools/backup/create.php @@ -0,0 +1,63 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + //make backup of current course + $Backup->create($_POST['description']); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    + +
    +
    + +
    + + getNumAvailable() >= AT_COURSE_BACKUPS): ?> +
    +

    +
    + +
    + + +
    + +
    + + +
    + +
    +
    + + \ No newline at end of file diff --git a/tools/backup/delete.php b/tools/backup/delete.php new file mode 100644 index 000000000..38003abac --- /dev/null +++ b/tools/backup/delete.php @@ -0,0 +1,52 @@ +delete($_POST['backup_id']); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} + +else if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + + $index['backup_id'] = $_GET['backup_id']; + $msg->addConfirm('DELETE', $index); + $msg->printConfirm(); + +require (AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/tools/backup/edit.php b/tools/backup/edit.php new file mode 100644 index 000000000..3805a333e --- /dev/null +++ b/tools/backup/edit.php @@ -0,0 +1,57 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +$Backup =& new Backup($db, $_SESSION['course_id']); + +if (isset($_POST['edit'])) { + $Backup->edit($_POST['backup_id'], $_POST['new_description']); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$row = $Backup->getRow($_REQUEST['backup_id']); +//check for errors + + +?> +
    + +
    +
    + + +
    + +
    + + +
    +
    +
    + \ No newline at end of file diff --git a/tools/backup/index.php b/tools/backup/index.php new file mode 100644 index 000000000..ad8b6128b --- /dev/null +++ b/tools/backup/index.php @@ -0,0 +1,96 @@ +download($_POST['backup_id']); + exit; // never reached +} else if (isset($_POST['delete'], $_POST['backup_id'])) { + header('Location: delete.php?backup_id=' . $_POST['backup_id']); + exit; +} else if (isset($_POST['edit'], $_POST['backup_id'])) { + header('Location: edit.php?backup_id=' . $_POST['backup_id']); + exit; +} else if (!empty($_POST)) { + $msg->addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$Backup =& new Backup($db, $_SESSION['course_id']); +$list = $Backup->getAvailableList(); + +?> + +
    + + + + + + + + + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } +?> + + +
    + + +
    '.AT_date(_AT('filemanager_date_format'), $row['date_timestamp'], AT_DATE_UNIX_TIMESTAMP).''.get_human_size($row['file_size']).''.AT_Print($row['description'], 'backups.description').'
    +
    + + diff --git a/tools/backup/restore.php b/tools/backup/restore.php new file mode 100644 index 000000000..ec78a2fcc --- /dev/null +++ b/tools/backup/restore.php @@ -0,0 +1,104 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + if (!$_POST['material']) { + $msg->addError(array('EMPTY_FIELDS', _AT('material'))); + } else { + $Backup->restore($_POST['material'], $_POST['action'], $_POST['backup_id']); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$row = $Backup->getRow($_REQUEST['backup_id']); + +?> + +
    + + +
    +
    +
    *

    + +

    + + getModules(AT_MODULE_STATUS_ENABLED, 0, TRUE); + $keys = array_keys($modules); + $i=0; + ?> + + + isBackupable()): ?> +
    + + +
    + +
    +
    +
    + +
    +
    + +
    + + +
    +
    +
    + + + + \ No newline at end of file diff --git a/tools/backup/upload.php b/tools/backup/upload.php new file mode 100644 index 000000000..d9e13b9bd --- /dev/null +++ b/tools/backup/upload.php @@ -0,0 +1,83 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['upload']) && ($Backup->getNumAvailable() < AT_COURSE_BACKUPS)) { + $Backup->upload($_FILES, $_POST['description']); + + $_SESSION['done'] = 1; + + if($msg->containsErrors()) { + header('Location: upload.php'); + exit; + } else { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    +
    +
    +

    +
    + + getNumAvailable() >= AT_COURSE_BACKUPS): ?> +
    +

    +
    + +
    +
    + +
    + +
    +
    + +
    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tools/chat/delete_transcript.php b/tools/chat/delete_transcript.php new file mode 100644 index 000000000..4f565f758 --- /dev/null +++ b/tools/chat/delete_transcript.php @@ -0,0 +1,58 @@ +addFeedback('CANCELLED'); + Header('Location: index.php'); + exit; +} + +if ($_POST['submit_yes']) { + unlink(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/'.$m.'.html'); + + //if its the current tran, unset it + if (str_replace('.html', '', $admin['tranFile']) == $m) { + $admin['produceTran'] = 0; + writeAdminSettings($admin); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + Header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (!file_exists(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/'.$m.'.html')) { + $msg->printErrors('NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$hidden_vars['m'] = $m; + +$msg->addConfirm(array('DELETE_TRANSCRIPT', $m), $hidden_vars); +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> diff --git a/tools/chat/index.php b/tools/chat/index.php new file mode 100644 index 000000000..7d3c143cb --- /dev/null +++ b/tools/chat/index.php @@ -0,0 +1,150 @@ +addError('TRANSCRIPT_ACTIVE'); + } else { + header("Location:delete_transcript.php?m=".$_GET['file']); + exit; + } +} +require(AT_INCLUDE_PATH.'header.inc.php'); + +$orders = array('asc' => 'desc', 'desc' => 'asc'); +$cols = array('name' => 1, 'date' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'date'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'date'; +} else { + // no order set + $order = 'desc'; + $col = 'date'; +} + +$tran_files = array(); +if (!@opendir(AT_CONTENT_DIR . 'chat/')){ + mkdir(AT_CONTENT_DIR . 'chat/', 0777); +} + +if(!file_exists(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/admin.settings')){ + @mkdir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'], 0777); + @mkdir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/', 0776); + @mkdir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/msgs/', 0776); + @mkdir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/users/', 0776); + @copy('admin.settings.default', AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/admin.settings'); + @chmod (AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/admin.settings', 0777); + +} + +if ($dir = @opendir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/')) { + while (($file = readdir($dir)) !== false) { + if (substr($file, -strlen('.html')) == '.html') { + $la = stat(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/'.$file); + + $file = str_replace('.html', '', $file); + $tran_files[$file] = $la['ctime']; + } + } +} + +if (count($tran_files) == 0) { + echo '

    '._AT('chat_none_found').'

    '; +} else {?> + +
    + + + + + + + + + + + + + + + + + + + + + + + + + $date) { ?> + + + + + + + + + + + + + + + + + +
     
    + +
    +
    + \ No newline at end of file diff --git a/tools/chat/start_transcript.php b/tools/chat/start_transcript.php new file mode 100644 index 000000000..1e25470cc --- /dev/null +++ b/tools/chat/start_transcript.php @@ -0,0 +1,235 @@ + $prefValue) { + $settings .= $prefKey.'='.$prefValue."\n"; + } + + flock($fp, LOCK_EX); + if (!@fwrite($fp, $settings)) { + return 0; + } + flock($fp, LOCK_UN); + chmod(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/admin.settings', 0600); + + return 1; +} + +function getAdminSettings() { + if (!file_exists(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/admin.settings')) { + return 0; + } + + $admin = array(); + + $file_prefs = file(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/admin.settings'); + foreach ($file_prefs as $pref) { + $pref = explode('=', $pref, 2); + $admin[$pref[0]] = trim($pref[1]); + } + + if ($admin['returnT'] && $admin['returnL']) { + $admin['returnLink'] = ''.$admin['returnT'].''; + } else { + $admin['returnLink'] = ''; + } + + return $admin; +} + +function defaultAdminSettings() { + $admin = array(); + + //$admin['cgiURL'] = 'http://dev.atutor.ca/chat/'; + //$admin['htmlDir'] = '/usr/webserver/content/snow/chat/'; + //$admin['htmlURL'] = 'http://dev.atutor.ca/discussions/achat/'; + $admin['msgLifeSpan'] = 1800; /* 30 min */ + $admin['chatIDLifeSpan'] = 2678400; /* 1 month */ + $admin['chatSessionLifeSpan'] = 3600; /* 1 hour */ + //$admin['chatName'] = 'Accessible Chat'; + //$admin['chatIDListFlag'] = 0; + // $admin['returnL'] = 'http://dev.atutor.ca'; + //$admin['returnT'] = 'Return to the ATRC'; + //$admin['adminPass'] = 'temppass'; + + return $admin; +} + +$admin = getAdminSettings(); +if ($admin === 0) { + $admin = defaultAdminSettings(); +} + +if (isset($_POST['submit'])) { + $admin['adminPass'] = $_POST['newAdminPass']; + $adminPass = $_POST['newAdminPass']; + $admin['chatName'] = $_POST['chatName']; + $admin['returnL'] = $_POST['returnL']; + $admin['returnT'] = $_POST['returnT']; + $admin['msgLifeSpan'] = $_POST['msgLifeSpan']; + $admin['chatSessionLifeSpan'] = $_POST['chatSessionLifeSpan']; + $admin['chatIDLifeSpan'] = $_POST['chatIDLifeSpan']; + writeAdminSettings($admin); + +} else if (isset($_POST['submit2'])) { + @mkdir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'] . '/tran'); + if(file_exists(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/'.$_POST['tranFile'].'.html')){ + $warnings = array('CHAT_TRAN_EXISTS', $_POST['tranFile']); //'file already exists'; + $msg->addWarning($warnings); + } else if ($_POST['function'] == 'startTran') { + if (!(eregi("^[a-zA-Z0-9_]([a-zA-Z0-9_])*$", $_POST['tranFile']))){ + $msg->addError('CHAT_TRAN_REJECTED'); + } else { + $admin['produceTran'] = 1; + $admin['tranFile'] = $_POST['tranFile'] . '.html'; + writeAdminSettings($admin); + $tran = '

    '._AT('chat_transcript_start').' '.date('Y-M-d H:i').'

    '; + $tran .= ''; + + $fp = fopen(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/'.$admin['tranFile'], 'w+'); + + flock($fp, LOCK_EX); + if (!fwrite($fp, $tran)) { + return 0; + } + flock($fp, LOCK_UN); + + header('Location: index.php'); + exit; + } + } else if ($_POST['function'] == 'stopTran') { + $admin['produceTran'] = 0; + writeAdminSettings($admin); + + $tran = '

    '._AT('chat_transcript_end').' '.date('Y-M-d H:i').'

    '; + $fp = @fopen(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/tran/'.$admin['tranFile'], 'a'); + + @flock($fp, LOCK_EX); + if (!@fwrite($fp, $tran)) { + return 0; + } + flock($fp, LOCK_UN); + + header('Location: index.php'); + exit; + } +} else if ($_GET['function'] == 'clearOldChatIDs') { + $return = clearOutOldChatPrefs(); +} else if ($_POST['submit3']) { + deleteUser($_POST['delName']); +} else if ($_POST['submit4']) { + if ($dir = @opendir(AT_CONTENT_DIR . 'chat/'.$_SESSION['course_id'].'/users/')) { + while (($file = readdir($dir)) !== false) { + if (substr($file, -strlen('.prefs')) == '.prefs') { + $chatName = substr($file, 0, -strlen('.prefs')); + deleteUser($chatName); + } + } + } +} + + +require(AT_INCLUDE_PATH.'header.inc.php'); + + if ($return != '') { + echo ''.$return.''; + } + + if ($admin['msgLifeSpan'] < 650) { + $m10 = ' selected '; + } else if ($admin['msgLifeSpan'] < 950) { + $m30 = ' selected '; + } else if ($admin['msgLifeSpan'] < 1850) { + $m60 = ' selected '; + } else if ($admin['msgLifeSpan'] < 10850) { + $m180 = ' selected '; + } else { + $m1D = ' selected '; + } + + if ($admin['chatSessionLifeSpan'] < 650) { + $s10 = ' selected '; + } else if ($admin['chatSessionLifeSpan'] < 950) { + $s30 = ' selected '; + } else if ($admin['chatSessionLifeSpan'] < 1850) { + $s60 = ' selected '; + } else if ($admin['chatSessionLifeSpan'] < 10850) { + $s180 = ' selected '; + } else { + $s1D = ' selected '; + } + if ($admin['chatIDLifeSpan'] < 86450) { + $i1D = ' selected '; + } else if ($admin['chatIDLifeSpan'] < 1728050) { + $i20D = ' selected '; + } else if ($admin['chatIDLifeSpan'] < 2592050) { + $i1M = ' selected '; + } else { + $i1Y = ' selected '; + } +?> + + +
    +
    + +
    + +'; + + if ($admin['produceTran'] > 0) { + echo ''; + echo '
    '; + echo _AT('chat_current_tran').' '.str_replace('.html', '', $admin['tranFile']).'.

    '; + echo '
    '; + + echo '
    '; + echo ''; + echo '
    '; + + } else { + echo ''; + + echo '
    '; + echo _AT('chat_tran_file_name').' '; + echo ''; + echo '
    '; + + echo '
    '; + echo ''; + echo '
    '; + } + echo '
    '; + echo ''; + + require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/chat/view_transcript.php b/tools/chat/view_transcript.php new file mode 100644 index 000000000..741eeff61 --- /dev/null +++ b/tools/chat/view_transcript.php @@ -0,0 +1,22 @@ +'; +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/content/index.php b/tools/content/index.php new file mode 100644 index 000000000..7571af969 --- /dev/null +++ b/tools/content/index.php @@ -0,0 +1,143 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($_GET['col']) { + $col = addslashes($_GET['col']); +} else { + $col = 'content_parent_id, ordering'; +} + +if ($_GET['order']) { + $order = addslashes($_GET['order']); +} else { + $order = 'asc'; +} + +if (!isset($_GET['sub_content'])) { + $parent_id = 0; +} else { + $parent_id = intval($_GET['id']); +} + + +$all_content = $contentManager->getContent(); + +$content = $all_content[$parent_id]; + +function print_select($pid, $depth) { + global $all_content; + + if (!isset($all_content[$pid])) { + return; + } + + foreach ($all_content[$pid] as $row) { + if (isset($all_content[$row['content_id']])) { + echo ''; + + print_select($row['content_id'], $depth+1); + } + } +} + +?> + +
    +
    +

    +
    + +
    + +
    + +
    + +
    +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     #
    + + + + + +
    + + \ No newline at end of file diff --git a/tools/course_email.php b/tools/course_email.php new file mode 100644 index 000000000..2d055d76e --- /dev/null +++ b/tools/course_email.php @@ -0,0 +1,215 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $missing_fields = array(); + + $_POST['to_enrolled'] = trim($_POST['to_enrolled']); + $_POST['to_unenrolled'] = trim($_POST['to_unenrolled']); + $_POST['to_alumni'] = trim($_POST['to_alumni']); + $_POST['to_assistants'] = trim($_POST['to_assistants']); + + $_POST['subject'] = trim($_POST['subject']); + $_POST['body'] = trim($_POST['body']); + + if ( ($_POST['to_enrolled'] == '') && + ($_POST['to_unenrolled'] == '') && + ($_POST['to_alumni'] == '') && + ($_POST['to_assistants'] == '') && + ($_POST['groups'] == '') + ) { + $missing_fields[] = _AT('to'); + } + + if ($_POST['subject'] == '') { + $missing_fields[] = _AT('subject'); + } + + if ($_POST['body'] == '') { + $missing_fields[] = _AT('body'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $email_sql = "SELECT email FROM ".TABLE_PREFIX."course_enrollment C INNER JOIN ".TABLE_PREFIX."members M USING (member_id) WHERE C.course_id=$course AND ("; + + if ($_POST['to_unenrolled']) { + // choose all unenrolled + $email_sql .= "C.approved='n' OR "; + } + + if ($_POST['to_alumni']) { + // choose all alumni + $email_sql .= "C.approved='a' OR "; + } + + if ($_POST['to_assistants']){ + // choose all assistants + $email_sql .= "C.privileges<>0 OR "; + } + + if ($_POST['groups']) { + // specific groups + $groups = implode(',', $_POST['groups']); + + $group_members = array(); + $sql = "SELECT member_id FROM ".TABLE_PREFIX."groups_members WHERE group_id IN ($groups)"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $group_members[] = $row['member_id']; + } + $group_members = implode(',', $group_members); + + $email_sql .= "M.member_id IN ($group_members) OR "; + } else if ($_POST['to_enrolled']) { + // includes instructor + $email_sql .= "C.approved='y' OR "; + } + + $email_sql = substr_replace($email_sql, '', -4). ')'; // strip off the last ' OR ' + $result = mysql_query($email_sql,$db); + + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + + // generate email recipients + $mail_list = array(); + while ($row = mysql_fetch_assoc($result)) { + $mail_list[]=$row['email']; + } + + // Get instructor ID. + $result = mysql_query("SELECT member_id FROM ".TABLE_PREFIX."courses WHERE course_id=$course",$db); + $row = mysql_fetch_assoc($result); + $instructor_id = $row['member_id']; + + // Add instructor to email list if he is not the one sending email. + if ($instructor_id != $_SESSION['member_id']) { + $sql = "SELECT email FROM ".TABLE_PREFIX."members WHERE member_id=$instructor_id"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + $mail_list[]= $row['email']; + } + + // Get the sender. + $result = mysql_query("SELECT email, first_name, last_name FROM ".TABLE_PREFIX."members WHERE member_id=$_SESSION[member_id]", $db); + $row = mysql_fetch_assoc($result); + $mail_list[] = $row['email']; + + // Prep the mailer. + $mail = new ATutorMailer; + $mail->From = $row['email']; + $mail->FromName = $row['first_name'] . ' ' . $row['last_name']; + $mail->AddAddress($row['email']); + $mail->Subject = $_POST['subject']; + $mail->Body = $_POST['body']; + foreach ($mail_list as $recip) { + $mail->AddBCC($recip); + } + if(!$mail->Send()) { + //echo 'There was an error sending the message'; + $msg->printErrors('SENDING_ERROR'); + exit; + } + unset($mail); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."course_enrollment C, ".TABLE_PREFIX."members M WHERE C.course_id=$course AND C.member_id=M.member_id AND M.member_id<>$_SESSION[member_id] ORDER BY C.approved, M.login"; +$result = mysql_query($sql,$db); +$row = mysql_fetch_array($result); +if ($row['cnt'] == 0) { + $msg->printInfos('NO_STUDENTS'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +?> + + + +
    +
    +
    *
    +
    + /> + /> + /> + /> + + + +

    + :
    + + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    + + +
    +
    + + + \ No newline at end of file diff --git a/tools/course_properties.php b/tools/course_properties.php new file mode 100644 index 000000000..cfb82812e --- /dev/null +++ b/tools/course_properties.php @@ -0,0 +1,69 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; + +}else if($_POST['submit']){ + + require(AT_INCLUDE_PATH.'lib/course.inc.php'); + $_POST['instructor'] = $_SESSION['member_id']; + + $errors = add_update_course($_POST); + + if (is_numeric($errors)) { + $msg->addFeedback('COURSE_PROPERTIES'); + header('Location: '.AT_BASE_HREF.'tools/index.php'); + exit; + } + +//}else if(($_POST['setvisual'] && !$_POST['settext']) || $_GET['setvisual'])){ +} else if (($_POST['setvisual'] || $_POST['settext'])){ + //header('Location: '.$_SESSION['PHP_SELF'].''); + //exit; +} else if (isset($_POST['course'])) { + require(AT_INCLUDE_PATH.'lib/course.inc.php'); + $_POST['instructor'] = $_SESSION['member_id']; + + $errors = add_update_course($_POST); + + if (is_numeric($errors)) { + $msg->addFeedback('COURSE_PROPERTIES'); + header('Location: '.AT_BASE_HREF.'tools/index.php'); + exit; + } +} + +$onload = 'document.course_form.title.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +require(AT_INCLUDE_PATH.'html/course_properties.inc.php'); + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/tools/course_stats.php b/tools/course_stats.php new file mode 100644 index 000000000..1ff34735d --- /dev/null +++ b/tools/course_stats.php @@ -0,0 +1,204 @@ + $row['guests']+$row['members']) { + $min_total_logins = $row['guests']+$row['members']; + } + + $total_logins += $row['guests']+$row['members']; + } + + /* add zeros to the end of the month, only if it isn't the current month */ + $now_month = date('m'); + $now_year = date('Y'); + if ( (($month < $now_month) && ($now_year == $year)) || ($now_year < $year) ) { + $today++; + while (checkdate($month, $today,$year)) { + $days[$today] = array(0, 0); + $today++; + } + } + $num_days = count($days); + + if ($total_logins > 0) { + $avg_total_logins = $total_logins/$num_days; + } else { + $avg_total_logins = 0; + } + + $block_height = 10; + $multiplyer_height = 5; /* should be multiples of 5 */ + + if ($month == 12) { + $next_month = 1; + $next_year = $year + 1; + } else { + $next_month = $month + 1; + $next_year = $year; + } + + if ($month == 1) { + $last_month = 12; + $last_year = $year - 1; + } else { + $last_month = $month - 1; + $last_year = $year; + } + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + + + + +'; + echo ''; + echo ''; + echo '
    '; + echo ' '.AT_date('%F', $last_month, AT_DATE_INDEX_VALUE ); ?> | + | '; + echo AT_date('%F', $next_month, AT_DATE_INDEX_VALUE); ?>
    '._AT('no_month_data').'
    '; + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +?> +
    :
    :
    :
    :
    : + + + + + $logins) { + $dd++; + echo ''; + + } while ($row = mysql_fetch_array($result)); +?> + + + + + +

    '.$logins[0].' '._AT('guests').' ('.($logins[0]+$logins[1]).' '._AT('total').')
    '.$logins[1].' '._AT('members').' ('.($logins[1]+$logins[0]).' '._AT('total').')
    '.$dd.' 
    0
    + + : <?php echo _AT('red_members'); ?> , + <?php echo _AT('blue_guests'); ?> . +
    : + + + + + + + + + + + + $logins):?> + + + + + + + +
    + +
    + \ No newline at end of file diff --git a/tools/course_tracker.php b/tools/course_tracker.php new file mode 100644 index 000000000..b1e1bac2b --- /dev/null +++ b/tools/course_tracker.php @@ -0,0 +1,315 @@ +printErrors($errors); + exit; + } + @fputs($fp, $this_row); @fclose($fp); + @readfile(AT_CONTENT_DIR . 'export/'.escapeshellcmd($name).'_tracking.csv'); + @unlink(AT_CONTENT_DIR . 'export/'.escapeshellcmd($name).'_tracking.csv'); + exit; + + +} + +/////// +require(AT_INCLUDE_PATH.'header.inc.php'); + +// Give the user two chances when deleting tracking data +if ($_GET['reset']==1){ + echo ''; + $warnings=array('DELETE_TRACKING', $_SERVER['PHP_SELF']); + $msg->printWarnings($warnings); + + /* Since we do not know which choice will be taken, assume it No/Cancel, addFeedback('CENCELLED) + * If sent to results.php then OK, else if sent back here & if $_GET['reset']=2 then assumed choice was not taken + * ensure that addFeeback('CANCELLED') is properly cleaned up, see below + */ + $msg->addFeedback('CANCELLED'); + echo '
    '._AT('yes_delete').' | '._AT('no').'
    '; + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} else if($_GET['reset']==2) { + /* We must ensure that any previous feedback is flushed, + * since AT_FEEDBACK_CANCELLED might be present + * if Yes/Delete was chosen above when reset was = 1 + */ + $msg->deleteFeedback('CANCELLED'); // makes sure its not there + + $sql_delete= "delete from ".TABLE_PREFIX."g_click_data where course_id='$_SESSION[course_id]'"; + if ($result_delete_track=mysql_query($sql_delete, $db)){ + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } else { + $msg->addError('TRACKING_NOT_DELETED'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +} +///////////////////////////// +// Top of the page +$msg->printAll(); + +//This page is only for instructor/owners +if(!authenticate(AT_PRIV_ADMIN, AT_PRIV_RETURN)){ + $msg->printInfos('NO_PERMISSION'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +//} +//see if tracking is turned on +$sql="SELECT tracking from ".TABLE_PREFIX."courses where course_id=$_SESSION[course_id]"; +$result=mysql_query($sql, $db); +while($row= mysql_fetch_array($result)){ + if($row['tracking'] == "off"){ + if(authenticate(AT_PRIV_ADMIN, AT_PRIV_RETURN)){ + $msg->addInfo('TRACKING_OFFIN'); + }else{ + $msg->addInfo('TRACKING_OFFST'); + } + $msg->printInfos(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +} + +$msg->printWarnings(); + +?> +
      +
    • +
      +
    • +
    • +
      +
    • +
    • +
      +
    • +
    • +
      +
    • +
    + +
    + + + + + + + + + + + + + + +
    +
    + > + > + + +
    +
    + \ No newline at end of file diff --git a/tools/delete_course.php b/tools/delete_course.php new file mode 100644 index 000000000..65add3009 --- /dev/null +++ b/tools/delete_course.php @@ -0,0 +1,50 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/course_properties.php'); + exit; +} else if (isset($_POST['step']) && ($_POST['step'] == 2) && isset($_POST['submit_yes'])) { + require(AT_INCLUDE_PATH.'lib/filemanager.inc.php'); + require(AT_INCLUDE_PATH.'lib/delete_course.inc.php'); + + delete_course($_SESSION['course_id'], $entire_course = true); // delete the course + cache_purge('system_courses','system_courses'); // purge the system_courses cache (if successful) + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'bounce.php?course=0'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (!isset($_POST['step'])) { + $hidden_vars['step'] = 1; + $msg->addConfirm(array('DELETE_COURSE_1', $system_courses[$_SESSION['course_id']]['title']), $hidden_vars); + $msg->printConfirm(); +} else if ($_POST['step'] == 1) { + $hidden_vars['step'] = 2; + $msg->addConfirm(array('DELETE_COURSE_2', $system_courses[$_SESSION['course_id']]['title']), $hidden_vars); + $msg->printConfirm(); +} + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/edit_styles.php b/tools/edit_styles.php new file mode 100644 index 000000000..dd37b1b9e --- /dev/null +++ b/tools/edit_styles.php @@ -0,0 +1,51 @@ +'; + if ($_SESSION['prefs'][PREF_CONTENT_ICONS] != 2) { + echo ''; + } + if ($_SESSION['prefs'][PREF_CONTENT_ICONS] != 1) { + echo ' '._AT('tools').''; + } +echo ''; + +echo '

    '; + if ($_SESSION['prefs'][PREF_CONTENT_ICONS] != 2) { + echo '  '; + } + if ($_SESSION['prefs'][PREF_CONTENT_ICONS] != 1) { + echo _AT('style_editor'); + } +echo '

    '; + +$msg->addInfo('CSS_DEPRECATED'); +if (file_exists('../' . $filename)) { + $info = array('CSS_DEPRECATED_DL', AT_BASE_HREF . $filename); + $msg->addInfo($info); +} + +$msg->printInfos(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/enrollment/create_course_list.php b/tools/enrollment/create_course_list.php new file mode 100644 index 000000000..4a3b3eb90 --- /dev/null +++ b/tools/enrollment/create_course_list.php @@ -0,0 +1,68 @@ +printAll(); +?> + +
    + +
    +
    +
    + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + + +
    +
    + + \ No newline at end of file diff --git a/tools/enrollment/enroll_edit.php b/tools/enrollment/enroll_edit.php new file mode 100644 index 000000000..fc0935f14 --- /dev/null +++ b/tools/enrollment/enroll_edit.php @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/tools/enrollment/export_course_list.php b/tools/enrollment/export_course_list.php new file mode 100644 index 000000000..f09e15d5d --- /dev/null +++ b/tools/enrollment/export_course_list.php @@ -0,0 +1,123 @@ +addError('NO_STUDENT_SELECTED'); + } + //retrieve info from database based on selection (make sure that instructor is not exported!) + else { + if ($_POST['enrolled'] && $_POST['pending_enrollment'] && $_POST['alumni']) { + $condition = ""; + } else if ($_POST['enrolled'] && $_POST['pending_enrollment']) { + $condition = "AND approved <> 'a'"; + } else if ($_POST['enrolled'] && $_POST['alumni']) { + $condition = "AND approved <> 'n'"; + } else if ($_POST['pending_enrollment'] && $_POST['alumni']) { + $condition = "AND approved <> 'y'"; + } else if ($_POST['pending_enrollment']) { + $condition = "AND approved = 'n'"; + } else if ($_POST['enrolled']) { + $condition = "AND approved = 'y'"; + } else if ($_POST['alumni']) { + $condition = "AND approved = 'a'"; + } + + $sql = "SELECT m.first_name, m.last_name, m.email + FROM ".TABLE_PREFIX."course_enrollment cm JOIN ".TABLE_PREFIX."members m ON cm.member_id = m.member_id JOIN ".TABLE_PREFIX."courses c ON (cm.course_id = c.course_id AND cm.member_id <> c.member_id) WHERE cm.course_id = $_SESSION[course_id] " . $condition . "ORDER BY m.last_name"; + + $result = mysql_query($sql,$db); + while ($row = mysql_fetch_assoc($result)){ + $this_row .= quote_csv($row['first_name']).","; + $this_row .= quote_csv($row['last_name']).","; + $this_row .= quote_csv($row['email'])."\n"; + } + + if ($this_row) { + header('Content-Type: text/csv'); + header('Content-transfer-encoding: binary'); + header('Content-Disposition: attachment; filename="course_list_'.$_SESSION['course_id'].'.csv"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Pragma: public'); + + echo $this_row; + } else { + // nothing to send. empty file + $msg->addError('ENROLLMENT_NONE_FOUND'); + header('Location: export_course_list.php'); + } + exit; + } +} +if(isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +if(isset($_POST['done'])) { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} +require(AT_INCLUDE_PATH.'header.inc.php'); + + +?> + +
    +
    +
    +
    +
    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/enrollment/import_course_list.php b/tools/enrollment/import_course_list.php new file mode 100644 index 000000000..c84fbff7d --- /dev/null +++ b/tools/enrollment/import_course_list.php @@ -0,0 +1,51 @@ + +
    + + + +
    + +
    +

    +
    + +
    +
    + + + + +
    + +
    +
    *

    + +
    + +
    + +
    + +
    +
    + + \ No newline at end of file diff --git a/tools/enrollment/index.php b/tools/enrollment/index.php new file mode 100644 index 000000000..3f72c17e2 --- /dev/null +++ b/tools/enrollment/index.php @@ -0,0 +1,28 @@ +printErrors('NOT_OWNER'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$course_id = $_SESSION['course_id']; + +require(AT_INCLUDE_PATH.'html/enrollment.inc.php'); +exit; +?> \ No newline at end of file diff --git a/tools/enrollment/privileges.php b/tools/enrollment/privileges.php new file mode 100644 index 000000000..76cd26a59 --- /dev/null +++ b/tools/enrollment/privileges.php @@ -0,0 +1,27 @@ +addError('ACCESS_DENIED'); + header('Location: index.php'); + exit; +} + +$course_id = $_SESSION['course_id']; + +require(AT_INCLUDE_PATH.'html/privileges.inc.php'); +exit; +?> \ No newline at end of file diff --git a/tools/enrollment/verify_list.php b/tools/enrollment/verify_list.php new file mode 100644 index 000000000..6d3d6cd1a --- /dev/null +++ b/tools/enrollment/verify_list.php @@ -0,0 +1,216 @@ +addFeedback('ADDMORE'); + header('Location: create_course_list.php'); + exit; +} else if (isset($_POST['return'])) { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} else if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit']) && !$_POST['verify']) { + //CREATE COURSE LIST!!!!!! + if ($_POST['from'] == 'create') { + if (empty($_POST['first_name1']) && empty($_POST['last_name1']) && empty($_POST['email1'])) { + $msg->addError('INCOMPLETE'); + header('Location: ./create_course_list.php'); + exit; + } else { + $j=1; + while ($_POST['first_name'.$j] || $_POST['last_name'.$j] || $_POST['email'.$j]) { + $students[] = checkUserInfo(array('fname' => $_POST['first_name'.$j], 'lname' => $_POST['last_name'.$j], 'email' => $_POST['email'.$j])); + $j++; + } + } + } + //IMPORT COURSE LIST!!!!!! + else if ($_POST['from'] == 'import') { + if ($_FILES['file']['size'] < 1) { + $msg->addError('FILE_EMPTY'); + header('Location: ./import_course_list.php'); + exit; + } else { + $fp = fopen($_FILES['file']['tmp_name'],'r'); + $line_number=0; + while ($data = fgetcsv($fp, 100000, ',')) { + $line_number++; + $num_fields = count($data); + if ($num_fields == 3) { + $students[] = checkUserInfo(array('fname' => $data[0], 'lname' => $data[1], 'email' => $data[2])); + } else if ($num_fields != 1) { + $errors = array('INCORRECT_FILE_FORMAT', $line_number); + $msg->addError($errors); + header('Location: ./import_course_list.php'); + exit; + } else if (($num_fields == 1) && (trim($data[0]) != '')) { + $errors = array('INCORRECT_FILE_FORMAT', $line_number); + $msg->addError($errors); + header('Location: ./import_course_list.php'); + exit; + } + } + } + } +} +/************* INFO GATHERED **************/ + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +if ($_POST['verify']) { + for ($i=0; $i<$_POST['count']; $i++) { + $students[] = checkUserInfo(array('fname' => $_POST['fname'.$i], 'lname' => $_POST['lname'.$i], 'email' => $_POST['email'.$i], 'uname' => $_POST['uname'.$i], 'remove' => $_POST['remove'.$i])); + + if (!empty($students[$i]['err_email']) || !empty($students[$i]['err_uname'])) { + $still_errors = TRUE; + } + } + + /**************************************************************************/ + // !!!!!!STEP 3 - INSERT INTO DB !!!!!!! + if (!$still_errors && (isset($_POST['submit_unenr']) || isset($_POST['submit_enr']))) { + + $enroll = 'y'; + if (isset($_POST['submit_unenr'])) { + $enroll = 'n'; + } + + add_users($students, $enroll, $_SESSION['course_id']); + + $msg->printFeedbacks(); ?> + +
    +
    +
    + + +
    +
    +
    + +
    + + + + + + + + + + + + + + '; + foreach ($students as $student) { + echo ''; + echo ''; + + if (empty($student['exists'])) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + } + + $dsbld = ''; + if ($still_errors || $err_count>0) { + $dsbld = 'disabled="disabled"'; + } ?> + + + + + + + +
    '; + + //give status + if(!empty($student['err_email'])) { + echo $student['err_email']; + } + if(!empty($student['err_uname'])) { + if(!empty($student['err_email'])) { + echo '
    '; + } + echo $student['err_uname']; + } + if (empty($student['err_uname']) && empty($student['err_email'])) { + + if ($student['remove']) { + echo '
    '._AT('removed'); + } else if ($student['err_disabled']) { + echo ''._AT('disabled'); + } else if (!empty($student['exists'])) { + echo ''._AT('ok').' - '.$student['exists']; + } else { + echo ''._AT('ok'); + } + } else { + $err_count++; + } + echo '
    '; + echo ''; + } else { + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''.AT_print($student['fname'], 'members.first_name').''.AT_print($student['lname'], 'members.last_name').''.AT_print($student['email'], 'members.email').''.AT_print($student['uname'], 'members.login').''; + } + $i++; + echo '
    + + /> +
    + \ No newline at end of file diff --git a/tools/filemanager/delete.php b/tools/filemanager/delete.php new file mode 100644 index 000000000..3f14c3d44 --- /dev/null +++ b/tools/filemanager/delete.php @@ -0,0 +1,140 @@ +addFeedback('CANCELLED'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; +} + +if (isset($_POST['submit_yes'])) { + /* delete files and directories */ + /* delete the file */ + $pathext = $_POST['pathext']; + if (isset($_POST['listoffiles'])) { + $checkbox = explode(',',$_POST['listoffiles']); + $count = count($checkbox); + $result=true; + for ($i=0; $i<$count; $i++) { + $filename=$checkbox[$i]; + + if (course_realpath($current_path . $pathext . $filename) == FALSE) { + $msg->addError('FILE_NOT_DELETED'); + $result=false; + break; + } else if (!(@unlink($current_path.$pathext.$filename))) { + $msg->addError('FILE_NOT_DELETED'); + $result=false; + break; + } + } + if ($result) + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } + /* delete directory */ + if (isset($_POST['listofdirs'])) { + + $checkbox = explode(',',$_POST['listofdirs']); + $count = count($checkbox); + $result=true; + for ($i=0; $i<$count; $i++) { + $filename=$checkbox[$i]; + + if (strpos($filename, '..') !== false) { + $msg->addError('UNKNOWN'); + $result=false; + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; + } else if (!is_dir($current_path.$pathext.$filename)) { + $msg->addError(array('DIR_NOT_DELETED',$filename)); + $result=false; + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; + } else if (!($result = clr_dir($current_path.$pathext.$filename))) { + $msg->addError('DIR_NO_PERMISSION'); + $result=false; + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; + } + } + if ($result) + $msg->addFeedback('DIR_DELETED'); + } + + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; +} + + require(AT_INCLUDE_PATH.'header.inc.php'); + // find the files and directories to be deleted + $total_list = explode(',', $_GET['list']); + $pathext = $_GET['pathext']; + $popup = $_GET['popup']; + $framed = $_GET['framed']; + + $count = count($total_list); + $countd = 0; + $countf = 0; + + foreach ($total_list as $list_item) { + if (is_dir($current_path.$pathext.$list_item)) { + $_dirs[$countd] = $list_item; + $countd++; + } else { + $_files[$countf] = $list_item; + $countf++; + } + } + + $hidden_vars['pathext'] = $pathext; + $hidden_vars['popup'] = $popup; + $hidden_vars['framed'] = $framed; + + if (isset($_files)) { + $list_of_files = implode(',', $_files); + $hidden_vars['listoffiles'] = $list_of_files; + + foreach ($_files as $file) { + $file_list_to_print .= '
  • '.$file.'
  • '; + } + $msg->addConfirm(array('FILE_DELETE', $file_list_to_print), $hidden_vars); + } + + if (isset($_dirs)) { + $list_of_dirs = implode(',', $_dirs); + $hidden_vars['listofdirs'] = $list_of_dirs; + + foreach ($_dirs as $dir) { + $dir_list_to_print .= '
  • '.$dir.'
  • '; + } + + $msg->addConfirm(array('DIR_DELETE',$dir_list_to_print), $hidden_vars); + } + + $msg->printConfirm(); + + require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/filemanager/edit.php b/tools/filemanager/edit.php new file mode 100644 index 000000000..668f41b10 --- /dev/null +++ b/tools/filemanager/edit.php @@ -0,0 +1,146 @@ +addFeedback('CANCELLED'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; +} + +if (isset($_POST['save'])) { + $content = str_replace("\r\n", "\n", $stripslashes($_POST['body_text'])); + $file = $_POST['file']; + + if (course_realpath($current_path . $pathext . $file) == FALSE) { + $msg->addError('FILE_NOT_SAVED'); + } else { + if (($f = @fopen($current_path.$pathext.$file, 'w')) && (@fwrite($f, $content) !== false) && @fclose($f)) { + $msg->addFeedback(array('FILE_SAVED', $file)); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; + } else { + $msg->addError('FILE_NOT_SAVED'); + } + } + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; +} + + +$path_parts = pathinfo($current_path.$pathext.$file); +$ext = strtolower($path_parts['extension']); + +// open file to edit +$real = realpath($current_path . $pathext . $file); + +if (course_realpath($current_path . $pathext . $file) == FALSE) { + // error: File does not exist + $msg->addError('FILE_NOT_EXIST'); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; +} else if (is_dir($current_path.$pathext.$file)) { + // error: cannot edit folder + $msg->addError('BAD_FILE_TYPE'); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; +} else if (!is_readable($current_path.$pathext.$file)) { + // error: File cannot open file + $msg->addError(array('CANNOT_OPEN_FILE', $file)); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; +} else if (in_array($ext, $editable_file_types)) { + $_POST['body_text'] = file_get_contents($current_path.$pathext.$file); +} else { + //error: bad file type + $msg->addError('BAD_FILE_TYPE'); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +require(AT_INCLUDE_PATH.'lib/tinymce.inc.php'); + +if (!isset($_REQUEST['setvisual']) && !isset($_REQUEST['settext'])) { + if ($_SESSION['prefs']['PREF_CONTENT_EDITOR'] == 1) { + $_POST['formatting'] = 1; + $_REQUEST['settext'] = 0; + $_REQUEST['setvisual'] = 0; + + } else if ($_SESSION['prefs']['PREF_CONTENT_EDITOR'] == 2) { + $_POST['formatting'] = 1; + $_POST['settext'] = 0; + $_POST['setvisual'] = 1; + + } else { // else if == 0 + $_POST['formatting'] = 0; + $_REQUEST['settext'] = 0; + $_REQUEST['setvisual'] = 0; + } +} +if (($_POST['setvisual'] && !$_POST['settext']) || $_GET['setvisual']) { + load_editor('body_text'); +} + + +?> + +
    + + + + + +
    +
    +

    +
    +
    + '; + echo ''; + } else { + echo ''; + } + ?> +
    +
    +
    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/filemanager/index.php b/tools/filemanager/index.php new file mode 100644 index 000000000..2a064f33e --- /dev/null +++ b/tools/filemanager/index.php @@ -0,0 +1,50 @@ + + + \ No newline at end of file diff --git a/tools/filemanager/move.php b/tools/filemanager/move.php new file mode 100644 index 000000000..8c4310f9d --- /dev/null +++ b/tools/filemanager/move.php @@ -0,0 +1,196 @@ +addFeedback('CANCELLED'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_REQUEST['framed'].SEP.'popup='.$_REQUEST['popup']); + exit; +} + +if (isset($_POST['submit_yes'])) { + $dest = $_POST['dest'] .'/'; + $pathext = $_POST['pathext']; + + if (isset($_POST['listofdirs'])) { + + $_dirs = explode(',',$_POST['listofdirs']); + $count = count($_dirs); + + for ($i = 0; $i < $count; $i++) { + $source = $_dirs[$i]; + + if (course_realpath($current_path . $pathext . $source) == FALSE) { + // error: File does not exist + $msg->addError('DIR_NOT_EXIST'); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; + } + else if (course_realpath($current_path . $dest) == FALSE) { + // error: File does not exist + $msg->addError('UNKNOWN'); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; + } + else if (strpos($source, '..') !== false) { + $msg->addError('UNKNOWN'); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; + } + else { + @rename($current_path.$pathext.$source, $current_path.$dest.$source); + } + } + $msg->addFeedback('DIRS_MOVED'); + } + if (isset($_POST['listoffiles'])) { + + $_files = explode(',',$_POST['listoffiles']); + $count = count($_files); + + for ($i = 0; $i < $count; $i++) { + $source = $_files[$i]; + + if (course_realpath($current_path . $pathext . $source) == FALSE) { + // error: File does not exist + $msg->addError('FILE_NOT_EXIST'); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; + } + else if (course_realpath($current_path . $dest) == FALSE) { + // error: File does not exist + $msg->addError('UNKNOWN'); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; + } + else if (strpos($source, '..') !== false) { + $msg->addError('UNKNOWN'); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; + } + else { + @rename($current_path.$pathext.$source, $current_path.$dest.$source); + } + } + $msg->addFeedback('MOVED_FILES'); + } + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; +} + +if (isset($_POST['dir_chosen'])) { + $hidden_vars['framed'] = $_POST['framed']; + $hidden_vars['popup'] = $_POST['popup']; + $hidden_vars['pathext'] = $_POST['pathext']; + $hidden_vars['dest'] = $_POST['dir_name']; + + if (isset($_POST['files'])) { + $list_of_files = implode(',', $_POST['files']); + $hidden_vars['listoffiles'] = $list_of_files; + $msg->addConfirm(array('FILE_MOVE', $list_of_files, $_POST['dir_name']), $hidden_vars); + } + if (isset($_POST['dirs'])) { + $list_of_dirs = implode(',', $_POST['dirs']); + $hidden_vars['listoffiles'] = $list_of_dirs; + $msg->addConfirm(array('DIR_MOVE', $list_of_dirs, $_POST['dir_name']), $hidden_vars); + } + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printConfirm(); + require(AT_INCLUDE_PATH.'footer.inc.php'); +} +else { + require(AT_INCLUDE_PATH.'header.inc.php'); + + $tree = AT_CONTENT_DIR.$_SESSION['course_id'].'/'; + $file = $_GET['file']; + $pathext = $_GET['pathext']; + $popup = $_GET['popup']; + $framed = $_GET['framed']; + + /* find the files and directories to be copied */ + $total_list = explode(',', $_GET['list']); + + $count = count($total_list); + $countd = 0; + $countf = 0; + for ($i=0; $i<$count; $i++) { + if (is_dir($current_path.$pathext.$total_list[$i])) { + $_dirs[$countd] = $total_list[$i]; + $hidden_dirs .= ''; + $countd++; + } else { + $_files[$countf] = $total_list[$i]; + $hidden_files .= ''; + $countf++; + } + } +?> + +
    +
    +
    +

    +
    + +
    +
      +
    • '; + + echo display_tree($current_path, '', $pathext); + ?>
    • +
    +
    + +
    + + +
    +
    + + + + + +
    + + \ No newline at end of file diff --git a/tools/filemanager/new.php b/tools/filemanager/new.php new file mode 100644 index 000000000..a00b6e16e --- /dev/null +++ b/tools/filemanager/new.php @@ -0,0 +1,207 @@ +addFeedback('CANCELLED'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; +} + +if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; +} + +if (isset($_POST['submit_yes'])) { + $filename = preg_replace("{[^a-zA-Z0-9_]}","_", trim($_POST['filename'])); + $pathext = $_POST['pathext']; + + /* only html or txt extensions allowed */ + if ($_POST['extension'] == 'html') { + $extension = 'html'; + } else { + $extension = 'txt'; + } + + if (course_realpath($current_path . $pathext . $filename.'.'.$extension) == FALSE) { + $msg->addError('FILE_NOT_SAVED'); + /* take user to home page to avoid unspecified error warning */ + header('Location: index.php?pathext='.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; + } + + if (($f = @fopen($current_path.$pathext.$filename.'.'.$extension,'w')) && @fwrite($f, stripslashes($_POST['body_text'])) !== FALSE && @fclose($f)){ + $msg->addFeedback('FILE_OVERWRITE'); + } else { + $msg->addError('CANNOT_OVERWRITE_FILE'); + } + unset($_POST['newfile']); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; +} + +if (isset($_POST['savenewfile'])) { + + if (isset($_POST['filename']) && ($_POST['filename'] != "")) { + $filename = preg_replace("{[^a-zA-Z0-9_]}","_", trim($_POST['filename'])); + $pathext = $_POST['pathext']; + $current_path = AT_CONTENT_DIR.$_SESSION['course_id'].'/'; + + /* only html or txt extensions allowed */ + if ($_POST['extension'] == 'html') { + $extension = 'html'; + $head_html = "\n\n".$_POST['filename']."\n\n"; + $foot_html ="\n\n"; + } else { + $extension = 'txt'; + } + + if (!@file_exists($current_path.$pathext.$filename.'.'.$extension)) { + $content = str_replace("\r\n", "\n", $head_html.$_POST['body_text'].$foot_html); + + if (course_realpath($current_path . $pathext . $filename.'.'.$extension) == FALSE) { + $msg->addError('FILE_NOT_SAVED'); + /* take user to home page to avoid unspecified error warning */ + header('Location: index.php?pathext='.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; + } + + if (($f = fopen($current_path.$pathext.$filename.'.'.$extension, 'w')) && (@fwrite($f, stripslashes($content)) !== false) && (@fclose($f))) { + $msg->addFeedback(array('FILE_SAVED', $filename.'.'.$extension)); + header('Location: index.php?pathext='.urlencode($_POST['pathext']).SEP.'popup='.$_POST['popup']); + exit; + } else { + $msg->addError('FILE_NOT_SAVED'); + header('Location: index.php?pathext='.$pathext.SEP.'framed='.$framed.SEP.'popup='.$popup); + exit; + } + } + else { + require(AT_INCLUDE_PATH.'header.inc.php'); + $pathext = $_POST['pathext']; + $popup = $_POST['popup']; + + $_POST['newfile'] = "new"; + + $hidden_vars['pathext'] = $pathext; + $hidden_vars['filename'] = $filename; + $hidden_vars['extension'] = $extension; + $hidden_vars['body_text'] = $_POST['body_text']; + + $hidden_vars['popup'] = $popup; + $hidden_vars['framed'] = $framed; + + $msg->addConfirm(array('FILE_EXISTS', $filename.'.'.$extension), $hidden_vars); + $msg->printConfirm(); + + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + } else { + $msg->addError(array('EMPTY_FIELDS', _AT('file_name'))); + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +require(AT_INCLUDE_PATH.'lib/tinymce.inc.php'); + +if (!isset($_REQUEST['setvisual']) && !isset($_REQUEST['settext'])) { + if ($_SESSION['prefs']['PREF_CONTENT_EDITOR'] == 1) { + $_POST['formatting'] = 1; + $_REQUEST['settext'] = 0; + $_REQUEST['setvisual'] = 0; + + } else if ($_SESSION['prefs']['PREF_CONTENT_EDITOR'] == 2) { + $_POST['formatting'] = 1; + $_POST['settext'] = 0; + $_POST['setvisual'] = 1; + + } else { // else if == 0 + $_POST['formatting'] = 0; + $_REQUEST['settext'] = 0; + $_REQUEST['setvisual'] = 0; + } +} +if (($_POST['setvisual'] && !$_POST['settext']) || $_GET['setvisual']) { + load_editor('body_text'); +} + +$pathext = $_GET['pathext']; +$popup = $_GET['popup']; + +$msg->printAll(); +if (!$_POST['extension']) { + $_POST['extension'] = 'txt'; + $_POST['formatting'] = 0; +}else if($_POST['extension'] == "html"){ + $_POST['formatting'] = 1; +} + +?> +
    + + + +
    +
    +
    *

    + /> +
    + +
    + +
    *

    + onclick="javascript: document.form.setvisual.disabled=true;" /> + + + , onclick="javascript: document.form.setvisual.disabled=false;"/> + + + + + + + /> + +
    +
    +
    + +
    + +
    + + +
    + +
    +
    + + \ No newline at end of file diff --git a/tools/filemanager/preview.php b/tools/filemanager/preview.php new file mode 100644 index 000000000..e915281a8 --- /dev/null +++ b/tools/filemanager/preview.php @@ -0,0 +1,46 @@ + + + + + <?php echo _AT('file_manager_frame'); ?> + + + + + + + + + + <p><?php echo _AT('frame_contains'); ?><br /> + * <a href="tools/file_manager.php"><?php echo _AT('file_manager'); ?></a> + </p> + + + + \ No newline at end of file diff --git a/tools/filemanager/preview_top.php b/tools/filemanager/preview_top.php new file mode 100644 index 000000000..9886bdc53 --- /dev/null +++ b/tools/filemanager/preview_top.php @@ -0,0 +1,44 @@ + + + + + <?php echo _AT('file_manager_frame'); ?> + + + + +

    + + + + | + + | + +

    + + + \ No newline at end of file diff --git a/tools/filemanager/rename.php b/tools/filemanager/rename.php new file mode 100644 index 000000000..9698eb9ed --- /dev/null +++ b/tools/filemanager/rename.php @@ -0,0 +1,100 @@ +addFeedback('CANCELLED'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; +} + +if (isset($_POST['rename_action'])) { + + $_POST['new_name'] = trim($_POST['new_name']); + $_POST['new_name'] = str_replace(' ', '_', $_POST['new_name']); + $_POST['new_name'] = str_replace(array(' ', '/', '\\', ':', '*', '?', '"', '<', '>', '|', '\''), '', $_POST['new_name']); + + $_POST['oldname'] = trim($_POST['oldname']); + $_POST['oldname'] = str_replace(' ', '_', $_POST['oldname']); + $_POST['oldname'] = str_replace(array(' ', '/', '\\', ':', '*', '?', '"', '<', '>', '|', '\''), '', $_POST['oldname']); + + $path_parts_new = pathinfo($_POST['new_name']); + $ext_new = $path_parts_new['extension']; + $pathext = $_POST['pathext']; + + /* check if this file extension is allowed: */ + /* $IllegalExtentions is defined in ./include/config.inc.php */ + if (in_array($ext_new, $IllegalExtentions)) { + $errors = array('FILE_ILLEGAL', $ext_new); + $msg->addError($errors); + } + else if ($current_path.$pathext.$_POST['new_name'] == $current_path.$pathext.$_POST['oldname']) { + //do nothing + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php?pathext='.urlencode($_POST['pathext']).SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; + } + + //make sure new file is inside content directory + else if (course_realpath($current_path . $pathext . $_POST['new_name']) == FALSE) { + $msg->addError('CANNOT_RENAME'); + } + else if (course_realpath($current_path . $pathext . $_POST['oldname']) == FALSE) { + $msg->addError('CANNOT_RENAME'); + } + else if (file_exists($current_path . $pathext . $_POST['new_name'])) { + $msg->addError('CANNOT_RENAME'); + } + else { + @rename($current_path.$pathext.$_POST['oldname'], $current_path.$pathext.$_POST['new_name']); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php?pathext='.urlencode($_POST['pathext']).SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> +
    + + + + + +
    +
    +
    *
    +
    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/filemanager/top.php b/tools/filemanager/top.php new file mode 100644 index 000000000..88e2fefa9 --- /dev/null +++ b/tools/filemanager/top.php @@ -0,0 +1,194 @@ +addError('NO_FILE_SELECT'); + } else if (count($_POST['check']) != 1) { + // error: you must select one file/dir to rename + $msg->addError('NO_ITEM_SELECTED'); + } else { + header('Location: rename.php?pathext='.urlencode($_POST['pathext']).SEP.'framed='.$framed.SEP.'popup='.$popup.SEP.'oldname='.urlencode($_POST['check'][0])); + exit; + } +} else if (isset($_POST['edit'])) { + if (!isset($_POST['check'][0])) { + // error: you must select a file/dir + $msg->addError('NO_FILE_SELECT'); + } else if (count($_POST['check']) != 1) { + // error: you must select one file/dir to rename + $msg->addError('NO_ITEM_SELECTED'); + } else { + $file = $_POST['check'][0]; + header('Location: edit.php?pathext='.urlencode($_POST['pathext']).SEP.'framed='.$framed.SEP.'popup='.$popup.SEP.'file=' . $file); + exit; + } +} else if (isset($_POST['delete'])) { + + if (!is_array($_POST['check'])) { + $msg->addError('NO_FILE_SELECT'); + } else { + + $list = implode(',', $_POST['check']); + header('Location: delete.php?pathext=' . urlencode($_POST['pathext']) . SEP . 'framed=' . $framed . SEP . 'popup=' . $popup . SEP . 'list=' . urlencode($list)); + exit; + } +} else if (isset($_POST['move'])) { + + if (!is_array($_POST['check'])) { + $msg->addError('NO_FILE_SELECT'); + } else { + + $list = implode(',', $_POST['check']); + header('Location: move.php?pathext='.urlencode($_POST['pathext']).SEP.'framed='.$framed.SEP.'popup='.$popup.SEP.'list='.urlencode($list)); + exit; + } +} + +$MakeDirOn = true; + +/* get this courses MaxQuota and MaxFileSize: */ +$sql = "SELECT max_quota, max_file_size FROM ".TABLE_PREFIX."courses WHERE course_id=$_SESSION[course_id]"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_array($result); +$my_MaxCourseSize = $row['max_quota']; +$my_MaxFileSize = $row['max_file_size']; + +if ($my_MaxCourseSize == AT_COURSESIZE_DEFAULT) { + $my_MaxCourseSize = $MaxCourseSize; +} +if ($my_MaxFileSize == AT_FILESIZE_DEFAULT) { + $my_MaxFileSize = $MaxFileSize; +} else if ($my_MaxFileSize == AT_FILESIZE_SYSTEM_MAX) { + $my_MaxFileSize = megabytes_to_bytes(substr(ini_get('upload_max_filesize'), 0, -1)); +} + +$MaxSubDirs = 5; +$MaxDirDepth = 10; + +if ($_GET['pathext'] != '') { + $pathext = urldecode($_GET['pathext']); +} else if ($_POST['pathext'] != '') { + $pathext = $_POST['pathext']; +} + +if (strpos($pathext, '..') !== false) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('UNKNOWN'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +if($_GET['back'] == 1) { + $pathext = substr($pathext, 0, -1); + $slashpos = strrpos($pathext, '/'); + if($slashpos == 0) { + $pathext = ''; + } else { + $pathext = substr($pathext, 0, ($slashpos+1)); + } + +} + +$start_at = 2; +/* remove the forward or backwards slash from the path */ +$newpath = $current_path; +$depth = substr_count($pathext, '/'); + +if ($pathext != '') { + $bits = explode('/', $pathext); + foreach ($bits as $bit) { + if ($bit != '') { + $bit_path .= $bit; + + $_section[$start_at][0] = $bit; + $_section[$start_at][1] = 'tools/filemanager/index.php?pathext=' . urlencode($bit_path) . SEP . 'popup=' . $popup . SEP . 'framed=' . $framed; + + $start_at++; + } + } + $bit_path = ""; + $bit = ""; +} + +/* if upload successful, close the window */ +if ($f) { + $onload = 'closeWindow(\'progWin\');'; +} + +/* make new directory */ +if ($_POST['mkdir_value'] && ($depth < $MaxDirDepth) ) { + $_POST['dirname'] = trim($_POST['dirname']); + + /* anything else should be okay, since we're on *nix..hopefully */ + $_POST['dirname'] = ereg_replace('[^a-zA-Z0-9._]', '', $_POST['dirname']); + + if ($_POST['dirname'] == '') { + $msg->addError(array('FOLDER_NOT_CREATED', $_POST['dirname'] )); + } + else if (strpos($_POST['dirname'], '..') !== false) { + $msg->addError('BAD_FOLDER_NAME'); + } + else { + $result = @mkdir($current_path.$pathext.$_POST['dirname'], 0700); + if($result == 0) { + $msg->addError(array('FOLDER_NOT_CREATED', $_POST['dirname'] )); + } + else { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } + } +} + +$newpath = substr($current_path.$pathext, 0, -1); + +/* open the directory */ +if (!($dir = @opendir($newpath))) { + if (isset($_GET['create']) && ($newpath.'/' == $current_path)) { + @mkdir($newpath); + if (!($dir = @opendir($newpath))) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('CANNOT_CREATE_DIR'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } else { + $msg->addFeedback('CONTENT_DIR_CREATED'); + } + } else { + require(AT_INCLUDE_PATH.'header.inc.php'); + + $msg->printErrors('CANNOT_OPEN_DIR'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> \ No newline at end of file diff --git a/tools/filemanager/upload.php b/tools/filemanager/upload.php new file mode 100644 index 000000000..07ac98742 --- /dev/null +++ b/tools/filemanager/upload.php @@ -0,0 +1,146 @@ +addError($errors); + header('Location: index.php?pathext='.$_POST['pathext']); + exit; + } + + /* also have to handle the 'application/x-zip-compressed' case */ + if ( ($_FILES['uploadedfile']['type'] == 'application/x-zip-compressed') + || ($_FILES['uploadedfile']['type'] == 'application/zip') + || ($_FILES['uploadedfile']['type'] == 'application/x-zip')){ + $is_zip = true; + } + + + /* anything else should be okay, since we're on *nix.. hopefully */ + $_FILES['uploadedfile']['name'] = str_replace(array(' ', '/', '\\', ':', '*', '?', '"', '<', '>', '|', '\''), '', $_FILES['uploadedfile']['name']); + + + /* if the file size is within allowed limits */ + if( ($_FILES['uploadedfile']['size'] > 0) && ($_FILES['uploadedfile']['size'] <= $my_MaxFileSize) ) { + + /* if adding the file will not exceed the maximum allowed total */ + $course_total = dirsize($path); + + if ((($course_total + $_FILES['uploadedfile']['size']) <= ($my_MaxCourseSize + $MaxCourseFloat)) || ($my_MaxCourseSize == AT_COURSESIZE_UNLIMITED)) { + + /* check if this file exists first */ + if (file_exists($path.$_FILES['uploadedfile']['name'])) { + /* this file already exists, so we want to prompt for override */ + + /* save it somewhere else, temporarily first */ + /* file_name.time ? */ + $_FILES['uploadedfile']['name'] = substr(time(), -4).'.'.$_FILES['uploadedfile']['name']; + + $f = array('FILE_EXISTS', + substr($_FILES['uploadedfile']['name'], 5), + $_FILES['uploadedfile']['name'], + $_POST['pathext'], + $_GET['popup'], + SEP); + $msg->addFeedback($f); + } + + /* copy the file in the directory */ + $result = move_uploaded_file( $_FILES['uploadedfile']['tmp_name'], $path.$_FILES['uploadedfile']['name'] ); + + if (!$result) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('FILE_NOT_SAVED'); + echo '' . _AT('back') . ''; + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } else { + if ($is_zip) { + $f = array('FILE_UPLOADED_ZIP', + urlencode($_POST['pathext']), + urlencode($_FILES['uploadedfile']['name']), + $_GET['popup'], + SEP); + $msg->addFeedback($f); + + header('Location: index.php?pathext=' . $_POST['pathext'] . SEP . 'popup=' . $_GET['popup']); + exit; + } /* else */ + + $msg->addFeedback('FILE_UPLOADED'); + + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'popup='.$_GET['popup']); + exit; + } + } else { + $msg->addError(array('MAX_STORAGE_EXCEEDED', get_human_size($my_MaxCourseSize))); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'popup='.$_GET['popup']); + exit; + } + } else { + $msg->addError(array('FILE_TOO_BIG', get_human_size($my_MaxFileSize))); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'popup='.$_GET['popup']); + exit; + } + } else { + $msg->addError('FILE_NOT_SELECTED'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'popup='.$_GET['popup']); + exit; + } +} + + +?> \ No newline at end of file diff --git a/tools/filemanager/zip.php b/tools/filemanager/zip.php new file mode 100644 index 000000000..2065994be --- /dev/null +++ b/tools/filemanager/zip.php @@ -0,0 +1,289 @@ +addFeedback('CANCELLED'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'popup='.$_POST['popup'].SEP.'framed='.$_POST['framed']); + exit; +} + + $path = AT_CONTENT_DIR . $_SESSION['course_id'].'/'; + + if ($_REQUEST['pathext'] != '') { + $pathext = $_REQUEST['pathext']; + } + if ($_REQUEST['file'] != '') { + $file = $_REQUEST['file']; + } + + if (strpos($file, '..') !== false) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('UNKNOWN'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $path_parts = pathinfo($pathext.$file); + + $temp_name = substr($file, 0, -strlen('.'.$path_parts['extension'])); + + $zip = new PclZip($path.$pathext.$file); + + if (($list = $zip->listContent()) == 0) { + die("Error : ".$zip->errorInfo(true)); + } + +/*****************************************************************/ + $totalBytes = 0; + $translated_file_names = array(); + + for ($i=0; $i'; + + $is_dir = true; + + } else if ($ext == 'zip') { + + $totalBytes += $list[$i]['size']; + $filename = $list[$i]['stored_filename']; + $fileicon = ''._AT('zip_archive').''; + + } else { + $totalBytes += $list[$i]['size']; + $filename = $list[$i]['stored_filename']; + $fileicon = ''._AT('file').''; + } + + if ($is_dir) { + $dirs[strtolower($filename)] .= ' + '.$filename.''; + + $dirs[strtolower($filename)] .= ''.get_human_size($list[$i]['size']).' '; + $dirs[strtolower($filename)] .= ' '; + + $dirs[strtolower($filename)] .= AT_date(_AT('filemanager_date_format'), $filedata[10], AT_DATE_UNIX_TIMESTAMP); + + $dirs[strtolower($filename)] .= ' '; + + $dirs[strtolower($filename)] .= ''; + } else { + + $files[strtolower($filename)] .= ' + '; + + if (in_array($ext, $IllegalExtentions)) { + $files[strtolower($filename)] .= ''.$filename.''; + } else { + $files[strtolower($filename)] .= $filename; + + $trans_name = str_replace(' ', '_', $path_parts['basename']); + $trans_name = preg_replace("/[^A-Za-z0-9._\-]/", '', $trans_name); + + if (in_array($path_parts['dirname'].$trans_name, $translated_file_names)) { + $trans_count = 2; + while (in_array($trans_name, $translated_file_names)) { + $part = substr($trans_name, 0, -strlen($ext)- 1 - (2*($trans_count-2))); + $trans_name = $part.'_'.$trans_count.'.'.$ext; + $trans_count++; + if ($trans_count>15){ + exit; // INF loop safety thing.. + } + } + } + + $translated_file_names[$list[$i]['index']] = $path_parts['dirname'].$trans_name; + + if ($path_parts['dirname'].$trans_name != $filename) { + $files[strtolower($filename)] .= ' => '.$trans_name; + } + + } + + $files[strtolower($filename)] .= ''; + + $files[strtolower($filename)] .= ''.get_human_size($list[$i]['size']).' '; + $files[strtolower($filename)] .= ' '; + + $files[strtolower($filename)] .= AT_date(_AT('filemanager_date_format'), $list[$i]['mtime'], AT_DATE_UNIX_TIMESTAMP); + + $files[strtolower($filename)] .= ''; + + $files[strtolower($filename)] .= ''; + } + } + + $sql = "SELECT max_quota, max_file_size FROM ".TABLE_PREFIX."courses WHERE course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + $my_MaxCourseSize = $row['max_quota']; + $my_MaxFileSize = $row['max_file_size']; + + $course_total = dirsize($path); + if ($my_MaxCourseSize == AT_COURSESIZE_UNLIMITED) { + $total_after = 1; + } else if ($my_MaxCourseSize == AT_COURSESIZE_DEFAULT) { + $my_MaxCourseSize = $MaxCourseSize; + $total_after = get_human_size($my_MaxCourseSize-$course_total-$totalBytes); + } + + // if $total_after < 0: redirect with error msg + + if (isset($_POST['submit']) && ($total_after > 0)) { + $_POST['custom_path'] = trim($_POST['custom_path']); + $_POST['custom_path'] = str_replace(' ', '_', $_POST['custom_path']); + + /* anything else should be okay, since we're on *nix.. hopefully */ + $_POST['custom_path'] = ereg_replace('[^a-zA-Z0-9._/]', '', $_POST['custom_path']); + + if (strpos($_POST['pathext'].$_POST['custom_path'], '..') !== false) { + $msg->addError('UNKNOWN'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'framed='.$_POST['framed'].SEP.'popup='.$_POST['popup']); + exit; + } else if ($zip->extract( PCLZIP_OPT_PATH, $path. $_POST['pathext'] . $_POST['custom_path'], + PCLZIP_CB_PRE_EXTRACT, 'preExtractCallBack') == 0) { + + echo ("Error : ".$zip->errorInfo(true)); + } else { + $msg->addFeedback('ARCHIVE_EXTRACTED'); + header('Location: index.php?pathext='.$_POST['pathext'].SEP.'popup='.$_POST['popup'].SEP.'framed='.$_POST['framed']); + exit; + } + + header('Location: index.php'); + exit; + } + + require(AT_INCLUDE_PATH.'header.inc.php'); + + if (($my_MaxCourseSize != AT_COURSESIZE_UNLIMITED) && ($total_after + $MaxCourseFloat <= 0)) { + $msg->printErrors('NO_SPACE_LEFT'); + } else { +?> +
    + + + + +
    +
    +

    +

    +
    + +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + + + + + + + + + + + $y) { + echo $y; + } + } + + if (is_array($files)) { + foreach($files as $x => $y) { + echo $y; + } + } +?> + + + + + + + + + + + + + + + + + + + + + + + +
    : 
    : 
    : 
    :'; + echo $total_after; + echo ''; + } else { + echo $total_after; + } + } ?> 
    + + \ No newline at end of file diff --git a/tools/forums/index.php b/tools/forums/index.php new file mode 100644 index 000000000..ef334bc62 --- /dev/null +++ b/tools/forums/index.php @@ -0,0 +1,89 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'lib/forums.inc.php'); + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($_GET['col']) { + $col = addslashes($_GET['col']); +} else { + $col = 'title'; +} + +if ($_GET['order']) { + $order = addslashes($_GET['order']); +} else { + $order = 'asc'; +} + +$all_forums = get_forums($_SESSION['course_id']); +?> +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/tools/glossary/add.php b/tools/glossary/add.php new file mode 100644 index 000000000..2b8589547 --- /dev/null +++ b/tools/glossary/add.php @@ -0,0 +1,153 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +if (isset($_POST['submit'])) { + $num_terms = intval($_POST['num_terms']); + $missing_fields = array(); + + for ($i=0; $i<$num_terms; $i++) { + + if ($_POST['ignore'][$i] == '') { + $_POST['word'][$i] = trim($_POST['word'][$i]); + $_POST['definition'][$i] = trim($_POST['definition'][$i]); + + if ($_POST['word'][$i] == '') { + $missing_fields[] = _AT('glossary_term'); + } + + if ($_POST['definition'][$i] == '') { + $missing_fields[] = _AT('glossary_definition'); + } + + if ($terms_sql != '') { + $terms_sql .= ', '; + } + + $_POST['related_term'][$i] = intval($_POST['related_term'][$i]); + + /* for each item check if it exists: */ + + if ($glossary[urlencode($_POST['word'][$i])] != '' ) { + $errors = array('TERM_EXISTS', $_POST['word'][$i]); + $msg->addError($errors); + } else { + $_POST['word'][$i] = $addslashes($_POST['word'][$i]); + $_POST['definition'][$i] = $addslashes($_POST['definition'][$i]); + $_POST['related_term'][$i] = $addslashes($_POST['related_term'][$i]); + + $terms_sql .= "(NULL, $_SESSION[course_id], '{$_POST[word][$i]}', '{$_POST[definition][$i]}', {$_POST[related_term][$i]})"; + } + } + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $sql = "INSERT INTO ".TABLE_PREFIX."glossary VALUES $terms_sql"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; + } + $_GET['pcid'] = $_POST['pcid']; +} + +$onload = 'document.form.title0.focus();'; + +unset($word); + +$num_terms = 1; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    + +'; + continue; + } + + for ($j=0;$j<$i;$j++) { + if ($word[$j] == $word[$i]) { + echo ''; + continue 2; + } + } + + if ($word[$i] == '') { + $word[$i] = ContentManager::cleanOutput($_POST['word'][$i]); + } +?> +
    +
    +
    *

    + .'; + } + ?> +
    + +
    +
    *

    + +
    + +
    +
    + '; + echo ''; + do { + echo ''; + } while ($row_g = mysql_fetch_assoc($result)); + echo ''; + } else { + echo _AT('none_available'); + } + } // endfor + ?> +
    + +
    + + +
    + +
    +
    + + \ No newline at end of file diff --git a/tools/glossary/delete.php b/tools/glossary/delete.php new file mode 100644 index 000000000..962a09477 --- /dev/null +++ b/tools/glossary/delete.php @@ -0,0 +1,64 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +if ($_POST['submit_yes']) { + + $_POST['gid'] = intval($_POST['gid']); + + $sql = "DELETE FROM ".TABLE_PREFIX."glossary WHERE word_id=$_POST[gid] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + $sql = "UPDATE ".TABLE_PREFIX."glossary SET related_word_id=0 WHERE related_word_id=$_POST[gid] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} else if ($_POST['submit_no']) { + + $msg->addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$_GET['gid'] = intval($_GET['gid']); + +if ($_GET['gid'] == 0) { + $msg->printErrors('ITEM_NOT_FOUND'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$hidden_vars['word'] = $_GET['t']; +$hidden_vars['gid'] = $_GET['gid']; + +$msg->addConfirm('DELETE', $hidden_vars); +$msg->addConfirm('GLOSSARY_REMAINS', $hidden_vars); + +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/glossary/edit.php b/tools/glossary/edit.php new file mode 100644 index 000000000..c068493cc --- /dev/null +++ b/tools/glossary/edit.php @@ -0,0 +1,145 @@ +addFeedback('CANCELLED'); + Header('Location: index.php'); + exit; +} + +if ($_POST['submit']) { + $missing_fields = array(); + + $_POST['word'] = trim($_POST['word']); + $_POST['definition'] = trim($_POST['definition']); + + if ($_POST['word'] == '') { + $missing_fields[] = _AT('glossary_term'); + } + + if ($_POST['definition'] == '') { + $missing_fields[] = _AT('glossary_definition'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + $_POST['related_term'] = intval($_POST['related_term']); + + + if (!$msg->containsErrors()) { + $_POST['word'] = $addslashes($_POST['word']); + $_POST['definition'] = $addslashes($_POST['definition']); + + $sql = "UPDATE ".TABLE_PREFIX."glossary SET word='$_POST[word]', definition='$_POST[definition]', related_word_id=$_POST[related_term] WHERE word_id=$_POST[gid] AND course_id=$_SESSION[course_id]"; + + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + Header('Location: index.php'); + exit; + } +} + +$onload = 'document.form.title.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($_POST['submit']) { + $gid = intval($_POST['gid']); +} else { + $gid = intval($_GET['gid']); +} + +if ($gid == 0) { + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$msg->printErrors(); + +$result = mysql_query("SELECT * FROM ".TABLE_PREFIX."glossary WHERE word_id=$gid", $db); + +if (!( $row = @mysql_fetch_array($result)) ) { + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +if ($_POST['submit']) { + $row['word'] = $_POST['word']; + $row['definition'] = $_POST['definition']; +} + +?> + +
    + + +
    +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    + $gid ORDER BY word"; + + $result = mysql_query($sql, $db); + if ($row_g = mysql_fetch_array($result)) { + echo ''; + + } else { + echo _AT('no_glossary_items'); + } + ?> +
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/glossary/index.php b/tools/glossary/index.php new file mode 100644 index 000000000..3cf309ffd --- /dev/null +++ b/tools/glossary/index.php @@ -0,0 +1,120 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +//get terms +$sql = "SELECT * FROM ".TABLE_PREFIX."glossary WHERE course_id=$_SESSION[course_id] ORDER BY word"; +$result= mysql_query($sql, $db); + +$gloss_results = array(); +while ($row = mysql_fetch_assoc($result)) { + $gloss_results[] = $row; +} +$num_results = count($gloss_results); +$results_per_page = 25; +$num_pages = ceil($num_results / $results_per_page); +$page = intval($_GET['p']); +if (!$page) { + $page = 1; +} + +$count = (($page-1) * $results_per_page) + 1; +$gloss_results = array_slice($gloss_results, ($page-1)*$results_per_page, $results_per_page); + +if($num_pages > 1) { + echo _AT('page').': '; + for ($i=1; $i<=$num_pages; $i++) { + if ($i == $page) { + echo ''.$i.''; + } else { + echo ' | '.$i.''; + } + } +} +?> + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    +
    + + \ No newline at end of file diff --git a/tools/groups/create.php b/tools/groups/create.php new file mode 100644 index 000000000..9d8c62942 --- /dev/null +++ b/tools/groups/create.php @@ -0,0 +1,44 @@ + +
    +
    +
    + +
    + +
    + +
    + +
    + +
    +
    +
    + \ No newline at end of file diff --git a/tools/groups/create_automatic.php b/tools/groups/create_automatic.php new file mode 100644 index 000000000..b2c4ac944 --- /dev/null +++ b/tools/groups/create_automatic.php @@ -0,0 +1,228 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $modules = ''; + if (isset($_POST['modules'])) { + $modules = implode('|', $_POST['modules']); + } + + $_POST['type_title'] = trim($_POST['type_title']); + $_POST['num_students'] = abs($_POST['num_students']); + $_POST['num_groups'] = abs($_POST['num_groups']); + $_POST['num_g'] = intval($_POST['num_g']); + + $missing_fields = array(); + + if (!$_POST['type_title']) { + $missing_fields[] = _AT('groups_type'); + } + + if (!$_POST['prefix']) { + $missing_fields[] = _AT('group_prefix'); + } + + $course_owner = $system_courses[$_SESSION['course_id']]['member_id']; + if (isset($_POST['fill'])) { + $sql = "SELECT member_id FROM ".TABLE_PREFIX."course_enrollment WHERE course_id=$_SESSION[course_id] AND approved='y' AND `privileges`&".AT_PRIV_GROUPS."=0 AND member_id<>$course_owner"; + $result = mysql_query($sql, $db); + $total_students = mysql_num_rows($result); + $students = array(); + while ($row = mysql_fetch_assoc($result)) { + $students[] = $row['member_id']; + } + shuffle($students); + } else { + $sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."course_enrollment WHERE course_id=$_SESSION[course_id] AND approved='y' AND `privileges`&".AT_PRIV_GROUPS."=0 AND member_id<>$course_owner"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + $total_students = $row['cnt']; // 4 students in the course + } + + if ($_POST['num_g'] == 1) { // number of students per group + $num_students_per_group = $_POST['num_students']; + + if ($num_students_per_group == 0) { + $missing_fields[] = _AT('number_of_students_per_group'); + } else { + if ($total_students == 0) { + $msg->addError('GROUP_NO_STUDENTS'); + } else { + $num_groups = ceil($total_students / $num_students_per_group); + } + } + } else { // number of groups + $num_groups = $_POST['num_groups']; + + if ($num_groups == 0) { + $missing_fields[] = _AT('number_of_groups'); + } else { + if ($total_students > 0) { + // to uniformly distribute all the groups we place the remaining students + // into the first n groups, where n is the number of remaining students. + $remainder = $total_students % $num_groups; + if ($remainder) { + $num_students_per_group = floor($total_students / $num_groups); + } else { + $num_students_per_group = $total_students / $num_groups; + } + } else { + $num_students_per_group = 0; + } + } + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $_POST['type_title'] = $addslashes($_POST['type_title']); + $_POST['prefix'] = $addslashes($_POST['prefix']); + $_POST['description'] = $addslashes($_POST['description']); + + $sql = "INSERT INTO ".TABLE_PREFIX."groups_types VALUES (NULL, $_SESSION[course_id], '$_POST[type_title]')"; + $result = mysql_query($sql, $db); + $group_type_id = mysql_insert_id($db); + + $start_index = 0; + + for($i=0; $i<$num_groups; $i++) { + $group_title = $_POST['prefix'] . ' ' . ($i + 1); + $sql = "INSERT INTO ".TABLE_PREFIX."groups VALUES (NULL, $group_type_id, '$group_title', '$_POST[description]', '$modules')"; + $result = mysql_query($sql, $db); + + $group_id = mysql_insert_id($db); + $_SESSION['groups'][$group_id] = $group_id; + + // call module init scripts: + if (isset($_POST['modules'])) { + foreach ($_POST['modules'] as $mod) { + $module =& $moduleFactory->getModule($mod); + $module->createGroup($group_id); + } + } + + if (isset($_POST['fill'])) { + // put students in this group + for ($j = $start_index; $j < min(($start_index + $num_students_per_group), $total_students); $j++) { + $sql = "INSERT INTO ".TABLE_PREFIX."groups_members VALUES ($group_id, $students[$j])"; + mysql_query($sql, $db); + } + + $start_index = $j; + if ($remainder) { + $sql = "INSERT INTO ".TABLE_PREFIX."groups_members VALUES ($group_id, $students[$start_index])"; + mysql_query($sql, $db); + $start_index++; + $remainder--; + } + } + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: index.php'); + exit; + } else { + $_POST['type_title'] = $stripslashes($_POST['type_title']); + $_POST['prefix'] = $stripslashes($_POST['prefix']); + $_POST['description'] = $stripslashes($_POST['description']); + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    +
    +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    *

    + +

    + + +
    + +
    + +
    +
    + +
    + +
    +
    + getModules(AT_MODULE_STATUS_ENABLED, 0, TRUE); + $keys = array_keys($modules); + $i=0; + ?> + + + getGroupTool() && (in_array($module->getGroupTool(),$_pages[AT_NAV_HOME]) || in_array($module->getGroupTool(),$_pages[AT_NAV_COURSE])) ): ?> +
    + + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/groups/create_manual.php b/tools/groups/create_manual.php new file mode 100644 index 000000000..821242d7c --- /dev/null +++ b/tools/groups/create_manual.php @@ -0,0 +1,149 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $modules = ''; + if (isset($_POST['modules'])) { + $modules = implode('|', $_POST['modules']); + } + + $_POST['type'] = abs($_POST['type']); + $_POST['prefix'] = trim($_POST['prefix']); + $_POST['new_type'] = trim($_POST['new_type']); + + $missing_fields = array(); + + if (!$_POST['type'] && !$_POST['new_type']) { + $missing_fields[] = _AT('groups_type'); + } + if (!$_POST['prefix']) { + $missing_fields[] = _AT('title'); + } + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $_POST['new_type'] = $addslashes($_POST['new_type']); + $_POST['prefix'] = $addslashes($_POST['prefix']); + $_POST['description'] = $addslashes($_POST['description']); + + if ($_POST['new_type']) { + $sql = "INSERT INTO ".TABLE_PREFIX."groups_types VALUES (NULL, $_SESSION[course_id], '$_POST[new_type]')"; + $result = mysql_query($sql, $db); + $type_id = mysql_insert_id($db); + } else { + $sql = "SELECT type_id FROM ".TABLE_PREFIX."groups_types WHERE course_id=$_SESSION[course_id] AND type_id=$_POST[type]"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $type_id = $row['type_id']; + } else { + $type_id = FALSE; + } + } + if ($type_id) { + $sql = "INSERT INTO ".TABLE_PREFIX."groups VALUES (NULL, $type_id, '$_POST[prefix]', '$_POST[description]', '$modules')"; + $result = mysql_query($sql, $db); + + $group_id = mysql_insert_id($db); + + $_SESSION['groups'][$group_id] = $group_id; + // call module init scripts: + if (isset($_POST['modules'])) { + foreach ($_POST['modules'] as $mod) { + $module =& $moduleFactory->getModule($mod); + $module->createGroup($group_id); + } + } + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: index.php'); + exit; + } else { + $_POST['new_type'] = $stripslashes($_POST['new_type']); + $_POST['prefix'] = $stripslashes($_POST['prefix']); + $_POST['description'] = $stripslashes($_POST['description']); + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$types = array(); +$sql = "SELECT type_id, title FROM ".TABLE_PREFIX."groups_types WHERE course_id=$_SESSION[course_id] ORDER BY title"; +$result = mysql_query($sql, $db); +while ($row = mysql_fetch_assoc($result)) { + $types[$row['type_id']] = $row['title']; +} + +?> + +
    +
    +
    +
    *

    + + + + + + +
    + +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    + getModules(AT_MODULE_STATUS_ENABLED, 0, TRUE); + $keys = array_keys($modules); + $i=0; + ?> + + + getGroupTool() && (in_array($module->getGroupTool(),$_pages[AT_NAV_HOME]) || in_array($module->getGroupTool(),$_pages[AT_NAV_COURSE])) ): ?> +
    + + +
    + +
    + + +
    +
    +
    + \ No newline at end of file diff --git a/tools/groups/delete_group.php b/tools/groups/delete_group.php new file mode 100644 index 000000000..a044e707b --- /dev/null +++ b/tools/groups/delete_group.php @@ -0,0 +1,90 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $_POST['id'] = intval($_POST['id']); + $_POST['type_id'] = intval($_POST['type_id']); + + $id = intval($_POST['id']); + $type_id = intval($_POST['type_id']); + + $sql = "SELECT type_id FROM ".TABLE_PREFIX."groups_types WHERE type_id=$type_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $module_list = $moduleFactory->getModules(AT_MODULE_STATUS_ENABLED | AT_MODULE_STATUS_DISABLED); + $keys = array_keys($module_list); + foreach ($keys as $module_name) { + $module =& $module_list[$module_name]; + $module->deleteGroup($id); + } + + $sql = "DELETE FROM ".TABLE_PREFIX."groups WHERE group_id=$id AND type_id=$type_id"; + $result = mysql_query($sql, $db); + + if (mysql_affected_rows($db)) { + //remove all listings in groups_members table + $sql = "DELETE FROM ".TABLE_PREFIX."groups_members WHERE group_id=$id"; + $result = mysql_query($sql, $db); + + // should be handled by each module: + //remove all listings in tests_groups table + $sql = "DELETE FROM ".TABLE_PREFIX."tests_groups WHERE group_id=$id"; + $result = mysql_query($sql, $db); + } + } + + $msg->addFeedback('GROUP_DELETED'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$_GET['id'] = intval($_GET['id']); + +$sql = "SELECT * FROM ".TABLE_PREFIX."groups WHERE group_id=$_GET[id]"; +$result = mysql_query($sql,$db); +if (!($row = mysql_fetch_assoc($result))) { + $msg->printErrors('GROUP_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$sql = "SELECT title FROM ".TABLE_PREFIX."groups_types WHERE type_id=$row[type_id] AND course_id=$_SESSION[course_id]"; +$result = mysql_query($sql,$db); +if (!($type_row = mysql_fetch_assoc($result))) { + $msg->printErrors('GROUP_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +unset($hidden_vars); +$hidden_vars['id'] = $_GET['id']; +$hidden_vars['type_id'] = $row['type_id']; + +$msg->addConfirm(array('DELETE_GROUP',$row['title']), $hidden_vars); +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/groups/delete_type.php b/tools/groups/delete_type.php new file mode 100644 index 000000000..902dd9cb0 --- /dev/null +++ b/tools/groups/delete_type.php @@ -0,0 +1,71 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} +else if (isset($_POST['submit_yes'])) { + $type_id = abs($_POST['id']); + + $sql = "DELETE FROM ".TABLE_PREFIX."groups_types WHERE type_id=$type_id AND course_id=$_SESSION[course_id]"; + mysql_query($sql, $db); + if (mysql_affected_rows($db) == 1) { + $sql = "SELECT group_id FROM ".TABLE_PREFIX."groups WHERE type_id=$type_id"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $sql = "DELETE FROM ".TABLE_PREFIX."groups_members WHERE group_id=$row[group_id]"; + mysql_query($sql, $db); + + // should be handled by each module: + //remove all listings in tests_groups table + $sql = "DELETE FROM ".TABLE_PREFIX."tests_groups WHERE group_id=$row[group_id]"; + mysql_query($sql, $db); + } + $sql = "DELETE FROM ".TABLE_PREFIX."groups WHERE type_id=$type_id"; + $result = mysql_query($sql, $db); + } + + $msg->addFeedback('GROUP_TYPE_DELETED'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$_GET['id'] = intval($_GET['id']); + +$sql = "SELECT * FROM ".TABLE_PREFIX."groups_types WHERE type_id=$_GET[id] AND course_id=$_SESSION[course_id]"; +$result = mysql_query($sql,$db); +if (!($row = mysql_fetch_assoc($result))) { + $msg->printErrors('GROUP_TYPE_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +unset($hidden_vars); +$hidden_vars['id'] = $_GET['id']; + +$msg->addConfirm(array('DELETE_GROUP_TYPE',$row['title']), $hidden_vars); +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/groups/edit_group.php b/tools/groups/edit_group.php new file mode 100644 index 000000000..38a622d40 --- /dev/null +++ b/tools/groups/edit_group.php @@ -0,0 +1,139 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $modules = ''; + if (isset($_POST['modules'])) { + $modules = implode('|', $_POST['modules']); + } + + $_POST['title'] = trim($_POST['title']); + + if (!$_POST['title']) { + $msg->addError(array('EMPTY_FIELDS', _AT('title'))); + } + + if (!$msg->containsErrors()) { + $_POST['title'] = $addslashes($_POST['title']); + $_POST['description'] = $addslashes($_POST['description']); + + $id = intval($_POST['id']); + $type_id = intval($_POST['type_id']); + + $sql = "SELECT type_id FROM ".TABLE_PREFIX."groups_types WHERE type_id=$type_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $sql = "UPDATE ".TABLE_PREFIX."groups SET title='$_POST[title]', description='$_POST[description]', modules='$modules' WHERE group_id=$id AND type_id=$type_id"; + $result = mysql_query($sql, $db); + + // delete the modules that were un-checked + $old_modules = explode('|', $_POST['old_modules']); + $modules = explode('|', $modules); + + foreach ($old_modules as $mod) { + if (!in_array($mod, $modules)) { + $module =& $moduleFactory->getModule($mod); + $module->deleteGroup($id); + } + } + foreach ($modules as $mod) { + if (!in_array($mod, $old_modules)) { + $module =& $moduleFactory->getModule($mod); + $module->createGroup($id); + } + } + } + + $msg->addFeedback('GROUP_EDITED_SUCCESSFULLY'); + + header('Location: index.php'); + exit; + } + $_GET['id'] = abs($_POST['id']); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + $_GET['id'] = intval($_GET['id']); + + $sql = "SELECT * FROM ".TABLE_PREFIX."groups WHERE group_id=$_GET[id]"; + $result = mysql_query($sql,$db); + if (!($row = mysql_fetch_assoc($result))) { + $msg->printErrors('GROUP_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + $sql = "SELECT title FROM ".TABLE_PREFIX."groups_types WHERE type_id=$row[type_id] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql,$db); + if (!($type_row = mysql_fetch_assoc($result))) { + $msg->printErrors('GROUP_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +$old_modules = $row['modules']; +$row['modules'] = explode('|', $row['modules']); +?> + +
    + + + +
    +
    +

    +
    + +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    + getModules(AT_MODULE_STATUS_ENABLED, 0, TRUE); + $keys = array_keys($modules); + $i=0; + ?> + + + getGroupTool() && (in_array($module->getGroupTool(),$_pages[AT_NAV_HOME]) || in_array($module->getGroupTool(),$_pages[AT_NAV_COURSE])) ): ?> + />
    + + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/groups/edit_type.php b/tools/groups/edit_type.php new file mode 100644 index 000000000..4e4ce366a --- /dev/null +++ b/tools/groups/edit_type.php @@ -0,0 +1,74 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $_POST['title'] = trim($_POST['title']); + + if (!$_POST['title']) { + $msg->addError(array('EMPTY_FIELDS', _AT('title'))); + } + + if (!$msg->containsErrors()) { + $_POST['title'] = $addslashes($_POST['title']); + + $type_id = intval($_POST['type_id']); + + $sql = "UPDATE ".TABLE_PREFIX."groups_types SET title='$_POST[title]' WHERE course_id=$_SESSION[course_id] AND type_id=$type_id"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('GROUP_TYPE_EDITED_SUCCESSFULLY'); + + header('Location: index.php'); + exit; + } + $_GET['id'] = abs($_POST['type_id']); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + $_GET['id'] = intval($_GET['id']); + + $sql = "SELECT * FROM ".TABLE_PREFIX."groups_types WHERE type_id=$_GET[id] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql,$db); + if (!($row = mysql_fetch_assoc($result))) { + $msg->printErrors('GROUP_TYPE_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +?> + +
    + +
    +
    +
    *

    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/groups/index.php b/tools/groups/index.php new file mode 100644 index 000000000..4d5c09fe1 --- /dev/null +++ b/tools/groups/index.php @@ -0,0 +1,111 @@ +addError('NO_ITEM_SELECTED'); + } +} else if (isset($_GET['members']) || isset($_GET['delete']) || isset($_GET['edit'])) { + $msg->addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT type_id, title FROM ".TABLE_PREFIX."groups_types WHERE course_id=$_SESSION[course_id] ORDER BY title"; +$result = mysql_query($sql, $db); +?> + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + () +
    ()
    +
    + + \ No newline at end of file diff --git a/tools/groups/members.php b/tools/groups/members.php new file mode 100644 index 000000000..d1ccade08 --- /dev/null +++ b/tools/groups/members.php @@ -0,0 +1,222 @@ +printErrors('GROUP_TYPE_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$tmp_groups = array(); +$sql = "SELECT group_id, title FROM ".TABLE_PREFIX."groups WHERE type_id=$id ORDER BY title"; +$result = mysql_query($sql, $db); +while ($row = mysql_fetch_assoc($result)) { + $tmp_groups[$row['group_id']] = $row['title']; +} +$groups_keys = array_keys($tmp_groups); +$groups_keys = implode($groups_keys, ','); + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $sql = "DELETE FROM ".TABLE_PREFIX."groups_members WHERE group_id IN ($groups_keys)"; + mysql_query($sql, $db); + + $sql = ''; + foreach ($_POST['groups'] as $mid => $gid) { + $mid = abs($mid); + $gid = abs($gid); + if ($gid) { + $sql .= "($gid, $mid),"; + } + } + if ($sql) { + $sql = substr($sql, 0, -1); + $sql = "INSERT INTO ".TABLE_PREFIX."groups_members VALUES $sql"; + mysql_query($sql, $db); + } + + $msg->addFeedback('GROUP_MEMBERS_SAVED'); + + header('Location: index.php'); + exit; +} else if (isset($_POST['assign'])) { + + $groups_counts = array(); + $sql = "SELECT group_id, COUNT(*) AS cnt FROM ".TABLE_PREFIX."groups_members WHERE group_id IN ($groups_keys) GROUP BY group_id ORDER BY cnt ASC"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $groups_counts[$row['group_id']] = $row['cnt']; + } + $total_assigned = array_sum($groups_counts); + + if (is_array($_POST['groups'])) { + foreach ($_POST['groups'] as $mid => $gid) { + if ($gid) { + unset($_POST['groups'][$mid]); + } + } + $students = array_keys($_POST['groups']); + + $total_unassigned = count($students); + + shuffle($students); + reset($students); + } + + $total_students = $total_unassigned + $total_assigned; + + $num_groups = count($tmp_groups); + + if ($total_students > 0) { + // to uniformly distribute all the groups we place the remaining students + // into the first n groups, where n is the number of remaining students. + $remainder = $total_students % $num_groups; + if ($remainder) { + $num_students_per_group = floor($total_students / $num_groups); + } else { + $num_students_per_group = $total_students / $num_groups; + } + + $sql = ''; + foreach($tmp_groups as $group_id => $garbage) { + + if (!isset($groups_counts[$group_id])) { + $groups_counts[$group_id] = 0; + } + while (($groups_counts[$group_id] < $num_students_per_group) && ($mid = current($students))) { + $sql .= "($group_id, $mid),"; + $groups_counts[$group_id]++; + next($students); + } + + if ($remainder) { + $mid = current($students); + if ($mid) { + $sql .= "($group_id, $mid),"; + $remainder--; + next($students); + $groups_counts[$group_id]++; + } + } + } + if ($sql) { + $sql = substr($sql, 0, -1); + $sql = "INSERT INTO ".TABLE_PREFIX."groups_members VALUES " . $sql; + mysql_query($sql, $db); + } + } + + $msg->addFeedback('GROUP_MEMBERS_SAVED'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +echo '

    '.$type_row['title'].'

    '; + + +if (isset($_GET['gid'])) { + $_GET['gid'] = abs($_GET['gid']); +} else { + $_GET['gid'] = 0; +} + +$groups_members = array(); +$sql = "SELECT member_id, group_id FROM ".TABLE_PREFIX."groups_members WHERE group_id IN ($groups_keys) ORDER BY member_id"; +$result = mysql_query($sql, $db); +while ($row = mysql_fetch_assoc($result)) { + $groups_members[$row['member_id']] = $row['group_id']; +} +$groups_members_keys = array_keys($groups_members); +$groups_members_keys = implode($groups_members_keys, ','); + +$owner = $system_courses[$_SESSION['course_id']]['member_id']; + +$sql = "SELECT M.member_id, M.login, M.first_name, M.last_name FROM ".TABLE_PREFIX."members M INNER JOIN ".TABLE_PREFIX."course_enrollment E USING (member_id) WHERE E.course_id=$_SESSION[course_id] AND E.privileges&".AT_PRIV_GROUPS."=0 AND E.approved='y' AND E.member_id<>$owner ORDER BY M.login"; +$result = mysql_query($sql, $db); + +$count = 0; +?> +
    + + + + + + + + + + + + + + + + + + id="r"> + + + + + + + +
    + + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tools/ims/ims_export.php b/tools/ims/ims_export.php new file mode 100644 index 000000000..a6853e611 --- /dev/null +++ b/tools/ims/ims_export.php @@ -0,0 +1,304 @@ +getLanguage($course_language); + +$course_language_charset = $courseLanguage->getCharacterSet(); +$course_language_code = $courseLanguage->getCode(); + +require(AT_INCLUDE_PATH.'classes/zipfile.class.php'); /* for zipfile */ +require(AT_INCLUDE_PATH.'classes/vcard.php'); /* for vcard */ +require(AT_INCLUDE_PATH.'classes/XML/XML_HTMLSax/XML_HTMLSax.php'); /* for XML_HTMLSax */ +require(AT_INCLUDE_PATH.'ims/ims_template.inc.php'); /* for ims templates + print_organizations() */ + +if (isset($_POST['cancel'])) { + $msg->addFeedback('EXPORT_CANCELLED'); + header('Location: ../index.php'); + exit; +} + + +$zipfile = new zipfile(); +$zipfile->create_dir('resources/'); + +/* + the following resources are to be identified: + even if some of these can't be images, they can still be files in the content dir. + theoretically the only urls we wouldn't deal with would be for a + + img => src + a => href // ignore if href doesn't exist (ie. ) + object => data | classid // probably only want data + applet => classid | archive // whatever these two are should double check to see if it's a valid file (not a dir) + link => href + script => src + form => action + input => src + iframe => src + +*/ +class MyHandler { + function MyHandler(){} + function openHandler(& $parser,$name,$attrs) { + global $my_files; + + $name = strtolower($name); + $attrs = array_change_key_case($attrs, CASE_LOWER); + + $elements = array( 'img' => 'src', + 'a' => 'href', + 'object' => array('data', 'classid'), + 'applet' => array('classid', 'archive'), + 'link' => 'href', + 'script' => 'src', + 'form' => 'action', + 'input' => 'src', + 'iframe' => 'src', + 'embed' => 'src', + 'param' => 'value'); + + /* check if this attribute specifies the files in different ways: (ie. java) */ + if (is_array($elements[$name])) { + $items = $elements[$name]; + + foreach ($items as $item) { + if ($attrs[$item] != '') { + + /* some attributes allow a listing of files to include seperated by commas (ie. applet->archive). */ + if (strpos($attrs[$item], ',') !== false) { + $files = explode(',', $attrs[$item]); + foreach ($files as $file) { + $my_files[] = trim($file); + } + } else { + $my_files[] = $attrs[$item]; + } + } + } + } else if (isset($elements[$name]) && ($attrs[$elements[$name]] != '')) { + /* we know exactly which attribute contains the reference to the file. */ + $my_files[] = $attrs[$elements[$name]]; + } + } + function closeHandler(& $parser,$name) { } +} + +/* get all the content */ +$content = array(); +$paths = array(); +$top_content_parent_id = 0; + +$handler=new MyHandler(); +$parser =& new XML_HTMLSax(); +$parser->set_object($handler); +$parser->set_element_handler('openHandler','closeHandler'); + +if (authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN)) { + $sql = "SELECT *, UNIX_TIMESTAMP(last_modified) AS u_ts FROM ".TABLE_PREFIX."content WHERE course_id=$course_id ORDER BY content_parent_id, ordering"; +} else { + $sql = "SELECT *, UNIX_TIMESTAMP(last_modified) AS u_ts FROM ".TABLE_PREFIX."content WHERE course_id=$course_id ORDER BY content_parent_id, ordering"; +} +$result = mysql_query($sql, $db); +while ($row = mysql_fetch_assoc($result)) { + if (authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN) || $contentManager->isReleased($row['content_id']) === TRUE) { + $content[$row['content_parent_id']][] = $row; + if ($cid == $row['content_id']) { + $top_content = $row; + $top_content_parent_id = $row['content_parent_id']; + } + } +} + + +if ($cid) { + /* filter out the top level sections that we don't want */ + $top_level = $content[$top_content_parent_id]; + foreach($top_level as $page) { + if ($page['content_id'] == $cid) { + $content[$top_content_parent_id] = array($page); + } else { + /* this is a page we don't want, so might as well remove it's children too */ + unset($content[$page['content_id']]); + } + } + $ims_course_title = $course_title . ' - ' . $content[$top_content_parent_id][0]['title']; +} else { + $ims_course_title = $course_title; +} + + +/* generate the imsmanifest.xml header attributes */ +$imsmanifest_xml = str_replace(array('{COURSE_TITLE}', '{COURSE_DESCRIPTION}', '{COURSE_PRIMARY_LANGUAGE_CHARSET}', '{COURSE_PRIMARY_LANGUAGE_CODE}'), + array($ims_course_title, $course_desc, $course_language_charset, $course_language_code), + $ims_template_xml['header']); +//debug($imsmanifest_xml); +//exit; + +/* get the first content page to default the body frame to */ +$first = $content[$top_content_parent_id][0]; + +/* generate the resources and save the HTML files */ + +$used_glossary_terms = array(); +ob_start(); +print_organizations($top_content_parent_id, $content, 0, '', array(), $toc_html); +$organizations_str = ob_get_contents(); +ob_end_clean(); + + +if (count($used_glossary_terms)) { + $used_glossary_terms = array_unique($used_glossary_terms); + sort($used_glossary_terms); + reset($used_glossary_terms); + + $terms_xml = ''; + foreach ($used_glossary_terms as $term) { + $term_key = urlencode($term); + $glossary[$term_key] = str_replace('&', '&', $glossary[$term_key]); + $escaped_term = str_replace('&', '&', $term); + $terms_xml .= str_replace( array('{TERM}', '{DEFINITION}'), + array($escaped_term, $glossary[$term_key]), + $glossary_term_xml); + + $terms_html .= str_replace( array('{ENCODED_TERM}', '{TERM}', '{DEFINITION}'), + array($term_key, $term, $glossary[$term_key]), + $glossary_term_html); + } + + $glossary_body_html = str_replace('{BODY}', $terms_html, $glossary_body_html); + + $glossary_xml = str_replace(array('{GLOSSARY_TERMS}', '{COURSE_PRIMARY_LANGUAGE_CHARSET}'), + array($terms_xml, $course_language_charset), + $glossary_xml); + $glossary_html = str_replace( array('{CONTENT}', '{KEYWORDS}', '{TITLE}', '{COURSE_PRIMARY_LANGUAGE_CHARSET}', '{COURSE_PRIMARY_LANGUAGE_CODE}'), + array($glossary_body_html, '', 'Glossary', $course_language_charset, $course_language_code), + $html_template); + $toc_html .= ''; +} else { + unset($glossary_xml); +} + +$toc_html = str_replace(array('{TOC}', '{COURSE_PRIMARY_LANGUAGE_CHARSET}', '{COURSE_PRIMARY_LANGUAGE_CODE}'), + array($toc_html, $course_language_charset, $course_language_code), + $html_toc); + +if ($first['content_path']) { + $first['content_path'] .= '/'; +} +$frame = str_replace( array('{COURSE_TITLE}', '{FIRST_ID}', '{PATH}', '{COURSE_PRIMARY_LANGUAGE_CHARSET}', '{COURSE_PRIMARY_LANGUAGE_CODE}'), + array($ims_course_title, $first['content_id'], $first['content_path'], $course_language_charset, $course_language_code), + $html_frame); + +$html_mainheader = str_replace(array('{COURSE_TITLE}', '{COURSE_PRIMARY_LANGUAGE_CHARSET}', '{COURSE_PRIMARY_LANGUAGE_CODE}'), + array($ims_course_title, $course_language_charset, $course_language_code), + $html_mainheader); + + + +/* append the Organizations and Resources to the imsmanifest */ +$imsmanifest_xml .= str_replace( array('{ORGANIZATIONS}', '{RESOURCES}', '{COURSE_TITLE}'), + array($organizations_str, $resources, $ims_course_title), + $ims_template_xml['final']); + + +/* generate the vcard for the instructor/author */ +$sql = "SELECT first_name, last_name, email, website, login, phone FROM ".TABLE_PREFIX."members WHERE member_id=$instructor_id"; +$result = mysql_query($sql, $db); +$vcard = new vCard(); +if ($row = mysql_fetch_assoc($result)) { + $vcard->setName($row['last_name'], $row['first_name'], $row['login']); + $vcard->setEmail($row['email']); + $vcard->setNote('Originated from an ATutor at '.AT_BASE_HREF.'. See ATutor.ca for additional information.'); + $vcard->setURL($row['website']); + + $imsmanifest_xml = str_replace('{VCARD}', $vcard->getVCard(), $imsmanifest_xml); +} else { + $imsmanifest_xml = str_replace('{VCARD}', '', $imsmanifest_xml); +} + +/* save the imsmanifest.xml file */ + +$zipfile->add_file($frame, 'index.html'); +$zipfile->add_file($toc_html, 'toc.html'); +$zipfile->add_file($imsmanifest_xml, 'imsmanifest.xml'); +$zipfile->add_file($html_mainheader, 'header.html'); +if ($glossary_xml) { + $zipfile->add_file($glossary_xml, 'glossary.xml'); + $zipfile->add_file($glossary_html, 'glossary.html'); +} +$zipfile->add_file(file_get_contents(AT_INCLUDE_PATH.'ims/adlcp_rootv1p2.xsd'), 'adlcp_rootv1p2.xsd'); +$zipfile->add_file(file_get_contents(AT_INCLUDE_PATH.'ims/ims_xml.xsd'), 'ims_xml.xsd'); +$zipfile->add_file(file_get_contents(AT_INCLUDE_PATH.'ims/imscp_rootv1p1p2.xsd'), 'imscp_rootv1p1p2.xsd'); +$zipfile->add_file(file_get_contents(AT_INCLUDE_PATH.'ims/imsmd_rootv1p2p1.xsd'), 'imsmd_rootv1p2p1.xsd'); +$zipfile->add_file(file_get_contents(AT_INCLUDE_PATH.'ims/ims.css'), 'ims.css'); +$zipfile->add_file(file_get_contents(AT_INCLUDE_PATH.'ims/footer.html'), 'footer.html'); +$zipfile->add_file(file_get_contents('../../images/logo.gif'), 'logo.gif'); + +$zipfile->close(); // this is optional, since send_file() closes it anyway + +$ims_course_title = str_replace(array(' ', ':'), '_', $ims_course_title); +$ims_course_title = preg_replace("{[^a-zA-Z0-9._-]}","", trim($ims_course_title)); +$zipfile->send_file($ims_course_title . '_ims'); + +exit; +?> \ No newline at end of file diff --git a/tools/ims/ims_import.php b/tools/ims/ims_import.php new file mode 100644 index 000000000..d8c23beb0 --- /dev/null +++ b/tools/ims/ims_import.php @@ -0,0 +1,605 @@ +` element. + // we take the `href` from the first `` element. + if (isset($items[$current_identifier]) && ($items[$current_identifier]['href'] == '')) { + $items[$current_identifier]['href'] = $attrs['href']; + + $items[$current_identifier]['href'] = $attrs['href']; + + $temp_path = pathinfo($attrs['href']); + $temp_path = explode('/', $temp_path['dirname']); + + if ($package_base_path == '') { + $package_base_path = $temp_path; + } else { + $package_base_path = array_intersect($package_base_path, $temp_path); + } + + $items[$current_identifier]['new_path'] = implode('/', $temp_path); + } + } else if (($name == 'item') && ($attrs['identifierref'] != '')) { + $path[] = $attrs['identifierref']; + } else if (($name == 'item') && ($attrs['identifier'])) { + $path[] = $attrs['identifier']; + } else if (($name == 'resource') && is_array($items[$attrs['identifier']])) { + $current_identifier = $attrs['identifier']; + + if ($attrs['href']) { + $items[$attrs['identifier']]['href'] = $attrs['href']; + + $temp_path = pathinfo($attrs['href']); + $temp_path = explode('/', $temp_path['dirname']); + if (!$package_base_path) { + $package_base_path = $temp_path; + } else { + $package_base_path = array_intersect($package_base_path, $temp_path); + } + + $items[$attrs['identifier']]['new_path'] = implode('/', $temp_path); + } + } + array_push($element_path, $name); + } + + /* called when an element ends */ + /* removed the current element from the $path */ + function endElement($parser, $name) { + global $path, $element_path, $my_data; + + if ($name == 'item') { + array_pop($path); + } + + if ($element_path === array('manifest', 'metadata', 'imsmd:lom', 'imsmd:general', 'imsmd:title', 'imsmd:langstring')) { + global $package_base_name; + $package_base_name = trim($my_data); + } + + array_pop($element_path); + $my_data = ''; + } + + /* called when there is character data within elements */ + /* constructs the $items array using the last entry in $path as the parent element */ + function characterData($parser, $data){ + global $path, $items, $order, $my_data, $element_path; + + $str_trimmed_data = trim($data); + + if (!empty($str_trimmed_data)) { + $size = count($path); + if ($size > 0) { + $current_item_id = $path[$size-1]; + if ($size > 1) { + $parent_item_id = $path[$size-2]; + } else { + $parent_item_id = 0; + } + if (is_array($items[$current_item_id])) { + + /* this item already exists, append the title */ + /* this fixes {\n, \t, `, &} characters in elements */ + + /* horible kludge to fix the */ + /* from TILE */ + if ($element_path[count($element_path)-1] != 'ns1:objectiveDesc') { + $items[$current_item_id]['title'] .= $data; + } + + } else { + $order[$parent_item_id] ++; + + $items[$current_item_id] = array('title' => $data, + 'parent_content_id' => $parent_item_id, + 'ordering' => $order[$parent_item_id]-1); + } + } + } + + + $my_data .= $data; + } + + /* glossary parser: */ + function glossaryStartElement($parser, $name, $attrs) { + global $element_path; + + array_push($element_path, $name); + } + + /* called when an element ends */ + /* removed the current element from the $path */ + function glossaryEndElement($parser, $name) { + global $element_path, $my_data, $imported_glossary; + static $current_term; + + if ($element_path === array('glossary', 'item', 'term')) { + $current_term = $my_data; + + } else if ($element_path === array('glossary', 'item', 'definition')) { + $imported_glossary[trim($current_term)] = trim($my_data); + } + + array_pop($element_path); + $my_data = ''; + } + + function glossaryCharacterData($parser, $data){ + global $my_data; + + $my_data .= $data; + } + +if (!isset($_POST['submit']) && !isset($_POST['cancel'])) { + /* just a catch all */ + + $errors = array('FILE_MAX_SIZE', ini_get('post_max_size')); + $msg->addError($errors); + + header('Location: ./index.php'); + exit; +} else if (isset($_POST['cancel'])) { + $msg->addFeedback('IMPORT_CANCELLED'); + + header('Location: ./index.php'); + exit; +} + +$cid = intval($_POST['cid']); + +if (isset($_POST['url']) && ($_POST['url'] != 'http://') ) { + if ($content = @file_get_contents($_POST['url'])) { + + // save file to /content/ + $filename = substr(time(), -6). '.zip'; + $full_filename = AT_CONTENT_DIR . $filename; + + if (!$fp = fopen($full_filename, 'w+b')) { + echo "Cannot open file ($filename)"; + exit; + } + + if (fwrite($fp, $content, strlen($content) ) === FALSE) { + echo "Cannot write to file ($filename)"; + exit; + } + fclose($fp); + } + $_FILES['file']['name'] = $filename; + $_FILES['file']['tmp_name'] = $full_filename; + $_FILES['file']['size'] = strlen($content); + unset($content); + $url_parts = pathinfo($_POST['url']); + $package_base_name_url = $url_parts['basename']; +} +$ext = pathinfo($_FILES['file']['name']); +$ext = $ext['extension']; + +if ($ext != 'zip') { + $msg->addError('IMPORTDIR_IMS_NOTVALID'); +} else if ($_FILES['file']['error'] == 1) { + $errors = array('FILE_MAX_SIZE', ini_get('upload_max_filesize')); + $msg->addError($errors); +} else if ( !$_FILES['file']['name'] || (!is_uploaded_file($_FILES['file']['tmp_name']) && !$_POST['url'])) { + $msg->addError('FILE_NOT_SELECTED'); +} else if ($_FILES['file']['size'] == 0) { + $msg->addError('IMPORTFILE_EMPTY'); +} + +if ($msg->containsErrors()) { + if (isset($_GET['tile'])) { + header('Location: '.$_base_path.'tools/tile/index.php'); + } else { + header('Location: index.php'); + } + exit; +} + +/* check if ../content/import/ exists */ +$import_path = AT_CONTENT_DIR . 'import/'; +$content_path = AT_CONTENT_DIR; + +if (!is_dir($import_path)) { + if (!@mkdir($import_path, 0700)) { + $msg->addError('IMPORTDIR_FAILED'); + } +} + +$import_path .= $_SESSION['course_id'].'/'; +if (is_dir($import_path)) { + clr_dir($import_path); +} + +if (!@mkdir($import_path, 0700)) { + $msg->addError('IMPORTDIR_FAILED'); +} + +if ($msg->containsErrors()) { + if (isset($_GET['tile'])) { + header('Location: '.$_base_path.'tools/tile/index.php'); + } else { + header('Location: index.php'); + } + exit; +} + +/* extract the entire archive into AT_COURSE_CONTENT . import/$course using the call back function to filter out php files */ +error_reporting(0); +$archive = new PclZip($_FILES['file']['tmp_name']); +if ($archive->extract( PCLZIP_OPT_PATH, $import_path, + PCLZIP_CB_PRE_EXTRACT, 'preImportCallBack') == 0) { + $msg->addError('IMPORT_FAILED'); +// echo 'Error : '.$archive->errorInfo(true); + clr_dir($import_path); + header('Location: index.php'); + exit; +} +error_reporting(E_ALL ^ E_NOTICE); + + +/* get the course's max_quota */ +$sql = "SELECT max_quota FROM ".TABLE_PREFIX."courses WHERE course_id=$_SESSION[course_id]"; +$result = mysql_query($sql, $db); +$q_row = mysql_fetch_assoc($result); + +if ($q_row['max_quota'] != AT_COURSESIZE_UNLIMITED) { + + if ($q_row['max_quota'] == AT_COURSESIZE_DEFAULT) { + $q_row['max_quota'] = $MaxCourseSize; + } + $totalBytes = dirsize($import_path); + $course_total = dirsize(AT_CONTENT_DIR . $_SESSION['course_id'].'/'); + $total_after = $q_row['max_quota'] - $course_total - $totalBytes + $MaxCourseFloat; + + if ($total_after < 0) { + /* remove the content dir, since there's no space for it */ + $errors = array('NO_CONTENT_SPACE', number_format(-1*($total_after/AT_KBYTE_SIZE), 2 ) ); + $msg->addError($errors); + + clr_dir($import_path); + + if (isset($_GET['tile'])) { + header('Location: '.$_base_path.'tools/tile/index.php'); + } else { + header('Location: index.php'); + } + exit; + } +} + + +$items = array(); /* all the content pages */ +$order = array(); /* keeps track of the ordering for each content page */ +$path = array(); /* the hierarchy path taken in the menu to get to the current item in the manifest */ + +/* +$items[content_id/resource_id] = array( + 'title' + 'real_content_id' // calculated after being inserted + 'parent_content_id' + 'href' + 'ordering' + ); +*/ + +$ims_manifest_xml = @file_get_contents($import_path.'imsmanifest.xml'); + +if ($ims_manifest_xml === false) { + $msg->addError('NO_IMSMANIFEST'); + + if (file_exists($import_path . 'atutor_backup_version')) { + $msg->addError('NO_IMS_BACKUP'); + } + + clr_dir($import_path); + + if (isset($_GET['tile'])) { + header('Location: '.$_base_path.'tools/tile/index.php'); + } else { + header('Location: index.php'); + } + exit; +} + + + +// check if this is an eXe package +// NOTE: THIS NEEDS WORK! WHAT IS THE BEST WAY TO DETERMINE IF PACKAGE IS eXe? +// PERHAPS USE PARSER BELOW TO CHECK FOR ORGANIZATION? +$isExeContent = false; +$ims_organization_pos = strpos ($ims_manifest_xml, ' $defn) { + if (!$glossary[urlencode($term)]) { + $sql = "INSERT INTO ".TABLE_PREFIX."glossary VALUES (NULL, $_SESSION[course_id], '$term', '$defn', 0)"; + mysql_query($sql, $db); + } + } +} + + +/* generate a unique new package base path based on the package file name and date as needed. */ +/* the package name will be the dir where the content for this package will be put, as a result */ +/* the 'content_path' field in the content table will be set to this path. */ +/* $package_base_name_url comes from the URL file name (NOT the file name of the actual file we open)*/ +if (!$package_base_name && $package_base_name_url) { + $package_base_name = substr($package_base_name_url, 0, -4); +} else if (!$package_base_name) { + $package_base_name = substr($_FILES['file']['name'], 0, -4); +} + +$package_base_name = strtolower($package_base_name); +$package_base_name = str_replace(array('\'', '"', ' ', '|', '\\', '/', '<', '>', ':'), '_' , $package_base_name); +$package_base_name = preg_replace("/[^A-Za-z0-9._\-]/", '', $package_base_name); + +if (is_dir(AT_CONTENT_DIR . $_SESSION['course_id'].'/'.$package_base_name)) { + $package_base_name .= '_'.date('ymdHis'); +} + + +if ($package_base_path) { + $package_base_path = implode('/', $package_base_path); +} +if ($xml_base_path) { + $package_base_path = $xml_base_path . $package_base_path; + + mkdir(AT_CONTENT_DIR .$_SESSION['course_id'].'/'.$xml_base_path); + $package_base_name = $xml_base_path . $package_base_name; +} +reset($items); + +/* get the top level content ordering offset */ +$sql = "SELECT MAX(ordering) AS ordering FROM ".TABLE_PREFIX."content WHERE course_id=$_SESSION[course_id] AND content_parent_id=$cid"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_assoc($result); +$order_offset = intval($row['ordering']); /* it's nice to have a real number to deal with */ + + foreach ($items as $item_id => $content_info) { + if (isset($content_info['href'], $xml_base_path)) { + $content_info['href'] = $xml_base_path . $content_info['href']; + } + if (!isset($content_info['href'])) { + // this item doesn't have an identifierref. so create an empty page. + $content = ''; + $ext = ''; + $last_modified = date('Y-m-d H:i:s'); + } else { + $file_info = @stat(AT_CONTENT_DIR . 'import/'.$_SESSION['course_id'].'/'.$content_info['href']); + if ($file_info === false) { + continue; + } + + $path_parts = pathinfo(AT_CONTENT_DIR . 'import/'.$_SESSION['course_id'].'/'.$content_info['href']); + $ext = strtolower($path_parts['extension']); + + $last_modified = date('Y-m-d H:i:s', $file_info['mtime']); + } + if (in_array($ext, array('gif', 'jpg', 'bmp', 'png', 'jpeg'))) { + /* this is an image */ + $content = ''.$content_info['title'].''; + } else if ($ext == 'swf') { + /* this is flash */ + /* Using default size of 550 x 400 */ + + $content = ''; + + } else if ($ext == 'mov') { + /* this is a quicktime movie */ + /* Using default size of 550 x 400 */ + + $content = ''; + } else if ($ext == 'mp3') { + $content = ''; + } else if (in_array($ext, array('wav', 'au'))) { + $content = '<bgsound src="'.$content_info['href'].'">'; + + } else if (in_array($ext, array('txt', 'css', 'html', 'htm', 'csv', 'asc', 'tsv', 'xml', 'xsl'))) { + /* this is a plain text file */ + $content = file_get_contents(AT_CONTENT_DIR . 'import/'.$_SESSION['course_id'].'/'.$content_info['href']); + if ($content === false) { + /* if we can't stat() it then we're unlikely to be able to read it */ + /* so we'll never get here. */ + continue; + } + + // get the contents of the 'head' element + $head = get_html_head($content); + $content = get_html_body($content); + if ($contains_glossary_terms) { + // replace glossary content package links to real glossary mark-up using [?] [/?] + $content = preg_replace('/([.\w\d\s&;"]+)<\/a>/i', '[?]\\2[/?]', $content); + } + + /* potential security risk? */ + if ( strpos($content_info['href'], '..') === false) { + @unlink(AT_CONTENT_DIR . 'import/'.$_SESSION['course_id'].'/'.$content_info['href']); + } + } else if ($ext) { + /* non text file, and can't embed (example: PDF files) */ + $content = ''.$content_info['title'].''; + } + + $content_parent_id = $cid; + if ($content_info['parent_content_id'] !== 0) { + $content_parent_id = $items[$content_info['parent_content_id']]['real_content_id']; + } + + $my_offset = 0; + if ($content_parent_id == $cid) { + $my_offset = $order_offset; + } + + /* replace the old path greatest common denomiator with the new package path. */ + /* we don't use str_replace, b/c there's no knowing what the paths may be */ + /* we only want to replace the first part of the path. */ + if ($package_base_path != '') { + $content_info['new_path'] = $package_base_name . substr($content_info['new_path'], strlen($package_base_path)); + } else { + $content_info['new_path'] = $package_base_name; + } + + $content_info['title'] = addslashes($content_info['title']); + $content = addslashes($content); + + // add a 'div' around eXe content + if ($isExeContent == true){ + $content = '
    \n'.$content.'\n
    '; + } + + $sql= 'INSERT INTO '.TABLE_PREFIX.'content VALUES + (NULL, ' + .$_SESSION['course_id'].',' + .$content_parent_id.',' + .($content_info['ordering'] + $my_offset + 1).',' + .'"'.$last_modified.'", + 0,1,NOW(),"","'.$content_info['new_path'].'",' + .'"'.$content_info['title'].'",' + .'"'.$content.'")'; + + $result = mysql_query($sql, $db); + + // store the contents of the 'head' section + /** + if ($result){ + // get content ID + $id = mysql_insert_id($db); + $head = addslashes($head); + + $sql = 'INSERT INTO '.TABLE_PREFIX.'head VALUES (NULL, '.$_SESSION['course_id'].',' + .$id.',' + .'"'.$head.'")'; + $resultHead = mysql_query($sql, $db); + } + **/ + + /* get the content id and update $items */ + $items[$item_id]['real_content_id'] = mysql_insert_id($db); + } + + if ($package_base_path == '.') { + $package_base_path = ''; + } + + if (@rename(AT_CONTENT_DIR . 'import/'.$_SESSION['course_id'].'/'.$package_base_path, AT_CONTENT_DIR .$_SESSION['course_id'].'/'.$package_base_name) === false) { + if (!$msg->containsErrors()) { + $msg->addError('IMPORT_FAILED'); + } + } + clr_dir(AT_CONTENT_DIR . 'import/'.$_SESSION['course_id']); + + if (isset($_POST['url'])) { + @unlink($full_filename); + } + + +if ($_POST['s_cid']){ + if (!$msg->containsErrors()) { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } + header('Location: ../../editor/edit_content.php?cid='.intval($_POST['cid'])); + exit; +} else { + if (!$msg->containsErrors()) { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } + if ($_GET['tile']) { + header('Location: '.AT_BASE_HREF.'tools/tile/index.php'); + } else { + header('Location: ./index.php?cid='.intval($_POST['cid'])); + } + exit; +} + +?> \ No newline at end of file diff --git a/tools/ims/index.php b/tools/ims/index.php new file mode 100644 index 000000000..12faabf88 --- /dev/null +++ b/tools/ims/index.php @@ -0,0 +1,156 @@ +getContent(); +} + +function print_menu_sections(&$menu, $parent_content_id = 0, $depth = 0, $ordering = '') { + $my_children = $menu[$parent_content_id]; + $cid = $_GET['cid']; + + if (!is_array($my_children)) { + return; + } + foreach ($my_children as $children) { + echo ''; + + print_menu_sections($menu, $children['content_id'], $depth+1, $new_ordering); + } +} + +if (!authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN) && ($_SESSION['packaging'] == 'none')) { + echo '

    '._AT('content_packaging_disabled').'

    '; + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} else if (!authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN) && ($_SESSION['packaging'] == 'top')) { + $_main_menu = array($_main_menu[0]); +} +?> +
    +
    +
    +

    +

    +
    + + +
    +
    + +
    + + +
    + + +
    + + +
    + + +
    + +
    + +
    + + +
    +
    + + +

    + + +
    +
    +
    +

    +

    +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    + + +
    +
    +
    + + + + \ No newline at end of file diff --git a/tools/index.php b/tools/index.php new file mode 100644 index 000000000..edb8a77b0 --- /dev/null +++ b/tools/index.php @@ -0,0 +1,41 @@ +getModules(AT_MODULE_STATUS_ENABLED, 0, TRUE); +$keys = array_keys($module_list); + +echo '
      '; +foreach ($keys as $module_name) { + $module =& $module_list[$module_name]; + if ($module->getPrivilege() && authenticate($module->getPrivilege(), AT_PRIV_RETURN) && ($parent = $module->getChildPage('tools/index.php'))) { + echo '
    1. ' . $module->getName() . ' '; + if ($_pages[$parent]['children']) { + echo ''; + } + echo '
    2. '; + } +} +echo '
    '; + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/links/add.php b/tools/links/add.php new file mode 100644 index 000000000..c7a1e6268 --- /dev/null +++ b/tools/links/add.php @@ -0,0 +1,169 @@ +addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; +} + +if (!isset($_POST['approved'])) { + $_POST['approved'] = 1; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/links/index.php'); + exit; +} + +if (isset($_POST['add_link']) && isset($_POST['submit'])) { + + //check category_id and see if user is allowed.. + $cat = explode('-', $_POST['cat']); + $cat_id = intval($cat[0]); + $owner_type = intval($cat[1]); + $owner_id = intval($cat[2]); + + if (!links_authenticate($owner_type, $owner_id)) { + $msg->addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; + } + + $missing_fields = array(); + if ($_POST['cat'] == 0 || $_POST['cat'] == '') { + $missing_fields[] = _AT('category'); + } + if (trim($_POST['title']) == '') { + $missing_fields[] = _AT('title'); + } + if (trim($_POST['url']) == '' || $_POST['url'] == 'http://') { + $missing_fields[] = _AT('url'); + } + if (trim($_POST['description']) == '') { + $missing_fields[] = _AT('description'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors() && isset($_POST['submit'])) { + $_POST['title'] = $addslashes($_POST['title']); + $_POST['url'] == $addslashes($_POST['url']); + $_POST['description'] = $addslashes($_POST['description']); + + $name = get_display_name($_SESSION['member_id']); + $email = ''; + + $approved = intval($_POST['approved']); + + $sql = "INSERT INTO ".TABLE_PREFIX."links VALUES (NULL, $cat_id, '$_POST[url]', '$_POST[title]', '$_POST[description]', $approved, '$name', '$email', NOW(), 0)"; + mysql_query($sql, $db); + + $msg->addFeedback('LINK_ADDED'); + + header('Location: '.AT_BASE_HREF.'tools/links/index.php'); + exit; + } else { + $_POST['title'] = stripslashes($_POST['title']); + $_POST['url'] == stripslashes($_POST['url']); + $_POST['description'] = stripslashes($_POST['description']); + } +} + +if (!isset($_POST['url'])) { + $_POST['url'] = 'http://'; +} + +$categories = get_link_categories(true); + +if (empty($categories)) { + $msg->addError('LINK_CAT_EMPTY'); + header('Location: '.AT_BASE_HREF.'tools/links/index.php'); + exit; +} + +$onload = 'document.form.title.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$msg->printErrors(); + +?> +
    + + +
    +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    + + > > +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/links/categories.php b/tools/links/categories.php new file mode 100644 index 000000000..7cb537aa3 --- /dev/null +++ b/tools/links/categories.php @@ -0,0 +1,110 @@ +addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; +} + +if ((isset($_POST['delete']) || isset($_POST['edit'])) && !isset($_POST['cat_id'])) { + $msg->addError('NO_ITEM_SELECTED'); +} else if (isset($_POST['delete'])) { + //check if links are in the cat + $sql = "SELECT link_id FROM ".TABLE_PREFIX."links WHERE cat_id=$_POST[cat_id]"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + $msg->addError('LINK_CAT_NOT_EMPTY'); + } else { + header('Location: categories_delete.php?cat_id='.$_POST['cat_id']); + exit; + } +} else if (isset($_POST['edit'])) { + header('Location: categories_edit.php?cat_id='.$_POST['cat_id']); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +?> +
    + + + + + + + + + + + + + + + + + +$row) { + + if (!empty($row['cat_name'])) { + + $parent_cat_name = ''; + if ($row['cat_parent']) { + $sql_cat = "SELECT name, owner_id, owner_type FROM ".TABLE_PREFIX."links_categories WHERE cat_id=".$row['cat_parent']; + $result_cat = mysql_query($sql_cat, $db); + $row_cat = mysql_fetch_assoc($result_cat); + $parent_cat_name = AT_print($row_cat['name'], 'links_categories.name'); + + if (empty($parent_cat_name)) { + $parent_cat_name = get_group_name($row_cat['owner_id']); + } + } else { + $parent_cat_name = ''._AT('none').''; + } + ?> + + + + + + + + + + + + + + + +
     
    +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/links/categories_create.php b/tools/links/categories_create.php new file mode 100644 index 000000000..d8cdff98a --- /dev/null +++ b/tools/links/categories_create.php @@ -0,0 +1,119 @@ +addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; +} + +if (isset($_POST['submit'])) { + $cat_parent_id = intval($_POST['cat_parent_id']); + $cat_name = trim($_POST['cat_name']); + $cat_name = $addslashes($cat_name); + + if ($cat_name == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('title'))); + } + + if (!$msg->containsErrors()) { + + if (!empty($cat_parent_id)) { + $cat_parent_id = explode('-', $_POST['cat_parent_id']); + $parent_id = intval($cat_parent_id[0]); + $owner_type = intval($cat_parent_id[1]); + $owner_id = intval($cat_parent_id[2]); + + if (!links_authenticate($owner_type, $owner_id)) { + $msg->addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'index.php'); + exit; + } + } else { + $owner_type = LINK_CAT_COURSE; + $owner_id = $_SESSION['course_id']; + $parent_id = 0; + } + + $sql = "INSERT INTO ".TABLE_PREFIX."links_categories VALUES (NULL, $owner_type, $owner_id, '$cat_name', $parent_id)"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: categories.php'); + exit; + } +} else if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: categories.php'); + exit; +} + + +/* $categories[category_id] = array(cat_name, cat_parent, num_courses, [array(children)]) */ +$categories = get_link_categories(true); + +$onload = 'document.form.category_name.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); +$msg->printAll(); + +?> + +
    + +
    +
    +
    *

    + +
    + +
    +
    + + + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/links/categories_delete.php b/tools/links/categories_delete.php new file mode 100644 index 000000000..0dec3f894 --- /dev/null +++ b/tools/links/categories_delete.php @@ -0,0 +1,78 @@ +addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; +} + +$cat_id = intval($_REQUEST['cat_id']); + +if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: categories.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + /* delete has been confirmed, delete this category */ + $owner_type = intval($_POST['owner_type']); + $owner_id = intval($_POST['owner_id']); + //OR get_cat_info() again incase data has ben tampered? + + if (!links_authenticate($owner_type, $owner_id)) { + $msg->addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'tools/links/categories.php'); + exit; + } + + //check if there are sub cats within this cat, or links + $sql = "SELECT C.cat_id, L.link_id FROM ".TABLE_PREFIX."links_categories C, ".TABLE_PREFIX."links L WHERE C.parent_id=$cat_id OR L.cat_id=$cat_id"; + $result = mysql_query($sql, $db); + if (mysql_num_rows($result) == 0) { + $sql = "DELETE FROM ".TABLE_PREFIX."links_categories WHERE owner_id=$owner_id AND owner_type=$owner_type AND cat_id=$cat_id"; + $result = mysql_query($sql, $db); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + } else { + $msg->addError('LINK_CAT_NOT_EMPTY'); + } + + header('Location: categories.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + $row = get_cat_info($cat_id); + + if (empty($row)) { + $msg->printErrors('ITEM_NOT_FOUND'); + } else { + $hidden_vars['cat_name']= $row['name']; + $hidden_vars['cat_id'] = $row['cat_id']; + $hidden_vars['owner_type'] = $row['owner_type']; + $hidden_vars['owner_id'] = $row['owner_id']; + + $confirm = array('DELETE_CATEGORY', AT_print($row['name'], 'links_categories.name')); + $msg->addConfirm($confirm, $hidden_vars); + + $msg->printConfirm(); + } + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/tools/links/categories_edit.php b/tools/links/categories_edit.php new file mode 100644 index 000000000..9706aab98 --- /dev/null +++ b/tools/links/categories_edit.php @@ -0,0 +1,119 @@ +addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; +} + +$cat_id = intval($_REQUEST['cat_id']); + +if (isset($_POST['submit'])) { + + //check if cat name is empty + if ($_POST['cat_name'] == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('title'))); + } + + if (!$msg->containsErrors()) { + //authorized cat parent? + $lid = explode('-', $_POST['cat_parent_id']); + $parent_id = intval($lid[0]); + $owner_type = intval($lid[1]); + $owner_id = intval($lid[2]); + + if (!links_authenticate($owner_type, $owner_id)) { + $msg->addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'tools/links/categories.php'); + exit; + } + + $cat_name = $addslashes($_POST['cat_name']); + + $sql = "UPDATE ".TABLE_PREFIX."links_categories SET parent_id=$parent_id, name='$cat_name', owner_type=$owner_type, owner_id=$owner_id WHERE cat_id=".$cat_id; + + $result = mysql_query($sql, $db); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: categories.php'); + exit; + } +} else if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: categories.php'); + exit; +} else { + $row = get_cat_info($cat_id); + + //authorized to edit this cat? + if (!links_authenticate($row['owner_type'], $row['owner_id'])) { + $msg->addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'tools/links/categories.php'); + exit; + } +} + +/* get all the categories: */ +/* $categories[category_id] = array(cat_name, cat_parent, num_courses, [array(children)]) */ +$categories = get_link_categories(true); + +$onload = 'document.form.category_name.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> +
    + + + +
    +
    +
    *

    + +
    + +
    +
    + +
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/links/delete.php b/tools/links/delete.php new file mode 100644 index 000000000..10b6380a0 --- /dev/null +++ b/tools/links/delete.php @@ -0,0 +1,74 @@ +addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; +} + +$lid = explode('-', $_REQUEST['lid']); +$link_id = intval($lid[0]); + +if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/links/index.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + + $row = get_cat_info(intval($_POST['cat_id'])); + + if (!links_authenticate($row['owner_type'], $row['owner_id'])) { + $msg->addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'tools/links/index.php'); + exit; + } + + $sql = "DELETE FROM ".TABLE_PREFIX."links WHERE link_id=$_POST[link_id]"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'tools/links/index.php'); + exit; +} + +$_section[0][0] = _AT('delete_link'); + +require(AT_INCLUDE_PATH.'header.inc.php'); + + $sql = "SELECT LinkName, cat_id FROM ".TABLE_PREFIX."links WHERE link_id=$link_id"; + + $result = mysql_query($sql,$db); + if (mysql_num_rows($result) == 0) { + $msg->printErrors('LINK_NOT_FOUND'); + } else { + $row = mysql_fetch_assoc($result); + + $hidden_vars['delete_link'] = TRUE; + $hidden_vars['link_id'] = $link_id; + $hidden_vars['cat_id'] = $row['cat_id']; + + $confirm = array('DELETE_LINK', AT_print($row['LinkName'], 'resource_links.LinkName')); + $msg->addConfirm($confirm, $hidden_vars); + + $msg->printConfirm(); + } + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/tools/links/edit.php b/tools/links/edit.php new file mode 100644 index 000000000..9c2541331 --- /dev/null +++ b/tools/links/edit.php @@ -0,0 +1,155 @@ +addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; +} + +$lid = explode('-', $_REQUEST['lid']); +$link_id = intval($lid[0]); + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/links/index.php'); + exit; +} else if (isset($_POST['edit_link']) && isset($_POST['submit'])) { + + $missing_fields = array(); + if ($_POST['cat'] == 0 || $_POST['cat'] == '') { + $missing_fields[] = _AT('category'); + } + if (trim($_POST['title']) == '') { + $missing_fields[] = _AT('title'); + } + if (trim($_POST['url']) == '' || $_POST['url'] == 'http://') { + $missing_fields[] = _AT('url'); + } + if (trim($_POST['description']) == '') { + $missing_fields[] = _AT('description'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors() && isset($_POST['submit'])) { + + $_POST['cat'] = intval($_POST['cat']); + $_POST['title'] = $addslashes($_POST['title']); + $_POST['url'] == $addslashes($_POST['url']); + $_POST['description'] = $addslashes($_POST['description']); + + $name = get_display_name($_SESSION['member_id']); + $email = ''; + + //check if new cat is auth? -- shouldn't be a prob. since cat dropdown is already filtered + + $sql = "UPDATE ".TABLE_PREFIX."links SET cat_id=$_POST[cat], Url='$_POST[url]', LinkName='$_POST[title]', Description='$_POST[description]', SubmitName='$name', Approved=$_POST[approved] WHERE link_id=".$link_id; + mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: '.AT_BASE_HREF.'tools/links/index.php'); + exit; + } else { + $_POST['title'] = $stripslashes($_POST['title']); + $_POST['url'] = $stripslashes($_POST['url']); + $_POST['description'] = $stripslashes($_POST['description']); + } +} else { + $sql = "SELECT * FROM ".TABLE_PREFIX."links WHERE link_id=".$link_id; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)) { + + //auth based on the link's cat + $cat_row = get_cat_info($row['cat_id']); + + if (!links_authenticate($cat_row['owner_type'], $cat_row['owner_id'])) { + $msg->addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'tools/links/index.php'); + exit; + } + + $_POST['title'] = $row['LinkName']; + $_POST['cat'] = $row['cat_id']; + $_POST['url'] = $row['Url']; + $_POST['description'] = $row['Description']; + $_POST['approved'] = $row['Approved']; + } +} + +$onload = 'document.form.title.focus();'; +require(AT_INCLUDE_PATH.'header.inc.php'); + +$categories = get_link_categories(true); + +$msg->printErrors(); + +?> +
    + + + +
    +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    *

    + +
    + +
    +
    + + /> /> +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/links/index.php b/tools/links/index.php new file mode 100644 index 000000000..5a929e759 --- /dev/null +++ b/tools/links/index.php @@ -0,0 +1,174 @@ +addError('ACCESS_DENIED'); + header('Location: '.AT_BASE_HREF.'links/index.php'); + exit; +} + +if (isset($_POST['edit']) && isset($_POST['link_id'])) { + header('Location: edit.php?lid='.$_POST['link_id']); + exit; +} else if (isset($_POST['delete']) && isset($_POST['link_id'])) { + header('Location: delete.php?lid='.$_POST['link_id']); + exit; +} else if (isset($_POST['view']) && isset($_POST['link_id'])) { + $onload = 'window.open(\''.AT_BASE_HREF.'links/index.php?view='.$_POST['link_id'].'\',\'link\');'; +} else if (!empty($_POST)) { + $msg->addError('NO_ITEM_SELECTED'); +} + +$categories = get_link_categories(true); + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if ($_GET['col']) { + $col = addslashes($_GET['col']); +} else { + $col = 'LinkName'; +} + +if ($_GET['order']) { + $order = addslashes($_GET['order']); +} else { + $order = 'asc'; +} + +if (!isset($_GET['cat_parent_id'])) { + $parent_id = 0; +} else { + $parent_id = intval($_GET['cat_parent_id']); +} + +if ($_SESSION['groups']) { + $groups = implode(',', $_SESSION['groups']); +} else { + // not in any groups + $groups = 0; +} + +$auth = manage_links(); + +if ($auth == LINK_CAT_AUTH_ALL) { + $sql = "SELECT * FROM ".TABLE_PREFIX."links L INNER JOIN ".TABLE_PREFIX."links_categories C USING (cat_id) WHERE ((owner_id=$_SESSION[course_id] AND owner_type=".LINK_CAT_COURSE.") OR (owner_id IN ($groups) AND owner_type=".LINK_CAT_GROUP."))"; +} else if ($auth == LINK_CAT_AUTH_GROUP) { + $sql = "SELECT * FROM ".TABLE_PREFIX."links L INNER JOIN ".TABLE_PREFIX."links_categories C USING (cat_id) WHERE owner_id IN ($groups) AND owner_type=".LINK_CAT_GROUP; +} else if ($auth == LINK_CAT_AUTH_COURSE) { + $sql = "SELECT * FROM ".TABLE_PREFIX."links L INNER JOIN ".TABLE_PREFIX."links_categories C USING (cat_id) WHERE ((owner_id=$_SESSION[course_id] AND owner_type=".LINK_CAT_COURSE.") OR (owner_id IN ($groups) AND owner_type=".LINK_CAT_GROUP."))"; +} + +if ($parent_id) { + $sql .= " AND L.cat_id=$parent_id"; +} +$sql .= " ORDER BY $col $order"; + +$result = mysql_query($sql, $db); + +if (!empty($categories)) { +?> + +
    +
    +
    +

    +
    + +
    + +
    + +
    + +
    +
    +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    +
    + + \ No newline at end of file diff --git a/tools/modules.php b/tools/modules.php new file mode 100644 index 000000000..964cd2a9e --- /dev/null +++ b/tools/modules.php @@ -0,0 +1,195 @@ +addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: modules.php'); + exit; +} + + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +//being displayed +$_current_modules = array_slice($_pages[AT_NAV_COURSE], 1, -1); // removes index.php and tools/index.php +$num_main = count($_current_modules); +//main and home merged +$_current_modules = array_merge( (array) $_current_modules, array_diff($_pages[AT_NAV_HOME],$_pages[AT_NAV_COURSE]) ); +$num_modules = count($_current_modules); +//all other mods +$_current_modules = array_merge( (array) $_current_modules, array_diff($_modules, $_current_modules)); + +$count = 0; + +?> +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +   + + 1)): ?> + + + + + + + + + + +
    +
    + + \ No newline at end of file diff --git a/tools/my_tests.php b/tools/my_tests.php new file mode 100644 index 000000000..f76198b20 --- /dev/null +++ b/tools/my_tests.php @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + +'; + echo ''; + echo ''; + echo ''; + + if ($row['num_takes'] == AT_TESTS_TAKE_UNLIMITED) { + echo ''; + } else { + echo ''; + } + + if ($row['random']) { + echo ''; + echo ''; + } else { + echo ''; + if ($row['out_of'] > 0) { + echo ''; + } else { + echo ''; + } + } + + echo ''; + +} +if (!$count) { + echo ''; +} +?> + +
    '; + $sql = "SELECT COUNT(test_id) AS cnt FROM ".TABLE_PREFIX."tests_results WHERE test_id=".$row['test_id']." AND member_id=".$_SESSION['member_id']; + + $takes_result= mysql_query($sql, $db); + $takes = mysql_fetch_assoc($takes_result); + if ( ($row['us'] <= time() && $row['ue'] >= time()) && + ( ($row['num_takes'] == AT_TESTS_TAKE_UNLIMITED) || ($takes['cnt'] < $row['num_takes']) ) ) { + echo ''.AT_print($row['title'], 'tests.title').''; + } else { + echo ''.AT_print($row['title'], 'tests.title').''; + } + echo ''; + if ( ($row['us'] <= time()) && ($row['ue'] >= time() ) ) { + echo ''._AT('ongoing').''; + } else if ($row['ue'] < time() ) { + echo ''._AT('expired').''; + } else if ($row['us'] > time() ) { + echo ''._AT('pending').''; + } + echo ''.substr($row['start_date'], 0, -3).''.substr($row['end_date'], 0, -3).''.$takes['cnt'].'/'._AT('unlimited').''.$takes['cnt'].'/'.$row['num_takes'].''.$row['num_questions'].'-'.$row['numquestions'].''.$row['out_of'].''._AT('na').'
    '._AT('none_found').'
    +
    + + + + + +


    + + + + + + + + + + +'; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + } while ($row = mysql_fetch_assoc($result)); +} else { + echo ''; +} +?> + +
    '.AT_print($row['title'], 'tests.title').''.$row['date_taken'].''; + + if ($row['out_of'] == 0) { + echo _AT('na'); + } elseif ($row['final_score'] == '') { + echo _AT('unmarked'); + } elseif (($row['final_score'] != '') && ($row['result_release']==AT_RELEASE_NEVER)) { + echo _AT('unreleased'); + } else { + if ($row['random']) { + $out_of = get_random_outof($row['test_id'], $row['result_id']); + } else { + $out_of = $row['out_of']; + } + + echo ''.$row['final_score'].'/'.$out_of; + } + echo ''; + + if ( ($row['result_release']==AT_RELEASE_IMMEDIATE) || (($row['final_score'] != '') && ($row['result_release']==AT_RELEASE_MARKED)) ) { + echo ''._AT('view_results').''; + } else { + echo ''._AT('no_results_yet').''; + } + + echo '
    '._AT('none_found').'
    + + \ No newline at end of file diff --git a/tools/news/index.php b/tools/news/index.php new file mode 100644 index 000000000..bfa322144 --- /dev/null +++ b/tools/news/index.php @@ -0,0 +1,93 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$orders = array('asc' => 'desc', 'desc' => 'asc'); +$cols = array('title' => 1, 'date' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'date'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'date'; +} else { + // no order set + $order = 'desc'; + $col = 'date'; +} + +$sql = "SELECT news_id, title, date FROM ".TABLE_PREFIX."news WHERE course_id=$_SESSION[course_id] $and ORDER BY $col $order"; +$result = mysql_query($sql, $db); + +?> +
    + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    +
    + + \ No newline at end of file diff --git a/tools/packages/delete.php b/tools/packages/delete.php new file mode 100644 index 000000000..103ae5a4c --- /dev/null +++ b/tools/packages/delete.php @@ -0,0 +1,71 @@ + 0) { + foreach ($ptypes as $type) { + $plug[$type]->deletePackages ($_POST['goners']); + } +} + +$sql = "SELECT package_id, ptype FROM ".TABLE_PREFIX."packages WHERE course_id = $_SESSION[course_id] ORDER BY package_id"; +$result = mysql_query($sql, $db); + +$num = 0; +while ($row = mysql_fetch_assoc($result)) { + foreach ($plug[$row['ptype']]->getDeleteFormItems ($row['package_id'], $num) as $l) { + $p .= '
  • ' . $l . '
  • ' . "\n"; + $num++; + } +} + +if ($num == 0) { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php' ); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    +
    +
      + +
    +
    + +
    +
    +
    + + + diff --git a/tools/packages/import.php b/tools/packages/import.php new file mode 100644 index 000000000..3de590231 --- /dev/null +++ b/tools/packages/import.php @@ -0,0 +1,97 @@ + + +
    +
    + + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    + +
    + +
    + + +
    + + +
    +
    + + + diff --git a/tools/packages/index.php b/tools/packages/index.php new file mode 100644 index 000000000..b50892759 --- /dev/null +++ b/tools/packages/index.php @@ -0,0 +1,62 @@ + 0) { + array_push ($_pages['tools/packages/index.php']['children'], + 'tools/packages/delete.php' + ); + array_push ($_pages['tools/packages/index.php']['children'], + 'tools/packages/settings.php' + ); + } + */ +} + + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (sizeOf ($pkgs) == 0) { + $msg->addInfo (NO_PACKAGES); + $msg->printAll(); +} else { + echo getScript(); + echo '
      ' . "\n"; + foreach ($pkgs as $pk) { + echo '
    1. ' . $pk . '
    2. ' . "\n"; + } + echo '
    ' . "\n"; +} + +require (AT_INCLUDE_PATH.'footer.inc.php'); +?> diff --git a/tools/packages/lib.inc.php b/tools/packages/lib.inc.php new file mode 100644 index 000000000..7e54c30ea --- /dev/null +++ b/tools/packages/lib.inc.php @@ -0,0 +1,90 @@ +getLearnerItemLinks( + $row['package_id']) as $l) { + array_push ($rv, $l); + } + } + return $rv; +} + +function getPackagesManagerLinkList () { + global $db; + global $plug; + global $sql_get_pkgs; + + $rv = Array(); + + $result = mysql_query($sql_get_pkgs, $db); + + while ($row = mysql_fetch_assoc($result)) { + foreach ($plug[$row['ptype']]->getManagerItemLinks( + $row['package_id']) as $l) { + array_push ($rv, $l); + } + } + return $rv; +} + +function getScript () { + return " + +"; +} + +?> diff --git a/tools/packages/scorm-1.2/images/active.png b/tools/packages/scorm-1.2/images/active.png new file mode 100644 index 0000000000000000000000000000000000000000..a672fe60b67dcfb503c88c176b06af912453af1a GIT binary patch literal 499 zcmV^Nj8ip zW_2>OAT;}8hDT#Dh$s1c+t?zT#)k2Pc5JMhg~m@oP&XSa6ylHibmnobvUAVXBTu>R zKuPHa0BLYy;>G4>OcwxNzkTyyeEigSY&;5BH-=^*tt*$CTUoi%cm4(~FMlkRK3DgW p@Zr(yR6bu=Sh(tg|E~*Py55WI_2}l?O3C4u(<-P7&CNRMW4{9Xeq=LG2 zRJy7{cZcH?erjws?`_klX;FmPNp)JEo}Ddzi%2Q0*H1Ezv5Yas5CWj5)QQM^zF_`7 zLWhXQhljrFh>4j(;G!sEjAdCeQ`_zi{ofI9udhwpAR;0X(q18OEMr+l0O-1Q0(&B8z6XD`MepZf0iYrm7+W0Ei$W<0umdb2l?JS2a}=Q9?lgRYd?* zQ`HGXRaGhVDypm^f`kBIZiEB~W)`@ZKwMs3J+IfqLPCfL0B){AM6}&#AO%jNm>UEJN@S5-9*<1mal4>=Dx=bUojaC7_T(2qa;$ji&~ v=k_zD#7uQvpI=;DU*G)KiO0Vg!O{8)`cu9Y*Em*900000NkvXXu0mjfnyF_2DvNpN(XT_f9`K)IFGNF>(FeVy)r^a05Pd5X&j(#|{W%I9+^t z=JgJ}+rb~sl;1ADAus|g4IQ{ntXn}Am*xGh%Jj$k2^P;@%>f_`Kz^Gckbsw~vkB*{ zE?3E**w_+nqbBkZ)v5ulwhGPQ`@vDZJ-FXOdawV5r8&LktHmWKXO75L?|-9 zj&I@{__~Wji$jZRc0653u(&vWNfBB%HSs^4Z&^Nj8ip zW_2>OAT;}8hDT#Dh$s1c+t?zT#)k2Pc5JMhg~m@oP&XSa6ylHibmnobvUAVXBTu>R zKuPHa0BLYy;>G4>OcwxNzkTyyeEigSY&;5BH-=^*tt*$CTUoi%cm4(~FMlkRK3DgW p@Zr(yR6bu=Sh(tg|E~F_2DvNpN(XT_f9`K)IFGNF>(FeVy)r^a05Pd5X&j(#|{W%I9+^t z=JgJ}+rb~sl;1ADAus|g4IQ{ntXn}Am*xGh%Jj$k2^P;@%>f_`Kz^Gckbsw~vkB*{ zE?3E**w_+nqbBkZ)v5ulwhGPQ`@vDZJ-FXOdawV5r8&LktHmWKXO75L?|-9 zj&I@{__~Wji$jZRc0653u(&vWNfBB%HSs^4Z&_!@hljQC0!qCAg>jC6&7I;J!Gca%qf-qx!O8i8iAbW|YuPggyZXR(y zjyIlB2Z2J?o-U3d6?2jk4)C%xMD!@Kcx*CjWAZ$9p<+To2ICAH2C+hhiLHzZrtA({ oHyf=aBvKkon41}yjr}$=F1pKhviDMW7SI?5Pgg&ebxsLQ0G8D^WB>pF literal 0 HcmV?d00001 diff --git a/tools/packages/scorm-1.2/images/incomplete.png b/tools/packages/scorm-1.2/images/incomplete.png new file mode 100644 index 0000000000000000000000000000000000000000..0586c28eb9bb92d1ad5358e8daec54d53181ce60 GIT binary patch literal 538 zcmV+#0_FXQP)3_-&itHd zhMCl4C|Igu6WS`?fr7fS7B_;f#EloAs8>*MZBft`LFz4tttcXHyaJ^(Q7TQXNgAuh z&Sd^h=5yn!sZ6Es_Ir7F`FI!+;b77Jby$A+Y_;|-N;X|r9~&L7RL-85yu4?V4X$Xl zHt)~f{q_5k=gG2XmP)4U8qyL)w|Z*oj%9hf`h1W&JA1RSu_C3ghJP$#Nt8ul-``O{!~ow{-R_qhM5?kRp(M_tNQJ$=@27^z z0T%QW1EQ$k3s?@~$XMlDb2SK*6$mL)P3HiTI5Q+?KoVzm;dl;Wdiv6XhaasWWp=qH zH~^Jqy-*n%2Sb|DNX=U;}ys~OMNDc#uE+}YXP-+%VM2*+{G&OSv^Xc(QY z(WSIbNNL;SB#jOao~x?1;9pxtoSuHPtg);ps;1U8ovzb%r~T;R15K4iqpM~AB4RKY z+}sR>njqF{q997Ls3=OKu6K-%VRQ*8Eo)SPxVZQV2mpUGMgT-a#1gSA0nzg(6N8t|mGuYG W57M+fLU$kl0000Ih+L^k;M!Q+=3v?Sf3I<5h%!B;_2(k zewmv`oR4+V549SgkiVykV@SoELMU`3hR<$xJw3dRy?YCggqH(1m-wlqYvD={z}V&Q1m%=jb~ PXf%VTtDnm{r-UW|V}nHS literal 0 HcmV?d00001 diff --git a/tools/packages/scorm-1.2/import.php b/tools/packages/scorm-1.2/import.php new file mode 100644 index 000000000..593009b08 --- /dev/null +++ b/tools/packages/scorm-1.2/import.php @@ -0,0 +1,492 @@ +addFeedback('IMPORT_CANCELLED'); + header('Location: ../index.php'); + exit; +} + +$cid = intval($_POST['cid']); + + +if (isset($_POST['url']) && ($_POST['url'] != 'http://') ) { + if ($content = @file_get_contents($_POST['url'])) { + $filename = substr(time(), -6). '.zip'; + $full_filename = AT_CONTENT_DIR . $filename; + + if (!$fp = fopen($full_filename, 'w+b')) { + echo "Cannot open file ($filename)"; + exit; + } + + if (fwrite($fp, $content, strlen($content) ) === FALSE) { + echo "Cannot write to file ($filename)"; + exit; + } + fclose($fp); + } + $_FILES['file']['name'] = $filename; + $_FILES['file']['tmp_name'] = $full_filename; + $_FILES['file']['size'] = strlen($content); + unset($content); + $url_parts = pathinfo($_POST['url']); + $package_base_name_url = $url_parts['basename']; +} +$ext = pathinfo($_FILES['file']['name']); +$ext = $ext['extension']; + +if ($_FILES['file']['error'] == 1) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $errors = array('FILE_MAX_SIZE', ini_get('upload_max_filesize')); + $msg->printErrors($errors); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +if (!$_FILES['file']['name'] + || (!is_uploaded_file($_FILES['file']['tmp_name']) && !$_POST['url']) + || ($ext != 'zip')) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('FILE_NOT_SELECTED'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + if ($_FILES['file']['size'] == 0) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('IMPORTFILE_EMPTY'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $package_path = AT_INCLUDE_PATH . '../sco/'; + + if (!is_dir($package_path)) { + if (!@mkdir($package_path, 0755)) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('PACKAGE_DIR_FAILED'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + chmod ($package_path, 0755); + } + + $package_path .= $_SESSION['course_id'].'/'; + if (!is_dir($package_path)) { + if (!@mkdir($package_path, 0755)) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('PACKAGE_DIR_FAILED'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + chmod ($package_path, 0755); + } + + $package_path .= 'tmp/'; + clr_dir($package_path); + if (!is_dir($package_path)) { + if (!@mkdir($package_path, 0755)) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('PACKAGE_DIR_FAILED'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + chmod ($package_path, 0755); + } + + //error_reporting(0); + + $archive = new PclZip($_FILES['file']['tmp_name']); + if ($archive->extract (PCLZIP_OPT_PATH, $package_path) == 0) { + + require(AT_INCLUDE_PATH.'header.inc.php'); + echo 'Error : '.$archive->errorInfo(true); + require(AT_INCLUDE_PATH.'footer.inc.php'); + clr_dir($package_path); + exit; + } + //error_reporting(E_ALL ^ E_NOTICE); + + chmodPackageDir ($package_path); + + $sql = "SELECT max_quota + FROM ".TABLE_PREFIX."courses + WHERE course_id=$_SESSION[course_id]"; + + $result = mysql_query($sql, $db); + $q_row = mysql_fetch_assoc($result); + + if ($q_row['max_quota'] != AT_COURSESIZE_UNLIMITED) { + + if ($q_row['max_quota'] == AT_COURSESIZE_DEFAULT) { + $q_row['max_quota'] = $MaxCourseSize; + } + $totalBytes = dirsize($import_path); + $course_total = dirsize(AT_CONTENT_DIR . $_SESSION['course_id'].'/'); + $total_after = $q_row['max_quota'] - $course_total - $totalBytes + $MaxCourseFloat; + + if ($total_after < 0) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $errors = array('NO_CONTENT_SPACE', number_format(-1*($total_after/AT_KBYTE_SIZE), 2 ) ); + $msg->printErrors($errors); + + require(AT_INCLUDE_PATH.'footer.inc.php'); + clr_dir($import_path); + exit; + } + } + + +parseManifest ($package_path); +doValidation(); +doImport(); + + +if (isset($_POST['url'])) { + @unlink($full_filename); +} +$orgs = array(); +for ($i=1; $orgitems[$i]; $i++) { + array_push ($orgs, $orgitems[$i]['title']); +} +$oc = sizeOf($orgs); +if ($oc == 1) { + $msg->addFeedback(array('PACKAGE_IMPORT_SUCCESS', $orgs[0])); +} else { + $l = ''; + for ($i=0; $i<$oc; $i++) { + $l .= '
  • ' . $orgs[$i] . '
  • '; + } + $msg->addFeedback(array('PACKAGES_IMPORT_SUCCESS', $l)); +} + +header('Location: ./index.php'); +exit; + + +function parseManifest ($import_path) { + global $msg; + + $ims_manifest_xml = @file_get_contents($import_path.'imsmanifest.xml'); + + if ($ims_manifest_xml === false) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->addError('NO_IMSMANIFEST'); + $msg->printErrors(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + clr_dir($import_path); + exit; + } + + $xml_parser = xml_parser_create(); + + xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); + xml_set_element_handler($xml_parser, 'startElement', 'endElement'); + xml_set_character_data_handler($xml_parser, 'characterData'); + + if (!xml_parse($xml_parser, $ims_manifest_xml, true)) { + die(sprintf("XML error: %s at line %d", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser))); + } + + xml_parser_free($xml_parser); +} + +function scormType ($i) { + global $idxs, $orgitems, $res; + $r = $res[$orgitems[$idxs[$i]]['identifierref']]['adlcp:scormtype']; + if ($r) return $r; + $o = explode ('.', $idxs[$i]); + if (sizeOf($o) > 1) return 'cluster'; + return 'organization'; +} + +function doValidation () { + global $msg; + global $orgitems; + global $idxs; + global $res; + global $package_path; + + $ic = sizeOf ($idxs); + + $err = 0; + $warn = 0; + + for ($i=0; $i<$ic; $i++) { + $title = addslashes($orgitems[$idxs[$i]]['title']); + + $href = $res[$orgitems[$idxs[$i]]['identifierref']]['href']; + $styp = $res[$orgitems[$idxs[$i]]['identifierref']]['adlcp:scormtype']; + $pre = $orgitems[$idxs[$i]]['adlcp:prerequisites']; + $max = $orgitems[$idxs[$i]]['adlcp:maxtimeallowed']; + $act = $orgitems[$idxs[$i]]['adlcp:timelimitaction']; + $lms = $orgitems[$idxs[$i]]['adlcp:datafromlms']; + $mas = $orgitems[$idxs[$i]]['adlcp:masteryscore']; + + if ($idxs[$i].'.1' == $idxs[$i+1]) { // cluster + if ($href != '' && ++$warn) + $msg->addWarning ('SCORM_ITEM_CLUSTER_HAS_OBJECT'); + } else { + if ($styp == '' && ++$err) + $msg->addError ('SCORM_ITEM_SCORMTYPE_MISSING'); + if ($href == '' && ++$err) + $msg->addError ('SCORM_ITEM_HREF_MISSING'); + } + + } + if ($err) { + header('Location: ./index.php'); + exit; + } + +} + + +function doImport () { + global $db; + global $msg; + global $orgitems; + global $idxs; + global $res; + global $package_path; + + $now = date('Y-m-d H:i:s'); + $file = $_FILES['file']['name']; + $sql = "INSERT INTO ".TABLE_PREFIX."packages + VALUES ( + NULL, + '$file', + '$now', + $_SESSION[course_id], + 'scorm-1.2' + )"; + + $result = mysql_query($sql, $db); + if (!$result) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->addError('DB_NOT_UPDATED'); + $msg->printAll(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $pkg = mysql_insert_id($db); + rename ($package_path, dirname($package_path) . '/' . $pkg); + + $ic = sizeOf ($idxs); + + for ($i=0; $i<$ic; $i++) { + $title = addslashes($orgitems[$idxs[$i]]['title']); + $scormtype = scormType($i); + + switch ($scormtype) { + case 'organization': + $sql = "INSERT INTO ".TABLE_PREFIX."scorm_1_2_org ( + package_id, title + ) VALUES ( $pkg, '$title')"; + + $result = mysql_query($sql, $db); + if (!$result) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->addError('DB_NOT_UPDATED'); + $msg->printAll(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + $orgid = mysql_insert_id($db); + $sql = "INSERT INTO ".TABLE_PREFIX."scorm_1_2_item + VALUES ( + 0, + $orgid, + '$idxs[$i]', + '$title', + '', + '$scormtype', + '', '', '', '', '' + )"; + $result = mysql_query($sql, $db); + break; + + case 'sco': + if (!$orgitems[$idxs[$i]]['adlcp:timelimitaction']) + $orgitems[$idxs[$i]]['adlcp:timelimitaction'] = + 'continue, no message'; + case 'asset': + case 'cluster': + $href = $res[$orgitems[$idxs[$i]]['identifierref']]['href']; + $pre = $orgitems[$idxs[$i]]['adlcp:prerequisites']; + $max = $orgitems[$idxs[$i]]['adlcp:maxtimeallowed']; + $act = $orgitems[$idxs[$i]]['adlcp:timelimitaction']; + $lms = $orgitems[$idxs[$i]]['adlcp:datafromlms']; + $mas = $orgitems[$idxs[$i]]['adlcp:masteryscore']; + $sql = "INSERT INTO ".TABLE_PREFIX."scorm_1_2_item + VALUES ( + 0, + $orgid, + '$idxs[$i]', + '$title', + '$href', + '$scormtype', + '$pre', + '$max', '$act', '$lms', '$mas' + )"; + $result = mysql_query($sql, $db); + if (!$result) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->addError('DB_NOT_UPDATED'); + $msg->printAll(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + } + } +} + + +function startElement($parser, $name, $h) { + + global $orgid, $itemid, $depth; + global $orgitems, $idx, $idxs; + global $res, $ress; + global $files, $finfo, $totalsize; + + switch ($name) { + case 'organization': + $orgid++; + case 'item': + $itemid[$depth++]++; + $idx = implode ('.', $itemid); + array_push ($idxs, $idx); + while (list($l, $r) = each($h)) { + $orgitems[$idx][$l]=$r; + } + break; + case 'title': + break; + + case 'resource': + array_push ($ress, $h['identifier']); + while (list($l, $r) = each($h)) { + $res[$h['identifier']][$l]=$r; + } + break; + case 'dependency': + break; + case 'file': + array_push ($files, $h['href']); + $f=AT_CONTENT_DIR + .'import/'.$_SESSION['course_id'] + .'/'.$h['href']; + $finfo[$h['href']] = @stat($f); + $totalsize += $finfo[$h['href']]['size']; + break; + } +} + +function endElement($parser, $name) { + global $orgid, $idx, $itemid, $depth, $text, $orgitems; + + switch ($name) { + case 'organization': + $depth=0; + $itemid = array ($orgid); + break; + case 'item': + while ($itemid[$depth]) { + array_pop($itemid); + } + $depth--; + break; + case 'title': + case 'adlcp:datafromlms': + case 'adlcp:maxtimeallowed': + case 'adlcp:timelimitaction': + case 'adlcp:prerequisites': + case 'adlcp:masteryscore': + $orgitems[$idx][$name] = trim($text); + break; + case 'resource': + + } + $text = ''; +} + +function characterData($parser, $data){ + global $text; + + $text .= $data; +} + +?> diff --git a/tools/packages/scorm-1.2/java/ATutorApiAdapterApplet.jar b/tools/packages/scorm-1.2/java/ATutorApiAdapterApplet.jar new file mode 100644 index 0000000000000000000000000000000000000000..0821db893674b7af2278a819251c32ff6e900100 GIT binary patch literal 3574 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 \ No newline at end of file diff --git a/tools/packages/scorm-1.2/lib.inc.php b/tools/packages/scorm-1.2/lib.inc.php new file mode 100644 index 000000000..e62ed0106 --- /dev/null +++ b/tools/packages/scorm-1.2/lib.inc.php @@ -0,0 +1,253 @@ +getOrgs ($id); + $rv = Array(); + while ($row = mysql_fetch_assoc($result)) { + array_push ($rv, + '' . ' + ' + + ); + } + return $rv; + } + + function getLearnerItemLinks ($id) { + $result = $this->getOrgs ($id); + $rv = Array(); + while ($row = mysql_fetch_assoc($result)) { + array_push ($rv, '' + . '' + + . ' ' + + ); + } + return $rv; + } + + function getCMILinks ($id) { + $result = $this->getOrgs ($id); + $rv = Array(); + while ($row = mysql_fetch_assoc($result)) { + array_push ($rv, + '' + ); + } + return $rv; + } + + function getSettingsLinks ($id) { + $result = $this->getOrgs ($id); + $rv = Array(); + while ($row = mysql_fetch_assoc($result)) { + array_push ($rv, + '' + ); + } + return $rv; + } + + function getDeleteFormItems ($id, $i) { + $result = $this->getOrgs ($id); + $rv = Array(); + while ($row = mysql_fetch_assoc($result)) { + array_push ($rv, '' + . '' + . '
    ' . "\n"; + echo utf8_decode($p); +?> + + diff --git a/tools/packages/scorm-1.2/view.php b/tools/packages/scorm-1.2/view.php new file mode 100644 index 000000000..3f6e1ceea --- /dev/null +++ b/tools/packages/scorm-1.2/view.php @@ -0,0 +1,405 @@ +'; +} + +define('AT_INCLUDE_PATH', '../../../include/'); +require(AT_INCLUDE_PATH.'vitals.inc.php'); + +$me = 'tools/packages/scorm-1.2/view.php'; +$im = 'tools/packages/scorm-1.2/images/'; + +if (!$_GET['org_id']) { + header('Location: ../index.php'); + exit; +} + + +$sql = "SELECT first_name, last_name + FROM ".TABLE_PREFIX."members + WHERE member_id = ".$_SESSION['member_id']; + +$result = mysql_query($sql, $db); +$q_row = mysql_fetch_assoc($result); +$student_name = $q_row['last_name'] . ', ' . $q_row['first_name']; + +//if ($student_name == ', ') $msg->addWarning ('packages_no_student_name'); + + $sql = "SELECT package_id + FROM ".TABLE_PREFIX."scorm_1_2_org + WHERE org_id = $_GET[org_id]"; + $result = mysql_query($sql, $db); + $q_row = mysql_fetch_assoc($result); + $pkg = $q_row['package_id']; + + $sql = "SELECT item_id, scormtype, idx, title, href + FROM ".TABLE_PREFIX."scorm_1_2_item + WHERE org_id = $_GET[org_id] + ORDER BY item_id + "; + $result = mysql_query($sql, $db); + + $org = array(); + $iid = array(); + $ist = array(); + + $i=0; + while ($row = mysql_fetch_assoc($result)) { + $org[$i]['id'] = $row['item_id']; + $org[$i]['idx'] = $row['idx']; + $org[$i]['type'] = $row['scormtype']; + $org[$i]['title'] = $row['title']; + $org[$i]['href'] = $row['href']; + $iid[$row['item_id']] = $i; + $ist[$i] = 'not attempted'; + $i++; + } + $c = sizeOf($org); + + $sql = "SELECT c.item_id, + c.rvalue + FROM ".TABLE_PREFIX."cmi c, + ".TABLE_PREFIX."scorm_1_2_item i, + ".TABLE_PREFIX."scorm_1_2_org o + WHERE o.org_id = $_GET[org_id] + AND i.org_id = o.org_id + AND i.item_id = c.item_id + AND c.member_id = $_SESSION[member_id] + AND c.lvalue = 'cmi.core.lesson_status' + "; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + $ist[$iid[$row['item_id']]] = $row['rvalue']; + } + + $fil = array(); + $tree = array(); + $dtree = array(); + $tidx = explode ('.', $org[$c-1]['idx']); + $lvl = sizeOf($tidx); + $llvl = 42; + + for ($l=0; $l<$lvl; $l++) array_push ($fil, treeEl ('space')); + array_push ($fil, treeEl('end')); + + for ($i=$c-1; $i>=0; $i--) { + $tidx = explode ('.', $org[$i]['idx']); + $lvl = sizeOf($tidx); + + switch ($org[$i]['type']) { + case 'organization': + $_pages[$me]['title'] =$org[$i]['title']; + + case 'cluster': + array_pop ($fil); + array_pop ($fil); + array_push ($fil, treeEl('disabled')); + break; + + case 'sco': + case 'asset': + if ($org[$i]['idx'].'.1' == $org[$i+1]['idx']) { + // cluster with resource + array_pop ($fil); + array_pop ($fil); + array_push ($fil, treeEl('disabled')); + break; + } + + array_pop ($fil); + if ($lvl < $llvl) array_push ($fil, treeEl('end')); + if ($lvl == $llvl) array_push ($fil, treeEl ('split')); + if ($lvl > $llvl) { + array_push ($fil, treeEl ('vertline')); + array_push ($fil, treeEl ('end')); + } + break; + } + + if ($org[$i]['href']) { + if ($org[$i]['type'] == 'sco') { + array_push ($tree, + implode ($fil) + . '' . $ist[$i]
+					. '' + . '' + . $org[$i]['title'] . '' + ); + } else { + array_push ($tree, + implode ($fil) + . '' + . '' + . $org[$i]['title'] . '' + ); + } + } else { + array_push ($tree, + implode ($fil) + . '' . $org[$i]['title'] . '' + ); + } + + $llvl = $lvl; + } + + require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    + + + +' . "\n"; + } +?> + +
    + + + +' . "\n"; + for ($i=$c-1; $i>=0; $i--) { + $p .= $tree[$i] . '
    ' . "\n"; + } + $p .= '
    ' . "\n"; + echo utf8_decode($p); +?> \ No newline at end of file diff --git a/tools/packages/scorm-1.2/write.php b/tools/packages/scorm-1.2/write.php new file mode 100644 index 000000000..71fd1b7d6 --- /dev/null +++ b/tools/packages/scorm-1.2/write.php @@ -0,0 +1,59 @@ + + diff --git a/tools/packages/settings.php b/tools/packages/settings.php new file mode 100644 index 000000000..8473c1a80 --- /dev/null +++ b/tools/packages/settings.php @@ -0,0 +1,65 @@ +
      '; +$num = 0; +while ($row = mysql_fetch_assoc($result)) { + foreach ($plug[$row['ptype']]->getSettingsLinks($row['package_id']) as $l) { + $p .= '
    1. ' . $l . '
    2. '; + $num++; + } +} +if ($num == 0) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->addInfo (NO_PACKAGES); + $msg->printAll(); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$p .= '
    '; +$p .= '

    '; + + +require(AT_INCLUDE_PATH.'header.inc.php'); +echo $p; +require (AT_INCLUDE_PATH.'footer.inc.php'); +?> diff --git a/tools/polls/add.php b/tools/polls/add.php new file mode 100644 index 000000000..91e01262f --- /dev/null +++ b/tools/polls/add.php @@ -0,0 +1,84 @@ +addFeedback('CANCELLED'); + Header('Location: index.php'); + exit; +} + +if ($_POST['add_poll'] && (authenticate(AT_PRIV_POLLS, AT_PRIV_RETURN))) { + if (trim($_POST['question']) == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('question'))); + } + + if ((trim($_POST['c1']) == '') || (trim($_POST['c2']) == '')) { + $msg->addError('POLL_QUESTION_MINIMUM'); + } + + if (!$msg->containsErrors()) { + $_POST['question'] = $addslashes($_POST['question']); + + for ($i=1; $i<= AT_NUM_POLL_CHOICES; $i++) { + $choices .= "'" . $addslashes($_POST['c' . $i]) . "',0,"; + } + $choices = substr($choices, 0, -1); + + $sql = "INSERT INTO ".TABLE_PREFIX."polls VALUES (NULL, $_SESSION[course_id], '$_POST[question]', NOW(), 0, $choices)"; + $result = mysql_query($sql,$db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; + } + for ($i=1; $i<= AT_NUM_POLL_CHOICES; $i++) { + $_POST['c' . $i] = $stripslashes($_POST['c' . $i]); + } + $_POST['question'] = $stripslashes($_POST['question']); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    + + +
    +
    +
    *

    + +
    + + +
    + +
    *
    + +
    + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/polls/delete.php b/tools/polls/delete.php new file mode 100644 index 000000000..0f9345b40 --- /dev/null +++ b/tools/polls/delete.php @@ -0,0 +1,63 @@ +addFeedback('CANCELLED'); + Header('Location: index.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $_POST['pid'] = intval($_POST['pid']); + + $sql = "DELETE FROM ".TABLE_PREFIX."polls WHERE poll_id=$_POST[pid] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."polls_members WHERE poll_id=$_POST[pid] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$msg->printErrors(); + +$_GET['pid'] = intval($_GET['pid']); + +$sql = "SELECT * FROM ".TABLE_PREFIX."polls WHERE poll_id=$_GET[pid] AND course_id=$_SESSION[course_id]"; + +$result = mysql_query($sql,$db); +if (mysql_num_rows($result) == 0) { + $msg->addError('ITEM_NOT_FOUND'); +} else { + $row = mysql_fetch_assoc($result); + + $hidden_vars['delete_poll'] = TRUE; + $hidden_vars['pid'] = $_GET['pid']; + + $confirm = array('DELETE_POLL', AT_print($row['question'], 'polls.question')); + $msg->addConfirm($confirm, $hidden_vars); + $msg->printConfirm(); + +} + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/tools/polls/edit.php b/tools/polls/edit.php new file mode 100644 index 000000000..696df1cb5 --- /dev/null +++ b/tools/polls/edit.php @@ -0,0 +1,108 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} + +if (isset($_GET['poll_id'])) { + $poll_id = intval($_GET['poll_id']); +} else { + $poll_id = intval($_POST['poll_id']); +} + +if ($_POST['edit_poll']) { + if (trim($_POST['question']) == '') { + $msg->addError(array('EMPTY_FIELDS', _AT('question'))); + } + + if ((trim($_POST['c1']) == '') || (trim($_POST['c2']) == '')) { + $msg->addError('POLL_QUESTION_MINIMUM'); + } + + if (!$msg->containsErrors()) { + $_POST['question'] = $addslashes($_POST['question']); + + for ($i=1; $i<= AT_NUM_POLL_CHOICES; $i++) { + $choices .= "choice$i = '" . $addslashes($_POST['c' . $i]) . "',"; + } + $choices = substr($choices, 0, -1); + + $sql = "UPDATE ".TABLE_PREFIX."polls SET question='$_POST[question]', created_date=created_date $choices WHERE poll_id=$poll_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql,$db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + Header('Location: index.php'); + exit; + } + for ($i=1; $i<= AT_NUM_POLL_CHOICES; $i++) { + $_POST['c' . $i] = $stripslashes($_POST['c' . $i]); + } + $_POST['question'] = $stripslashes($_POST['question']); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + if ($poll_id == 0) { + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $sql = "SELECT * FROM ".TABLE_PREFIX."polls WHERE poll_id=$poll_id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql,$db); + if (!($row = mysql_fetch_assoc($result))) { + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + +?> + +
    + + + +
    +
    +
    *

    + +
    + + +
    + +
    *
    + +
    + +
    + + +
    + + +
    + +
    +
    + \ No newline at end of file diff --git a/tools/polls/index.php b/tools/polls/index.php new file mode 100644 index 000000000..35c295631 --- /dev/null +++ b/tools/polls/index.php @@ -0,0 +1,103 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$orders = array('asc' => 'desc', 'desc' => 'asc'); +$cols = array('question' => 1, 'created_date' => 1, 'total' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'created_date'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'created_date'; +} else { + // no order set + $order = 'desc'; + $col = 'created_date'; +} + +$sql = "SELECT poll_id, question, created_date, total FROM ".TABLE_PREFIX."polls WHERE course_id=$_SESSION[course_id] ORDER BY $col $order"; +$result = mysql_query($sql, $db); + + +?> +
    + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + + +
    +
    + + \ No newline at end of file diff --git a/tools/prog.php b/tools/prog.php new file mode 100644 index 000000000..637d33c57 --- /dev/null +++ b/tools/prog.php @@ -0,0 +1,88 @@ + + + + + <?php echo _AT($lang_variable); ?> + + + + + + +> + +

    +

    + +

    + + + + + +
    <?php echo _AT($lang_variable); ?> + $newest_file_time) { + $newest_file_time = $filedata['mtime']; + $newest_file_name = $file; + $size = $filedata['size'] / 1024; + } + } + } + closedir($dir); + } + } else { + $filedata = stat($tmp_dir . $_GET['t']); + $size = $filedata['size'] / AT_KBYTE_SIZE; + } + + echo ''; + if ($size == '') { + echo ''._AT('unknown').' KB'; + } else { + echo number_format($size, 2).' KB'; + } + echo ''; +} ?>
    + + \ No newline at end of file diff --git a/tools/side_menu.php b/tools/side_menu.php new file mode 100644 index 000000000..4f761e37a --- /dev/null +++ b/tools/side_menu.php @@ -0,0 +1,86 @@ +addFeedback('CANCELLED'); + header('Location: modules.php'); + exit; + +} + +if (isset($_POST['submit'])) { + + $side_menu = ''; + $_stack_names = array(); + + $_stack_names = array_keys($_stacks); + + $_POST['stack'] = array_unique($_POST['stack']); + $_POST['stack'] = array_intersect($_POST['stack'], $_stack_names); + + $side_menu = implode('|', $_POST['stack']); + + $sql = "UPDATE ".TABLE_PREFIX."courses SET side_menu='$side_menu' WHERE course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + $msg->addFeedback('COURSE_PREFS_SAVED'); + header('Location: side_menu.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    +
    +
    +

    +
    + +
    + '; + echo ''; + foreach ($_stacks as $name=>$info) { + if (isset($info['title'])) { + $title = $info['title']; + } else { + $title = _AT($info['title_var']); + } + echo ''; + } + echo ''; + echo '
    '; + } ?> +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/take_test.php b/tools/take_test.php new file mode 100644 index 000000000..401e1aa93 --- /dev/null +++ b/tools/take_test.php @@ -0,0 +1,198 @@ +printInfos('NOT_ENROLLED'); + + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +if (!$test_row['guests'] && !authenticate_test($tid)) { + header('Location: my_tests.php'); + exit; +} + +$out_of = $test_row['out_of']; + +$sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."tests_results WHERE test_id=".$tid." AND member_id=".$_SESSION['member_id']; +$takes_result= mysql_query($sql, $db); +$takes = mysql_fetch_assoc($takes_result); + + +if ( (($test_row['start_date'] > time()) || ($test_row['end_date'] < time())) || + ( ($test_row['num_takes'] != AT_TESTS_TAKE_UNLIMITED) && ($takes['cnt'] >= $test_row['num_takes']) ) ) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('MAX_ATTEMPTS'); + + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +if (isset($_POST['submit'])) { + // insert + + $sql = "INSERT INTO ".TABLE_PREFIX."tests_results VALUES (NULL, $tid, $_SESSION[member_id], NOW(), '')"; + $result = mysql_query($sql, $db); + $result_id = mysql_insert_id($db); + + $final_score = 0; + $set_final_score = TRUE; // whether or not to save the final score in the results table. + + $sql = "SELECT TQA.weight, TQA.question_id, TQ.type, TQ.answer_0, TQ.answer_1, TQ.answer_2, TQ.answer_3, TQ.answer_4, TQ.answer_5, TQ.answer_6, TQ.answer_7, TQ.answer_8, TQ.answer_9 FROM ".TABLE_PREFIX."tests_questions_assoc TQA INNER JOIN ".TABLE_PREFIX."tests_questions TQ USING (question_id) WHERE TQA.test_id=$tid ORDER BY TQA.ordering, TQ.question_id"; + $result = mysql_query($sql, $db); + while ($row = mysql_fetch_assoc($result)) { + if (isset($_POST['answers'][$row['question_id']])) { + $obj = TestQuestions::getQuestion($row['type']); + $score = $obj->mark($row); + + $sql = "INSERT INTO ".TABLE_PREFIX."tests_answers VALUES ($result_id, $row[question_id], $_SESSION[member_id], '{$_POST[answers][$row[question_id]]}', '$score', '')"; + mysql_query($sql, $db); + + $final_score += $score; + } + } + + if ($final_score) { + // update the final score (when no open ended questions are found) + $sql = "UPDATE ".TABLE_PREFIX."tests_results SET final_score=$final_score, date_taken=date_taken WHERE result_id=$result_id AND member_id=$_SESSION[member_id]"; + $result = mysql_query($sql, $db); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + if (!$_SESSION['enroll']) { + header('Location: ../tools/view_results.php?tid='.$tid.SEP.'rid='.$result_id); + exit; + } + header('Location: ../tools/my_tests.php'); + exit; +} + +if (defined('AT_FORCE_GET_FILE') && AT_FORCE_GET_FILE) { + $content_base_href = 'get.php/'; +} else { + $course_base_href = 'content/' . $_SESSION['course_id'] . '/'; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +/* Retrieve the content_id of this test */ +$num_questions = $test_row['num_questions']; +$content_id = $test_row['content_id']; +$anonymous = $test_row['anonymous']; +$instructions = $test_row['instructions']; +$title = $test_row['title']; + +$_letters = array(_AT('A'), _AT('B'), _AT('C'), _AT('D'), _AT('E'), _AT('F'), _AT('G'), _AT('H'), _AT('I'), _AT('J')); + +if ($test_row['random']) { + /* Retrieve 'num_questions' question_id randomly choosed from those who are related to this test_id*/ + + $non_required_questions = array(); + $required_questions = array(); + + $sql = "SELECT question_id, required FROM ".TABLE_PREFIX."tests_questions_assoc WHERE test_id=$tid"; + $result = mysql_query($sql, $db); + + while ($row = mysql_fetch_assoc($result)) { + if ($row['required'] == 1) { + $required_questions[] = $row['question_id']; + } else { + $non_required_questions[] = $row['question_id']; + } + } + + $num_required = count($required_questions); + if ($num_required < max(1, $num_questions)) { + shuffle($non_required_questions); + $required_questions = array_merge($required_questions, array_slice($non_required_questions, 0, $num_questions - $num_required)); + } + + $random_id_string = implode(',', $required_questions); + + $sql = "SELECT TQ.*, TQA.* FROM ".TABLE_PREFIX."tests_questions TQ INNER JOIN ".TABLE_PREFIX."tests_questions_assoc TQA USING (question_id) WHERE TQ.course_id=$_SESSION[course_id] AND TQA.test_id=$tid AND TQA.question_id IN ($random_id_string)"; + +} else { + $sql = "SELECT TQ.*, TQA.* FROM ".TABLE_PREFIX."tests_questions TQ INNER JOIN ".TABLE_PREFIX."tests_questions_assoc TQA USING (question_id) WHERE TQ.course_id=$_SESSION[course_id] AND TQA.test_id=$tid ORDER BY TQA.ordering, TQA.question_id"; +} + +$result = mysql_query($sql, $db); + +$questions = array(); +while ($row = mysql_fetch_assoc($result)) { + $questions[] = $row; +} + +if (!$result || !$questions) { + echo '

    '._AT('no_questions').'

    '; + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +if ($test_row['random']) { + shuffle($questions); +} + +?> +
    + +
    +

    + + +
    + +
    +
    + + + +
    + + + display($row); + } + ?> +
    + ! +
    +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/add_test_questions.php b/tools/tests/add_test_questions.php new file mode 100644 index 000000000..2f08d4e50 --- /dev/null +++ b/tools/tests/add_test_questions.php @@ -0,0 +1,39 @@ + + + + + + + \ No newline at end of file diff --git a/tools/tests/add_test_questions_confirm.php b/tools/tests/add_test_questions_confirm.php new file mode 100644 index 000000000..de23c1b4d --- /dev/null +++ b/tools/tests/add_test_questions_confirm.php @@ -0,0 +1,96 @@ +addFeedback('CANCELLED'); + header('Location: questions.php?tid='.$tid); + exit; +} else if (isset($_POST['submit_yes'])) { + //get order + $sql = "SELECT MAX(ordering) AS max_ordering FROM ".TABLE_PREFIX."tests_questions_assoc WHERE test_id=".$tid; + $result = mysql_query($sql, $db); + $order = mysql_fetch_assoc($result); + $order = $order['max_ordering']; + + $sql = "REPLACE INTO ".TABLE_PREFIX."tests_questions_assoc VALUES "; + foreach ($_POST['questions'] as $question) { + $order++; + $question = intval($question); + $sql .= '('.$tid.', '.$question.', 0, '.$order.', 0),'; + } + $sql = substr($sql, 0, -1); + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: questions.php?tid='.$tid); + exit; +} else if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: add_test_questions.php?tid='.$tid); + exit; +} + +if (!is_array($_POST['questions']) || !count($_POST['questions'])) { + $msg->addError('NO_QUESTIONS_SELECTED'); + header('Location: add_test_questions.php?tid='.$tid); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +foreach ($_POST['questions'] as $id => $cat_array) { + foreach ($cat_array as $idx => $q) { + $_POST['questions'][$id][$idx] = intval($q); + } +} +foreach ($_POST['questions'] as $cat_array) { + $questions .= addslashes(implode(',',$cat_array)).','; +} + +$questions = substr($questions, 0, -1); + +$sql = "SELECT question, question_id FROM ".TABLE_PREFIX."tests_questions WHERE question_id IN ($questions) AND course_id=$_SESSION[course_id] ORDER BY question"; +$result = mysql_query($sql, $db); + +$questions = ''; +while ($row = mysql_fetch_assoc($result)) { + $questions .= '
  • '.htmlspecialchars($row['question']).'
  • '; + $questions_array['questions['.$row['question_id'].']'] = $row['question_id']; +} +$questions_array['tid'] = $_POST['tid']; +$msg->addConfirm(array('ADD_TEST_QUESTIONS', $questions), $questions_array); + +$msg->printConfirm(); +?> + + \ No newline at end of file diff --git a/tools/tests/create_question_likert.php b/tools/tests/create_question_likert.php new file mode 100644 index 000000000..0b4322166 --- /dev/null +++ b/tools/tests/create_question_likert.php @@ -0,0 +1,214 @@ +addFeedback('CANCELLED'); + header('Location: question_db.php'); + exit; +} else if (isset($_POST['submit'])) { + $_POST['required'] = intval($_POST['required']); + $_POST['question'] = trim($_POST['question']); + $_POST['category_id'] = intval($_POST['category_id']); + + $empty_fields = array(); + if ($_POST['question'] == ''){ + $empty_fields[] = _AT('question'); + } + if ($_POST['choice'][0] == '') { + $empty_fields[] = _AT('choice').' 1'; + } + + if ($_POST['choice'][1] == '') { + $empty_fields[] = _AT('choice').' 2'; + } + + if (!empty($empty_fields)) { + $msg->addError(array('EMPTY_FIELDS', implode(', ', $empty_fields))); + } + + if (!$msg->containsErrors()) { + $_POST['feedback'] = ''; + $_POST['question'] = $addslashes($_POST['question']); + + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $addslashes(trim($_POST['choice'][$i])); + $_POST['answer'][$i] = intval($_POST['answer'][$i]); + + if ($_POST['choice'][$i] == '') { + /* an empty option can't be correct */ + $_POST['answer'][$i] = 0; + } + } + + $sql = "INSERT INTO ".TABLE_PREFIX."tests_questions VALUES ( 0, + $_POST[category_id], + $_SESSION[course_id], + 4, + '$_POST[feedback]', + '$_POST[question]', + '{$_POST[choice][0]}', + '{$_POST[choice][1]}', + '{$_POST[choice][2]}', + '{$_POST[choice][3]}', + '{$_POST[choice][4]}', + '{$_POST[choice][5]}', + '{$_POST[choice][6]}', + '{$_POST[choice][7]}', + '{$_POST[choice][8]}', + '{$_POST[choice][9]}', + {$_POST[answer][0]}, + {$_POST[answer][1]}, + {$_POST[answer][2]}, + {$_POST[answer][3]}, + {$_POST[answer][4]}, + {$_POST[answer][5]}, + {$_POST[answer][6]}, + {$_POST[answer][7]}, + {$_POST[answer][8]}, + {$_POST[answer][9]}, + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 0, + 0)"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: question_db.php'); + exit; + } +} else if (isset($_POST['preset'])) { + // load preset + $_POST['preset_num'] = intval($_POST['preset_num']); + + if (isset($_likert_preset[$_POST['preset_num']])) { + $_POST['choice'] = $_likert_preset[$_POST['preset_num']]; + } else if ($_POST['preset_num']) { + $sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$_POST[preset_num] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)){ + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $row['choice_' . $i]; + } + } + } + +} + +$onload = 'document.form.category_id.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    + + +
    +
    +

    +
    + +
    + +
    + +
    + +
    +
    + +
    +
    +
    +
    + +
    + +
    +
    *
    + + +
    + + + +
    + +
    *
    + +
    + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/create_question_long.php b/tools/tests/create_question_long.php new file mode 100644 index 000000000..aa57bbc87 --- /dev/null +++ b/tools/tests/create_question_long.php @@ -0,0 +1,137 @@ +addFeedback('CANCELLED'); + header('Location: question_db.php'); + exit; +} else if ($_POST['submit']) { + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['question'] = trim($_POST['question']); + $_POST['category_id'] = intval($_POST['category_id']); + $_POST['properties'] = intval($_POST['properties']); + + if ($_POST['question'] == ''){ + $msg->addError(array('EMPTY_FIELDS', _AT('question'))); + } + + if (!$msg->containsErrors()) { + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['question'] = $addslashes($_POST['question']); + + $sql = "INSERT INTO ".TABLE_PREFIX."tests_questions VALUES ( NULL, + $_POST[category_id], + $_SESSION[course_id], + 3, + '$_POST[feedback]', + '$_POST[question]', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + $_POST[properties], + 0)"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: question_db.php'); + exit; + } +} + +$onload = 'document.form.category_id.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (!isset($_POST['properties'])) { + $_POST['properties'] = 1; +} + +?> +
    + +
    +
    +
    *

    + +
    + +
    + + + + +
    + +
    +
    *
    + + +
    + +
    +
    + />
    + + />
    + + />
    + + /> +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/create_question_matching.php b/tools/tests/create_question_matching.php new file mode 100644 index 000000000..f9539d265 --- /dev/null +++ b/tools/tests/create_question_matching.php @@ -0,0 +1,175 @@ +addFeedback('CANCELLED'); + header('Location: question_db.php'); + exit; +} else if ($_POST['submit']) { + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['instructions'] = trim($_POST['instructions']); + $_POST['category_id'] = intval($_POST['category_id']); + + for ($i = 0 ; $i < 10; $i++) { + $_POST['question'][$i] = trim($_POST['question'][$i]); + $_POST['question_answer'][$i] = (int) $_POST['question_answer'][$i]; + $_POST['answer'][$i] = trim($_POST['answer'][$i]); + } + + if (!$_POST['question'][0] + || !$_POST['question'][1] + || !$_POST['answer'][0] + || !$_POST['answer'][1]) { + + $msg->addError('QUESTION_EMPTY'); + } + + + if (!$msg->containsErrors()) { + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['instructions'] = $addslashes($_POST['instructions']); + + $sql = "INSERT INTO ".TABLE_PREFIX."tests_questions VALUES ( NULL, + $_POST[category_id], + $_SESSION[course_id], + 5, + '$_POST[feedback]', + '$_POST[instructions]', + '{$_POST[question][0]}', + '{$_POST[question][1]}', + '{$_POST[question][2]}', + '{$_POST[question][3]}', + '{$_POST[question][4]}', + '{$_POST[question][5]}', + '{$_POST[question][6]}', + '{$_POST[question][7]}', + '{$_POST[question][8]}', + '{$_POST[question][9]}', + {$_POST[question_answer][0]}, + {$_POST[question_answer][1]}, + {$_POST[question_answer][2]}, + {$_POST[question_answer][3]}, + {$_POST[question_answer][4]}, + {$_POST[question_answer][5]}, + {$_POST[question_answer][6]}, + {$_POST[question_answer][7]}, + {$_POST[question_answer][8]}, + {$_POST[question_answer][9]}, + '{$_POST[answer][0]}', + '{$_POST[answer][1]}', + '{$_POST[answer][2]}', + '{$_POST[answer][3]}', + '{$_POST[answer][4]}', + '{$_POST[answer][5]}', + '{$_POST[answer][6]}', + '{$_POST[answer][7]}', + '{$_POST[answer][8]}', + '{$_POST[answer][9]}', + 0, + 0)"; + + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: question_db.php'); + exit; + } +} + +$onload = 'document.form.category_id.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +// for matching test questions +$_letters = array(_AT('A'), _AT('B'), _AT('C'), _AT('D'), _AT('E'), _AT('F'), _AT('G'), _AT('H'), _AT('I'), _AT('J')); + +?> +
    + +
    +
    +
    *

    + +
    + +
    + + + + +
    + +
    + + + +
    + +
    +

    +
    + +
    + +
    *
    + + + + + +
    + + + + +
    + + +
    +

    +
    + +
    + +
    *
    + + + +
    + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/create_question_matchingdd.php b/tools/tests/create_question_matchingdd.php new file mode 100644 index 000000000..6df4fcc35 --- /dev/null +++ b/tools/tests/create_question_matchingdd.php @@ -0,0 +1,176 @@ +addFeedback('CANCELLED'); + header('Location: question_db.php'); + exit; +} else if ($_POST['submit']) { + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['instructions'] = trim($_POST['instructions']); + $_POST['category_id'] = intval($_POST['category_id']); + + for ($i = 0 ; $i < 10; $i++) { + $_POST['question'][$i] = trim($_POST['question'][$i]); + $_POST['question_answer'][$i] = (int) $_POST['question_answer'][$i]; + $_POST['answer'][$i] = trim($_POST['answer'][$i]); + } + + if (!$_POST['question'][0] + || !$_POST['question'][1] + || !$_POST['answer'][0] + || !$_POST['answer'][1]) { + + $msg->addError('QUESTION_EMPTY'); + } + + + if (!$msg->containsErrors()) { + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['instructions'] = $addslashes($_POST['instructions']); + + $sql = "INSERT INTO ".TABLE_PREFIX."tests_questions VALUES ( NULL, + $_POST[category_id], + $_SESSION[course_id], + 8, + '$_POST[feedback]', + '$_POST[instructions]', + '{$_POST[question][0]}', + '{$_POST[question][1]}', + '{$_POST[question][2]}', + '{$_POST[question][3]}', + '{$_POST[question][4]}', + '{$_POST[question][5]}', + '{$_POST[question][6]}', + '{$_POST[question][7]}', + '{$_POST[question][8]}', + '{$_POST[question][9]}', + {$_POST[question_answer][0]}, + {$_POST[question_answer][1]}, + {$_POST[question_answer][2]}, + {$_POST[question_answer][3]}, + {$_POST[question_answer][4]}, + {$_POST[question_answer][5]}, + {$_POST[question_answer][6]}, + {$_POST[question_answer][7]}, + {$_POST[question_answer][8]}, + {$_POST[question_answer][9]}, + '{$_POST[answer][0]}', + '{$_POST[answer][1]}', + '{$_POST[answer][2]}', + '{$_POST[answer][3]}', + '{$_POST[answer][4]}', + '{$_POST[answer][5]}', + '{$_POST[answer][6]}', + '{$_POST[answer][7]}', + '{$_POST[answer][8]}', + '{$_POST[answer][9]}', + 0, + 0)"; + + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: question_db.php'); + exit; + } +} + +$onload = 'document.form.category_id.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +// for matching test questions +$_letters = array(_AT('A'), _AT('B'), _AT('C'), _AT('D'), _AT('E'), _AT('F'), _AT('G'), _AT('H'), _AT('I'), _AT('J')); + +?> +
    + +
    +
    +
    *

    + +
    + +
    + + + + +
    + +
    + + + +
    + +
    +

    +
    + +
    + +
    *
    + + + + + +
    + + + + +
    + + +
    +

    +
    + +
    + +
    *
    + + + +
    + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/create_question_multi.php b/tools/tests/create_question_multi.php new file mode 100644 index 000000000..900301f2b --- /dev/null +++ b/tools/tests/create_question_multi.php @@ -0,0 +1,148 @@ +addFeedback('CANCELLED'); + header('Location: question_db.php'); + exit; +} else if (isset($_POST['submit'])) { + $_POST['required'] = intval($_POST['required']); + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['question'] = trim($_POST['question']); + $_POST['category_id'] = intval($_POST['category_id']); + $_POST['answer'] = intval($_POST['answer']); + + if ($_POST['question'] == ''){ + $msg->addError(array('EMPTY_FIELDS', _AT('question'))); + } + + if (!$msg->containsErrors()) { + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $addslashes(trim($_POST['choice'][$i])); + } + + $answers = array_fill(0, 10, 0); + $answers[$_POST['answer']] = 1; + + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['question'] = $addslashes($_POST['question']); + + $sql = "INSERT INTO ".TABLE_PREFIX."tests_questions VALUES ( NULL, + $_POST[category_id], + $_SESSION[course_id], + 1, + '$_POST[feedback]', + '$_POST[question]', + '{$_POST[choice][0]}', + '{$_POST[choice][1]}', + '{$_POST[choice][2]}', + '{$_POST[choice][3]}', + '{$_POST[choice][4]}', + '{$_POST[choice][5]}', + '{$_POST[choice][6]}', + '{$_POST[choice][7]}', + '{$_POST[choice][8]}', + '{$_POST[choice][9]}', + {$answers[0]}, + {$answers[1]}, + {$answers[2]}, + {$answers[3]}, + {$answers[4]}, + {$answers[5]}, + {$answers[6]}, + {$answers[7]}, + {$answers[8]}, + {$answers[9]}, + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 5, + 0)"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: question_db.php'); + exit; + } +} else { + $_POST['answer'] = 0; +} + +$onload = 'document.form.category_id.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$msg->printConfirm(); +?> +
    + +
    +
    +
    *

    + +
    + +
    + + + +
    + +
    +
    *
    + + +
    + + +
    + + + + +
    + + > + + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/create_question_multianswer.php b/tools/tests/create_question_multianswer.php new file mode 100644 index 000000000..0be60a439 --- /dev/null +++ b/tools/tests/create_question_multianswer.php @@ -0,0 +1,179 @@ +addFeedback('CANCELLED'); + header('Location: question_db.php'); + exit; +} else if ($_POST['submit']) { + $_POST['required'] = intval($_POST['required']); + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['question'] = trim($_POST['question']); + $_POST['category_id'] = intval($_POST['category_id']); + + if ($_POST['question'] == ''){ + $msg->addError(array('EMPTY_FIELDS', _AT('question'))); + } + + if (!$msg->containsErrors()) { + $choice_new = array(); // stores the non-blank choices + $answer_new = array(); // stores the associated "answer" for the choices + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $addslashes(trim($_POST['choice'][$i])); + $_POST['answer'][$i] = intval($_POST['answer'][$i]); + + if ($_POST['choice'][$i] == '') { + /* an empty option can't be correct */ + $_POST['answer'][$i] = 0; + } else { + /* filter out empty choices/ remove gaps */ + $choice_new[] = $_POST['choice'][$i]; + $answer_new[] = $_POST['answer'][$i]; + + if ($_POST['answer'][$i] != 0) + $has_answer = TRUE; + } + } + + if ($has_answer != TRUE) { + + $hidden_vars['required'] = htmlspecialchars($_POST['required']); + $hidden_vars['feedback'] = htmlspecialchars($_POST['feedback']); + $hidden_vars['question'] = htmlspecialchars($_POST['question']); + $hidden_vars['category_id'] = htmlspecialchars($_POST['category_id']); + + for ($i = 0; $i < count($choice_new); $i++) { + $hidden_vars['answer['.$i.']'] = htmlspecialchars($answer_new[$i]); + $hidden_vars['choice['.$i.']'] = htmlspecialchars($choice_new[$i]); + } + + $msg->addConfirm('NO_ANSWER', $hidden_vars); + } else { + + //add slahes throughout - does that fix it? + $_POST['answer'] = $answer_new; + $_POST['choice'] = $choice_new; + $_POST['answer'] = array_pad($_POST['answer'], 10, 0); + $_POST['choice'] = array_pad($_POST['choice'], 10, ''); + + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['question'] = $addslashes($_POST['question']); + + $sql = "INSERT INTO ".TABLE_PREFIX."tests_questions VALUES ( NULL, + $_POST[category_id], + $_SESSION[course_id], + 7, + '$_POST[feedback]', + '$_POST[question]', + '{$_POST[choice][0]}', + '{$_POST[choice][1]}', + '{$_POST[choice][2]}', + '{$_POST[choice][3]}', + '{$_POST[choice][4]}', + '{$_POST[choice][5]}', + '{$_POST[choice][6]}', + '{$_POST[choice][7]}', + '{$_POST[choice][8]}', + '{$_POST[choice][9]}', + {$_POST[answer][0]}, + {$_POST[answer][1]}, + {$_POST[answer][2]}, + {$_POST[answer][3]}, + {$_POST[answer][4]}, + {$_POST[answer][5]}, + {$_POST[answer][6]}, + {$_POST[answer][7]}, + {$_POST[answer][8]}, + {$_POST[answer][9]}, + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 0, + 0)"; + + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: question_db.php'); + exit; + } + } +} + +$onload = 'document.form.category_id.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$msg->printConfirm(); +?> +
    + +
    +
    +
    *

    + +
    + +
    + + + +
    + +
    +
    *
    + + +
    + + +
    + + + + +
    + + > + + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/create_question_multichoice.php b/tools/tests/create_question_multichoice.php new file mode 100644 index 000000000..9d24a9c8d --- /dev/null +++ b/tools/tests/create_question_multichoice.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tools/tests/create_question_ordering.php b/tools/tests/create_question_ordering.php new file mode 100644 index 000000000..4e838ab5c --- /dev/null +++ b/tools/tests/create_question_ordering.php @@ -0,0 +1,164 @@ +addFeedback('CANCELLED'); + header('Location: question_db.php'); + exit; +} else if ($_POST['submit']) { + $missing_fields = array(); + + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['question'] = trim($_POST['question']); + $_POST['category_id'] = intval($_POST['category_id']); + + if ($_POST['question'] == ''){ + $missing_fields[] = _AT('question'); + } + + if (trim($_POST['choice'][0]) == '') { + $missing_fields[] = _AT('item').' 1'; + } + if (trim($_POST['choice'][1]) == '') { + $missing_fields[] = _AT('item').' 2'; + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + if (!$msg->containsErrors()) { + $choice_new = array(); // stores the non-blank choices + $answer_new = array(); // stores the non-blank answers + $order = 0; // order count + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $addslashes(trim($_POST['choice'][$i])); + + if ($_POST['choice'][$i] != '') { + /* filter out empty choices/ remove gaps */ + $choice_new[] = $_POST['choice'][$i]; + $answer_new[] = $order++; + } + } + + $_POST['choice'] = array_pad($choice_new, 10, ''); + $answer_new = array_pad($answer_new, 10, 0); + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['question'] = $addslashes($_POST['question']); + + $sql = "INSERT INTO ".TABLE_PREFIX."tests_questions VALUES ( NULL, + $_POST[category_id], + $_SESSION[course_id], + 6, + '$_POST[feedback]', + '$_POST[question]', + '{$_POST[choice][0]}', + '{$_POST[choice][1]}', + '{$_POST[choice][2]}', + '{$_POST[choice][3]}', + '{$_POST[choice][4]}', + '{$_POST[choice][5]}', + '{$_POST[choice][6]}', + '{$_POST[choice][7]}', + '{$_POST[choice][8]}', + '{$_POST[choice][9]}', + $answer_new[0], + $answer_new[1], + $answer_new[2], + $answer_new[3], + $answer_new[4], + $answer_new[5], + $answer_new[6], + $answer_new[7], + $answer_new[8], + $answer_new[9], + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 0, + 0)"; + + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: question_db.php'); + exit; + } +} + +$onload = 'document.form.category_id.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    + +
    +
    +
    *

    + +
    + +
    + + + + +
    + +
    +
    *
    + + +
    + + +
    + +
    *
    + + + + +
    + + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/create_question_tf.php b/tools/tests/create_question_tf.php new file mode 100644 index 000000000..628274a9a --- /dev/null +++ b/tools/tests/create_question_tf.php @@ -0,0 +1,134 @@ +addFeedback('CANCELLED'); + header('Location: question_db.php'); + exit; +} else if ($_POST['submit']) { + $_POST['required'] = 1; //intval($_POST['required']); + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['question'] = trim($_POST['question']); + $_POST['category_id'] = intval($_POST['category_id']); + $_POST['answer'] = intval($_POST['answer']); + + if ($_POST['question'] == ''){ + $msg->addError(array('EMPTY_FIELDS', _AT('statement'))); + } + + if (!$msg->containsErrors()) { + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['question'] = $addslashes($_POST['question']); + + /* + $sql = 'SELECT content_id FROM '.TABLE_PREFIX."tests WHERE test_id=$_POST[tid]"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + */ + + $sql = "INSERT INTO ".TABLE_PREFIX."tests_questions VALUES ( NULL, + $_POST[category_id], + $_SESSION[course_id], + 2, + '$_POST[feedback]', + '$_POST[question]', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + $_POST[answer], + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + 5, + 0)"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: question_db.php'); + } +} + +$onload = 'document.form.category_id.focus();'; +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    +
    + +
    +
    *

    + +
    + +
    + + +
    + + +
    + +
    +
    *
    + +
    + + +
    + +
    +
    + , + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/create_question_truefalse.php b/tools/tests/create_question_truefalse.php new file mode 100644 index 000000000..6b69b0137 --- /dev/null +++ b/tools/tests/create_question_truefalse.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tools/tests/create_test.php b/tools/tests/create_test.php new file mode 100644 index 000000000..1ddb75b5a --- /dev/null +++ b/tools/tests/create_test.php @@ -0,0 +1,338 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $missing_fields = array(); + $_POST['title'] = $addslashes(trim($_POST['title'])); + $_POST['num_questions'] = intval($_POST['num_questions']); + $_POST['num_takes'] = intval($_POST['num_takes']); + $_POST['content_id'] = intval($_POST['content_id']); + $_POST['num_takes'] = intval($_POST['num_takes']); + $_POST['anonymous'] = intval($_POST['anonymous']); + $_POST['allow_guests'] = $_POST['allow_guests'] ? 1 : 0; + $_POST['instructions'] = $addslashes($_POST['instructions']); + + // currently these options are ignored for tests: + $_POST['format'] = intval($_POST['format']); + $_POST['order'] = 1; //intval($_POST['order']); + $_POST['difficulty'] = 0; //intval($_POST['difficulty']); /* avman */ + + if ($_POST['title'] == '') { + $missing_fields[] = _AT('title'); + } + + if ($_POST['random'] && !$_POST['num_questions']) { + $missing_fields[] = _AT('num_questions_per_test'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + $day_start = intval($_POST['day_start']); + $month_start= intval($_POST['month_start']); + $year_start = intval($_POST['year_start']); + $hour_start = intval($_POST['hour_start']); + $min_start = intval($_POST['min_start']); + + $day_end = intval($_POST['day_end']); + $month_end = intval($_POST['month_end']); + $year_end = intval($_POST['year_end']); + $hour_end = intval($_POST['hour_end']); + $min_end = intval($_POST['min_end']); + + if (!checkdate($month_start, $day_start, $year_start)) { + $msg->addError('START_DATE_INVALID'); + } + + if (!checkdate($month_end, $day_end, $year_end)) { + $msg->addError('END_DATE_INVALID'); + } + + if (mktime($hour_end, $min_end, 0, $month_end, $day_end, $year_end) < + mktime($hour_start, $min_start, 0, $month_start, $day_start, $year_start)) { + $msg->addError('END_DATE_INVALID'); + } + + if (!$msg->containsErrors()) { + if (strlen($month_start) == 1){ + $month_start = "0$month_start"; + } + if (strlen($day_start) == 1){ + $day_start = "0$day_start"; + } + if (strlen($hour_start) == 1){ + $hour_start = "0$hour_start"; + } + if (strlen($min_start) == 1){ + $min_start = "0$min_start"; + } + + if (strlen($month_end) == 1){ + $month_end = "0$month_end"; + } + if (strlen($day_end) == 1){ + $day_end = "0$day_end"; + } + if (strlen($hour_end) == 1){ + $hour_end = "0$hour_end"; + } + if (strlen($min_end) == 1){ + $min_end = "0$min_end"; + } + + $start_date = "$year_start-$month_start-$day_start $hour_start:$min_start:00"; + $end_date = "$year_end-$month_end-$day_end $hour_end:$min_end:00"; + + $sql = "INSERT INTO ".TABLE_PREFIX."tests VALUES (NULL, $_SESSION[course_id], '$_POST[title]', $_POST[format], '$start_date', '$end_date', $_POST[order], $_POST[num_questions], '$_POST[instructions]', $_POST[content_id], $_POST[result_release], $_POST[random], $_POST[difficulty], $_POST[num_takes], $_POST[anonymous], '', $_POST[allow_guests])"; + + $result = mysql_query($sql, $db); + $tid = mysql_insert_id($db); + + if (isset($_POST['groups']) && $tid) { + $sql = "INSERT INTO ".TABLE_PREFIX."tests_groups VALUES "; + foreach ($_POST['groups'] as $group) { + $group = intval($group); + $sql .= "($tid, $group),"; + } + $sql = substr($sql, 0, -1); + $result = mysql_query($sql, $db); + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: index.php'); + exit; + } +} + +if (isset($_POST['num_questions']) && ($_POST['num_questions'] === 0)) { + $_POST['num_questions'] = ''; +} + +$onload = 'document.form.title.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$msg->printErrors(); + +?> +
    + +
    +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    + + /> + /> +
    + +
    +
    + + + /> + /> +
    + +
    +
    + + + /> + /> +
    + +
    +
    + + />
    + />
    + /> +
    + +
    +
    + + . />, /> +
    + + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + '.$row['title'].'
    '; + + $sql = "SELECT * FROM ".TABLE_PREFIX."groups WHERE type_id=$row[type_id] ORDER BY title"; + $g_result = mysql_query($sql, $db); + while ($grow = mysql_fetch_assoc($g_result)) { + echo ' 
    '; + } + } + } else { + echo _AT('none_found'); + } + ?> +
    + +
    +
    + +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/dd.php b/tools/tests/dd.php new file mode 100644 index 000000000..61cd8c852 --- /dev/null +++ b/tools/tests/dd.php @@ -0,0 +1,206 @@ + + + + + <?php echo SITE_NAME; ?> : <?php echo AT_print($row['question'], 'tests_questions.question'); ?> + + + + + + + + + + + + + +
    + + + +
    +
      + + +
    • + + +
    • + + +
    + +
      + + +
    1. .
    2. + + +
    +
    + + + + \ No newline at end of file diff --git a/tools/tests/delete_question.php b/tools/tests/delete_question.php new file mode 100644 index 000000000..0530c5a31 --- /dev/null +++ b/tools/tests/delete_question.php @@ -0,0 +1,52 @@ +addFeedback('CANCELLED'); + header('Location: question_db.php'); + exit; +} else if (isset($_POST['submit_yes'])) { + $_POST['qid'] = explode(',', $_POST['qid']); + foreach ($_POST['qid'] as $id) { + $id = intval($id); + + $sql = "DELETE FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$id AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + if (mysql_affected_rows($db) == 1) { + $sql = "DELETE FROM ".TABLE_PREFIX."tests_questions_assoc WHERE question_id=$id"; + $result = mysql_query($sql, $db); + } + } + + $msg->addFeedback('QUESTION_DELETED'); + header('Location: question_db.php'); + exit; +} /* else: */ + +require(AT_INCLUDE_PATH.'header.inc.php'); + +unset($hidden_vars); +$hidden_vars['qid'] = htmlspecialchars($_GET['qid']); +$msg->addConfirm('DELETE', $hidden_vars); + +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tests/delete_result.php b/tools/tests/delete_result.php new file mode 100644 index 000000000..451d21f8d --- /dev/null +++ b/tools/tests/delete_result.php @@ -0,0 +1,56 @@ +addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/tests/results.php?tid='.$tid); + exit; + +} else if (isset($_POST['submit_yes'])) { + + $sql = "DELETE FROM ".TABLE_PREFIX."tests_answers WHERE result_id=$rid"; + $result = mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."tests_results WHERE result_id=$rid"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('RESULT_DELETED'); + header('Location: '.AT_BASE_HREF.'tools/tests/results.php?tid='.$tid); + exit; +} + +$_pages['tools/tests/delete_result.php']['title_var'] = 'delete_results'; +$_pages['tools/tests/delete_result.php']['parent'] = 'tools/tests/results.php?tid='.$tid; + +$_pages['tools/tests/results.php?tid='.$tid]['title_var'] = 'submissions'; +$_pages['tools/tests/results.php?tid='.$tid]['parent'] = 'tools/tests/index.php'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +unset($hidden_vars); +$hidden_vars['tid'] = $tid; +$hidden_vars['rid'] = $rid; +$msg->addConfirm('DELETE', $hidden_vars); + +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tests/delete_test.php b/tools/tests/delete_test.php new file mode 100644 index 000000000..8967d1773 --- /dev/null +++ b/tools/tests/delete_test.php @@ -0,0 +1,79 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; + } else if (isset($_POST['submit_yes'])) { + + $tid = intval($_POST['tid']); + + $sql = "DELETE FROM ".TABLE_PREFIX."tests WHERE test_id=$tid AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + if (mysql_affected_rows($db) == 1) { + $sql = "DELETE FROM ".TABLE_PREFIX."tests_questions_assoc WHERE test_id=$tid"; + $result = mysql_query($sql, $db); + + /* it has to delete the results as well... */ + $sql = "SELECT result_id FROM ".TABLE_PREFIX."tests_results WHERE test_id=$tid"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_array($result)) { + $result_list = '('.$row['result_id']; + + while ($row = mysql_fetch_array($result)) { + $result_list .= ','.$row['result_id']; + } + $result_list .= ')'; + } + + if ($result_list != '') { + $sql = "DELETE FROM ".TABLE_PREFIX."tests_answers WHERE result_id IN $result_list"; + $result = mysql_query($sql, $db); + + + $sql = "DELETE FROM ".TABLE_PREFIX."tests_results WHERE test_id=$tid"; + $result = mysql_query($sql, $db); + } + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'tools/tests/index.php'); + exit; + + } /* else: */ + + require(AT_INCLUDE_PATH.'header.inc.php'); + + $_GET['tid'] = intval($_GET['tid']); + + $sql = "SELECT title FROM ".TABLE_PREFIX."tests WHERE test_id=$_GET[tid] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_array($result); + + unset($hidden_vars); + $hidden_vars['tid'] = $_GET['tid']; + + $msg->addConfirm(array('DELETE_TEST', $row['title']), $hidden_vars); + $msg->printConfirm(); + + require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tests/edit_question_likert.php b/tools/tests/edit_question_likert.php new file mode 100644 index 000000000..eb113a7dc --- /dev/null +++ b/tools/tests/edit_question_likert.php @@ -0,0 +1,230 @@ +addFeedback('CANCELLED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; +} else if (isset($_POST['submit'])) { + $_POST['required'] = intval($_POST['required']); + $_POST['question'] = trim($_POST['question']); + $_POST['category_id'] = intval($_POST['category_id']); + $_POST['alignment'] = intval($_POST['alignment']); + + $empty_fields = array(); + if ($_POST['question'] == ''){ + $empty_fields[] = _AT('question'); + } + if ($_POST['choice'][0] == '') { + $empty_fields[] = _AT('choice').' 1'; + } + + if ($_POST['choice'][1] == '') { + $empty_fields[] = _AT('choice').' 2'; + } + + if (!empty($empty_fields)) { + $msg->addError(array('EMPTY_FIELDS', implode(', ', $empty_fields))); + } + + if (!$msg->containsErrors()) { + $_POST['question'] = $addslashes($_POST['question']); + + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $addslashes(trim($_POST['choice'][$i])); + $_POST['answer'][$i] = intval($_POST['answer'][$i]); + + if ($_POST['choice'][$i] == '') { + /* an empty option can't be correct */ + $_POST['answer'][$i] = 0; + } + } + $sql = "UPDATE ".TABLE_PREFIX."tests_questions SET + category_id=$_POST[category_id], + feedback='', + question='$_POST[question]', + choice_0='{$_POST[choice][0]}', + choice_1='{$_POST[choice][1]}', + choice_2='{$_POST[choice][2]}', + choice_3='{$_POST[choice][3]}', + choice_4='{$_POST[choice][4]}', + choice_5='{$_POST[choice][5]}', + choice_6='{$_POST[choice][6]}', + choice_7='{$_POST[choice][7]}', + choice_8='{$_POST[choice][8]}', + choice_9='{$_POST[choice][9]}', + answer_0={$_POST[answer][0]}, + answer_1={$_POST[answer][1]}, + answer_2={$_POST[answer][2]}, + answer_3={$_POST[answer][3]}, + answer_4={$_POST[answer][4]}, + answer_5={$_POST[answer][5]}, + answer_6={$_POST[answer][6]}, + answer_7={$_POST[answer][7]}, + answer_8={$_POST[answer][8]}, + answer_9={$_POST[answer][9]} + + WHERE question_id=$_POST[qid] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; + } +} else if (isset($_POST['preset'])) { + // load preset + $_POST['preset_num'] = intval($_POST['preset_num']); + + if (isset($_likert_preset[$_POST['preset_num']])) { + $_POST['choice'] = $_likert_preset[$_POST['preset_num']]; + } else if ($_POST['preset_num']) { + $sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$_POST[preset_num] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_assoc($result)){ + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $row['choice_' . $i]; + } + } + } + +} else { + $sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$qid AND course_id=$_SESSION[course_id] AND type=4"; + $result = mysql_query($sql, $db); + + if (!($row = mysql_fetch_array($result))){ + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + $_POST['required'] = $row['required']; + $_POST['question'] = $row['question']; + $_POST['category_id'] = $row['category_id']; + + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $row['choice_'.$i]; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    + + + + + + + + + + + +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    *
    + + + + +
    + + +
    + +
    *
    + + +
    + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/edit_question_long.php b/tools/tests/edit_question_long.php new file mode 100644 index 000000000..886e61760 --- /dev/null +++ b/tools/tests/edit_question_long.php @@ -0,0 +1,134 @@ +addFeedback('CANCELLED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; +} else if (isset($_POST['submit'])) { + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['question'] = trim($_POST['question']); + $_POST['category_id'] = intval($_POST['category_id']); + $_POST['properties'] = intval($_POST['properties']); + + if ($_POST['question'] == ''){ + $msg->addError(array('EMPTY_FIELDS', _AT('question'))); + } + + if (!$msg->containsErrors()) { + $_POST['question'] = $addslashes($_POST['question']); + + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = trim($_POST['choice'][$i]); + $_POST['answer'][$i] = intval($_POST['answer'][$i]); + + if ($_POST['choice'][$i] == '') { + /* an empty option can't be correct */ + $_POST['answer'][$i] = 0; + } + } + + $sql = "UPDATE ".TABLE_PREFIX."tests_questions SET category_id=$_POST[category_id], + feedback='$_POST[feedback]', + question='$_POST[question]', + properties=$_POST[properties] + WHERE question_id=$_POST[qid] AND course_id=$_SESSION[course_id]"; + + $result = mysql_query($sql, $db); + + $msg->addFeedback('QUESTION_UPDATED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (!isset($_POST['submit'])) { + $sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$qid AND course_id=$_SESSION[course_id] AND type=3"; + $result = mysql_query($sql, $db); + if (!($row = mysql_fetch_assoc($result))){ + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $_POST = $row; +} + +$msg->printErrors(); +?> +
    + + + + +
    +
    + + +
    + +
    + + + + +
    + +
    +
    *
    + + + +
    + +
    +
    + />
    + />
    + />
    + /> +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/edit_question_matching.php b/tools/tests/edit_question_matching.php new file mode 100644 index 000000000..f2bfdb5a3 --- /dev/null +++ b/tools/tests/edit_question_matching.php @@ -0,0 +1,211 @@ +addFeedback('CANCELLED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; +} else if (isset($_POST['submit'])) { + $_POST['tid'] = intval($_POST['tid']); + $_POST['qid'] = intval($_POST['qid']); + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['instructions'] = trim($_POST['instructions']); + $_POST['category_id'] = intval($_POST['category_id']); + + for ($i = 0 ; $i < 10; $i++) { + $_POST['question'][$i] = trim($_POST['question'][$i]); + $_POST['question_answer'][$i] = (int) $_POST['question_answer'][$i]; + $_POST['answer'][$i] = trim($_POST['answer'][$i]); + } + + if (!$_POST['question'][0] + || !$_POST['question'][1] + || !$_POST['answer'][0] + || !$_POST['answer'][1]) { + + $msg->addError('QUESTION_EMPTY'); + } + + if (!$msg->containsErrors()) { + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['instructions'] = $addslashes($_POST['instructions']); + + $sql = "UPDATE ".TABLE_PREFIX."tests_questions SET + category_id=$_POST[category_id], + feedback='$_POST[feedback]', + question='$_POST[instructions]', + choice_0='{$_POST[question][0]}', + choice_1='{$_POST[question][1]}', + choice_2='{$_POST[question][2]}', + choice_3='{$_POST[question][3]}', + choice_4='{$_POST[question][4]}', + choice_5='{$_POST[question][5]}', + choice_6='{$_POST[question][6]}', + choice_7='{$_POST[question][7]}', + choice_8='{$_POST[question][8]}', + choice_9='{$_POST[question][9]}', + answer_0={$_POST[question_answer][0]}, + answer_1={$_POST[question_answer][1]}, + answer_2={$_POST[question_answer][2]}, + answer_3={$_POST[question_answer][3]}, + answer_4={$_POST[question_answer][4]}, + answer_5={$_POST[question_answer][5]}, + answer_6={$_POST[question_answer][6]}, + answer_7={$_POST[question_answer][7]}, + answer_8={$_POST[question_answer][8]}, + answer_9={$_POST[question_answer][9]}, + option_0='{$_POST[answer][0]}', + option_1='{$_POST[answer][1]}', + option_2='{$_POST[answer][2]}', + option_3='{$_POST[answer][3]}', + option_4='{$_POST[answer][4]}', + option_5='{$_POST[answer][5]}', + option_6='{$_POST[answer][6]}', + option_7='{$_POST[answer][7]}', + option_8='{$_POST[answer][8]}', + option_9='{$_POST[answer][9]}' + + WHERE question_id=$_POST[qid] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; + } +} else { + $sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$qid AND course_id=$_SESSION[course_id] AND type=5"; + $result = mysql_query($sql, $db); + + if (!($row = mysql_fetch_assoc($result))){ + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + $_POST['feedback'] = $row['feedback']; + $_POST['instructions'] = $row['question']; + $_POST['category_id'] = $row['category_id']; + + for ($i=0; $i<10; $i++) { + $_POST['question'][$i] = $row['choice_'.$i]; + $_POST['question_answer'][$i] = $row['answer_'.$i]; + $_POST['answer'][$i] = $row['option_'.$i]; + } + +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    + + + + +
    +
    +
    *

    + +
    + +
    + + + + +
    + +
    + + + +
    + +
    +

    +
    + +
    + +
    *
    + + + + + +
    + + + + +
    + + +
    +

    +
    + +
    + +
    *
    + + + +
    + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/edit_question_matchingdd.php b/tools/tests/edit_question_matchingdd.php new file mode 100644 index 000000000..8438abd61 --- /dev/null +++ b/tools/tests/edit_question_matchingdd.php @@ -0,0 +1,211 @@ +addFeedback('CANCELLED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; +} else if (isset($_POST['submit'])) { + $_POST['tid'] = intval($_POST['tid']); + $_POST['qid'] = intval($_POST['qid']); + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['instructions'] = trim($_POST['instructions']); + $_POST['category_id'] = intval($_POST['category_id']); + + for ($i = 0 ; $i < 10; $i++) { + $_POST['question'][$i] = trim($_POST['question'][$i]); + $_POST['question_answer'][$i] = (int) $_POST['question_answer'][$i]; + $_POST['answer'][$i] = trim($_POST['answer'][$i]); + } + + if (!$_POST['question'][0] + || !$_POST['question'][1] + || !$_POST['answer'][0] + || !$_POST['answer'][1]) { + + $msg->addError('QUESTION_EMPTY'); + } + + if (!$msg->containsErrors()) { + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['instructions'] = $addslashes($_POST['instructions']); + + $sql = "UPDATE ".TABLE_PREFIX."tests_questions SET + category_id=$_POST[category_id], + feedback='$_POST[feedback]', + question='$_POST[instructions]', + choice_0='{$_POST[question][0]}', + choice_1='{$_POST[question][1]}', + choice_2='{$_POST[question][2]}', + choice_3='{$_POST[question][3]}', + choice_4='{$_POST[question][4]}', + choice_5='{$_POST[question][5]}', + choice_6='{$_POST[question][6]}', + choice_7='{$_POST[question][7]}', + choice_8='{$_POST[question][8]}', + choice_9='{$_POST[question][9]}', + answer_0={$_POST[question_answer][0]}, + answer_1={$_POST[question_answer][1]}, + answer_2={$_POST[question_answer][2]}, + answer_3={$_POST[question_answer][3]}, + answer_4={$_POST[question_answer][4]}, + answer_5={$_POST[question_answer][5]}, + answer_6={$_POST[question_answer][6]}, + answer_7={$_POST[question_answer][7]}, + answer_8={$_POST[question_answer][8]}, + answer_9={$_POST[question_answer][9]}, + option_0='{$_POST[answer][0]}', + option_1='{$_POST[answer][1]}', + option_2='{$_POST[answer][2]}', + option_3='{$_POST[answer][3]}', + option_4='{$_POST[answer][4]}', + option_5='{$_POST[answer][5]}', + option_6='{$_POST[answer][6]}', + option_7='{$_POST[answer][7]}', + option_8='{$_POST[answer][8]}', + option_9='{$_POST[answer][9]}' + + WHERE question_id=$_POST[qid] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; + } +} else { + $sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$qid AND course_id=$_SESSION[course_id] AND type=8"; + $result = mysql_query($sql, $db); + + if (!($row = mysql_fetch_assoc($result))){ + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + $_POST['feedback'] = $row['feedback']; + $_POST['instructions'] = $row['question']; + $_POST['category_id'] = $row['category_id']; + + for ($i=0; $i<10; $i++) { + $_POST['question'][$i] = $row['choice_'.$i]; + $_POST['question_answer'][$i] = $row['answer_'.$i]; + $_POST['answer'][$i] = $row['option_'.$i]; + } + +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    + + + + +
    +
    +
    *

    + +
    + +
    + + + + +
    + +
    + + + +
    + +
    +

    +
    + +
    + +
    *
    + + + + + +
    + + + + +
    + + +
    +

    +
    + +
    + +
    *
    + + + +
    + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/edit_question_multi.php b/tools/tests/edit_question_multi.php new file mode 100644 index 000000000..981f511b8 --- /dev/null +++ b/tools/tests/edit_question_multi.php @@ -0,0 +1,169 @@ +addFeedback('CANCELLED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; +} else if (isset($_POST['submit'])) { + $_POST['required'] = intval($_POST['required']); + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['question'] = trim($_POST['question']); + $_POST['tid'] = intval($_POST['tid']); + $_POST['qid'] = intval($_POST['qid']); + $_POST['weight'] = intval($_POST['weight']); + $_POST['answer'] = intval($_POST['answer']); + + if ($_POST['question'] == ''){ + $msg->addError(array('EMPTY_FIELDS', _AT('question'))); + } + + if (!$msg->containsErrors()) { + $answers = array_fill(0, 10, 0); + $answers[$_POST['answer']] = 1; + + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $addslashes(trim($_POST['choice'][$i])); + } + + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['question'] = $addslashes($_POST['question']); + + $sql = "UPDATE ".TABLE_PREFIX."tests_questions SET + category_id=$_POST[category_id], + feedback='$_POST[feedback]', + question='$_POST[question]', + choice_0='{$_POST[choice][0]}', + choice_1='{$_POST[choice][1]}', + choice_2='{$_POST[choice][2]}', + choice_3='{$_POST[choice][3]}', + choice_4='{$_POST[choice][4]}', + choice_5='{$_POST[choice][5]}', + choice_6='{$_POST[choice][6]}', + choice_7='{$_POST[choice][7]}', + choice_8='{$_POST[choice][8]}', + choice_9='{$_POST[choice][9]}', + answer_0={$answers[0]}, + answer_1={$answers[1]}, + answer_2={$answers[2]}, + answer_3={$answers[3]}, + answer_4={$answers[4]}, + answer_5={$answers[5]}, + answer_6={$answers[6]}, + answer_7={$answers[7]}, + answer_8={$answers[8]}, + answer_9={$answers[9]} + + WHERE question_id=$_POST[qid] AND course_id=$_SESSION[course_id]"; + + $result = mysql_query($sql, $db); + + $msg->addFeedback('QUESTION_UPDATED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; + } +} + +if (!isset($_POST['submit'])) { + $sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$qid AND course_id=$_SESSION[course_id] AND type=1"; + $result = mysql_query($sql, $db); + + if (!($row = mysql_fetch_array($result))){ + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + $_POST['category_id'] = $row['category_id']; + $_POST['feedback'] = $row['feedback']; + $_POST['required'] = $row['required']; + $_POST['weight'] = $row['weight']; + $_POST['question'] = $row['question']; + + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $row['choice_'.$i]; + $_POST['answer'][$i] = $row['answer_'.$i]; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    + + + + +
    +
    +
    *
    + +
    + +
    + + + + +
    + +
    +
    *
    + + +
    + + +
    + + +
    + > + + + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/edit_question_multianswer.php b/tools/tests/edit_question_multianswer.php new file mode 100644 index 000000000..a1c53aecc --- /dev/null +++ b/tools/tests/edit_question_multianswer.php @@ -0,0 +1,183 @@ +addFeedback('CANCELLED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; +} else if (isset($_POST['submit'])) { + $_POST['required'] = intval($_POST['required']); + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['question'] = trim($_POST['question']); + $_POST['tid'] = intval($_POST['tid']); + $_POST['qid'] = intval($_POST['qid']); + $_POST['weight'] = intval($_POST['weight']); + + if ($_POST['question'] == ''){ + $msg->addError(array('EMPTY_FIELDS', _AT('question'))); + } + + if (!$msg->containsErrors()) { + $choice_new = array(); // stores the non-blank choices + $answer_new = array(); // stores the associated "answer" for the choices + + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $addslashes(trim($_POST['choice'][$i])); + $_POST['answer'][$i] = intval($_POST['answer'][$i]); + + if ($_POST['choice'][$i] == '') { + /* an empty option can't be correct */ + $_POST['answer'][$i] = 0; + } else { + /* filter out empty choices/ remove gaps */ + $choice_new[] = $_POST['choice'][$i]; + $answer_new[] = $_POST['answer'][$i]; + } + } + + $_POST['answer'] = $answer_new; + $_POST['choice'] = $choice_new; + $_POST['answer'] = array_pad($_POST['answer'], 10, 0); + $_POST['choice'] = array_pad($_POST['choice'], 10, ''); + + $_POST['feedback'] = $addslashes($_POST['feedback']); + $_POST['question'] = $addslashes($_POST['question']); + + $sql = "UPDATE ".TABLE_PREFIX."tests_questions SET + category_id=$_POST[category_id], + feedback='$_POST[feedback]', + question='$_POST[question]', + choice_0='{$_POST[choice][0]}', + choice_1='{$_POST[choice][1]}', + choice_2='{$_POST[choice][2]}', + choice_3='{$_POST[choice][3]}', + choice_4='{$_POST[choice][4]}', + choice_5='{$_POST[choice][5]}', + choice_6='{$_POST[choice][6]}', + choice_7='{$_POST[choice][7]}', + choice_8='{$_POST[choice][8]}', + choice_9='{$_POST[choice][9]}', + answer_0={$_POST[answer][0]}, + answer_1={$_POST[answer][1]}, + answer_2={$_POST[answer][2]}, + answer_3={$_POST[answer][3]}, + answer_4={$_POST[answer][4]}, + answer_5={$_POST[answer][5]}, + answer_6={$_POST[answer][6]}, + answer_7={$_POST[answer][7]}, + answer_8={$_POST[answer][8]}, + answer_9={$_POST[answer][9]} + + WHERE question_id=$_POST[qid] AND course_id=$_SESSION[course_id]"; + + $result = mysql_query($sql, $db); + + $msg->addFeedback('QUESTION_UPDATED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; + } +} + +if (!isset($_POST['submit'])) { + $sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$qid AND course_id=$_SESSION[course_id] AND type=7"; + $result = mysql_query($sql, $db); + + if (!($row = mysql_fetch_array($result))){ + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + $_POST['category_id'] = $row['category_id']; + $_POST['feedback'] = $row['feedback']; + $_POST['required'] = $row['required']; + $_POST['weight'] = $row['weight']; + $_POST['question'] = $row['question']; + + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $row['choice_'.$i]; + $_POST['answer'][$i] = $row['answer_'.$i]; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> +
    + + + + +
    +
    +
    *
    + +
    + +
    + + + + +
    + +
    +
    *
    + + +
    + + +
    + + +
    + > + + + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/edit_question_multichoice.php b/tools/tests/edit_question_multichoice.php new file mode 100644 index 000000000..10e7bf1e3 --- /dev/null +++ b/tools/tests/edit_question_multichoice.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tools/tests/edit_question_ordering.php b/tools/tests/edit_question_ordering.php new file mode 100644 index 000000000..fef2b761b --- /dev/null +++ b/tools/tests/edit_question_ordering.php @@ -0,0 +1,176 @@ +addFeedback('CANCELLED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; +} else if (isset($_POST['submit'])) { + $missing_fields = array(); + + $_POST['feedback'] = trim($_POST['feedback']); + $_POST['question'] = trim($_POST['question']); + $_POST['category_id'] = intval($_POST['category_id']); + + if ($_POST['question'] == ''){ + $missing_fields[] = _AT('question'); + } + + if (trim($_POST['choice'][0]) == '') { + $missing_fields[] = _AT('item').' 1'; + } + if (trim($_POST['choice'][1]) == '') { + $missing_fields[] = _AT('item').' 2'; + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + if (!$msg->containsErrors()) { + $_POST['question'] = $addslashes($_POST['question']); + + $choice_new = array(); // stores the non-blank choices + $answer_new = array(); // stores the non-blank answers + $order = 0; // order count + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $addslashes(trim($_POST['choice'][$i])); + + if ($_POST['choice'][$i] != '') { + /* filter out empty choices/ remove gaps */ + $choice_new[] = $_POST['choice'][$i]; + $answer_new[] = $order++; + } + } + + $_POST['choice'] = array_pad($choice_new, 10, ''); + $answer_new = array_pad($answer_new, 10, 0); + + $sql = "UPDATE ".TABLE_PREFIX."tests_questions SET + category_id=$_POST[category_id], + feedback='$_POST[feedback]', + question='$_POST[question]', + choice_0='{$_POST[choice][0]}', + choice_1='{$_POST[choice][1]}', + choice_2='{$_POST[choice][2]}', + choice_3='{$_POST[choice][3]}', + choice_4='{$_POST[choice][4]}', + choice_5='{$_POST[choice][5]}', + choice_6='{$_POST[choice][6]}', + choice_7='{$_POST[choice][7]}', + choice_8='{$_POST[choice][8]}', + choice_9='{$_POST[choice][9]}', + answer_0=$answer_new[0], + answer_0=$answer_new[1], + answer_0=$answer_new[2], + answer_0=$answer_new[3], + answer_0=$answer_new[4], + answer_0=$answer_new[5], + answer_0=$answer_new[6], + answer_0=$answer_new[7], + answer_0=$answer_new[8], + answer_0=$answer_new[9] + + WHERE question_id=$_POST[qid] AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; + } +} else { + $sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$qid AND course_id=$_SESSION[course_id] AND type=6"; + $result = mysql_query($sql, $db); + + if (!($row = mysql_fetch_assoc($result))){ + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $_POST['required'] = $row['required']; + $_POST['question'] = $row['question']; + $_POST['category_id'] = $row['category_id']; + + for ($i=0; $i<10; $i++) { + $_POST['choice'][$i] = $row['choice_'.$i]; + } +} + +require(AT_INCLUDE_PATH.'header.inc.php'); +?> + +
    + + + +
    +
    +
    + +
    + +
    +
    *
    + + + + +
    + + +
    + +
    *
    + + + + +
    + + +
    + + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/edit_question_tf.php b/tools/tests/edit_question_tf.php new file mode 100644 index 000000000..35ea2ae0d --- /dev/null +++ b/tools/tests/edit_question_tf.php @@ -0,0 +1,148 @@ +addFeedback('CANCELLED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; +} else if (isset($_POST['submit'])) { + + $_POST['question'] = trim($_POST['question']); + + if ($_POST['question'] == ''){ + $msg->addError(array('EMPTY_FIELDS', _AT('statement'))); + } + + if (!$msg->containsErrors()) { + $_POST['feedback'] = $addslashes(trim($_POST['feedback'])); + $_POST['question'] = $addslashes($_POST['question']); + $_POST['qid'] = intval($_POST['qid']); + $_POST['category_id'] = intval($_POST['category_id']); + $_POST['answer'] = intval($_POST['answer']); + + $sql = "UPDATE ".TABLE_PREFIX."tests_questions SET category_id=$_POST[category_id], + feedback='$_POST[feedback]', + question='$_POST[question]', + answer_0={$_POST[answer]} + WHERE question_id=$_POST[qid] AND course_id=$_SESSION[course_id]"; + + $result = mysql_query($sql, $db); + + $msg->addFeedback('QUESTION_UPDATED'); + if ($_POST['tid']) { + header('Location: questions.php?tid='.$_POST['tid']); + } else { + header('Location: question_db.php'); + } + exit; + } +} +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (!$_POST['submit']) { + $sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions WHERE question_id=$qid AND course_id=$_SESSION[course_id] AND type=2"; + $result = mysql_query($sql, $db); + + if (!($row = mysql_fetch_array($result))){ + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $_POST = $row; +} + +if ($_POST['required'] == 1) { + $req_yes = ' checked="checked"'; +} else { + $req_no = ' checked="checked"'; +} + +if ($_POST['answer'] == '') { + if ($_POST['answer_0'] == 1) { + $ans_yes = ' checked="checked"'; + } else if ($_POST['answer_0'] == 2){ + $ans_no = ' checked="checked"'; + } else if ($_POST['answer_0'] == 3) { + $ans_yes1 = ' checked="checked"'; + } else { + $ans_no1 = ' checked="checked"'; + } +} else { + if ($_POST['answer'] == 1) { + $ans_yes = ' checked="checked"'; + } else if($_POST['answer'] == 2){ + $ans_no = ' checked="checked"'; + } else if ($_POST['answer'] == 3) { + $ans_yes1 = ' checked="checked"'; + } else { + $ans_no1 = ' checked="checked"'; + } +} + +?> +
    + + + + +
    +
    + + +
    + +
    + + + +
    + +
    +
    *
    + + +
    + +
    +
    + />, /> +
    + +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/edit_question_truefalse.php b/tools/tests/edit_question_truefalse.php new file mode 100644 index 000000000..f2e065923 --- /dev/null +++ b/tools/tests/edit_question_truefalse.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tools/tests/edit_test.php b/tools/tests/edit_test.php new file mode 100644 index 000000000..0c140d97d --- /dev/null +++ b/tools/tests/edit_test.php @@ -0,0 +1,366 @@ +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +} else if (isset($_POST['submit'])) { + $missing_fields = array(); + $_POST['title'] = $addslashes(trim($_POST['title'])); + $_POST['format'] = intval($_POST['format']); + $_POST['randomize_order'] = intval($_POST['randomize_order']); + $_POST['num_questions'] = intval($_POST['num_questions']); + $_POST['num_takes'] = intval($_POST['num_takes']); + $_POST['anonymous'] = intval($_POST['anonymous']); + $_POST['allow_guests'] = $_POST['allow_guests'] ? 1 : 0; + $_POST['instructions'] = $addslashes($_POST['instructions']); + + /* this doesn't actually get used: */ + $_POST['difficulty'] = intval($_POST['difficulty']); + if ($_POST['difficulty'] == '') { + $_POST['difficulty'] = 0; + } + + $_POST['content_id'] = intval($_POST['content_id']); + if ($_POST['content_id'] == '') { + $_POST['content_id'] = 0; + } + + + $_POST['instructions'] = trim($_POST['instructions']); + + if ($_POST['title'] == '') { + $missing_fields[] = 'title'; + } + + if ($_POST['random'] && !$_POST['num_questions']) { + $missing_fields[] = 'num_questions_per_test'; + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + + $day_start = intval($_POST['day_start']); + $month_start= intval($_POST['month_start']); + $year_start = intval($_POST['year_start']); + $hour_start = intval($_POST['hour_start']); + $min_start = intval($_POST['min_start']); + + $day_end = intval($_POST['day_end']); + $month_end = intval($_POST['month_end']); + $year_end = intval($_POST['year_end']); + $hour_end = intval($_POST['hour_end']); + $min_end = intval($_POST['min_end']); + + if (!checkdate($month_start, $day_start, $year_start)) { + $msg->addError('START_DATE_INVALID'); + } + + if (!checkdate($month_end, $day_end, $year_end)) { + $msg->addError('END_DATE_INVALID'); + } + + if (mktime($hour_end, $min_end, 0, $month_end, $day_end, $year_end) < + mktime($hour_start, $min_start, 0, $month_start, $day_start, $year_start)) { + $msg->addError('END_DATE_INVALID'); + } + + if (strlen($month_start) == 1){ + $month_start = "0$month_start"; + } + if (strlen($day_start) == 1){ + $day_start = "0$day_start"; + } + if (strlen($hour_start) == 1){ + $hour_start = "0$hour_start"; + } + if (strlen($min_start) == 1){ + $min_start = "0$min_start"; + } + if (strlen($month_end) == 1){ + $month_end = "0$month_end"; + } + if (strlen($day_end) == 1){ + $day_end = "0$day_end"; + } + if (strlen($hour_end) == 1){ + $hour_end = "0$hour_end"; + } + if (strlen($min_end) == 1){ + $min_end = "0$min_end"; + } + + $start_date = "$year_start-$month_start-$day_start $hour_start:$min_start:00"; + $end_date = "$year_end-$month_end-$day_end $hour_end:$min_end:00"; + + if (!$msg->containsErrors()) { + // just to make sure we own this test: + $sql = "SELECT * FROM ".TABLE_PREFIX."tests WHERE test_id=$tid AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + if ($row = mysql_fetch_assoc($result)) { + $sql = "UPDATE ".TABLE_PREFIX."tests SET title='$_POST[title]', format=$_POST[format], start_date='$start_date', end_date='$end_date', randomize_order=$_POST[randomize_order], num_questions=$_POST[num_questions], instructions='$_POST[instructions]', content_id=$_POST[content_id], result_release=$_POST[result_release], random=$_POST[random], difficulty=$_POST[difficulty], num_takes=$_POST[num_takes], anonymous=$_POST[anonymous], guests=$_POST[allow_guests] WHERE test_id=$tid AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + $sql = "DELETE FROM ".TABLE_PREFIX."tests_groups WHERE test_id=$tid"; + $result = mysql_query($sql, $db); + + if (isset($_POST['groups'])) { + $sql = "INSERT INTO ".TABLE_PREFIX."tests_groups VALUES "; + foreach ($_POST['groups'] as $group) { + $group = intval($group); + $sql .= "($tid, $group),"; + } + $sql = substr($sql, 0, -1); + $result = mysql_query($sql, $db); + } + } + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + + header('Location: index.php'); + exit; + } +} + +$onload = 'document.form.title.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (!isset($_POST['submit'])) { + $sql = "SELECT *, DATE_FORMAT(start_date, '%Y-%m-%d %H:%i:00') AS start_date, DATE_FORMAT(end_date, '%Y-%m-%d %H:%i:00') AS end_date FROM ".TABLE_PREFIX."tests WHERE test_id=$tid AND course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + if (!($row = mysql_fetch_assoc($result))){ + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + $_POST = $row; + $_POST['allow_guests'] = $row['guests']; +} else { + $_POST['start_date'] = $start_date; + $_POST['end_date'] = $end_date; +} + +$msg->printErrors(); + +?> + +
    + + + + + +
    +
    +
    *

    + +
    + +
    +
    + +
    + +
    +
    + + /> + /> +
    + +
    +
    + + /> + /> +
    + +
    +
    + + + /> + /> +
    + +
    +
    + + + />
    + />
    + /> +
    + +
    +
    + + . />, /> +
    + +
    +
    + +
    +
    +
    + +
    + +
    +
    + '.$row['title'].'
    '; + + $sql = "SELECT * FROM ".TABLE_PREFIX."groups WHERE type_id=$row[type_id] ORDER BY title"; + $g_result = mysql_query($sql, $db); + while ($grow = mysql_fetch_assoc($g_result)) { + echo ' 
    '; + } + } + } else { + echo _AT('none_found'); + } + ?> +
    + +
    +
    + +
    + + +
    + + +
    + +
    +
    + + \ No newline at end of file diff --git a/tools/tests/form_editor.php b/tools/tests/form_editor.php new file mode 100644 index 000000000..33d5446f8 --- /dev/null +++ b/tools/tests/form_editor.php @@ -0,0 +1,124 @@ + + + + + + <?php echo _AT('form_editor'); ?> + + + + + + + + > + + + + + + +
    +
    + + + + + + + + + + + + + +
    + + + + +
    + +
    +
    + +
    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/tools/tests/index.php b/tools/tests/index.php new file mode 100644 index 000000000..1be609cd3 --- /dev/null +++ b/tools/tests/index.php @@ -0,0 +1,157 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + +/* get a list of all the tests we have, and links to create, edit, delete, preview */ + +$sql = "SELECT *, UNIX_TIMESTAMP(start_date) AS us, UNIX_TIMESTAMP(end_date) AS ue FROM ".TABLE_PREFIX."tests WHERE course_id=$_SESSION[course_id] ORDER BY start_date DESC"; +$result = mysql_query($sql, $db); +$num_tests = mysql_num_rows($result); + +$cols=6; +?> +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + + + +
    + + + +
    = time() ) ) { + echo ''._AT('ongoing').''; + } else if ($row['ue'] < time() ) { + echo ''._AT('expired').''; + } else if ($row['us'] > time() ) { + echo ''._AT('pending').''; + } ?> + +
    +
    + + \ No newline at end of file diff --git a/tools/tests/preview.php b/tools/tests/preview.php new file mode 100644 index 000000000..8d3d258a5 --- /dev/null +++ b/tools/tests/preview.php @@ -0,0 +1,141 @@ +printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +$num_questions = $test_row['num_questions']; +$rand_err = false; + +if ($row['random']) { + /* !NOTE! this is a really awful way of randomizing questions !NOTE! */ + + /* Retrieve 'num_questions' question_id randomly choosed from + those who are related to this content_id*/ + $sql = "SELECT question_id FROM ".TABLE_PREFIX."tests_questions_assoc WHERE test_id=$tid"; + $result = mysql_query($sql, $db); + $i = 0; + $row2 = mysql_fetch_assoc($result); + /* Store all related question in cr_questions */ + while ($row2['question_id'] != '') { + $cr_questions[$i] = $row2['question_id']; + $row2 = mysql_fetch_assoc($result); + $i++; + } + if ($i < $num_questions) { + /* this if-statement is misleading. */ + /* one should still be able to preview a test before all its questions have been added. */ + /* ie. preview as questions are added. */ + /* bug # 0000615 */ + $rand_err = true; + } else { + /* Randomly choose only 'num_question' question */ + $random_idx = rand(0, $i-1); + $random_id_string = $cr_questions[$random_idx]; + $j = 0; + $extracted[$j] = $random_idx; + $j++; + $num_questions--; + while ($num_questions > 0) { + $done = false; + while (!$done) { + $random_idx = rand(0, $i-1); + $done = true; + for ($k=0;$k<$j;$k++) { + if ($extracted[$k]== $random_idx) { + $done = false; + break; + } + } + } + $extracted[$j] = $random_idx; + $j++; + $random_id_string = $random_id_string.','.$cr_questions[$random_idx]; + $num_questions--; + } + $sql = "SELECT TQ.*, TQA.* FROM ".TABLE_PREFIX."tests_questions TQ INNER JOIN ".TABLE_PREFIX."tests_questions_assoc TQA USING (question_id) WHERE TQ.course_id=$_SESSION[course_id] AND TQA.test_id=$tid AND TQA.question_id IN ($random_id_string) ORDER BY TQA.ordering, TQA.question_id"; + } +} else { + $sql = "SELECT TQ.*, TQA.* FROM ".TABLE_PREFIX."tests_questions TQ INNER JOIN ".TABLE_PREFIX."tests_questions_assoc TQA USING (question_id) WHERE TQ.course_id=$_SESSION[course_id] AND TQA.test_id=$tid ORDER BY TQA.ordering, TQA.question_id"; +} +$result = mysql_query($sql, $db); +$count = 1; +echo '
    '; + +if (($row = mysql_fetch_assoc($result)) && !$rand_err) { + ?> +
    +

    + + + +
    + +
    +
    + + + display($row); + } while ($row = mysql_fetch_assoc($result)); + ?> +
    + +
    + +
    +
    + +printErrors('NO_QUESTIONS'); +} + + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tests/preview_question.php b/tools/tests/preview_question.php new file mode 100644 index 000000000..1524344f7 --- /dev/null +++ b/tools/tests/preview_question.php @@ -0,0 +1,57 @@ + + +
    +
    + display($row); + } + ?> +
    +
    +
    + + \ No newline at end of file diff --git a/tools/tests/question_cats.php b/tools/tests/question_cats.php new file mode 100644 index 000000000..7e89ab5b7 --- /dev/null +++ b/tools/tests/question_cats.php @@ -0,0 +1,62 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions_categories WHERE course_id=$_SESSION[course_id] ORDER BY title"; +$result = mysql_query($sql, $db); + +if ($row = mysql_fetch_assoc($result)) { +?> +
    +
    + +
    + +
    + + +
    + + +
    +
    +
    +'._AT('cats_no_categories').'

    '; + } +?> + + + \ No newline at end of file diff --git a/tools/tests/question_cats_delete.php b/tools/tests/question_cats_delete.php new file mode 100644 index 000000000..d3ed117e7 --- /dev/null +++ b/tools/tests/question_cats_delete.php @@ -0,0 +1,62 @@ +addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'tools/tests/question_cats.php'); + exit; + +} else if (isset($_POST['submit_no'])) { + $msg->addFeedback('CANCELLED'); + header('Location: '.AT_BASE_HREF.'tools/tests/question_cats.php'); + exit; +} else if (!isset($_GET['catid'])) { + require(AT_INCLUDE_PATH.'header.inc.php'); + $msg->addError('ITEM_NOT_FOUND'); + $msg->printErrors(); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$_GET['catid'] = intval($_GET['catid']); + +$sql = "SELECT title FROM ".TABLE_PREFIX."tests_questions_categories WHERE course_id=$_SESSION[course_id] AND category_id=$_GET[catid]"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_array($result); + +$hidden_vars['catid'] = $_GET['catid']; + +$msg->addConfirm(array('DELETE_TEST_CATEGORY', $row['title']), $hidden_vars); + +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tests/question_cats_manage.php b/tools/tests/question_cats_manage.php new file mode 100644 index 000000000..5be264d39 --- /dev/null +++ b/tools/tests/question_cats_manage.php @@ -0,0 +1,81 @@ +addFeedback('CANCELLED'); + header('Location: question_cats.php'); + exit; +} else if (isset($_POST['submit'])) { + + $_POST['title'] = trim($_POST['title']); + + if (!empty($_POST['title']) && !isset($_POST['catid'])) { + $_POST['title'] = $addslashes($_POST['title']); + $sql = "INSERT INTO ".TABLE_PREFIX."tests_questions_categories VALUES (NULL, $_SESSION[course_id], '$_POST[title]')"; + $result = mysql_query($sql, $db); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: question_cats.php'); + exit; + } else if (!empty($_POST['title']) && isset($_POST['catid'])) { + $_POST['title'] = $addslashes($_POST['title']); + $sql = "REPLACE INTO ".TABLE_PREFIX."tests_questions_categories VALUES ($_POST[catid], $_SESSION[course_id], '$_POST[title]')"; + $result = mysql_query($sql, $db); + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: question_cats.php'); + exit; + } else { + $msg->addError(array('EMPTY_FIELDS', _AT('title'))); + } +} + +if (isset($_GET['catid'])) { + $sql = "SELECT title FROM ".TABLE_PREFIX."tests_questions_categories WHERE category_id=$_GET[catid]"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + + $_POST['title'] = $row['title']; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$msg->printErrors(); + +?> +
    +'; +} +?> +
    +
    +
    *

    + +
    + +
    + + +
    + +
    +
    + + \ No newline at end of file diff --git a/tools/tests/question_db.php b/tools/tests/question_db.php new file mode 100644 index 000000000..234025c6f --- /dev/null +++ b/tools/tests/question_db.php @@ -0,0 +1,113 @@ +addError('NO_ITEM_SELECTED'); +} else if (isset($_GET['submit_create'], $_GET['question_type'])) { + header('Location: '.AT_BASE_HREF.'tools/tests/create_question_'.$addslashes($_GET['question_type']).'.php'); + exit; +} else if (isset($_GET['edit'])) { + $id = current($_GET['questions']); + $num_selected = count($id); + + if ($num_selected == 1) { + $ids = explode('|', $id[0], 2); + $o = TestQuestions::getQuestion($ids[1]); + if ($name = $o->getPrefix()) { + header('Location: '.AT_BASE_HREF.'tools/tests/edit_question_'.$name.'.php?qid='.intval($ids[0])); + exit; + } else { + header('Location: '.AT_BASE_HREF.'tools/tests/index.php'); + exit; + } + } else { + $msg->addError('SELECT_ONE_ITEM'); + } + +} else if (isset($_GET['delete'])) { + $id = current($_GET['questions']); + $ids = array(); + foreach ($_GET['questions'] as $category_questions) { + $ids = array_merge($ids, $category_questions); + } + + array_walk($ids, 'intval_array'); + $ids = implode(',',$ids); + + header('Location: '.AT_BASE_HREF.'tools/tests/delete_question.php?qid='.$ids); + exit; +} else if (isset($_GET['preview'])) { + $ids = array(); + foreach ($_GET['questions'] as $category_questions) { + $ids = array_merge($ids, $category_questions); + } + + array_walk($ids, 'intval_array'); + $ids = implode(',',$ids); + + header('Location: '.AT_BASE_HREF.'tools/tests/preview_question.php?qid='.$ids); + exit; +} else if (isset($_GET['add'])) { + $id = current($_GET['questions']); + $ids = explode('|', $id[0], 2); +} else if (isset($_GET['export'])) { + + $ids = array(); + foreach ($_GET['questions'] as $category_questions) { + $ids = array_merge($ids, $category_questions); + } + + array_walk($ids, 'intval_array'); + + test_question_qti_export($ids); + + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +?> + +
    + + +
    +
    +
    + + +
    + +
    + +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/tools/tests/question_remove.php b/tools/tests/question_remove.php new file mode 100644 index 000000000..966aaee52 --- /dev/null +++ b/tools/tests/question_remove.php @@ -0,0 +1,58 @@ +addFeedback('CANCELLED'); + header('Location: questions.php?tid=' . $tid); + exit; +} else if (isset($_POST['submit_yes'])) { + $sql = "DELETE FROM ".TABLE_PREFIX."tests_questions_assoc WHERE question_id=$qid AND test_id=$tid"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('QUESTION_REMOVED'); + header('Location: questions.php?tid=' . $tid); + exit; + +} /* else: */ + +$_pages['tools/tests/questions.php?tid='.$_GET['tid']]['title_var'] = 'questions'; +$_pages['tools/tests/questions.php?tid='.$_GET['tid']]['parent'] = 'tools/tests/index.php'; +$_pages['tools/tests/questions.php?tid='.$_GET['tid']]['children'] = array('tools/tests/add_test_questions.php?tid='.$_GET['tid']); + +$_pages['tools/tests/add_test_questions.php?tid='.$_GET['tid']]['title_var'] = 'add_questions'; +$_pages['tools/tests/add_test_questions.php?tid='.$_GET['tid']]['parent'] = 'tools/tests/questions.php?tid='.$_GET['tid']; + +$_pages['tools/tests/question_remove.php']['title_var'] = 'remove_question'; +$_pages['tools/tests/question_remove.php']['parent'] = 'tools/tests/questions.php?tid='.$_GET['tid']; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +unset($hidden_vars); +$hidden_vars['qid'] = $_GET['qid']; +$hidden_vars['tid'] = $_GET['tid']; +$msg->addConfirm('REMOVE_TEST_QUESTION', $hidden_vars); + +$msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tests/questions.php b/tools/tests/questions.php new file mode 100644 index 000000000..b4a7d1ac8 --- /dev/null +++ b/tools/tests/questions.php @@ -0,0 +1,229 @@ + $weight) { + $weight = $addslashes($weight); + if ($_POST['required'][$qid]) { + // do nothing + } else { + if ($randomized_question_weight == -1) { + // if first time through this loop. + $randomized_question_weight = $weight; + } else if ($randomized_question_weight != $weight) { + // The values of two non-required questions are not equal. + $msg->addError ("NON_REQUIRED_QUESTION_WEIGHT"); + header('Location: '.$_SERVER['PHP_SELF'] .'?tid='.$tid); + exit; + } else { + // The values of non-required questions are equal so far. + } + } + } + */ + + //update the weights & order + $total_weight = 0; + $count = 1; + foreach ($_POST['weight'] as $qid => $weight) { + $weight = $addslashes($weight); + if ($_POST['required'][$qid]) { + $required = 1; + } else { + $required = 0; + } + + if (!$row['random']) { + $orders = $_POST['ordering']; + asort($orders); + $orders = array_keys($orders); + $orders = array_flip($orders); + $sql = "UPDATE ".TABLE_PREFIX."tests_questions_assoc SET weight=$weight, required=$required, ordering=".($orders[$qid]+1)." WHERE question_id=$qid AND test_id=".$tid; + } else { + $sql = "UPDATE ".TABLE_PREFIX."tests_questions_assoc SET weight=$weight, required=$required, ordering=$count WHERE question_id=$qid AND test_id=".$tid; + } + + $result = mysql_query($sql, $db); + $total_weight += $weight; + $count++; + } + + $sql = "UPDATE ".TABLE_PREFIX."tests SET out_of='$total_weight' WHERE test_id=$tid"; + $result = mysql_query($sql, $db); + } + $total_weight = 0; + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.$_SERVER['PHP_SELF'] .'?tid='.$tid); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT title, random FROM ".TABLE_PREFIX."tests WHERE test_id=$tid"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_assoc($result); +echo '

    '._AT('questions_for').' '.AT_print($row['title'], 'tests.title').'

    '; +$random = $row['random']; + +$sql = "SELECT count(*) as cnt FROM ".TABLE_PREFIX."tests_questions_assoc QA, ".TABLE_PREFIX."tests_questions Q WHERE QA.test_id=$tid AND QA.weight=0 AND QA.question_id=Q.question_id AND Q.type<>4"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_array($result); +if ($row['cnt']) { + $msg->printWarnings('QUESTION_WEIGHT'); +} + +$msg->printAll(); + +$sql = "SELECT * FROM ".TABLE_PREFIX."tests_questions Q, ".TABLE_PREFIX."tests_questions_assoc TQ WHERE Q.course_id=$_SESSION[course_id] AND Q.question_id=TQ.question_id AND TQ.test_id=$tid ORDER BY TQ.ordering"; +$result = mysql_query($sql, $db); + +?> +
    + + + + + + + + + + + + + + + + +'; + echo ''; + echo ''; + + if ($random) { + echo ''; + } else { + echo ''; + } + + echo ''; + echo ''; + + $link = 'tools/tests/edit_question_'.$o->getPrefix().'.php?tid='.$tid.SEP.'qid='.$row['question_id']; + + echo ''; + + if ($random) { + echo ''; + } + + echo ''; + + echo ''; + } while ($row = mysql_fetch_assoc($result)); + + //total weight + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; +} else { + echo ''; +} + +echo '
     
    '.$count.''; + + if ($row['type'] == 4) { + echo ''._AT('na').''; + echo ''; + } else { + echo ''; + } + echo ''._AT('na').''; + if (strlen($row['question']) > 45) { + echo htmlspecialchars(AT_print(substr($row['question'], 0, 43), 'tests_questions.question')) . '...'; + } else { + echo AT_print(htmlspecialchars($row['question']), 'tests_questions.question'); + } + + echo ''; + $o = TestQuestions::getQuestion($row['type']); + echo $o->printName(); + echo ''.$cats[$row['category_id']].''; + echo '' . _AT('edit').' | '; + echo '' . _AT('remove') . ''; + echo '
     '._AT('total').': '.$total_weight.''; + echo '
    '._AT('none_found').'

    '; + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tests/results.php b/tools/tests/results.php new file mode 100644 index 000000000..1850b8e73 --- /dev/null +++ b/tools/tests/results.php @@ -0,0 +1,212 @@ +addError('NO_ITEM_SELECTED'); +} + +require(AT_INCLUDE_PATH.'lib/test_result_functions.inc.php'); + +if ($_GET['reset_filter']) { + unset($_GET); +} + +$orders = array('asc' => 'desc', 'desc' => 'asc'); +$cols = array('login' => 1, 'full_name' => 1, 'date_taken' => 1, 'fs' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'login'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'login'; +} else { + // no order set + $order = 'asc'; + $col = 'login'; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +if (isset($_GET['status']) && ($_GET['status'] != '') && ($_GET['status'] != 2)) { + if ($_GET['status'] == 0) { + $status = " AND R.final_score=''"; + } else { + $status = " AND R.final_score<>''"; + } + $page_string .= SEP.'status='.$_GET['status']; +} else { + $status = ''; +} + +//get test info +$sql = "SELECT out_of, anonymous, random, title FROM ".TABLE_PREFIX."tests WHERE test_id=$tid AND course_id=$_SESSION[course_id]"; +$result = mysql_query($sql, $db); +if (!($row = mysql_fetch_array($result))){ + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +$out_of = $row['out_of']; +$anonymous = $row['anonymous']; +$random = $row['random']; + +//count total +$sql = "SELECT count(*) as cnt FROM ".TABLE_PREFIX."tests_results R LEFT JOIN ".TABLE_PREFIX."members M USING (member_id) WHERE R.test_id=$tid"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_array($result); +$num_sub = $row['cnt']; + +//get results based on filtre and sorting +if ($anonymous == 1) { + $sql = "SELECT R.*, '"._AT('anonymous')."' AS login FROM ".TABLE_PREFIX."tests_results R WHERE R.test_id=$tid $status ORDER BY $col $order"; +} else { + $sql = "SELECT R.*, login, CONCAT(first_name, ' ', second_name, ' ', last_name) AS full_name, R.final_score+0.0 AS fs FROM ".TABLE_PREFIX."tests_results R LEFT JOIN ".TABLE_PREFIX."members M USING (member_id) WHERE R.test_id=$tid $status ORDER BY $col $order, R.final_score $order"; +} + +$result = mysql_query($sql, $db); +if ($anonymous == 1) { + $guest_text = ''._AT('anonymous').''; +} else { + $guest_text = '- '._AT('guest').' -'; +} +while ($row = mysql_fetch_assoc($result)) { + $row['full_name'] = $row['full_name'] ? $row['full_name'] : $guest_text; + $row['login'] = $row['login'] ? $row['login'] : $guest_text; + $rows[$row['result_id']] = $row; +} + +$num_results = mysql_num_rows($result); + +//count unmarked: no need to do this query if filtre is already getting unmarked +if (isset($_GET['status']) && ($_GET['status'] != '') && ($_GET['status'] == 0)) { + $num_unmarked = $num_results; +} else { + $sql = "SELECT count(*) as cnt FROM ".TABLE_PREFIX."tests_results R, ".TABLE_PREFIX."members M WHERE R.test_id=$tid AND R.member_id=M.member_id AND R.final_score=''"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_array($result); + $num_unmarked = $row['cnt']; +} + +?> +


    + +
    + + +
    +
    +

    +
    + +
    +
    + /> + + /> + + /> + +
    + +
    + + +
    +
    +
    + +
    + + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     
    + +
    +
    + \ No newline at end of file diff --git a/tools/tests/results_all.php b/tools/tests/results_all.php new file mode 100644 index 000000000..ffd759cc9 --- /dev/null +++ b/tools/tests/results_all.php @@ -0,0 +1,189 @@ +'.$row['title'].'
    '; +?> + +
    +
    +
    +

    +
    + +
    + + +
    +
    +
    + +'' ORDER BY M.login, R.date_taken"; +$result = mysql_query($sql, $db); +$num_results = mysql_num_rows($result); +if ($row = mysql_fetch_assoc($result)) { + $total_score = 0; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + for($i = 0; $i< $num_questions; $i++) { + echo ''; + } + echo ''; + echo ''; + echo ''; + + do { + $row['login'] = $row['login'] ? $row['login'] : $guest_text; + echo ''; + echo ''; + echo ''; + if ($random) { + $total_weight = get_random_outof($row['test_id'], $row['result_id']); + } + echo ''; + + $total_score += $row['final_score']; + + $answers = array(); /* need this, because we dont know which order they were selected in */ + + //get answers for this test result + $sql = "SELECT question_id, score FROM ".TABLE_PREFIX."tests_answers WHERE result_id=$row[result_id] AND question_id IN ($q_sql)"; + $result2 = mysql_query($sql, $db); + while ($row2 = mysql_fetch_assoc($result2)) { + $answers[$row2['question_id']] = $row2['score']; + } + + //print answers out for each question + for($i = 0; $i < $num_questions; $i++) { + $questions[$i]['score'] += $answers[$questions[$i]['question_id']]; + echo ''; + } + + echo ''; + } while ($row = mysql_fetch_assoc($result)); + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + + for($i = 0; $i < $num_questions; $i++) { + echo ''; + } + echo ''; + + echo ''; + echo ''; + echo ''; + + for($i = 0; $i < $num_questions; $i++) { + echo ''; + } + echo ''; + echo ''; +} else { + echo ''._AT('no_results_available').''; + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +?> +
    '._AT('login_name').''._AT('date_taken').''._AT('mark').'Q'.($i+1).' /'.$questions[$i]['weight'].'
    '.$row['login'].''.AT_date('%j/%n/%y %G:%i', $row['date_taken'], AT_DATE_MYSQL_DATETIME).''.$row['final_score'].'/'.$total_weight.''; + if ($answers[$questions[$i]['question_id']] == '') { + echo '-'; + } else { + echo $answers[$questions[$i]['question_id']]; + if ($random) { + $questions[$i]['count']++; + } + } + echo '
    '._AT('average').':'.number_format($total_score/$num_results, 1).''; + if ($random) { + $count = $questions[$i]['count']; + } + if ($questions[$i]['weight'] && $count) { + echo number_format($questions[$i]['score']/$count, 1); + } else { + echo '0.0'; + } + echo '
     '; + if ($total_weight) { + echo number_format($total_score/$num_results/$total_weight*100, 1).'%'; + } + echo ''; + if ($random) { + $count = $questions[$i]['count']; + } + + if ($questions[$i]['weight'] && $count) { + echo number_format($questions[$i]['score']/$count/$questions[$i]['weight']*100, 1).'%'; + } else { + echo '00.0%'; + } + echo '
    + + \ No newline at end of file diff --git a/tools/tests/results_all_csv.php b/tools/tests/results_all_csv.php new file mode 100644 index 000000000..a6ad1e5eb --- /dev/null +++ b/tools/tests/results_all_csv.php @@ -0,0 +1,121 @@ +printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +$test_title = str_replace(array('"', '<', '>'), '', $row['title']); +$test_title = str_replace (' ', '_', $test_title); +$random = $row['randomize_order']; + +//get test questions +$sql = "SELECT TQ.*, TQA.* FROM ".TABLE_PREFIX."tests_questions TQ INNER JOIN ".TABLE_PREFIX."tests_questions_assoc TQA USING (question_id) WHERE TQ.course_id=$_SESSION[course_id] AND TQA.test_id=$tid ORDER BY TQA.ordering, TQA.question_id"; +$result = mysql_query($sql, $db); +$num_questions = mysql_num_rows($result); +$questions = array(); +$total_weight = 0; +$i=0; +while ($row = mysql_fetch_array($result)) { + $row['score'] = 0; + $questions[$i] = $row; + $questions[$i]['count'] = 0; + $q_sql .= $row['question_id'].','; + $total_weight += $row['weight']; + $i++; +} +$q_sql = substr($q_sql, 0, -1); + + +header('Content-Type: application/x-excel'); +header('Content-Disposition: inline; filename="'.$test_title.'.csv"'); +header('Expires: 0'); +header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); +header('Pragma: public'); + +$nl = "\n"; + +echo quote_csv(_AT('login_name')).', '; +echo quote_csv(_AT('date_taken')).', '; +echo quote_csv(_AT('mark')); +for($i = 0; $i< $num_questions; $i++) { + echo ', '.quote_csv('Q'.($i+1).'/'.$questions[$i]['weight']); +} +echo $nl; + +$guest_text = '- '._AT('guest').' -'; + +//get test results +$sql = "SELECT R.*, M.login FROM ".TABLE_PREFIX."tests_results R LEFT JOIN ".TABLE_PREFIX."members M USING (member_id) WHERE R.test_id=$tid AND R.final_score<>'' ORDER BY M.login, R.date_taken"; +$result = mysql_query($sql, $db); +$num_results = mysql_num_rows($result); +if ($row = mysql_fetch_array($result)) { + do { + $row['login'] = $row['login'] ? $row['login'] : $guest_text; + + echo quote_csv($row['login']).', '; + echo quote_csv($row['date_taken']).', '; + + if ($random) { + $total_weight = get_random_outof($row['test_id'], $row['result_id']); + } + echo $row['final_score'].'/'.$total_weight; + + $answers = array(); /* need this, because we dont know which order they were selected in */ + $sql = "SELECT question_id, score FROM ".TABLE_PREFIX."tests_answers WHERE result_id=$row[result_id] AND question_id IN ($q_sql)"; + $result2 = mysql_query($sql, $db); + while ($row2 = mysql_fetch_array($result2)) { + $answers[$row2['question_id']] = $row2['score']; + } + for($i = 0; $i < $num_questions; $i++) { + $questions[$i]['score'] += $answers[$questions[$i]['question_id']]; + if ($answers[$questions[$i]['question_id']] == '') { + echo ', -'; + } else { + echo ', '.$answers[$questions[$i]['question_id']]; + if ($random) { + $questions[$i]['count']++; + } + } + } + + echo $nl; + } while ($row = mysql_fetch_array($result)); + + echo $nl; +} + +?> \ No newline at end of file diff --git a/tools/tests/results_all_quest.php b/tools/tests/results_all_quest.php new file mode 100644 index 000000000..a364bf76b --- /dev/null +++ b/tools/tests/results_all_quest.php @@ -0,0 +1,93 @@ +'.$row['title'].'
    '; + +//get all the questions in this test, store them +$sql = "SELECT TQ.*, TQA.* FROM ".TABLE_PREFIX."tests_questions TQ INNER JOIN ".TABLE_PREFIX."tests_questions_assoc TQA USING (question_id) WHERE TQ.course_id=$_SESSION[course_id] AND TQA.test_id=$tid ORDER BY TQA.ordering, TQA.question_id"; + +$result = mysql_query($sql, $db); +$questions = array(); +while ($row = mysql_fetch_assoc($result)) { + $questions[$row['question_id']] = $row; +} +$long_qs = substr($long_qs, 0, -1); + +//get the answers: count | q_id | answer +$sql = "SELECT count(*), A.question_id, A.answer, A.score + FROM ".TABLE_PREFIX."tests_answers A, ".TABLE_PREFIX."tests_results R + WHERE R.result_id=A.result_id AND R.final_score<>'' AND R.test_id=$tid + GROUP BY A.question_id, A.answer + ORDER BY A.question_id, A.answer"; +$result = mysql_query($sql, $db); + +echo 'Correct checkmark- '._AT('correct_answer').'

    '; + +$ans = array(); +while ($row = mysql_fetch_assoc($result)) { + $ans[$row['question_id']][$row['answer']] = array('count'=>$row['count(*)'], 'score'=>$row['score']); +} + +//print out rows +foreach ($questions as $q_id => $q) { + /* for random: num_results is going to be specific to each question. + * This is a randomized test which means that it is possible each question has been answered a + * different number of times. Statistics are therefore based on the number of times each + * question was answered, not the number of times the test has been taken. + */ + + //catch random unanswered + if($ans[$q_id]) { + $obj = TestQuestions::getQuestion($q['type']); + $obj->displayResultStatistics($q, $ans[$q_id]); + } +} + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tests/results_quest_long.php b/tools/tests/results_quest_long.php new file mode 100644 index 000000000..92a69e0bd --- /dev/null +++ b/tools/tests/results_quest_long.php @@ -0,0 +1,75 @@ +'; +echo ''; + +echo '
    '; +echo '

    '.AT_print($row['title'], 'tests.title').'

    '; + +echo '

    '._AT('response_text').' '.AT_print(urldecode($_GET['q']), 'tests_questions.question').'

    '; + +//get the answers +$sql = "SELECT count(*), A.answer + FROM ".TABLE_PREFIX."tests_answers A, ".TABLE_PREFIX."tests_results R + WHERE A.question_id=".$_GET['qid']." AND R.result_id=A.result_id AND R.final_score<>'' AND R.test_id=".$_GET['tid']." + GROUP BY A.answer + ORDER BY A.answer"; + +$result = mysql_query($sql, $db); + +while ($row = mysql_fetch_assoc($result)) { + if ($row['answer'] != -1 && $row['answer'] != '') { + echo '
    '; + echo '-'.AT_print($row['answer'], 'tests_answers.answer'); + echo '
    '; + } +} + +echo '
    '; + echo ''; +echo '
    '; + +echo '
    '; + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tests/view_results.php b/tools/tests/view_results.php new file mode 100644 index 000000000..b02851c8b --- /dev/null +++ b/tools/tests/view_results.php @@ -0,0 +1,131 @@ +addFeedback('CANCELLED'); + header('Location: results.php?tid='.$tid); + exit; +} else if ($_POST['back']) { + header('Location: results.php?tid='.$tid); + exit; +} else if ($_POST['submit']) { + $tid = intval($_POST['tid']); + $rid = intval($_POST['rid']); + + $final_score = 0; + if (is_array($_POST['scores'])) { + foreach ($_POST['scores'] as $qid => $score) { + $qid = intval($qid); + $score = floatval($score); + $final_score += $score; + + $sql = "UPDATE ".TABLE_PREFIX."tests_answers SET score='$score' WHERE result_id=$rid AND question_id=$qid"; + $result = mysql_query($sql, $db); + } + } + + $sql = "UPDATE ".TABLE_PREFIX."tests_results SET final_score='$final_score', date_taken=date_taken WHERE result_id=$rid"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('RESULTS_UPDATED'); + header('Location: results.php?tid='.$tid); + exit; +} + +if (defined('AT_FORCE_GET_FILE') && AT_FORCE_GET_FILE) { + $content_base_href = 'get.php/'; +} else { + $course_base_href = 'content/' . $_SESSION['course_id'] . '/'; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT * FROM ".TABLE_PREFIX."tests WHERE test_id=$tid AND course_id=$_SESSION[course_id]"; +$result = mysql_query($sql, $db); + +if (!($row = mysql_fetch_array($result))){ + $msg->printErrors('ITEM_NOT_FOUND'); + require (AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +$test_title = $row['title']; +$out_of = $row['out_of']; + +$tid = intval($_GET['tid']); +$rid = intval($_GET['rid']); + +$sql = "SELECT TQ.*, TQA.* FROM ".TABLE_PREFIX."tests_questions TQ INNER JOIN ".TABLE_PREFIX."tests_questions_assoc TQA USING (question_id) WHERE TQ.course_id=$_SESSION[course_id] AND TQA.test_id=$tid ORDER BY TQA.ordering"; +$result = mysql_query($sql, $db); + +if (mysql_num_rows($result) == 0) { + echo '

    '._AT('no_questions').'

    '; + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +?> + +
    + + + +
    +
    +

    +
    + displayResult($row, $answer_row, TRUE); + + if ($row['feedback']) { + echo '

    '._AT('feedback').': '; + echo nl2br($row['feedback']).'

    '; + } + } + } + ?> + +
    + + + + + +
    + +
    +
    + + \ No newline at end of file diff --git a/tools/tile/import.php b/tools/tile/import.php new file mode 100644 index 000000000..1a2dd909d --- /dev/null +++ b/tools/tile/import.php @@ -0,0 +1,91 @@ +getContent(); +} + +function print_menu_sections(&$menu, $parent_content_id = 0, $depth = 0, $ordering = '') { + $my_children = $menu[$parent_content_id]; + $cid = $_GET['cid']; + + if (!is_array($my_children)) { + return; + } + foreach ($my_children as $children) { + echo ''; + + print_menu_sections($menu, $children['content_id'], $depth+1, $new_ordering); + } +} + + +?> + +
    + +
    +
    + +
    + +
    + +
    + : +
    + +
    + : +
    + +
    + +
    +
    +
    + + + + \ No newline at end of file diff --git a/tools/tile/index.php b/tools/tile/index.php new file mode 100644 index 000000000..a259ac5ea --- /dev/null +++ b/tools/tile/index.php @@ -0,0 +1,164 @@ +printAll(); + +?> +
    + +
    +
    +
    + +
    + +
    +
    + + />
    + />
    + />
    + />
    + />
    + /> +
    + +
    + +
    +
    +
    +
    +getError(); + if ($error) { + // Display the error + + $msg->addError('TILE_UNAVAILABLE'); + $msg->printAll(); + + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + // Create the proxy + $proxy = $client->getProxy(); + } else { + // Create the client instance + $proxy = new soapclient(AT_TILE_WSDL); + } + + + $search_input = array('query' => $_GET['query'], 'field' => $_GET['field'], 'content' => 'contentPackage'); + + $results = $proxy->doSearch($search_input); + + if ($results) { + $num_results = count($results); + } else { + $num_results = 0; + } + echo '

    '. _AT('results_found', $num_results).'

    '; + echo '
      '; + if ($num_results) { + foreach ($results as $result) { + + $xml_parser = xml_parser_create(); + + xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); /* conform to W3C specs */ + xml_set_element_handler($xml_parser, 'startElement', 'endElement'); + xml_set_character_data_handler($xml_parser, 'characterData'); + + if (!xml_parse($xml_parser, $result, true)) { + die(sprintf("XML error: %s at line %d", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser))); + } + + xml_parser_free($xml_parser); + + $tile_title = str_replace('<', '<', $tile_title); + + echo '
    1. ' . $tile_title . ' - '; + echo ''._AT('preview').''; + echo ' | '._AT('download').''; + if (authenticate(AT_PRIV_CONTENT, AT_PRIV_RETURN)) { + echo ' | '._AT('import').''; + } + echo '
      '; + if (strlen($tile_description) > 200) { + echo '' . $tile_description . ''; + } else { + echo $tile_description; + } + + echo '
    2. '; + + unset($tile_title); + unset($tile_description); + unset($tile_identifier); + } + } + echo '
    '; +} + require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tracker.php b/tools/tracker.php new file mode 100644 index 000000000..d7dddd6c8 --- /dev/null +++ b/tools/tracker.php @@ -0,0 +1,64 @@ +printInfos('TRACKING_OFFIN'); + } else { + $msg->printInfos('TRACKING_OFFST'); + } + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +} +if ($_GET['coverage'] == 'raw'){ + echo '  '._AT('show_summary_tracking').'

    '; +} else { + echo '  '._AT('show_raw_tracking').'

    '; +} + +if (authenticate(AT_PRIV_ADMIN, AT_PRIV_RETURN)) { + $msg->printInfos('TRACKING_NO_INST1'); +} else if ($_GET['coverage'] == 'raw') { + require(AT_INCLUDE_PATH.'lib/tracker.inc.php'); +} else{ + require(AT_INCLUDE_PATH.'lib/tracker2.inc.php'); +} + require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/tools/tracker/export.php b/tools/tracker/export.php new file mode 100644 index 000000000..ef9a5a8e6 --- /dev/null +++ b/tools/tracker/export.php @@ -0,0 +1,61 @@ + \ No newline at end of file diff --git a/tools/tracker/index.php b/tools/tracker/index.php new file mode 100644 index 000000000..1cecb9048 --- /dev/null +++ b/tools/tracker/index.php @@ -0,0 +1,128 @@ + 'desc', 'desc' => 'asc'); +$cols = array('total_hits' => 1, 'unique_hits' => 1, 'average_duration' => 1, 'total_duration' => 1); + +if (isset($_GET['asc'])) { + $order = 'asc'; + $col = isset($cols[$_GET['asc']]) ? $_GET['asc'] : 'total_hits'; +} else if (isset($_GET['desc'])) { + $order = 'desc'; + $col = isset($cols[$_GET['desc']]) ? $_GET['desc'] : 'total_hits'; +} else { + // no order set + $order = 'desc'; + $col = 'total_hits'; +} + +$page_string = SEP.$order.'='.$col; + +if (!isset($_GET['cnt'])) { + $sql = "SELECT COUNT(DISTINCT content_id) AS cnt FROM ".TABLE_PREFIX."member_track WHERE course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + $row = mysql_fetch_assoc($result); + $cnt = $row['cnt']; +} else { + $cnt = intval($_GET['cnt']); +} + +$num_results = $cnt; +$results_per_page = 15; +$num_pages = max(ceil($num_results / $results_per_page), 1); +$page = intval($_GET['p']); +if (!$page) { + $page = 1; +} +$count = (($page-1) * $results_per_page) + 1; + +$offset = ($page-1)*$results_per_page; + +/*create a table that lists all the content pages and the number of time they were viewed*/ +$sql = "SELECT content_id, COUNT(*) AS unique_hits, SUM(counter) AS total_hits, SEC_TO_TIME(SUM(duration)/SUM(counter)) AS average_duration, SEC_TO_TIME(SUM(duration)) AS total_duration FROM ".TABLE_PREFIX."member_track WHERE course_id=$_SESSION[course_id] GROUP BY content_id ORDER BY $col $order LIMIT $offset, $results_per_page"; +$result = mysql_query($sql, $db); + +?> +
    +
      + +
    • + + + + + +
    • + +
    +
    + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    _menu_info[$row['content_id']]['title']; ?>
    + + \ No newline at end of file diff --git a/tools/tracker/page_student_stats.php b/tools/tracker/page_student_stats.php new file mode 100644 index 000000000..0dcf48136 --- /dev/null +++ b/tools/tracker/page_student_stats.php @@ -0,0 +1,59 @@ +_menu_info[$content_id]['title']; +$_pages['tools/tracker/page_student_stats.php']['parent'] = 'tools/tracker/index.php'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$sql = "SELECT counter, content_id, member_id, SEC_TO_TIME(duration) AS total, SEC_TO_TIME(duration/counter) AS average FROM ".TABLE_PREFIX."member_track WHERE course_id=$_SESSION[course_id] AND content_id=$content_id ORDER BY total DESC"; +$result = mysql_query($sql, $db); + +?> + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + \ No newline at end of file diff --git a/tools/tracker/reset.php b/tools/tracker/reset.php new file mode 100644 index 000000000..7505cc654 --- /dev/null +++ b/tools/tracker/reset.php @@ -0,0 +1,46 @@ +addFeedback('CANCELLED'); + header('Location: ./index.php'); + exit; +} + +else if (isset($_POST['submit_yes'])) { + //clean up the db + $sql = "DELETE FROM ".TABLE_PREFIX."member_track WHERE course_id=$_SESSION[course_id]"; + $result = mysql_query($sql, $db); + + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: ./index.php'); + exit; +} + +require(AT_INCLUDE_PATH.'header.inc.php'); + + //print confirmation + $hidden_vars['all'] = TRUE; + + $msg->addConfirm('DELETE_TRACKING', $hidden_vars); + $msg->printConfirm(); + +require(AT_INCLUDE_PATH.'footer.inc.php'); + +?> \ No newline at end of file diff --git a/tools/tracker/student_usage.php b/tools/tracker/student_usage.php new file mode 100644 index 000000000..0cfb72e3b --- /dev/null +++ b/tools/tracker/student_usage.php @@ -0,0 +1,83 @@ + +
    +
    +
    +
    + +
    + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    _menu_info[$row['content_id']]['title']; ?>
    + + + \ No newline at end of file diff --git a/tools/view_results.php b/tools/view_results.php new file mode 100644 index 000000000..7bdbe0251 --- /dev/null +++ b/tools/view_results.php @@ -0,0 +1,138 @@ +'; +$mark_wrong = ' '._AT('wrong_answer').''; + +$sql = "SELECT * FROM ".TABLE_PREFIX."tests_results WHERE result_id=$rid AND member_id=$_SESSION[member_id]"; +$result = mysql_query($sql, $db); +if (!$row = mysql_fetch_assoc($result)){ + $msg->printErrors('ITEM_NOT_FOUND'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} +$final_score= $row['final_score']; + +//make sure they're allowed to see results now +$sql = "SELECT result_release, out_of FROM ".TABLE_PREFIX."tests WHERE test_id=$tid AND course_id=$_SESSION[course_id]"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_assoc($result); + +if ( ($row['result_release']==AT_RELEASE_NEVER) || ($row['result_release']==AT_RELEASE_MARKED && $final_score=='') ) { + $msg->printErrors('RESULTS_NOT_RELEASED'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +$out_of = $row['out_of']; + +/* Retrieve randomly choosed questions */ +$sql = "SELECT question_id FROM ".TABLE_PREFIX."tests_answers WHERE result_id=$rid"; +$result = mysql_query($sql, $db); +$row = mysql_fetch_array($result); +$random_id_string = $row[question_id]; +$row = mysql_fetch_array($result); +while ($row['question_id'] != '') { + $random_id_string = $random_id_string.','.$row['question_id']; + $row = mysql_fetch_array($result); +} +if (!$random_id_string) { + $random_id_string = 0; +} + +$sql = "SELECT TQ.*, TQA.* FROM ".TABLE_PREFIX."tests_questions TQ INNER JOIN ".TABLE_PREFIX."tests_questions_assoc TQA USING (question_id) WHERE TQA.test_id=$tid AND TQ.question_id IN ($random_id_string) ORDER BY TQA.ordering, TQ.question_id"; +$result = mysql_query($sql, $db); + +if (mysql_num_rows($result) == 0) { + echo '

    '._AT('no_questions').'

    '; + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +?> +
    +
    +
    +

    +
    + + +
    + +
    +
    + + + displayResult($row, $answer_row); + + $my_score=($my_score+$answer_row['score']); + $this_total += $row['weight']; + + if ($row['feedback']) { + echo '

    '._AT('feedback').': '; + echo nl2br($row['feedback']).'

    '; + } + } + ?> + + +
    + + + : + +
    + +
    + + ! + +
    + + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/users/browse.php b/users/browse.php new file mode 100644 index 000000000..755965bd8 --- /dev/null +++ b/users/browse.php @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/users/contact_instructor.php b/users/contact_instructor.php new file mode 100644 index 000000000..f3116bd50 --- /dev/null +++ b/users/contact_instructor.php @@ -0,0 +1,174 @@ +'._AT('contact_instructor').''; + + $sql = "SELECT first_name, last_name, email FROM ".TABLE_PREFIX."members WHERE member_id=$_SESSION[member_id]"; + $result = mysql_query($sql, $db); + if ($row = mysql_fetch_array($result)) { + $student_name = $row['last_name']; + $student_name .= ($row['first_name'] ? ', '.$row['first_name'] : ''); + + $student_email = $row['email']; + } else { + $msg->printErrors('STUD_INFO_NOT_FOUND'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + if ($_GET['course']) { + $course = intval($_GET['course']); + } else { + $course = intval($_POST['course']); + } + + $sql = "SELECT M.first_name, M.last_name, M.email, C.title FROM ".TABLE_PREFIX."members M, ".TABLE_PREFIX."courses C WHERE M.member_id=C.member_id AND C.course_id=$course"; + $result = mysql_query($sql, $db); + + if ($row = mysql_fetch_array($result)) { + $instructor_name = $row['last_name']; + $instructor_name .= ($row['first_name'] ? ', '.$row['first_name'] : ''); + + $instructor_email = $row['email']; + } else { + $msg->printErrors('INST_INFO_NOT_FOUND'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + + if ($_POST['submit']) { + $missing_fields = array(); + + $to_email = $instructor_email; + $_POST['subject'] = trim($_POST['subject']); + $_POST['body'] = trim($_POST['body']); + + if ($_POST['subject'] == '') { + $missing_fields[] = _AT('subject'); + } + if ($_POST['body'] == '') { + $missing_fields[] = _AT('body'); + } + + if ($missing_fields) { + $missing_fields = implode(', ', $missing_fields); + $msg->addError(array('EMPTY_FIELDS', $missing_fields)); + } + if (!$msg->containsErrors()) { + $tmp_message = _AT('from_atutor', $row['title'])."\n\n"; + $tmp_message .= $_POST['body']."\n\n"; + + if ($to_email != '') { + require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php'); + + $mail = new ATutorMailer; + + $mail->From = $_POST['from_email']; + $mail->FromName = $_POST['from']; + $mail->AddAddress($to_email); + $mail->Subject = $_POST['subject']; + $mail->Body = $tmp_message; + + if(!$mail->Send()) { + //echo 'There was an error sending the message'; + $msg->printErrors('SENDING_ERROR'); + exit; + } + + unset($mail); + + $msg->printFeedbacks('ACTION_COMPLETED_SUCCESSFULLY'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + } + } + +$msg->printErrors(); + +?> +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    :
    : ()
    :


    +
    +
    + + \ No newline at end of file diff --git a/users/course_properties.php b/users/course_properties.php new file mode 100644 index 000000000..05e097e20 --- /dev/null +++ b/users/course_properties.php @@ -0,0 +1,45 @@ +'; + if ($_SESSION['prefs'][PREF_CONTENT_ICONS] != 2) { + echo ' '; + } + if ($_SESSION['prefs'][PREF_CONTENT_ICONS] != 1) { + echo ''._AT('tools').''; + } +echo ''; + +echo '

    '; + if ($_SESSION['prefs'][PREF_CONTENT_ICONS] != 2) { + echo '  '; + } + if ($_SESSION['prefs'][PREF_CONTENT_ICONS] != 1) { + echo _AT('course_properties'); + } +echo '

    '; + +$msg->printAll(); + +require(AT_INCLUDE_PATH.'html/course_properties.inc.php'); + +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/users/course_stats.php b/users/course_stats.php new file mode 100644 index 000000000..bca9fc1f5 --- /dev/null +++ b/users/course_stats.php @@ -0,0 +1,224 @@ +printErrors('NOT_OWNER'); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } + $course_title = $row['title']; + $year = intval($_GET['year']); + $month = intval($_GET['month']); + + if ($month == 0) { + $month = date('m'); + $year = date('Y'); + } + + $days = array(); + $sql = "SELECT * FROM ".TABLE_PREFIX."course_stats WHERE course_id=$thiscourse AND MONTH(login_date)=$month AND YEAR(login_date)=$year ORDER BY login_date ASC"; + $result = mysql_query($sql, $db); + //$today = 1; /* we start on the 1st of the month */ + $max_total_logins = 0; + $min_total_logins = (int) 99999999; + $total_logins = 0; + + $empty = true; + while ($row = mysql_fetch_array($result)) { + $empty = false; + $row_day = substr($row['login_date'], 8, 2); + + if (substr($row_day, 0,1) == '0') { + $row_day = substr($row_day, 1, 1); + } + + while ($today < $row_day-1) { + $today++; + $days[$today] = array(0, 0); + $min_total_logins = 0; + } + + $today = $row_day; /* skip this day in the fill-in-the-blanks-loop */ + + $days[$row_day] = array($row['guests'], $row['members']); + + if ($max_total_logins < $row['guests']+$row['members']) { + $max_total_logins = $row['guests']+$row['members']; + } + + if ($min_total_logins > $row['guests']+$row['members']) { + $min_total_logins = $row['guests']+$row['members']; + } + + $total_logins += $row['guests']+$row['members']; + } + + /* add zeros to the end of the month, only if it isn't the current month */ + $now_month = date('m'); + $now_year = date('Y'); + if ( (($month < $now_month) && ($now_year == $year)) || ($now_year < $year) ) { + $today++; + while (checkdate($month, $today,$year)) { + $days[$today] = array(0, 0); + $today++; + } + } + $num_days = count($days); + + if ($total_logins > 0) { + $avg_total_logins = $total_logins/$num_days; + } else { + $avg_total_logins = 0; + } + + $block_height = 10; + $multiplyer_height = 5; /* should be multiples of 5 */ + + if ($month == 12) { + $next_month = 1; + $next_year = $year + 1; + } else { + $next_month = $month + 1; + $next_year = $year; + } + + if ($month == 1) { + $last_month = 12; + $last_year = $year - 1; + } else { + $last_month = $month - 1; + $last_year = $year; + } + +require(AT_INCLUDE_PATH.'header.inc.php'); + +$title = _AT('login_statistics', AT_date('%F', $month, AT_DATE_INDEX_VALUE ), $course_title); + +echo "

    ".$title."


    "; +?> + + + + +'; + echo ''; + echo ''; + echo '
    '; + echo ' '.AT_date('%F', $last_month, AT_DATE_INDEX_VALUE ); ?> | + | '; + echo AT_date('%F', $next_month, AT_DATE_INDEX_VALUE); ?>
    '._AT('no_month_data').'
    '; + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; + } +?> + + : + + + + + : + + + + + + : + + + + + : + + + + + + : + + + + + + $logins) { + $dd++; + echo ''; + + } while ($row = mysql_fetch_array($result)); +?> + + + + + +

    '.$logins[0].' '._AT('guests').' ('.($logins[0]+$logins[1]).' '._AT('total').')
    '.$logins[1].' '._AT('members').' ('.($logins[1]+$logins[0]).' '._AT('total').')
    '.$dd.' 
    0
    + + : <?php echo _AT('red_members'); ?> , + <?php echo _AT('blue_guests'); ?> . + + + + + + : + + + + + + + + + $logins) { + $counter++; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + if ($counter < $num_days) { + echo ''; + } + } +?> +
    '.$short_name.' '.$day.''.$logins[0].''.$logins[1].'
    + + + + + \ No newline at end of file diff --git a/users/create_course.php b/users/create_course.php new file mode 100644 index 000000000..c80a28c2f --- /dev/null +++ b/users/create_course.php @@ -0,0 +1,92 @@ +containsErrors()) { + $msg->addError('CREATE_NOPERM'); + } + + require(AT_INCLUDE_PATH.'header.inc.php'); + + if (defined('ALLOW_INSTRUCTOR_REQUESTS') && ALLOW_INSTRUCTOR_REQUESTS) { + $sql = "SELECT member_id FROM ".TABLE_PREFIX."instructor_approvals WHERE member_id=$_SESSION[member_id]"; + $result = mysql_query($sql, $db); + if (!($row = mysql_fetch_array($result))) : ?> +
    + +
    +
    +

    +
    + +
    +
    *

    + +
    + +
    + + +
    +
    +
    + +
    +
    +

    +
    +
    + +addFeedback('CANCELLED'); + header('Location: index.php'); + exit; +}else if (isset($_POST['form_course']) && $_POST['submit'] != '') { + $_POST['instructor'] = $_SESSION['member_id']; + + $errors = add_update_course($_POST); + + if ($errors !== FALSE) { + $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); + header('Location: '.AT_BASE_HREF.'bounce.php?course='.$addslashes($errors).SEP.'p='.urlencode('index.php')); + exit; + } + +} + +$onload = 'document.course_form.title.focus();'; + +require(AT_INCLUDE_PATH.'header.inc.php'); + +require(AT_INCLUDE_PATH.'html/course_properties.inc.php'); +require(AT_INCLUDE_PATH.'footer.inc.php'); +?> \ No newline at end of file diff --git a/users/email_change.php b/users/email_change.php new file mode 100644 index 000000000..e9a128130 --- /dev/null +++ b/users/email_change.php @@ -0,0 +1,139 @@ +printInfos($info); + require(AT_INCLUDE_PATH.'footer.inc.php'); + exit; +} + +if (isset($_POST['cancel'])) { + $msg->addFeedback('CANCELLED'); + Header('Location: profile.php'); + exit; +} + +if (!isset($_SESSION['token']) || !$_SESSION['token']) { + $_SESSION['token'] = md5(mt_rand()); +} + +if (isset($_POST['submit'])) { + + //get hidden password + if (strlen($_POST['form_password_hidden']) < 40) { //