├── .github └── workflows │ └── php.yml ├── .gitignore ├── README.md ├── css ├── content │ ├── board.css │ ├── board.mobile.css │ ├── searchall.css │ ├── user │ │ ├── message.css │ │ ├── message.mobile.css │ │ ├── notification.css │ │ ├── register.css │ │ ├── settings.css │ │ ├── view.css │ │ └── view.mobile.css │ └── util │ │ ├── chat.css │ │ ├── karaoke.css │ │ ├── lectureroom.css │ │ ├── outdoor.css │ │ └── schedule.css ├── converse │ ├── converse.css │ ├── converse.min.css │ ├── images │ │ ├── arrow.svg │ │ ├── bgbl.svg │ │ ├── bgtr.svg │ │ ├── bitcoin_qr_code.png │ │ ├── dark-arrow.svg │ │ ├── favicon.ico │ │ ├── header.jpg │ │ ├── overlay.png │ │ └── user.png │ └── theme.css ├── datetimepicker.css ├── font.css ├── fonticons │ └── fonts │ │ ├── icomoon.eot │ │ ├── icomoon.svg │ │ ├── icomoon.ttf │ │ └── icomoon.woff ├── fonts │ ├── register-demibold.eot │ ├── register-demibold.svg │ ├── register-demibold.ttf │ ├── register-demibold.woff │ ├── register-light.eot │ ├── register-light.svg │ ├── register-light.ttf │ ├── register-light.woff │ ├── sansation_regular.eot │ ├── sansation_regular.svg │ ├── sansation_regular.ttf │ └── sansation_regular.woff ├── new_screen.css └── owfont-regular.css ├── favicon.ico ├── fetch_kmla_announcements.php ├── fonts ├── owfont-regular.eot ├── owfont-regular.otf ├── owfont-regular.svg ├── owfont-regular.ttf └── owfont-regular.woff ├── icon ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── manifest.json ├── mstile-150x150.png └── safari-pinned-tab.svg ├── images ├── Apply2019.png ├── all_announce.png ├── all_gallery.png ├── all_pds.png ├── bamboozle-bg.png ├── bamboozle.png ├── bg-checker.png ├── big-logo-ad-2.png ├── big-logo-ad-lid.png ├── big-logo-ad-outdoor.png ├── big-logo-ad-outdoor2.png ├── big-logo-chuseok.png ├── big-logo-chuseok2.png ├── big-logo-default2.png ├── big-logo.png ├── big-logo.설말.backup.png ├── big-logo2.png ├── big-new-logo3.png ├── birthday.png ├── bkg.png ├── book-no-img.gif ├── bullet.gif ├── cancelbutton.gif ├── check-penalty-of-council.png ├── close.png ├── dasan-extend.jpg ├── dasan-extend.설날.backup.jpg ├── dasan.backup.png ├── docs.gif ├── food.png ├── forum-2.png ├── kmlacafe.png ├── kmlaonline-p-resize.png ├── kmlaonline-p.png ├── kmlaonline-w.png ├── kmlaonline.png ├── lectureroom.png ├── loading.gif ├── logo-inverse-autumn.png ├── logo-inverse-s.png ├── logo-inverse.png ├── logo-s.png ├── logo.png ├── logo.psd ├── logoCenter.png ├── logoc.gif ├── main_block_main.png ├── menubar-base.backup.png ├── menubar-base.png ├── menubar-hover.backup.png ├── menubar-hover.png ├── menubar-panel.png ├── movie.gif ├── next.png ├── no-book-img.gif ├── no-image.backup.png ├── no-image.png ├── no-profile.png ├── prev.png ├── searchall.png ├── sound.gif ├── speech-bubbles.png ├── unknown.gif └── upload.gif ├── index.ajax.php ├── index.direct.php ├── index.mobile.php ├── index.php ├── js ├── autobahn.js ├── content │ ├── admin.js │ ├── board.js │ ├── combine.php │ ├── combined.js │ ├── main.js │ ├── user │ │ ├── login.js │ │ ├── manage.js │ │ ├── message.js │ │ └── settings.js │ └── util │ │ ├── barbeque.js │ │ ├── chat.js │ │ ├── library.js │ │ ├── outdoor.js │ │ ├── schedule.js │ │ ├── student_guide.js │ │ └── test-notification.js ├── jquery.ticker.js ├── script.js └── select.js ├── lang └── ko-kr.php ├── nginx.conf ├── process.php ├── sass ├── _bootstrap-custom.scss ├── _bootstrap-variables.scss ├── gradients.scss ├── ie.scss ├── print.scss ├── screen.scss ├── square.scss ├── styles.scss └── test_screen.scss ├── src ├── content │ ├── 403.php │ ├── 404.php │ ├── admin.php │ ├── aprilfools.php │ ├── board.php │ ├── board │ │ ├── editor.php │ │ ├── list-all.php │ │ ├── list-mine.php │ │ ├── list-multi.php │ │ ├── list.php │ │ └── view.php │ ├── contacts.php │ ├── main.php │ ├── modules │ │ ├── article-list.php │ │ ├── birthday.php │ │ ├── court.php │ │ ├── gallery.php │ │ ├── library.php │ │ ├── menu.php │ │ ├── minjok-news.php │ │ ├── module.php │ │ ├── parcel.php │ │ └── weather.php │ ├── searchall.php │ ├── sitemap.php │ ├── template │ │ ├── barbeque_home.html │ │ ├── barbeque_list.html │ │ ├── barbeque_new.html │ │ ├── library_my_page.html │ │ ├── library_search.html │ │ ├── outdoor.html │ │ └── outdoor_print.html │ ├── user.php │ ├── user │ │ ├── login.php │ │ ├── logout.php │ │ ├── lost.php │ │ ├── manage.php │ │ ├── message.php │ │ ├── notification.php │ │ ├── register.php │ │ ├── resetpwd.php │ │ ├── settings.php │ │ ├── view.php │ │ └── welcome.php │ ├── util.php │ └── util │ │ ├── calendar.php │ │ ├── clear-attachments.php │ │ ├── create-survey.php │ │ ├── donation-book.php │ │ ├── donation-cloth.php │ │ ├── donation.php │ │ ├── important.php │ │ ├── karaoke.php │ │ ├── kmlaboard.php │ │ ├── lectureroom.php │ │ ├── library.php │ │ ├── outdoor.php │ │ └── schedule.php ├── header │ ├── below-header.php │ ├── menubar.php │ ├── upper-header.php │ └── userarea.php ├── lib.php ├── lib │ ├── OpenWeatherMap.php │ └── OpenWeatherMap │ │ ├── AbstractCache.php │ │ ├── CurrentWeather.php │ │ ├── Exception.php │ │ ├── Fetcher │ │ ├── CurlFetcher.php │ │ ├── FetcherInterface.php │ │ └── FileGetContentsFetcher.php │ │ ├── Forecast.php │ │ ├── History.php │ │ ├── Util │ │ ├── City.php │ │ ├── Sun.php │ │ ├── Temperature.php │ │ ├── Time.php │ │ ├── Unit.php │ │ ├── Weather.php │ │ └── Wind.php │ │ ├── WeatherForecast.php │ │ └── WeatherHistory.php ├── process │ ├── api │ │ └── food.php │ ├── board │ │ ├── delete.php │ │ ├── downvote.php │ │ ├── edit.php │ │ ├── report.php │ │ ├── reporters.php │ │ ├── unvote.php │ │ ├── upload.php │ │ ├── upvote.php │ │ └── write.php │ ├── check │ │ ├── admin.php │ │ ├── login.php │ │ ├── manage.php │ │ ├── register.php │ │ └── resetpwd.php │ ├── file │ │ ├── attach.php │ │ ├── attach_zip.php │ │ └── captcha.php │ ├── user │ │ ├── backuplayout.php │ │ ├── clearmessage.php │ │ ├── examplelayout.php │ │ ├── foodvote.php │ │ ├── getmessage.php │ │ ├── getmodule.php │ │ ├── getmoduledefaults.php │ │ ├── getmodulelite.php │ │ ├── getnotifications.php │ │ ├── imlogin.php │ │ ├── lost.php │ │ ├── message.php │ │ ├── nid.php │ │ ├── register.php │ │ ├── removemessage.php │ │ ├── resetlayout.php │ │ ├── restorelayout.php │ │ ├── savetheme.php │ │ ├── search.php │ │ ├── settings.php │ │ ├── statusmessage.php │ │ └── updatelayout.php │ └── util │ │ ├── allnotification.php │ │ ├── barbeque_delete.php │ │ ├── barbeque_my_list.php │ │ ├── barbeque_my_list_rep.php │ │ ├── barbeque_submit_new.php │ │ ├── barbeque_suggest_student.php │ │ ├── barbeque_suggest_teacher.php │ │ ├── create-survey.php │ │ ├── donation.php │ │ ├── important.php │ │ ├── karaoke.php │ │ ├── kmlaboard.php │ │ ├── lectureroom.php │ │ ├── library.php │ │ ├── library_api.php │ │ ├── library_delay.php │ │ ├── library_logged_in.php │ │ ├── library_login.php │ │ ├── library_submit_new.php │ │ ├── outdoor-basic.php │ │ ├── outdoor-stat.php │ │ ├── schedule.php │ │ └── test_notification.php ├── range.php ├── soreeengine │ ├── SoreeTools.php │ ├── Soreeboard.php │ ├── Soreecaptcha.php │ ├── Soreemember.php │ └── searchlib.php └── zipstream.php ├── swfupload ├── plugins │ ├── swfupload.cookies.js │ ├── swfupload.queue.js │ ├── swfupload.speed.js │ └── swfupload.swfobject.js ├── swfupload.js ├── swfupload.queue.js └── swfupload.swf ├── teacher ├── hjTool │ ├── HJBarbeque.php │ ├── HJTeacher.php │ ├── HJTools.php │ └── dbHandler.php └── lib.php └── theme ├── dev └── theme.css ├── mobile ├── birthday.png ├── bkg.png ├── dasan-extend.jpg ├── dasan.jpg ├── dasan.png ├── food.png ├── ic_location_web_site.png ├── kmlacafe.png ├── logo.png ├── logo.psd ├── main_block_main.png ├── menubar-base.png ├── menubar-hover.png ├── menubar-panel.png ├── search-mobile.png ├── section-header.png ├── sitemap-mobile.png ├── sitemap.png ├── theme.css └── top_bkg.png └── theme.php /.github/workflows/php.yml: -------------------------------------------------------------------------------- 1 | name: PHP Composer 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 8 | 9 | permissions: 10 | contents: read 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # data file 2 | data/ 3 | 4 | # configuration files 5 | src/db-config.php 6 | teacher/hjTool/config.php 7 | config/ 8 | 9 | # i dont know what is this.. 10 | /images/gongmo/ 11 | 12 | # sass files 13 | .sass-cache 14 | .sass-cache/* 15 | sass-compiled 16 | sass-compiled/* 17 | 18 | # Created by https://www.gitignore.io/api/linux,macos,windows 19 | # Edit at https://www.gitignore.io/?templates=linux,macos,windows 20 | 21 | ### Linux ### 22 | *~ 23 | 24 | # temporary files which can be created if a process still has a handle open of a deleted file 25 | .fuse_hidden* 26 | 27 | # KDE directory preferences 28 | .directory 29 | 30 | # Linux trash folder which might appear on any partition or disk 31 | .Trash-* 32 | 33 | # .nfs files are created when an open file is removed but is still being accessed 34 | .nfs* 35 | 36 | ### macOS ### 37 | # General 38 | .DS_Store 39 | .AppleDouble 40 | .LSOverride 41 | 42 | # Icon must end with two \r 43 | Icon 44 | 45 | # Thumbnails 46 | ._* 47 | 48 | # Files that might appear in the root of a volume 49 | .DocumentRevisions-V100 50 | .fseventsd 51 | .Spotlight-V100 52 | .TemporaryItems 53 | .Trashes 54 | .VolumeIcon.icns 55 | .com.apple.timemachine.donotpresent 56 | 57 | # Directories potentially created on remote AFP share 58 | .AppleDB 59 | .AppleDesktop 60 | Network Trash Folder 61 | Temporary Items 62 | .apdisk 63 | 64 | ### Windows ### 65 | # Windows thumbnail cache files 66 | Thumbs.db 67 | Thumbs.db:encryptable 68 | ehthumbs.db 69 | ehthumbs_vista.db 70 | 71 | # Dump file 72 | *.stackdump 73 | 74 | # Folder config file 75 | [Dd]esktop.ini 76 | 77 | # Recycle Bin used on file shares 78 | $RECYCLE.BIN/ 79 | 80 | # Windows Installer files 81 | *.cab 82 | *.msi 83 | *.msix 84 | *.msm 85 | *.msp 86 | 87 | # Windows shortcuts 88 | *.lnk 89 | 90 | # End of https://www.gitignore.io/api/linux,macos,windows 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # KMLA Online git repository # 2 | 3 | 큼온 git 저장소 4 | 5 | ## Linux 기초 Ref ## 6 | 7 | https://www.linode.com/docs/tools-reference/linux-system-administration-basics 8 | 9 | ## git pull 방법 ## 10 | 11 | ```bash 12 | cd /srv/http/kmla 13 | git pull 14 | ``` 15 | 16 | ## 서버 재부팅 후 할 것 정리 ## 17 | 18 | ```bash 19 | cd /srv/http/gems 20 | source ./init 21 | ./watch 22 | ``` 23 | 24 | 참 쉽죠? 25 | 26 | (이걸 안하면 .scss 파일이 컴파일 되지 않습니다) 27 | 28 | ## 서버 업데이트 방법 ## 29 | 30 | ```bash 31 | sudo pacman -Syu 32 | ``` 33 | 34 | ## ssl 인증서가 만기되었을 때 ## 35 | 36 | (이론적으로 절대로 만기되지 않겠지만) 37 | 38 | ```bash 39 | sudo certbot renew --email kmladotnet@gmail.com --agree-tos 40 | ``` 41 | 42 | ## mysql, nginx(/etc/nginx/nginx.conf) 등의 설정을 바꾼 후 ## 43 | 44 | 서비스를 재시작해야지 설정이 적용됩니다 45 | 46 | ```bash 47 | sudo systemctl restart mysqld 48 | sudo systemctl restart nginx 49 | ``` 50 | 51 | ## php 설정 (/etc/php/php.ini) 을 변경한 후 ## 52 | 53 | php-fpm, nginx의 서비스를 재시작해야 설정이 적용됩니다. 54 | 55 | ```bash 56 | sudo systemctl restart nginx 57 | sudo systemctl restart php-fpm 58 | ``` 59 | 60 | ## archlinux에서 새로운 패키지를 다운로드할 때 ## 61 | 62 | pacman 명령어 사용 하기 - 아래 링크 참조 63 | https://wiki.archlinux.org/index.php/Pacman 64 | 65 | ```bash 66 | sudo pacman -S pkgname 67 | ``` 68 | 69 | 70 | ## KMLA Online 멤버 관리 ## 71 | 72 | 자퇴생의 경우 로그인시 대기 알림이 뜨게 함. (/srv/http/kmla/board/user_pending_list 에서 'n_id.txt' 형태의 파일을 만들어 저장.) 73 | 74 | ## 급식 자동화 ## 75 | 76 | 급식 정보는 /scripts/food/data.json에서 가져옵니다. 이 정보는 cron에 의해 열흘에 한 번씩 갱신되며, 77 | data.json 파일은 /scripts/food 디렉토리에 있는 python, java 파일들에 의해 생성됩니다. 78 | 만약 급식이 갱신되지 않아 웹에서 보이지 않는다면 /scripts/food/update.sh 를 실행. 79 | ```bash 80 | /scripts/food/update.sh 81 | ``` 82 | cron 수정하기 83 | ```bash 84 | crontab -e 85 | ``` 86 | 자세한 정보는 /scripts/food/README.txt 참조! 87 | 88 | ## 기부물품 페이지 ## 89 | 기부물품 자동화 이후 기부물품과 관련된 데이터는 kmlaonline_donation_new 테이블에 저장됩니다. 90 | 페이지는 kmlaonline.net/util/donation-cloth, /util/donation-book 두 개로 나뉘어져 있습니다. 91 | 자동화 관련 파일들은 /scripts/donation/ 디렉토리에 있으며, 기부물품을 /scripts/donation/sample.xlsx에 나와있는 형식 그대로(엄격히!) 92 | 엑셀 파일에 입력해 /scripts/donation/ 디렉토리 안에 넣습니다. 그 뒤 /scripts/donation/insert.py 를 실행하면 데이터베이스에 자동으로 입력이 됩니다. 93 | 94 | -------------------------------------------------------------------------------- /css/content/searchall.css: -------------------------------------------------------------------------------- 1 | #found_results{ 2 | width:100%; 3 | } 4 | #found_results tr{ 5 | height:32px; 6 | } -------------------------------------------------------------------------------- /css/content/user/message.css: -------------------------------------------------------------------------------- 1 | #message_list{ 2 | float:left; 3 | width:320px; 4 | background:#EEE; 5 | border-bottom:1px dashed gray; 6 | } 7 | #message_list li{ 8 | display:block; 9 | padding:5px; 10 | border-top:1px dashed gray; 11 | cursor:pointer; 12 | } 13 | #message_list li.message_item{ 14 | height:74px; 15 | } 16 | #message_list li:hover{ 17 | background:White; 18 | } 19 | #message_list li .image{ 20 | width:64px; 21 | height:64px; 22 | float:left; 23 | margin-right:5px; 24 | } 25 | #message_list li .writer{ 26 | float:left; 27 | font-weight:Bold; 28 | } 29 | #message_list li .when{ 30 | float:right; 31 | } 32 | #message_list li .preview{ 33 | padding-top:6px; 34 | clear:right 35 | } 36 | #message_list li .actions{ 37 | padding-top:6px; 38 | clear:right 39 | } 40 | #message_main{ 41 | float:right; 42 | width:775px; 43 | } 44 | .user_list{ 45 | width:100%; 46 | } 47 | .user_list li{ 48 | display:block; 49 | border-bottom:1px dashed gray; 50 | padding-top:5px; 51 | padding-bottom:5px; 52 | text-align:center; 53 | background:#EEE; 54 | } 55 | .user_list li:hover{ 56 | background:white; 57 | } 58 | #id_finder{ 59 | clear:both; 60 | } 61 | #id_find_results{ 62 | width:100%; 63 | } 64 | #id_find_results li{ 65 | display:block; 66 | padding:5px; 67 | vertical-align:middle; 68 | } 69 | .div_message_item{ 70 | margin:5px; 71 | padding:5px; 72 | border:1px solid gray; 73 | } 74 | .sender-pic{ 75 | display:block; 76 | padding:10px; 77 | float:left; 78 | width:100px; 79 | height:100px; 80 | } 81 | .view_user{ 82 | float:left; 83 | font-weight:bold; 84 | } 85 | .view_time{ 86 | float:right; 87 | } 88 | .view_data{ 89 | padding-top:5px; 90 | clear:right; 91 | display:block; 92 | margin-left:120px; 93 | } -------------------------------------------------------------------------------- /css/content/user/message.mobile.css: -------------------------------------------------------------------------------- 1 | #message_list{ 2 | background:#EEE; 3 | border-bottom:1px dashed gray; 4 | } 5 | #message_list li{ 6 | display:block; 7 | padding:5px; 8 | border-top:1px dashed gray; 9 | cursor:pointer; 10 | } 11 | #message_list li.message_item{ 12 | height:74px; 13 | } 14 | #message_list li:hover{ 15 | background:White; 16 | } 17 | #message_list li .image{ 18 | width:64px; 19 | height:64px; 20 | float:left; 21 | margin-right:5px; 22 | } 23 | #message_list li .writer{ 24 | float:left; 25 | font-weight:Bold; 26 | } 27 | #message_list li .when{ 28 | float:right; 29 | } 30 | #message_list li .preview{ 31 | padding-top:6px; 32 | clear:right 33 | } 34 | #message_list li .actions{ 35 | padding-top:6px; 36 | clear:right 37 | } 38 | #message_main{ 39 | } 40 | .user_list{ 41 | width:100%; 42 | } 43 | .user_list li{ 44 | display:block; 45 | border-bottom:1px dashed gray; 46 | padding-top:5px; 47 | padding-bottom:5px; 48 | text-align:center; 49 | background:#EEE; 50 | } 51 | .user_list li:hover{ 52 | background:white; 53 | } 54 | #id_finder{ 55 | clear:both; 56 | } 57 | #id_find_results{ 58 | width:100%; 59 | } 60 | #id_find_results li{ 61 | display:block; 62 | padding:5px; 63 | vertical-align:middle; 64 | } 65 | .div_message_item{ 66 | margin:5px; 67 | padding:5px; 68 | border:1px solid gray; 69 | } 70 | .sender-pic{ 71 | display:block;padding:5px;float:left;width:64px;height:64px; 72 | } 73 | .view_user{ 74 | float:left; 75 | font-weight:bold; 76 | } 77 | .view_time{ 78 | float:right; 79 | } 80 | .view_data{ 81 | padding-top:5px; 82 | word-wrap:break-word; 83 | word-break:break-all; 84 | clear:both; 85 | display:block; 86 | } -------------------------------------------------------------------------------- /css/content/user/notification.css: -------------------------------------------------------------------------------- 1 | .big_notification{ 2 | display:block; 3 | width:100%; 4 | border-top:1px solid #EEE; 5 | } 6 | .big_notification li{ 7 | display:block; 8 | padding:5px; 9 | border-bottom:1px solid #EEE; 10 | cursor:pointer; 11 | } 12 | .big_notification li.new{ 13 | background:#DDF; 14 | } 15 | .big_notification li:hover{ 16 | background:#EEF; 17 | } 18 | .big_notification li a{ 19 | width:100%; 20 | height:100%; 21 | color:black; 22 | display:block; 23 | } -------------------------------------------------------------------------------- /css/content/user/register.css: -------------------------------------------------------------------------------- 1 | table.table-register-data tr{ 2 | height:42px; 3 | } 4 | -------------------------------------------------------------------------------- /css/content/user/settings.css: -------------------------------------------------------------------------------- 1 | ul#menusorter{ 2 | padding-left:15px; 3 | padding-top:6px; 4 | clear:both; 5 | } 6 | ul#menusorter li{ 7 | display:block; 8 | height:36px; 9 | position:relative; 10 | margin:0;padding:0; 11 | border:1px solid gray; 12 | background:white; 13 | } 14 | ul#menusorter li:not(:first-child){ 15 | border-top:none; 16 | } 17 | ul#menusorter div.handle{ 18 | display:block; 19 | position:absolute; 20 | left:0;top:0; 21 | width:24px; 22 | height:100%; 23 | cursor: grab; 24 | cursor: -moz-grab; 25 | cursor: -webkit-grab; 26 | } 27 | ul#menusorter div.handle:active{ 28 | cursor: grabbing; 29 | cursor: -moz-grabbing; 30 | cursor: -webkit-grabbing; 31 | } 32 | ul#menusorter div.remove{ 33 | display:block; 34 | position:absolute; 35 | right:0;top:0; 36 | width:24px; 37 | height:100%; 38 | line-height:36px; 39 | text-align:center; 40 | font-size:12pt; 41 | font-weight:bold; 42 | color:red; 43 | cursor: pointer; 44 | } 45 | ul#menusorter div.assigned{ 46 | position:absolute; 47 | left:32px;top:0; 48 | right:32px; 49 | height:100%; 50 | } 51 | ul#menusorter div.assigned-2{ 52 | position:absolute; 53 | left:64px;top:0; 54 | right:32px; 55 | height:100%; 56 | } -------------------------------------------------------------------------------- /css/content/user/view.css: -------------------------------------------------------------------------------- 1 | .userinfo_table{ 2 | border:2px solid gray !important; 3 | border-bottom:1px solid gray !important; 4 | } 5 | .userinfo_table th, 6 | .userinfo_table td{ 7 | padding:5px; 8 | border-bottom:1px solid gray; 9 | } 10 | .userinfo_table th{ 11 | width:240px; 12 | text-align:right; 13 | border-right:1px solid gray; 14 | } 15 | .userinfo_table td{ 16 | text-align:left; 17 | } 18 | .user_pic{ 19 | margin-right:12px; 20 | float:left; 21 | width:100px; 22 | height:100px; 23 | } 24 | .user_action{ 25 | float:right; 26 | display:block; 27 | text-align:right; 28 | } 29 | .user_basics{ 30 | margin-left:112px; 31 | } 32 | .user_info{ 33 | margin-left:112px; 34 | margin-right:12px; 35 | } 36 | .userinfo_table{ 37 | width:100%; 38 | box-sizing:border-box; 39 | } -------------------------------------------------------------------------------- /css/content/user/view.mobile.css: -------------------------------------------------------------------------------- 1 | .userinfo_table{ 2 | border:2px solid gray !important; 3 | border-bottom:1px solid gray !important; 4 | } 5 | .userinfo_table th, 6 | .userinfo_table td{ 7 | padding:5px; 8 | border-bottom:1px solid gray; 9 | } 10 | .userinfo_table th{ 11 | width:240px; 12 | text-align:right; 13 | border-right:1px solid gray; 14 | } 15 | .userinfo_table td{ 16 | text-align:left; 17 | } 18 | .user_pic{ 19 | float:left; 20 | width:100px; 21 | height:100px; 22 | margin: 23 | } 24 | .user_action{ 25 | margin-left:112px; 26 | } 27 | .user_basics{ 28 | margin-left:112px; 29 | } 30 | .user_info{ 31 | padding-top:12px; 32 | clear:both; 33 | } 34 | .userinfo_table{ 35 | width:100%; 36 | box-sizing:border-box; 37 | } -------------------------------------------------------------------------------- /css/content/util/chat.css: -------------------------------------------------------------------------------- 1 | .hidden { 2 | display: none; 3 | } 4 | 5 | #wrapper { 6 | width: 800px; 7 | margin: 0 auto; 8 | } 9 | 10 | #leave-room { 11 | margin-bottom: 10px; 12 | float: right; 13 | } 14 | 15 | #user-container { 16 | width: 500px; 17 | margin: 0 auto; 18 | text-align: center; 19 | } 20 | 21 | #main-container { 22 | width: 500px; 23 | margin: 0 auto; 24 | } 25 | 26 | #messages { 27 | height: 300px; 28 | width: 500px; 29 | border: 1px solid #ccc; 30 | padding: 20px; 31 | text-align: left; 32 | overflow-y: scroll; 33 | } 34 | 35 | #msg-container { 36 | padding: 20px; 37 | } 38 | 39 | #msg { 40 | width: 400px; 41 | } 42 | 43 | .user { 44 | font-weight: bold; 45 | } 46 | 47 | .msg { 48 | margin-bottom: 10px; 49 | overflow: hidden; 50 | line-height: 1.28; 51 | } 52 | 53 | .time { 54 | float: right; 55 | color: #939393; 56 | font-size: 13px; 57 | } 58 | 59 | .details { 60 | float: left; 61 | max-width: 250px; 62 | padding: 5px 8px 6px; 63 | } 64 | 65 | .text { 66 | display: block; 67 | color: #333; 68 | background: #efdac7; 69 | max-width: 250px; 70 | line-height: 1.5; 71 | word-break: break-word; 72 | padding: 5px 8px 1px; 73 | border-radius: 5%; 74 | } -------------------------------------------------------------------------------- /css/content/util/karaoke.css: -------------------------------------------------------------------------------- 1 | table#reservation_table { 2 | border-width: 1px; 3 | border-spacing: 2px; 4 | border-style: solid; 5 | border-color: gray; 6 | border-collapse: collapse; 7 | width:100%; 8 | } 9 | table#reservation_table th { 10 | border-width: 1px; 11 | padding: 4px; 12 | border-style: inset; 13 | border-color: gray; 14 | } 15 | table#reservation_table td { 16 | border-width: 1px; 17 | padding: 4px; 18 | border-style: inset; 19 | border-color: gray; 20 | } -------------------------------------------------------------------------------- /css/content/util/lectureroom.css: -------------------------------------------------------------------------------- 1 | table#reservation_table { 2 | border-width: 1px; 3 | border-spacing: 2px; 4 | border-style: solid; 5 | border-color: gray; 6 | border-collapse: collapse; 7 | width:100%; 8 | } 9 | table#reservation_table th { 10 | border-width: 1px; 11 | padding: 4px; 12 | border-style: inset; 13 | border-color: gray; 14 | } 15 | table#reservation_table td { 16 | border-width: 1px; 17 | padding: 4px; 18 | border-style: inset; 19 | border-color: gray; 20 | } -------------------------------------------------------------------------------- /css/content/util/outdoor.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | @print { 3 | margin-top: 2cm; 4 | margin-left: 1cm; 5 | margin-right: 1cm; 6 | } 7 | 8 | @media print { 9 | body { 10 | margin-top: 2cm; 11 | } 12 | } 13 | 14 | #bootstrap-overrides tbody { 15 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji; 16 | } 17 | 18 | #bootstrap-overrides td.sign { 19 | font-size: 0.8em; 20 | } 21 | 22 | #bootstrap-overrides td.bold { 23 | font-weight: bold !important; 24 | font-size: 1.1em !important; 25 | } 26 | 27 | #bootstrap-overrides td.print { 28 | border-color: black !important; 29 | border-width: 0.5px !important; 30 | } 31 | 32 | #bootstrap-overrides td.important { 33 | border-width: 2px !important; 34 | } 35 | 36 | #boostrap-overrides td.notouch { 37 | font-size: 0.8em !important; 38 | font-weight: bold !important; 39 | text-decoration: underline; 40 | } 41 | 42 | td.hide { 43 | color: white; 44 | } -------------------------------------------------------------------------------- /css/content/util/schedule.css: -------------------------------------------------------------------------------- 1 | a.nav-year{ 2 | display:block; 3 | padding:3px; 4 | color:#555; 5 | background:#DDF; 6 | text-align:center; 7 | } 8 | a.nav-year:hover{ 9 | background:white; 10 | color:black; 11 | } 12 | a.nav-month{ 13 | display:block; 14 | padding:3px; 15 | color:#555; 16 | background:#EEE; 17 | text-align:center; 18 | } 19 | a.nav-month:hover{ 20 | background:white; 21 | color:black; 22 | } 23 | table#calender{ 24 | width:100%; 25 | } 26 | table#calender th{ 27 | padding:12px; 28 | } 29 | table#calender td{ 30 | padding:0; 31 | height:120px; 32 | vertical-align:top; 33 | } 34 | table#calender td span.datename{ 35 | font-size:12pt; 36 | font-weight:bold; 37 | float:left; 38 | } 39 | table#calender td a.edit{ 40 | float:right; 41 | display:block; 42 | padding:2px; 43 | color:black; 44 | } 45 | table#calender td a.food{ 46 | float:right; 47 | display:block; 48 | padding:2px; 49 | color:black; 50 | } 51 | table#calender td div.divider{ 52 | height:1px; 53 | display:block; 54 | width:100%; 55 | clear:both; 56 | border-top:1px dashed #EEE; 57 | } 58 | table#calender th, 59 | table#calender td{ 60 | width:14.285714285714285714285714285714%; 61 | } 62 | -------------------------------------------------------------------------------- /css/converse/images/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /css/converse/images/bgbl.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /css/converse/images/bgtr.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /css/converse/images/bitcoin_qr_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/converse/images/bitcoin_qr_code.png -------------------------------------------------------------------------------- /css/converse/images/dark-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /css/converse/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/converse/images/favicon.ico -------------------------------------------------------------------------------- /css/converse/images/header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/converse/images/header.jpg -------------------------------------------------------------------------------- /css/converse/images/overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/converse/images/overlay.png -------------------------------------------------------------------------------- /css/converse/images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/converse/images/user.png -------------------------------------------------------------------------------- /css/datetimepicker.css: -------------------------------------------------------------------------------- 1 | /** 2 | * @license angular-bootstrap-datetimepicker 3 | * Copyright 2016 Knight Rider Consulting, Inc. http://www.knightrider.com 4 | * License: MIT 5 | */ 6 | .datetimepicker { 7 | border-radius: 4px; 8 | direction: ltr; 9 | display: block; 10 | margin-top: 1px; 11 | -webkit-user-select: none; 12 | -moz-user-select: none; 13 | -ms-user-select: none; 14 | user-select: none; 15 | width: 320px; 16 | } 17 | .datetimepicker > div { 18 | display: none; 19 | } 20 | .datetimepicker .hour, 21 | .datetimepicker .minute { 22 | height: 34px; 23 | line-height: 34px; 24 | margin: 0; 25 | width: 25%; 26 | } 27 | .datetimepicker .table { 28 | margin: 0; 29 | } 30 | .datetimepicker .table td, 31 | .datetimepicker .table th { 32 | border: 0; 33 | border-radius: 4px; 34 | height: 20px; 35 | text-align: center; 36 | } 37 | .datetimepicker .minute:hover, 38 | .datetimepicker .hour:hover, 39 | .datetimepicker .day:hover, 40 | .datetimepicker .switch:hover, 41 | .datetimepicker .left:hover, 42 | .datetimepicker .right:hover { 43 | background: #eee; 44 | cursor: pointer; 45 | } 46 | .datetimepicker .disabled, 47 | .datetimepicker .disabled:hover { 48 | background: none; 49 | color: #ebebeb; 50 | cursor: default; 51 | } 52 | .datetimepicker .active, 53 | .datetimepicker .active:hover, 54 | .datetimepicker .active.disabled, 55 | .datetimepicker .active.disabled:hover { 56 | background-color: #04c; 57 | background-image: linear-gradient(to bottom, #08c, #04c); 58 | background-repeat: repeat-x; 59 | border-color: #04c #04c #002a80; 60 | color: #fff; 61 | -webkit-filter: progid:dximagetransform.microsoft.gradient(startColorstr='#08c', endColorstr='#04c', GradientType=0); 62 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#08c', endColorstr='#04c', GradientType=0); 63 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); 64 | } 65 | .datetimepicker .current, 66 | .datetimepicker .current:hover, 67 | .datetimepicker .current.disabled, 68 | .datetimepicker .current.disabled:hover { 69 | background-color: #e5e5e5; 70 | } 71 | .datetimepicker .active:hover, 72 | .datetimepicker .active:hover:hover, 73 | .datetimepicker .active.disabled:hover, 74 | .datetimepicker .active.disabled:hover:hover, 75 | .datetimepicker .active:active, 76 | .datetimepicker .active:hover:active, 77 | .datetimepicker .active.disabled:active, 78 | .datetimepicker .active.disabled:hover:active, 79 | .datetimepicker .active.active, 80 | .datetimepicker .active:hover.active, 81 | .datetimepicker .active.disabled.active, 82 | .datetimepicker .active.disabled:hover.active, 83 | .datetimepicker .active.disabled, 84 | .datetimepicker .active:hover.disabled, 85 | .datetimepicker .active.disabled.disabled, 86 | .datetimepicker .active.disabled:hover.disabled, 87 | .datetimepicker td.active[disabled], 88 | .datetimepicker td.active:hover[disabled], 89 | .datetimepicker td.active.disabled[disabled], 90 | .datetimepicker td.active.disabled:hover[disabled], 91 | .datetimepicker span.active[disabled], 92 | .datetimepicker span.active:hover[disabled], 93 | .datetimepicker span.active.disabled[disabled], 94 | .datetimepicker span.active.disabled:hover[disabled] { 95 | background-color: #04c; 96 | } 97 | .datetimepicker span { 98 | border-radius: 4px; 99 | cursor: pointer; 100 | display: block; 101 | float: left; 102 | height: 54px; 103 | line-height: 54px; 104 | margin: 1%; 105 | width: 23%; 106 | } 107 | .datetimepicker span:hover { 108 | background: #eee; 109 | } 110 | .datetimepicker .past, 111 | .datetimepicker .future { 112 | color: #999; 113 | } 114 | 115 | /*# sourceMappingURL=datetimepicker.css.map */ 116 | -------------------------------------------------------------------------------- /css/fonticons/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonticons/fonts/icomoon.eot -------------------------------------------------------------------------------- /css/fonticons/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonticons/fonts/icomoon.ttf -------------------------------------------------------------------------------- /css/fonticons/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonticons/fonts/icomoon.woff -------------------------------------------------------------------------------- /css/fonts/register-demibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonts/register-demibold.eot -------------------------------------------------------------------------------- /css/fonts/register-demibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonts/register-demibold.ttf -------------------------------------------------------------------------------- /css/fonts/register-demibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonts/register-demibold.woff -------------------------------------------------------------------------------- /css/fonts/register-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonts/register-light.eot -------------------------------------------------------------------------------- /css/fonts/register-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonts/register-light.ttf -------------------------------------------------------------------------------- /css/fonts/register-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonts/register-light.woff -------------------------------------------------------------------------------- /css/fonts/sansation_regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonts/sansation_regular.eot -------------------------------------------------------------------------------- /css/fonts/sansation_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonts/sansation_regular.ttf -------------------------------------------------------------------------------- /css/fonts/sansation_regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/css/fonts/sansation_regular.woff -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/favicon.ico -------------------------------------------------------------------------------- /fetch_kmla_announcements.php: -------------------------------------------------------------------------------- 1 | \[([^\]]+):([^\]]+)\](.*?)
/sim', $f, $m, PREG_SET_ORDER)) { 6 | ?> 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 38 | 39 | 40 | 41 |
42 | 56 |
57 | 68 | 69 | 70 | 71 | ", "", $f); 74 | echo $f; 75 | } 76 | -------------------------------------------------------------------------------- /fonts/owfont-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/fonts/owfont-regular.eot -------------------------------------------------------------------------------- /fonts/owfont-regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/fonts/owfont-regular.otf -------------------------------------------------------------------------------- /fonts/owfont-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/fonts/owfont-regular.ttf -------------------------------------------------------------------------------- /fonts/owfont-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/fonts/owfont-regular.woff -------------------------------------------------------------------------------- /icon/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/icon/android-chrome-192x192.png -------------------------------------------------------------------------------- /icon/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/icon/android-chrome-512x512.png -------------------------------------------------------------------------------- /icon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/icon/apple-touch-icon.png -------------------------------------------------------------------------------- /icon/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #074275 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /icon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/icon/favicon-16x16.png -------------------------------------------------------------------------------- /icon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/icon/favicon-32x32.png -------------------------------------------------------------------------------- /icon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/icon/favicon.ico -------------------------------------------------------------------------------- /icon/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "icons": [ 4 | { 5 | "src": "/icon/android-chrome-192x192.png?v=XBrA5kwEdx", 6 | "sizes": "192x192", 7 | "type": "image/png" 8 | }, 9 | { 10 | "src": "/icon/android-chrome-512x512.png?v=XBrA5kwEdx", 11 | "sizes": "512x512", 12 | "type": "image/png" 13 | } 14 | ], 15 | "theme_color": "#074275", 16 | "background_color": "#074275", 17 | "display": "standalone" 18 | } -------------------------------------------------------------------------------- /icon/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/icon/mstile-150x150.png -------------------------------------------------------------------------------- /images/Apply2019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/Apply2019.png -------------------------------------------------------------------------------- /images/all_announce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/all_announce.png -------------------------------------------------------------------------------- /images/all_gallery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/all_gallery.png -------------------------------------------------------------------------------- /images/all_pds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/all_pds.png -------------------------------------------------------------------------------- /images/bamboozle-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/bamboozle-bg.png -------------------------------------------------------------------------------- /images/bamboozle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/bamboozle.png -------------------------------------------------------------------------------- /images/bg-checker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/bg-checker.png -------------------------------------------------------------------------------- /images/big-logo-ad-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-logo-ad-2.png -------------------------------------------------------------------------------- /images/big-logo-ad-lid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-logo-ad-lid.png -------------------------------------------------------------------------------- /images/big-logo-ad-outdoor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-logo-ad-outdoor.png -------------------------------------------------------------------------------- /images/big-logo-ad-outdoor2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-logo-ad-outdoor2.png -------------------------------------------------------------------------------- /images/big-logo-chuseok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-logo-chuseok.png -------------------------------------------------------------------------------- /images/big-logo-chuseok2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-logo-chuseok2.png -------------------------------------------------------------------------------- /images/big-logo-default2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-logo-default2.png -------------------------------------------------------------------------------- /images/big-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-logo.png -------------------------------------------------------------------------------- /images/big-logo.설말.backup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-logo.설말.backup.png -------------------------------------------------------------------------------- /images/big-logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-logo2.png -------------------------------------------------------------------------------- /images/big-new-logo3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/big-new-logo3.png -------------------------------------------------------------------------------- /images/birthday.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/birthday.png -------------------------------------------------------------------------------- /images/bkg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/bkg.png -------------------------------------------------------------------------------- /images/book-no-img.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/book-no-img.gif -------------------------------------------------------------------------------- /images/bullet.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/bullet.gif -------------------------------------------------------------------------------- /images/cancelbutton.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/cancelbutton.gif -------------------------------------------------------------------------------- /images/check-penalty-of-council.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/check-penalty-of-council.png -------------------------------------------------------------------------------- /images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/close.png -------------------------------------------------------------------------------- /images/dasan-extend.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/dasan-extend.jpg -------------------------------------------------------------------------------- /images/dasan-extend.설날.backup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/dasan-extend.설날.backup.jpg -------------------------------------------------------------------------------- /images/dasan.backup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/dasan.backup.png -------------------------------------------------------------------------------- /images/docs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/docs.gif -------------------------------------------------------------------------------- /images/food.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/food.png -------------------------------------------------------------------------------- /images/forum-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/forum-2.png -------------------------------------------------------------------------------- /images/kmlacafe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/kmlacafe.png -------------------------------------------------------------------------------- /images/kmlaonline-p-resize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/kmlaonline-p-resize.png -------------------------------------------------------------------------------- /images/kmlaonline-p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/kmlaonline-p.png -------------------------------------------------------------------------------- /images/kmlaonline-w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/kmlaonline-w.png -------------------------------------------------------------------------------- /images/kmlaonline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/kmlaonline.png -------------------------------------------------------------------------------- /images/lectureroom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/lectureroom.png -------------------------------------------------------------------------------- /images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/loading.gif -------------------------------------------------------------------------------- /images/logo-inverse-autumn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/logo-inverse-autumn.png -------------------------------------------------------------------------------- /images/logo-inverse-s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/logo-inverse-s.png -------------------------------------------------------------------------------- /images/logo-inverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/logo-inverse.png -------------------------------------------------------------------------------- /images/logo-s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/logo-s.png -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/logo.png -------------------------------------------------------------------------------- /images/logo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/logo.psd -------------------------------------------------------------------------------- /images/logoCenter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/logoCenter.png -------------------------------------------------------------------------------- /images/logoc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/logoc.gif -------------------------------------------------------------------------------- /images/main_block_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/main_block_main.png -------------------------------------------------------------------------------- /images/menubar-base.backup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/menubar-base.backup.png -------------------------------------------------------------------------------- /images/menubar-base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/menubar-base.png -------------------------------------------------------------------------------- /images/menubar-hover.backup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/menubar-hover.backup.png -------------------------------------------------------------------------------- /images/menubar-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/menubar-hover.png -------------------------------------------------------------------------------- /images/menubar-panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/menubar-panel.png -------------------------------------------------------------------------------- /images/movie.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/movie.gif -------------------------------------------------------------------------------- /images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/next.png -------------------------------------------------------------------------------- /images/no-book-img.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/no-book-img.gif -------------------------------------------------------------------------------- /images/no-image.backup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/no-image.backup.png -------------------------------------------------------------------------------- /images/no-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/no-image.png -------------------------------------------------------------------------------- /images/no-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/no-profile.png -------------------------------------------------------------------------------- /images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/prev.png -------------------------------------------------------------------------------- /images/searchall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/searchall.png -------------------------------------------------------------------------------- /images/sound.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/sound.gif -------------------------------------------------------------------------------- /images/speech-bubbles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/speech-bubbles.png -------------------------------------------------------------------------------- /images/unknown.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/unknown.gif -------------------------------------------------------------------------------- /images/upload.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/images/upload.gif -------------------------------------------------------------------------------- /index.ajax.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | "; 8 | if (isset($includes)) { 9 | foreach ($includes as $val) { 10 | if (substr($val, -4, 4) == ".css") echo ""; 11 | } 12 | } 13 | ?> 14 | 22 |
23 |
24 |
25 |
26 |
27 | 35 |
-------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | =8){ 3 | alert("항목을 9개 이상 추가할 수 없습니다."); 4 | return true; 5 | } 6 | return false; 7 | } 8 | function settings_menu_addCategory(title){ 9 | if(settings_menu_checkItemCount()) return; 10 | if($("#menusorter").find(".assigned").length>4)return alert("분류를 5개 이상 추가할 수 없습니다."); 11 | if(!title)title="분류 이름"; 12 | var li=$($("#menuCategoryForm").html().replaceAll("<%MENUNAME%>",htmlspecialchars(title))); 13 | li.fadeTo(0,0); 14 | li.fadeTo(800,1); 15 | $("#menusorter").append(li); 16 | scrollToMiddle(li.offset().top); 17 | flashObject(li,true); 18 | li.css("display",""); 19 | } 20 | function settings_menu_addSubItemWithValue(href,title){ 21 | if(settings_menu_checkItemCount()) return; 22 | if($("#menusorter").find(".assigned").length>7)return alert("하위 항목을 7개 이상 추가할 수 없습니다."); 23 | var li=$($("#menuItemForm").html().replaceAll("<%MENUNAME%>",htmlspecialchars(title)).replace("<%MENUACTION%>",htmlspecialchars(href))); 24 | li.fadeTo(0,0); 25 | li.fadeTo(800,1); 26 | $("#menusorter").append(li); 27 | scrollToMiddle(li.offset().top); 28 | flashObject(li,true); 29 | li.css("display",""); 30 | } 31 | function settings_menu_addSubItem(){ 32 | if(settings_menu_checkItemCount()) return; 33 | if($("#menusorter").find(".assigned").length>7)return alert("하위 항목을 7개 이상 추가할 수 없습니다."); 34 | $("#compactLinkSelector").css("display","block"); 35 | $.ajax({ 36 | type: "GET", 37 | url: "/sitemap?linkSelector", 38 | headers: { "x-content-only": "true" } 39 | }).done(function(msg) { 40 | var p=$("#compactLinkSelector"); 41 | p.empty(); 42 | var obj=$(msg).find("div#total-content"); 43 | obj.find('a').each(function(){ 44 | if(this.onclick || $(this).is('.clickbound') || this.href=="") return; 45 | $(this).off("click"); 46 | $(this).click(function(){ 47 | if(this.rel=="closenow"){ 48 | settings_menu_addSubItemWithValue("url:"+this.href,$(this).text()); 49 | return false; 50 | } 51 | }); 52 | }); 53 | obj.fadeTo(0,0); 54 | p.append(obj); 55 | obj.fadeTo(1000,1); 56 | }).fail(function(jqXHR, textStatus) { 57 | //alert( "페이지를 불러 오는 데 실패하였습니다" ); 58 | }); 59 | } 60 | function settings_menu_removeSelf(t){ 61 | if(confirm("정말로 이 항목을 제거하시겠습니까?")) 62 | $(t).parent().remove(); 63 | } 64 | function settings_menu_reload(lst,lst2){ 65 | $("#menusorter").children().remove(); 66 | for(var i=0;i 0) { 20 | d = f.children("li:first").height(); 21 | } 22 | f.animate({ 23 | top: "-=" + d + "px" 24 | }, 25 | e.speed, 26 | function () { 27 | a(this).children("li:first").remove(); 28 | a(this).css("top", "0px"); 29 | }); 30 | h.appendTo(f); 31 | }; 32 | moveDown = function (g, d, e) { 33 | if (e.isPaused) 34 | return; 35 | var f = g.children("ul"), 36 | h = f.children("li:last").clone(true); 37 | if (e.height > 0) d = f.children("li:first").height(); 38 | f.css("top", "-" + d + "px").prepend(h); 39 | f.animate({ 40 | top: 0 41 | }, 42 | e.speed, 43 | function () { 44 | a(this).children("li:last").remove(); 45 | }); 46 | }; 47 | return this.each(function () { 48 | var f = a(this), 49 | e = 0; 50 | f.css({ 51 | overflow: "hidden", 52 | }).children("ul").css({ 53 | position: "absolute", 54 | margin: 0, 55 | padding: 0 56 | }).children("li").css({ 57 | margin: 0 58 | }); 59 | if (b.height == 0) { 60 | f.children("ul").children("li").each(function () { 61 | if (a(this).height() > e) { 62 | e = a(this).height(); 63 | } 64 | }); 65 | f.children("ul").children("li").each(function () { 66 | a(this).height(e); 67 | }); 68 | f.height(e * b.showItems); 69 | } else { 70 | f.height(b.height); 71 | } 72 | var d = setInterval(function () { 73 | moveUp(f, e, b); 74 | }, 75 | b.pause); 76 | if (b.mousePause) { 77 | f.bind("mouseenter", function () { 78 | b.isPaused = true; 79 | }).bind("mouseleave", function () { 80 | b.isPaused = false; 81 | }); 82 | } 83 | }); 84 | }; 85 | }(jQuery)); 86 | -------------------------------------------------------------------------------- /nginx.conf: -------------------------------------------------------------------------------- 1 | error_page 404 /index.php?action=404; 2 | error_page 403 /index.php?action=403; 3 | 4 | location = /check { 5 | rewrite ^(.*)$ /process.php?actiontype=check last; 6 | } 7 | location /util { 8 | rewrite ^/util/([a-z0-9-_]+)$ /index.php?action=util&sub=$1 last; 9 | } 10 | location /user { 11 | rewrite ^/user/([A-Za-z0-9_]+)$ /index.php?action=user&sub=$1 last; 12 | rewrite ^/user/([A-Za-z0-9_]+)/([A-Za-z0-9_]+)$ /index.php?action=user&sub=$1&p1=$2 last; 13 | rewrite ^/user/([A-Za-z0-9_]+)/([A-Za-z0-9_]+)/([A-Za-z@._0-9]+)$ /index.php?action=user&sub=$1&p1=$2&p2=$3 last; 14 | } 15 | location /teacher/proc { 16 | rewrite ^/teacher/proc/([A-Za-z0-9_\-]+)$ /process.php?isteacher=yes&action=teacher&actiontype=$1 last; 17 | } 18 | location /teacher { 19 | rewrite ^/teacher/([A-Za-z0-9_]+)$ /index.php?action=teacher&action_type=$1 last; 20 | } 21 | location /searchall { 22 | rewrite ^/searchall/([0-9]+)$ /index.php?action=searchall&page=$1 last; 23 | } 24 | location = /searchall { 25 | rewrite ^(.*)$ /index.php?action=searchall last; 26 | } 27 | location /board { 28 | rewrite ^/board/([^/]*)$ /index.php?action=board&bid=$1&bact=list last; 29 | rewrite ^/board/(.*?)/page/([0-9]+)$ /index.php?action=board&bid=$1&bact=list&page=$2 last; 30 | rewrite ^/board/([A-Za-z0-9@:_\-]+)/([A-Za-z0-9_\-]+)$ /index.php?action=board&bid=$1&bact=$2 last; 31 | rewrite ^/board/([A-Za-z0-9@:_\-]+)/([A-Za-z0-9_\-]+)/([0-9]+)$ /index.php?action=board&bid=$1&bact=$2&bitm=$3 last; 32 | rewrite ^/board/([A-Za-z0-9@:_\-]+)/([A-Za-z0-9_\-]+)/([0-9]+)/([0-9]+)$ /index.php?action=board&bid=$1&bact=$2&bitm=$3&bcmt=$4 last; 33 | } 34 | location /ajax { 35 | rewrite ^/ajax/([a-z0-9_\-]+)/([a-z0-9_\-]+)$ /process.php?actiontype=$1&action=$2 last; 36 | } 37 | location /proc { 38 | rewrite ^/proc/([a-z0-9_\-]+)/([a-z0-9_\-]+)$ /process.php?actiontype=$1&action=$2 last; 39 | } 40 | location / { 41 | rewrite ^/((sitemap|contacts|admin|schedule|judicial))$ /index.php?action=$1 last; 42 | } 43 | location = /files/captcha/0.png { 44 | rewrite ^(.*)$ /process.php?actiontype=file&action=captcha last; 45 | } 46 | location /files { 47 | rewrite ^/files/captcha/([0-9]+).png$ /process.php?actiontype=file&action=captcha&renew last; 48 | rewrite ^/files/bbs/([0-9]+)/([0-9]+)/([0-9]+)/([a-z0-9_]+)/sizemode_([0-9]+)/([^/]+)$ /process.php?actiontype=file&action=attach&bid=$1&aid=$2&fid=$3&fkey=$4&fname=$6&mode=sizemode_$5 last; 49 | rewrite ^/files/bbs/([0-9]+)/([0-9]+)/([0-9]+)/([a-z0-9_]+)/force/([^/]+)$ /process.php?actiontype=file&action=attach&bid=$1&aid=$2&fid=$3&fkey=$4&fname=$5&mode=force last; 50 | rewrite ^/files/bbs/([0-9]+)/([0-9]+)/([0-9]+)/([a-z0-9_]+)/([^/]+)$ /process.php?actiontype=file&action=attach&bid=$1&aid=$2&fid=$3&fkey=$4&fname=$5&mode=normal last; 51 | rewrite ^/files/bbs/([0-9]+)/([0-9]+)/([^/]+).zip$ /process.php?actiontype=file&action=attach_zip&bid=$1&aid=$2 last; 52 | } 53 | location /api { 54 | rewrite ^/api/(.*)$ /process.php?actiontype=api&action=$1 last; 55 | } -------------------------------------------------------------------------------- /process.php: -------------------------------------------------------------------------------- 1 | 4 | * 5 | * */ 6 | -------------------------------------------------------------------------------- /sass/print.scss: -------------------------------------------------------------------------------- 1 | /* Welcome to Compass. Use this file to define print styles. 2 | * Import this file using the following HTML or equivalent: 3 | * */ 4 | -------------------------------------------------------------------------------- /sass/square.scss: -------------------------------------------------------------------------------- 1 | * { 2 | border-radius: 0; 3 | } -------------------------------------------------------------------------------- /sass/styles.scss: -------------------------------------------------------------------------------- 1 | // Import Bootstrap Compass integration 2 | @import "bootstrap-compass"; 3 | 4 | // Import Bootstrap for Sass 5 | @import "bootstrap-custom"; 6 | -------------------------------------------------------------------------------- /src/content/403.php: -------------------------------------------------------------------------------- 1 | 5 |

6 |

7 |
8 |
9 | 7 |

8 |

9 |
10 |
11 | 2 | listMembersBirth(date("n"), date("j")) as $val){ 6 | if($val['n_level']>=$minWave){ 7 | $births++; 8 | echo ""; 9 | echo "
"; 10 | putUserCard($val); 11 | echo "
"; 12 | echo "
"; 13 | } 14 | } 15 | if($births==0){ 16 | echo "생일인 재학생이 없습니다."; 17 | } 18 | ?> 19 | -------------------------------------------------------------------------------- /src/content/modules/court.php: -------------------------------------------------------------------------------- 1 | 7 |
"> 8 | -o" aria-hidden="true"> 9 |
10 |
11 | 12 | 이번 법정은 13 | "> 14 | 15 | 16 | 17 | 법정리스트 18 |
19 | 20 |
21 | ? 22 |
23 |
24 | 사법게시판 25 |
26 | getCategory(false,"all_gallery"); 5 | foreach($board->getArticleList(array($cat['n_id'])) as $ar){ 6 | foreach($board->getAttachments(false, $ar['n_id']) as $a){ 7 | $att[]=$a; 8 | } 9 | } 10 | $width=160; 11 | $i=0; 12 | ?> 13 |
14 |
15 |
16 | =24) break; ?> 17 |
18 | 19 | " style="width:160px;height:160px;" /> 20 | 21 |
22 | 23 |
24 |
25 |
26 | 29 | -------------------------------------------------------------------------------- /src/content/modules/library.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/content/modules/minjok-news.php: -------------------------------------------------------------------------------- 1 |
2 | \[([^\]]+):([^\]]+)\](.*?)
/sim', $f, $m, PREG_SET_ORDER)){ 5 | $length = count($m); 6 | for ($i = 0; $i < $length - 2; $i++) { 7 | $each = $m[$i]; 8 | 9 | $type=trim($each[1]); 10 | $date=trim($each[2]); 11 | $msg=str_replace('&nbsp;', '', htmlspecialchars(trim(strip_tags($each[3])), ENT_IGNORE)); 12 | echo "[$date] $type"; 13 | ?> 14 | 15 | 16 |
17 | 21 |
22 | -------------------------------------------------------------------------------- /src/content/modules/parcel.php: -------------------------------------------------------------------------------- 1 | 22 |
23 | ? 24 |
25 |
26 | 택배리스트 27 |
28 | 6 |
7 |
8 | lastUpdate->setTimeZone($ko_time)->add(DateInterval::createFromDateString('30 minutes'))->format('n월 j일 H시 기준'); 10 | ?> 11 |
12 | 13 |
14 | 15 | weather->id); 17 | ?> 18 |
19 |
20 | temperature; 22 | ?> 23 |
24 | 27 |
28 | 5 |
6 | 7 |

사이트맵

8 | array("전체",array()), 12 | "/^club_.*$/"=>array("동아리",array()), 13 | "/^department_.*$/"=>array("부서",array()), 14 | "/^student_.*$/"=>array("교내",array()), 15 | "/^(site_suggestions|login_candidates|login_approved|site_kmlacafe|site_notice)$/"=>array("큼라온라인", array()) 16 | ); 17 | for($i=intval(date("Y"))-1995;$i>=1;$i--) 18 | $cat["/^wave{$i}_.*$/"]=array("{$i}기 게시판",array()); 19 | foreach($board->getCategoryList(0,0) as $val){ 20 | if($val['n_id']==1) continue; 21 | if(checkCategoryAccess($val['n_id'], "list")){ 22 | $f=false; 23 | foreach($cat as $k=>$v){ 24 | if($k==="") continue; 25 | if(preg_match($k, $val['s_id'])){ 26 | $f=true; 27 | $cat[$k][1][]=$val; 28 | } 29 | } 30 | if($f===false) 31 | $cat[""][1][]=$val; 32 | } 33 | } 34 | $i=0; 35 | $cat2[]=array(); 36 | foreach($cat as $c){ 37 | $cat2[$i++]=$c; 38 | } 39 | $j=0; 40 | for($i=0;$i"; 45 | else 46 | echo "
"; 47 | if($j==1){ 48 | $i--; 49 | ?> 50 |

기능

51 | 연락망 52 |
53 | 공동강의실 신청 54 |
55 | 필수 공지 56 |
57 | 일정 58 |
59 | 큼라보드 60 |
61 | 전체에서 찾기 62 |
63 | 내 게시판 64 |
65 | 모든 게시판 66 |
67 | 내 알림 68 |
69 | 사용자 설정 70 |
71 | 게시판 등 관리 72 |
73 | ".$c[0].""; 76 | foreach($c[1] as $b){ 77 | echo "".htmlspecialchars($b['s_name'])."
"; 78 | } 79 | } 80 | echo "
"; 81 | } 82 | ?> 83 |
84 | 이번 달 마감 선생님 2 | -------------------------------------------------------------------------------- /src/content/template/barbeque_list.html: -------------------------------------------------------------------------------- 1 |

내가 신청한 바베큐 목록{{bbqRepList.length}}

2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
#제목인원날짜담당 교사행정실
{{$index + 1}}{{item.title}}{{item.student_list.split("|").length}}{{item.date}}{{item.teacher_name}}{{item.status == 300 ? "(승인)" : "(미승인)"}}
25 | 26 |

내가 참가할 바베큐 목록{{bbqList.length}}

27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
#제목인원날짜담당 교사행정실
{{$index + 1}}{{bbq.title}}{{bbq.student_list.split("|").length}}{{bbq.date}}{{bbq.teacher_name}}{{bbq.status == 300 ? "승인" : "미승인"}}
-------------------------------------------------------------------------------- /src/content/template/library_my_page.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | 7 | 11 |
12 |

대출 권수: {{output.bookNum}}권

13 |

로그인 에러: {{output.error_desc}}

14 | 15 |
16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
#도서명대출일반납일상태대출 연장
{{book.number}}{{book.borrow_date}}{{book.return_date}}{{book.status}}
39 |
-------------------------------------------------------------------------------- /src/content/template/library_search.html: -------------------------------------------------------------------------------- 1 |
2 |

도서 검색

3 |
4 |
5 | 6 | 7 |
8 |
9 |

선택한 도서 - 상세 정보

10 |
11 |

도서명: {{removeHTMLTags(selected.book.title)}}

12 |

저자: {{removeHTMLTags(authorRefined(selected.book.author))}}, 출판사: {{removeHTMLTags(selected.book.publisher)}}

13 |

출간연도: {{selected.book.pubdate.substring(0, 4)}}년

14 |

{{isAvailable(selected.book) ? '정가: ' + selected.book.price + '원' : '절판 등의 이유로 도서를 구매할 수 없습니다'}}

15 |
16 |
17 | 18 |
19 | 20 |
21 |
22 |
23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 41 | 42 | 43 |
#도서 이미지책 정보
{{$index + 1}}
44 |
-------------------------------------------------------------------------------- /src/content/user.php: -------------------------------------------------------------------------------- 1 | $v) unset($_SESSION[$k]); 7 | redirectTo((isset($_REQUEST['returnto']) && $_REQUEST['returnto']!="")?$_REQUEST['returnto']:"/"); -------------------------------------------------------------------------------- /src/content/user/notification.php: -------------------------------------------------------------------------------- 1 | getNotices($me['n_id'], 20); 5 | function printContent(){ 6 | global $member, $me, $board, $notices; 7 | //, $since_id=-1, $max_id=-1); 8 | ?> 9 |
10 | 11 | 12 |
13 |

알림

14 | 51 | 5 |
6 |

KMLA online에 가입하신 것을 환영합니다.

7 | 8 |
9 |
10 |
11 | 로그인하러 가기 12 |
13 | getAttachments() as $a){ 15 | unset($k[$a['s_path']]); 16 | } 17 | foreach($k as $fn=>$v){ 18 | echo $fn."
"; 19 | //unlink($fn); 20 | } 21 | //*/ 22 | } -------------------------------------------------------------------------------- /src/content/util/kmlaboard.php: -------------------------------------------------------------------------------- 1 | 7 |

큼라보드

8 |

9 | 0){ 12 | $dat=file_get_contents("data/kmlaboard.txt"); 13 | } 14 | if(isUserPermitted($me['n_id'], "kmlaboard_changer")){ 15 | ?> 16 |

17 | 19 | 20 |
21 | 22 | 28 | 33 |

34 | 9 |
10 |

도서부 Util {{submenu()}}

11 | 35 | 36 |
37 | 38 |
39 |
40 | 41 | -------------------------------------------------------------------------------- /src/content/util/outdoor.php: -------------------------------------------------------------------------------- 1 | 8 |
9 |

외출 외박 신청서 작성

10 |
11 |
12 | 16 |

작성을 완료하고 수정 모드를 해제하세요. (필수 항목 * 을 모두 체크해야 인쇄할 수 있습니다.)

17 |
18 |
19 | 20 |
21 |
22 | 23 |
24 | -------------------------------------------------------------------------------- /src/header/below-header.php: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 | getNoticeCount($me['n_id']); 7 | if ($notic == 0) { 8 | echo 'KMLAONLINE KMLA Online'; 9 | } else { 10 | echo 'KMLAONLINE ' . $notic . ' 알림'; 11 | } 12 | 13 | ?> 14 | 15 | " class="userinfo"> 16 | 19 | 22 | 23 | 26 | 27 | 28 | 30 | 31 | 32 | 33 | 34 |
35 |
36 | 38 |
39 | 40 |
41 |
42 | 43 |
44 | 46 | 49 |
50 | 53 |
54 |
55 |
56 | -------------------------------------------------------------------------------- /src/header/upper-header.php: -------------------------------------------------------------------------------- 1 |
2 | 0) { ?> 3 |
4 |
5 |
/sitemap
6 |
7 |
8 |
9 |
10 |
11 |
12 |
/contacts
13 |
14 |
15 |
16 |
17 | 18 |
-------------------------------------------------------------------------------- /src/header/userarea.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 14 | 34 | 35 |
8 | 9 | " data-toggle="lightbox"> 10 | 11 | 12 | 13 | 15 |
16 | 17 |
18 |
20 | 23 | 26 |
모든글 27 | 0) { ?> | 28 | 29 |
30 | 31 | 32 |
33 |
36 |
37 | 38 |
39 |
40 |
41 |
42 | 43 | 44 | 45 |
46 |
47 | seconds = $seconds; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/Exception.php: -------------------------------------------------------------------------------- 1 | curlOptions = $curlOptions; 41 | } 42 | 43 | /** 44 | * {@inheritdoc} 45 | */ 46 | public function fetch($url) 47 | { 48 | $ch = curl_init($url); 49 | curl_setopt($ch, CURLOPT_URL, $url); 50 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 51 | curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 52 | curl_setopt_array($ch, $this->curlOptions); 53 | 54 | $content = curl_exec($ch); 55 | curl_close($ch); 56 | 57 | return $content; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/Fetcher/FetcherInterface.php: -------------------------------------------------------------------------------- 1 | city = new City($xml->city['id'], $xml->city['name'], $xml->city->coord['lon'], $xml->city->coord['lat'], $xml->city->country); 50 | 51 | if ($units == 'metric') { 52 | $temperatureUnit = "°C"; 53 | } else { 54 | $temperatureUnit = 'F'; 55 | } 56 | 57 | $xml->temperature['value'] = ($xml->temperature['max'] + $xml->temperature['min']) / 2; 58 | 59 | $this->temperature = new Temperature(new Unit($xml->temperature['value'], $temperatureUnit), new Unit($xml->temperature['min'], $temperatureUnit), new Unit($xml->temperature['max'], $temperatureUnit), new Unit($xml->temperature['day'], $temperatureUnit), new Unit($xml->temperature['morn'], $temperatureUnit), new Unit($xml->temperature['eve'], $temperatureUnit), new Unit($xml->temperature['night'], $temperatureUnit)); 60 | $this->humidity = new Unit($xml->humidity['value'], $xml->humidity['unit']); 61 | $this->pressure = new Unit($xml->pressure['value'], $xml->pressure['unit']); 62 | 63 | // This is kind of a hack, because the units are missing in the xml document. 64 | if ($units == 'metric') { 65 | $windSpeedUnit = 'm/s'; 66 | } else { 67 | $windSpeedUnit = 'mps'; 68 | } 69 | 70 | $this->wind = new Wind(new Unit($xml->windSpeed['mps'], $windSpeedUnit, $xml->windSpeed['name']), new Unit($xml->windDirection['value'], $xml->windDirection['code'], $xml->windDirection['name'])); 71 | $this->clouds = new Unit($xml->clouds['all'], $xml->clouds['unit'], $xml->clouds['value']); 72 | $this->precipitation = new Unit($xml->precipitation['value'], null, $xml->precipitation['type']); 73 | $this->sun = new Sun(new \DateTime($xml->city->sun['rise']), new \DateTime($xml->city->sun['set'])); 74 | $this->weather = new WeatherObj($xml->symbol['number'], $xml->symbol['name'], $xml->symbol['var']); 75 | $this->lastUpdate = new \DateTime($xml->lastupdate['value']); 76 | 77 | if (isset($xml['from'])) { 78 | $this->time = new Time($xml['from'], $xml['to']); 79 | } else { 80 | $this->time = new Time($xml['day']); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/History.php: -------------------------------------------------------------------------------- 1 | city = $city; 95 | $this->weather = new Weather($weather['id'], $weather['description'], $weather['icon']); 96 | $this->temperature = new Temperature(new Unit($temperature['now'] - 273.15, "\xB0C"), new Unit($temperature['min'] - 273.15, "\xB0C"), new Unit($temperature['max'] - 273.15, "\xB0C")); 97 | $this->pressure = new Unit($pressure, 'kPa'); 98 | $this->humidity = new Unit($humidity, '%'); 99 | $this->clouds = new Unit($clouds, '%'); 100 | $this->precipitation = new Unit($rain['val'], $rain['unit']); 101 | $this->wind = new Wind(new Unit($wind['speed']), new Unit($wind['deg'])); 102 | $this->time = $time; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/Util/City.php: -------------------------------------------------------------------------------- 1 | id = (int)$id; 70 | $this->name = isset($name) ? (string)$name : null; 71 | $this->lon = isset($lon) ? (float)$lon : null; 72 | $this->lat = isset($lat) ? (float)$lat : null; 73 | $this->country = isset($country) ? (string)$country : null; 74 | $this->population = isset($population) ? (int)$population : null; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/Util/Sun.php: -------------------------------------------------------------------------------- 1 | rise = $rise; 50 | $this->set = $set; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/Util/Time.php: -------------------------------------------------------------------------------- 1 | format('Y-m-d')); 54 | } else { 55 | $from = ($from instanceof \DateTime) ? $from : new \DateTime((string)$from); 56 | $day = clone $from; 57 | $to = clone $from; 58 | $to = $to->add(new \DateInterval('PT23H59M59S')); 59 | } 60 | 61 | $this->from = $from; 62 | $this->to = $to; 63 | $this->day = $day; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/Util/Unit.php: -------------------------------------------------------------------------------- 1 | value = (float)$value; 58 | $this->unit = (string)$unit; 59 | $this->description = (string)$description; 60 | } 61 | 62 | /** 63 | * Get the value as formatted string with unit. 64 | * 65 | * @return string The value as formatted string with unit. 66 | * 67 | * The unit is not included if it is empty. 68 | */ 69 | public function __toString() 70 | { 71 | return $this->getFormatted(); 72 | } 73 | 74 | /** 75 | * Get the value's unit. 76 | * 77 | * @return string The value's unit. 78 | * 79 | * This also converts 'celsius' to '°C' and 'fahrenheit' to 'F'. 80 | */ 81 | public function getUnit() 82 | { 83 | // Units are inconsistent. Only celsius and fahrenheit are not abbreviated. This check fixes that. 84 | // Also, the API started to return "metric" as temperature unit recently. Also fix that. 85 | if ($this->unit == 'celsius' || $this->unit == 'metric') { 86 | return "°C"; 87 | } elseif ($this->unit == 'fahrenheit') { 88 | return 'F'; 89 | } else { 90 | return $this->unit; 91 | } 92 | } 93 | 94 | /** 95 | * Get the value. 96 | * 97 | * @return float The value. 98 | */ 99 | public function getValue() 100 | { 101 | return $this->value; 102 | } 103 | 104 | /** 105 | * Get the value's description. 106 | * 107 | * @return string The value's description. 108 | */ 109 | public function getDescription() 110 | { 111 | return $this->description; 112 | } 113 | 114 | /** 115 | * Get the value as formatted string with unit. 116 | * 117 | * @return string The value as formatted string with unit. 118 | * 119 | * The unit is not included if it is empty. 120 | */ 121 | public function getFormatted() 122 | { 123 | if ($this->getUnit() != "") { 124 | return $this->getValue() . " " . $this->getUnit(); 125 | } else { 126 | return (string)$this->getValue(); 127 | } 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/Util/Weather.php: -------------------------------------------------------------------------------- 1 | id = (int)$id; 59 | $this->description = (string)$description; 60 | $this->icon = (string)$icon; 61 | } 62 | 63 | /** 64 | * Get the weather description. 65 | * 66 | * @return string 67 | */ 68 | public function __toString() 69 | { 70 | return $this->description; 71 | } 72 | 73 | /** 74 | * Get the icon url. 75 | * 76 | * @return string The icon url. 77 | */ 78 | public function getIconUrl() 79 | { 80 | return str_replace("%s", $this->icon, $this->iconUrl); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/Util/Wind.php: -------------------------------------------------------------------------------- 1 | speed = $speed; 46 | $this->direction = $direction; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/WeatherForecast.php: -------------------------------------------------------------------------------- 1 | getWeather(). 26 | * 27 | * @see Cmfcmf\OpenWeatherMap::getWeather() The function using it. 28 | */ 29 | class WeatherForecast implements \Iterator 30 | { 31 | /** 32 | * A city object. 33 | * 34 | * @var Util\City 35 | */ 36 | public $city; 37 | 38 | /** 39 | * A sun object 40 | * 41 | * @var Util\Sun 42 | */ 43 | public $sun; 44 | 45 | /** 46 | * The time of the last update of this weather data. 47 | * 48 | * @var \DateTime 49 | */ 50 | public $lastUpdate; 51 | 52 | /** 53 | * An array of {@link Forecast} objects. 54 | * 55 | * @var Forecast[] 56 | * 57 | * @see Forecast The Forecast class. 58 | */ 59 | private $forecasts; 60 | 61 | /** 62 | * @internal 63 | */ 64 | private $position = 0; 65 | 66 | /** 67 | * Create a new Forecast object. 68 | * 69 | * @param $xml 70 | * @param string $units 71 | * @param int $days How many days of forecast to receive. 72 | * 73 | * @internal 74 | */ 75 | public function __construct($xml, $units, $days) 76 | { 77 | $this->city = new City(-1, $xml->location->name, $xml->location->location['longitude'], $xml->location->location['latitude'], $xml->location->country); 78 | $this->sun = new Sun(new \DateTime($xml->sun['rise']), new \DateTime($xml->sun['set'])); 79 | $this->lastUpdate = new \DateTime($xml->meta->lastupdate); 80 | 81 | $counter = 0; 82 | foreach ($xml->forecast->time as $time) { 83 | $forecast = new Forecast($time, $units); 84 | $forecast->city = $this->city; 85 | $this->forecasts[] = $forecast; 86 | 87 | $counter++; 88 | // Make sure to only return the requested number of days. 89 | if ($days <= 5 && $counter == $days * 8) { 90 | break; 91 | } elseif ($days > 5 && $counter == $days) { 92 | break; 93 | } 94 | } 95 | } 96 | 97 | /** 98 | * @internal 99 | */ 100 | public function rewind() 101 | { 102 | $this->position = 0; 103 | } 104 | 105 | /** 106 | * @internal 107 | */ 108 | public function current() 109 | { 110 | return $this->forecasts[$this->position]; 111 | } 112 | 113 | /** 114 | * @internal 115 | */ 116 | public function key() 117 | { 118 | return $this->position; 119 | } 120 | 121 | /** 122 | * @internal 123 | */ 124 | public function next() 125 | { 126 | ++$this->position; 127 | } 128 | 129 | /** 130 | * @internal 131 | */ 132 | public function valid() 133 | { 134 | return isset($this->forecasts[$this->position]); 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /src/lib/OpenWeatherMap/WeatherHistory.php: -------------------------------------------------------------------------------- 1 | city = new OpenWeatherMap\Util\City($weatherHistory['city_id'], (is_string($query)) ? $query : null, (isset($query['lon'])) ? $query['lon'] : null, (isset($query['lat'])) ? $query['lat'] : null, $country, $population); 66 | $this->calctime = $weatherHistory['calctime']; 67 | 68 | foreach ($weatherHistory['list'] as $history) { 69 | if (isset($history['rain'])) { 70 | $units = array_keys($history['rain']); 71 | } else { 72 | $units = array(0 => null); 73 | } 74 | 75 | $this->histories[] = new History($this->city, $history['weather'][0], array('now' => $history['main']['temp'], 'min' => $history['main']['temp_min'], 'max' => $history['main']['temp_max']), $history['main']['pressure'], $history['main']['humidity'], $history['clouds']['all'], isset($history['rain']) ? array('val' => $history['rain'][($units[0])], 'unit' => $units[0]) : null, $history['wind'], \DateTime::createFromFormat('U', $history['dt'])); 76 | } 77 | } 78 | 79 | /** 80 | * @internal 81 | */ 82 | public function rewind() 83 | { 84 | $this->position = 0; 85 | } 86 | 87 | /** 88 | * @internal 89 | */ 90 | public function current() 91 | { 92 | return $this->histories[$this->position]; 93 | } 94 | 95 | /** 96 | * @internal 97 | */ 98 | public function key() 99 | { 100 | return $this->position; 101 | } 102 | 103 | /** 104 | * @internal 105 | */ 106 | public function next() 107 | { 108 | ++$this->position; 109 | } 110 | 111 | /** 112 | * @internal 113 | */ 114 | public function valid() 115 | { 116 | return isset($this->histories[$this->position]); 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /src/process/api/food.php: -------------------------------------------------------------------------------- 1 | = 22) $foodTime = 'breakfast'; 14 | elseif($h >= 8 && $h < 13) $foodTime = 'lunch'; 15 | else $foodTime = 'dinner'; 16 | if($h >= 22) { 17 | $y = date('Y', $t + 60 * 60 * 24); 18 | $m = date('n', $t + 60 * 60 * 24); 19 | $d = date('j', $t + 60 * 60 * 24); 20 | } 21 | } 22 | 23 | $query = "SELECT s_mode, s_data FROM kmlaonline_schedule_table WHERE n_year=$y AND n_month=$m AND n_day=$d"; 24 | $foodData = array(); 25 | $foodData['year'] = $y; 26 | $foodData['month'] = $m; 27 | $foodData['date'] = $d; 28 | if(isset($foodTime)) { 29 | $foodData['food'] = $foodTime; 30 | } 31 | if($res = $mysqli->query($query)){ 32 | while ($row = $res->fetch_array(MYSQLI_ASSOC)) { 33 | if(substr($row['s_mode'], 0, 4) === 'food') { 34 | $foodTime = 'error'; 35 | switch(substr($row['s_mode'], 5)) { 36 | case 0: $foodTime = 'breakfast'; 37 | break; 38 | case 1: $foodTime = 'lunch'; 39 | break; 40 | case 2: $foodTime = 'dinner'; 41 | break; 42 | } 43 | $foodData[$foodTime] = $row['s_data']; 44 | } 45 | } 46 | $res->close(); 47 | if($mysqli->more_results()) $mysqli->next_result(); 48 | } 49 | echo json_encode($foodData); 50 | -------------------------------------------------------------------------------- /src/process/board/delete.php: -------------------------------------------------------------------------------- 1 | 6 |
7 | $val){ 9 | if(is_array($val)){ 10 | foreach($val as $val2){ 11 | $val2=htmlspecialchars($val2); 12 | echo ""; 13 | } 14 | }else{ 15 | $val=htmlspecialchars($val); 16 | echo ""; 17 | } 18 | } 19 | ?> 20 | 21 | 22 |
23 | 24 | getArticle($_POST['n_id']); 30 | if($article==false) 31 | $errors["n_id"]=lang("board","article","nonexist"); 32 | else if(($article["n_writer"]!=$me['n_id']) && !checkCategoryAccess($article['n_cat'], "manage modify")) 33 | $errors["n_id"]=lang("board","article","notmine"); 34 | } 35 | if(count($errors)==0){ 36 | $cat=$board->getCategory($article['n_cat']); 37 | if($board->removeArticle($article['n_id'])===false) 38 | ajaxDie(array(), lang("generic","unknown error")); 39 | } 40 | if(count($errors)>0){ 41 | if(isAjax()){ 42 | ajaxDie($errors); 43 | }else 44 | redirectWith("redirWithBody",$errors); 45 | }else{ 46 | if($article['n_parent']){ 47 | $top=$article; 48 | while($top['n_parent']){ $top=$board->getArticle($top['n_parent']); } 49 | $new_location="/board/{$cat['s_id']}/view/{$top['n_id']}"; 50 | }else 51 | $new_location="/board/{$cat['s_id']}"; 52 | if(isAjax()){ 53 | ajaxOk(array(), $new_location); 54 | }else{ 55 | redirectTo($new_location); 56 | } 57 | } -------------------------------------------------------------------------------- /src/process/board/downvote.php: -------------------------------------------------------------------------------- 1 | "파일 크기가 너무 큽니다."))); 5 | $file_path="data/temp/"; 6 | @$mkdir = mkdir($file_path,0777,true); 7 | $file_real_name=sanitizeFileName(@end(explode('/', $_FILES['Filedata']['name']))); 8 | $fn=uniqid("up_",true); 9 | $rfile=$file_path.$fn; 10 | //debug 11 | $debug = print_r($_FILES, true); 12 | $debug_error = print_r($_FILES['Filedata']['error'], true); 13 | //debug 14 | if(move_uploaded_file($_FILES['Filedata']['tmp_name'], $rfile) === false){ 15 | die(json_encode(array("error"=>"알 수 없는 오류가 발생하였습니다.", "debug_rfile"=>$rfile, "ini_get"=>ini_get('upload_tmp_dir'), "debug_tmp_name"=>$_FILES['Filedata']['tmp_name'], "debug_file"=>$debug, "mkdir"=>$mkdir))); 16 | }else 17 | echo json_encode(array( 18 | "error"=>0, 19 | "filename"=>"/".$file_path.rawurlencode($fn), 20 | "disp_filename"=>$file_real_name 21 | )); 22 | if ($dh = opendir($file_path)) { 23 | while (($file = readdir($dh)) !== false) { 24 | if(str_replace(".","",$file)=="") continue; 25 | if(filemtime($file_path . $file)+86400getCategoryActionList()); 13 | foreach($perms as $key=>$val){ $perms[$key]=0; } 14 | do{ 15 | $tmp=$board->getCategoryPermissionList($_GET['cat']); 16 | if($tmp!==false) $perms=array_merge($perms,$tmp); 17 | if($_GET['level']=='all') break; 18 | $tmp=$board->getLevelPermissionList($_GET['cat'],$_GET['level']); 19 | if($tmp!==false) $perms=array_merge($perms,$tmp); 20 | if($_GET['level']!="user") break; 21 | $tmp=$board->getUserPermissionList($_GET['cat'], $_GET['user']); 22 | if($tmp!==false) $perms=array_merge($perms,$tmp); 23 | }while(0); 24 | if($perms===false) 25 | ajaxDie(array(), lang("board","category","nonexist")); 26 | ajaxOk($perms); 27 | break; 28 | } 29 | break; 30 | } 31 | }else{ 32 | switch($_POST['manage_act']){ 33 | case 'category': 34 | switch($_POST['cat_act']){ 35 | case 'edit': 36 | foreach($board->getCategoryList() as $val){ 37 | if(false===checkCategoryAccess($val['n_id'],"manage permission")) continue; 38 | if($val['n_id']==1) continue; 39 | if(isset($_POST['cat_edit_'.$val['n_id']])){ 40 | $s_name=$_POST['cat_edit_'.$val['n_id']."_s_name"]; 41 | $s_desc=$_POST['cat_edit_'.$val['n_id']."_s_desc"]; 42 | $n_type=$_POST['cat_edit_'.$val['n_id']."_type"]; 43 | $board->editCategory($val['n_id'], false, $s_name, $s_desc, $n_type); 44 | } 45 | } 46 | ajaxOk(array(), false, lang("generic","tried")); 47 | break; 48 | case 'edit_default_permission': 49 | $cat=$_POST['what']; 50 | if(false===checkCategoryAccess($cat,"manage permission")){ 51 | ajaxDie(array(), lang("board","category","no manage")); 52 | }else{ 53 | foreach($board->getCategoryActionList() as $action){ 54 | $pname="b_allow_$action"; 55 | if(!isset($_POST[$pname])) $_POST[$pname]=0; 56 | if($_POST['n_permission_type']=="category"){ 57 | if($_POST['n_level']=='all'){ 58 | $board->setCategoryPermission($cat, $action, $_POST[$pname]); 59 | }else{ 60 | $board->setLevelPermission($cat, $action, $_POST['n_level'], $_POST[$pname]); 61 | } 62 | }else{ 63 | $board->setUserPermission($cat, $action, $_POST['n_user'], $_POST[$pname]); 64 | } 65 | } 66 | ajaxOk(array(), false, lang("generic","tried")); 67 | } 68 | break; 69 | } 70 | break; 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/process/check/register.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/process/check/resetpwd.php: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/process/file/attach.php: -------------------------------------------------------------------------------- 1 | getAttachments($_GET['fid'], $_GET['aid'], $_GET['fkey'], $_GET['fname'], true); 8 | $article=$board->getArticle($_GET['aid']); 9 | $err=false; 10 | if($finfo===false || $article===false || count($finfo)==0) $err=true; 11 | if(!$err){ 12 | $finfo=$finfo[0]; 13 | // TODO: Check if public file 14 | if(!checkCategoryAccess($article['n_cat'], "attach download")) die403(); 15 | if($article['n_cat']!=$_GET['bid']) $err=true; 16 | //if($finfo['s_name']!=$_GET['fname']) $err=true; 17 | } 18 | if($err){ 19 | die404(); 20 | }else{ 21 | if(false && !doesAdminBypassEverythingAndIsAdmin(checkCategoryAccess($article['n_cat'], "attach download"))){ // Allow download even without session... 22 | die403(); 23 | }else{ 24 | $path=$finfo['s_path']; 25 | $fn=$finfo['s_name']; 26 | 27 | $sizex=$sizey=0; 28 | switch($_GET['mode']){ 29 | case "sizemode_0": $sizex=$sizey=128; break; 30 | case "sizemode_1": $sizex=640;$sizey=0; break; 31 | case "sizemode_2": $sizex=240;$sizey=180; break; 32 | case "sizemode_160": $sizex=160;$sizey=160; break; 33 | } 34 | if($sizex!=0 || $sizey!=0){ 35 | 36 | $thumb_name=$path.".".$_GET['mode'].".jpg"; 37 | if(file_exists($thumb_name) && !isset($_GET['refresh'])) 38 | $path=$thumb_name; 39 | else{ 40 | resizeImage($path, $thumb_name, $sizex, $sizey); 41 | } 42 | if(file_exists($thumb_name)) 43 | $path=$thumb_name; 44 | } 45 | 46 | $fext=strtolower(@end(@explode('.', $fn))); 47 | $ctype="application/octet-stream"; 48 | if($_GET['mode']!="force" && filesize($path)<16*1024*1024){ // Force download if bigger than 16MB 49 | $finfo = finfo_open(FILEINFO_MIME_TYPE); 50 | $ctype=finfo_file($finfo, $path); 51 | } 52 | $etag=$finfo['s_key']; 53 | $last_modified_time = filemtime($path); 54 | header_remove('x-powered-by'); 55 | header_remove('expires'); 56 | header_remove('cache-control'); 57 | header_remove("pragma"); 58 | header_remove('Content-Type'); 59 | header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); 60 | header("Etag: \"$etag\""); 61 | header("Content-Type: $ctype"); 62 | if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && @strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time) || (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag)) { 63 | header("HTTP/1.1 304 Not Modified"); 64 | header("Status: 304 Not Modified"); 65 | die(); 66 | } 67 | outRange($path); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/process/file/attach_zip.php: -------------------------------------------------------------------------------- 1 | getArticle($_GET['aid']); 5 | $err=false; 6 | if($article===false) $err=true; 7 | if($err){ 8 | die404(); 9 | }else{ 10 | $cat=$board->getCategory($article['n_cat']); 11 | if(!doesAdminBypassEverythingAndIsAdmin(checkCategoryAccess($cat['n_id'], "attach download"))) 12 | die403(); 13 | else{ 14 | $attaches=$board->getAttachments(false,$article['n_id']); 15 | //header("Content-Type: text/text"); print_r($article); print_r($cat); print_r($attaches); die(); 16 | $zip=new ZipStream(); //"", "text/text"); 17 | $fpaths=array(); 18 | //public function addDirectory($directoryPath, $timestamp = 0, $fileComment = null) { 19 | $zip->setComment(html_entity_decode(strip_tags($article['s_data']),ENT_HTML5)); 20 | foreach($attaches as $val){ 21 | //public function addLargeFile($dataFile, $filePath, $timestamp = 0, $fileComment = null) { 22 | if(!isset($fpaths[$val['s_name']])){ 23 | $fpaths[$val['s_name']]=1; 24 | $zip->addLargeFile($val['s_path'], $val['s_name'], $val['n_created'], $val['s_comment']); 25 | }else{ 26 | $fpaths[$val['s_name']]++; 27 | $zip->addLargeFile($val['s_path'], "name_duplicates_".$fpaths[$val['s_name']]."/".$val['s_name'], $val['n_created'], $val['s_comment']); 28 | } 29 | } 30 | $zip->finalize(); 31 | } 32 | } -------------------------------------------------------------------------------- /src/process/file/captcha.php: -------------------------------------------------------------------------------- 1 | putImage(); -------------------------------------------------------------------------------- /src/process/user/backuplayout.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /src/process/user/clearmessage.php: -------------------------------------------------------------------------------- 1 | removeNoteOfUser($me['n_id']); 5 | redirectTo("/user/message"); -------------------------------------------------------------------------------- /src/process/user/foodvote.php: -------------------------------------------------------------------------------- 1 | readNote($_POST['id']); 7 | if($n['n_owner']!=$me['n_id']) 8 | $errors['__error']=lang("user","message","not mine"); 9 | if(count($errors)==0){ 10 | $member->checkNoteRead($n['n_id']); 11 | if($me['n_id']==$n['n_from']) 12 | $usr=$member->getMember($n['n_to']); 13 | else 14 | $usr=$member->getMember($n['n_from']); 15 | $data=""; 16 | if(isset($usr['s_pic']) && $usr['s_pic']) 17 | $data.=""; 18 | $data.="
"; 19 | $data.=""; 20 | $data.="
"; 21 | $data.=date(lang("generic","full date format"),$n['n_date'])." | "; 22 | $data.="".lang("generic","remove")." | "; 23 | $data.="".lang("generic","reply").""; 24 | $data.="
"; 25 | $data.="
".filterContent($n['s_data'],false)."
"; 26 | $data.="
"; 27 | $short=trim(preg_replace("/\\s{2,10000}/i","",html_entity_decode(strip_tags($n['s_data']), ENT_HTML5))); 28 | if(mb_strlen($short)>24) 29 | $short=mb_substr($short,0,20,"UTF-8") . "...";; 30 | } 31 | if(count($errors)) 32 | ajaxDie($errors); 33 | else 34 | ajaxOk(array("data"=>$data, "shortstr"=>strip_tags($short))); -------------------------------------------------------------------------------- /src/process/user/getmodule.php: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /src/process/user/getnotifications.php: -------------------------------------------------------------------------------- 1 | getNoticeCount($me['n_id'])); 4 | if(isset($_POST['clear'])){ 5 | $member->removeNotice($me['n_id']); 6 | ajaxOk(array(), "/user/notification"); 7 | die(); 8 | } 9 | if(isset($_GET['since_id'])) $since_id=$_GET['since_id']; else $since_id=-1; 10 | $notices=$member->getNotices($me['n_id'], 20, $since_id); 11 | $ret=array(); 12 | foreach($notices as $v){ 13 | $pass=false; 14 | switch(substr($v['s_url'], 0, strpos($v['s_url'], ":"))){ 15 | case "article": 16 | $aid=substr($v['s_url'], strpos($v['s_url'], ":")+1); 17 | $a=$board->getArticle($aid); 18 | if($a===false){ 19 | $member->removeNotice($me['n_id'], $v['s_fnkey']); 20 | $pass=true; 21 | break; 22 | } 23 | $b=$board->getCategory($a['n_cat']); 24 | $bid=$b['s_id']; 25 | $lnk="/board/$bid/view/$aid"; 26 | break; 27 | default: 28 | $lnk=$v['s_url']; 29 | } 30 | if(preg_match('/\/board\//', $lnk)) { 31 | preg_match('/\/([0-9]+)$/', $lnk, $articleNum); 32 | if($board->getArticle($articleNum[1]) === false) { 33 | $member->removeNotice($me['n_id'], $v['s_fnkey']); 34 | $pass=true; 35 | } 36 | } 37 | if($pass) continue; 38 | $lnk=htmlspecialchars($lnk); 39 | $s=""; 40 | if($v['n_seen']) 41 | $s.="
  • "; 42 | else 43 | $s.="
  • "; 44 | $s.=""; 45 | $s.="
    "; 46 | 47 | $s.="
    "; 48 | if($v['n_from']) $temp = $member->getMember($v['n_from'])['s_pic']; 49 | if($v['n_from'] && !empty($temp)) { 50 | //$temp = $member->getMember($v['n_from'])['s_pic']; 51 | // 만약 프로필 사진이 존재하면 52 | $src = htmlspecialchars($temp); 53 | } else { 54 | // 프로필 사진이 존재하지 않을 경우 55 | $src = htmlspecialchars("/images/no-profile.png"); 56 | } 57 | $s.="프로필"; 58 | $s.="
    "; 59 | 60 | $s.="
    "; 61 | $s.=$v['s_desc']; 62 | $s.="
    " . changeToReadableTime($v['n_time']) . ""; 63 | $s.="
    "; 64 | $s.="
    "; 65 | $s.="
  • "; 66 | $ret[$v['n_id']]=$s; 67 | } 68 | $ret=array_reverse($ret); 69 | die(json_encode($ret)); 70 | -------------------------------------------------------------------------------- /src/process/user/imlogin.php: -------------------------------------------------------------------------------- 1 | 5 |
    6 | $val){ 8 | $val=htmlspecialchars($val); 9 | echo ""; 10 | } 11 | ?> 12 | 13 | 14 |
    15 | 16 | checkCaptcha($_POST['s_captcha'])) $errors['s_captcha']="확인용 단어를 올바르게 입력해 주세요!"; 22 | if(count($errors)==0){ 23 | $m=$member->getMember($_POST['s_email'],2); 24 | if($m===false) $errors['s_email']="사용자가 존재하지 않습니다."; 25 | if($_POST['findwhat']=="password"){ 26 | if($m['s_id']!=$_POST['s_id']) 27 | $errors['s_id']="사용자가 존재하지 않습니다."; 28 | } 29 | } 30 | if(count($errors)==0){ 31 | $showActualData=false; 32 | $captcha->renewCaptcha(); 33 | if(isset($_POST['s_key'])) 34 | $_POST['s_key']=trim($_POST['s_key']); 35 | if(isset($_POST['s_key']) && $_POST['s_key']==$_SESSION['s_reset_key'] && $_SESSION['s_reset_what']==$_POST['findwhat']){ 36 | if(isset($_SESSION["n_reset_key_expire"]) && $_SESSION["n_reset_key_expire"]>time()){ 37 | $showActualData=true; 38 | session_start(); 39 | $_SESSION["b_reset_key_valid"]=true; 40 | $_SESSION["n_reset_key_expire"]=time()+300; //5 min 41 | $url="/user/lost/{$_POST['findwhat']}/found?usr={$m['n_id']}&s_key=".$_POST['s_key']; 42 | if($_POST['findwhat']=="id"){ 43 | ajaxOk(array(),"/user/login?returnto=/","ID는 {$m['s_id']}입니다."); 44 | }else{ 45 | $_SESSION["user"]=$m['n_id']; 46 | $_SESSION["setting_change_no_pw_needed"]=true; 47 | ajaxOk(array(),"/user/settings","사용자 설정에서 패스워드를 바꿔 주세요."); 48 | } 49 | } 50 | } 51 | if(!$showActualData){ 52 | session_start(); 53 | $resetKey=$captcha->genCaptchaString(64, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); 54 | $_SESSION["s_reset_key"]=$resetKey; 55 | $_SESSION["n_reset_key_expire"]=time()+300; //5 min 56 | $_SESSION["s_reset_what"]=$_POST['findwhat']; 57 | session_write_close(); 58 | $url="/user/lost/{$_POST['findwhat']}/ok"; //$resetKey"; 59 | mb_language("uni"); 60 | $headers = 'MIME-Version: 1.0' . "\r\n"; 61 | $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; 62 | $headers .= 'Content-Transfer-Encoding: 8bit' . "\r\n"; 63 | 64 | mail($_POST['s_email'], "=?UTF-8?B?".base64_encode("kmlaonline 사용자 계정 복구")."?=", "

    Key는

    {$resetKey}

    입니다.

    ", $headers); 65 | 66 | if(isAjax()){ 67 | ajaxOk(array(), $url, "이메일을 보냈습니다. 다음 페이지에서 이메일로 받은 Key를 입력해 주세요."); 68 | }else{ 69 | redirectTo($url); 70 | } 71 | } 72 | }else{ 73 | if(isAjax()){ 74 | ajaxDie($errors); 75 | }else{ 76 | redirectWith("redirWithBody",$errors); 77 | } 78 | } -------------------------------------------------------------------------------- /src/process/user/message.php: -------------------------------------------------------------------------------- 1 |
    6 | $val){if(is_array($val)){foreach($val as $val2){$val2=htmlspecialchars($val2);echo "";}}else{$val=htmlspecialchars($val);echo "";}} ?>
    7 | sendNote($me['n_id'], $usr,$_POST['s_data']))===false){ 18 | $except_users[]=$usr; 19 | }else{ 20 | addNotification($me['n_id'], $usr, "message:".$nid, "" . putUserCard($me,0,false) . "님이 메시지를 보냈습니다.","/user/message"); 21 | } 22 | } 23 | } 24 | if(count($errors)>0){ 25 | if(isAjax()){ 26 | ajaxDie($errors); 27 | }else 28 | redirectWith("redirWithBody",$errors); 29 | }else{ 30 | $new_location="/user/message"; 31 | $alert=""; 32 | if(count($except_users)){ 33 | foreach($except_users as $key=>$val){ 34 | $m=$member->getMember($val); 35 | $except_users[$key]="{$m['s_id']} ({$m['s_name']})"; 36 | } 37 | $alert=implode(", ",$except_users) . " 유저를 제외한 사용자들에게 "; 38 | } 39 | $alert=$alert."메시지를 전송했습니다."; 40 | if(isAjax()){ 41 | ajaxOk(array(), $new_location, $alert); 42 | }else{ 43 | redirectAlert($new_location, $alert); 44 | } 45 | } -------------------------------------------------------------------------------- /src/process/user/nid.php: -------------------------------------------------------------------------------- 1 | readNote($_POST['id']); 7 | if($n['n_owner']!=$me['n_id']) 8 | $errors['__error']=lang("user","message","not mine"); 9 | if(count($errors)==0){ 10 | if($member->removeNote($n['n_id'])===false) 11 | $errors['__error']=lang("generic","failed"); 12 | } 13 | if(count($errors)) 14 | ajaxDie($errors); 15 | else 16 | ajaxOk(); -------------------------------------------------------------------------------- /src/process/user/resetlayout.php: -------------------------------------------------------------------------------- 1 | listMembers($pagenumber,$articleperpage,false,$search, false,false,true,true,true,true,true,true,true,true) as $v){ 11 | if($v['n_id']==1) continue; 12 | $ret[]=array( 13 | "n_id"=>$v['n_id'], 14 | "n_level"=>$v['n_level'], 15 | "s_id"=>htmlspecialchars($v['s_id']), 16 | "s_name"=>htmlspecialchars($v['s_name']), 17 | "s_email"=>htmlspecialchars($v['s_email']) 18 | ); 19 | } 20 | die(json_encode($ret)); -------------------------------------------------------------------------------- /src/process/user/statusmessage.php: -------------------------------------------------------------------------------- 1 | editMember($_SESSION['user'], false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, $_POST['s_status_message']); 3 | if(isAjax()){ 4 | if($r) 5 | ajaxOk(); 6 | else 7 | ajaxDie(array(),lang("generic","unknown error")); 8 | }else{ 9 | if($r===true) 10 | redirectAlert($_POST['returnto'],lang("generic","succeed")); 11 | else 12 | redirectAlert($_POST['returnto'],lang("generic","unknown error")); 13 | } -------------------------------------------------------------------------------- /src/process/user/updatelayout.php: -------------------------------------------------------------------------------- 1 | listMembers(0,0,19) as $usr){ 4 | $member->addNotice(769, $usr['n_id'], "admin:info:profile", "큼온이 프로필 사진을 바꿨습니다. 여러분도 프로필 사진을 설정에서 업데이트 해보세요!", "/user/settings"); 5 | } 6 | foreach($member->listMembers(0,0,20) as $usr){ 7 | $member->addNotice(769, $usr['n_id'], "admin:info:profile", "큼온이 프로필 사진을 바꿨습니다. 여러분도 프로필 사진을 설정에서 업데이트 해보세요!", "/user/settings"); 8 | } 9 | foreach($member->listMembers(0,0,21) as $usr){ 10 | $member->addNotice(769, $usr['n_id'], "admin:info:profile", "큼온이 프로필 사진을 바꿨습니다. 여러분도 프로필 사진을 설정에서 업데이트 해보세요!", "/user/settings"); 11 | } 12 | foreach($member->listMembers(0,0,22) as $usr){ 13 | $member->addNotice(769, $usr['n_id'], "admin:info:profile", "큼온이 프로필 사진을 바꿨습니다. 여러분도 프로필 사진을 설정에서 업데이트 해보세요!", "/user/settings"); 14 | } */ 15 | //$member->addNotice(769, $me['n_id'], "admin:info:profile", "큼온이 프로필 사진을 바꿨습니다. 여러분도 프로필 사진을 설정에서 업데이트 해보세요!", "/user/settings"); 16 | 17 | -------------------------------------------------------------------------------- /src/process/util/barbeque_delete.php: -------------------------------------------------------------------------------- 1 | deleteBarbeque($bid)){ 8 | echo "success"; 9 | http_response_code(200); 10 | } else { 11 | http_response_code(220); 12 | } 13 | } else { 14 | http_response_code(400); 15 | } 16 | } else { 17 | http_response_code(404); 18 | } 19 | ?> -------------------------------------------------------------------------------- /src/process/util/barbeque_my_list.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/process/util/barbeque_my_list_rep.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/process/util/barbeque_submit_new.php: -------------------------------------------------------------------------------- 1 | date; 11 | $start_hr = $result->start_hour->value; 12 | $start_min = $result->start_min->value; 13 | $finish_hr = $result->finish_hour->value; 14 | $finish_min = $result->finish_min->value; 15 | $teacher = $result->selectedTeacher->n_id; 16 | $participant = $result->selectedStudent; 17 | $exeq_req = $result->exeq_req; 18 | $rest_req = $result->rest_req; 19 | // 2. notification 20 | 21 | // 3. save data 22 | $tmp = array(); 23 | 24 | foreach($participant as $std){ 25 | array_push($tmp, $std->n_id); 26 | } 27 | $participant_f = implode('|', $tmp); 28 | 29 | //TODO 연도 나중에 바꿔줄 것 (javascript로 받으세요) 30 | //function addBarbeque($date, $s_time, $f_time, $t_id, $title, $student_list, $rep_id, $rest_req="", $exeq_req="", $status) 31 | $barbeque->addBarbeque("2017-09-" . $date, $start_hr . ":" . $start_min, $finish_hr . ":" . $finish_min, $teacher, "임시 테스트", $participant_f, $me['n_id'], $rest_req, $exeq_req, 100); 32 | echo print_r($result); 33 | http_response_code(200); 34 | } else { 35 | http_response_code(404); 36 | } 37 | 38 | 39 | ?> -------------------------------------------------------------------------------- /src/process/util/barbeque_suggest_student.php: -------------------------------------------------------------------------------- 1 | getCurrentMembers()); 5 | } 6 | ?> -------------------------------------------------------------------------------- /src/process/util/barbeque_suggest_teacher.php: -------------------------------------------------------------------------------- 1 | getAllRawTeachers(); 5 | echo json_encode($result); 6 | } 7 | ?> -------------------------------------------------------------------------------- /src/process/util/create-survey.php: -------------------------------------------------------------------------------- 1 | array( 5 | "name"=>$_POST['survey_name']==""?"Untitled":$_POST['survey_name'], 6 | "anonymous"=>isset($_POST['survey_anonymous'])?1:0, 7 | "oneperuser"=>isset($_POST['survey_oneperuser'])?1:0 8 | ), 9 | "items"=>array( 10 | "key"=>md5(time().uniqid().serialize($_SERVER)), 11 | "dupefirst"=>$_POST['items_orderby']=="newest"?"newest":"oldest", 12 | "condition"=>$_POST['survey_condition']!==""?"1":$_POST['survey_condition'] 13 | ) 14 | ); 15 | for($i=0;isset($_POST['items_name'][$i]);$i++){ 16 | $dat['items'][$i]=array( 17 | "name"=>$_POST['items_name'][$i]==""?"Untitled item $i":$_POST['items_name'][$i], 18 | "type"=>$_POST['items_type'][$i]=="numeric"?"numeric":($_POST['items_type'][$i]=="real"?"real":"string"), 19 | "min"=>$_POST['items_min'][$i]===""?0:$_POST['items_min'][$i], 20 | "max"=>$_POST['items_max'][$i]===""?0:$_POST['items_max'][$i], 21 | "regexp"=>$_POST['items_regexp'][$i]===""?".*":$_POST['items_regexp'][$i] 22 | ); 23 | } 24 | $ret=base64_encode(json_encode($dat)); 25 | $ret="
    Survey ".htmlspecialchars($dat['survey']['name'])." goes here
    "; 26 | die(json_encode(array("data"=>$ret))); 27 | ?> 28 | Array 29 | ( 30 | [ajax] => 1 31 | [survey_anonymous] => on 32 | [survey_oneperuser] => on 33 | [survey_name] => 123 34 | [items_orderby] => newest 35 | [survey_condition] => 456 36 | [items_key] => 0 37 | [items_optional] => Array 38 | ( 39 | [0] => on 40 | ) 41 | 42 | [items_type] => Array 43 | ( 44 | [0] => string 45 | ) 46 | 47 | [items_name] => Array 48 | ( 49 | [0] => test 50 | ) 51 | 52 | [items_min] => Array 53 | ( 54 | [0] => 34 55 | ) 56 | 57 | [items_max] => Array 58 | ( 59 | [0] => 56 60 | ) 61 | 62 | [items_regexp] => Array 63 | ( 64 | [0] => 123 65 | ) 66 | 67 | ) 68 | 1 -------------------------------------------------------------------------------- /src/process/util/donation.php: -------------------------------------------------------------------------------- 1 | query("UPDATE kmlaonline_donation_table SET n_who=$who WHERE n_category=$category AND n_num=$num"); 17 | $res = $mysqli->query("UPDATE kmlaonline_donation_new SET n_who=$who WHERE n_category=$category AND n_num=$num"); 18 | ajaxOk(array(), "/util/donation-".$_POST['from'],"신청하였습니다."); 19 | break; 20 | case "remove": 21 | $category=$_POST['category']; 22 | $num=$_POST['num']; 23 | if(!is_numeric($category) || !is_numeric($num)) 24 | ajaxDie(array(), "무언가가 잘못되었습니다."); 25 | //$mysqli->query("UPDATE kmlaonline_donation_table SET n_who=0 WHERE n_category=$category AND n_num=$num"); 26 | $mysqli->query("UPDATE kmlaonline_donation_new SET n_who=0 WHERE n_category=$category AND n_num=$num"); 27 | ajaxOk(array(), "/util/donation-".$_POST['from'],"삭제하였습니다."); 28 | break; 29 | default: 30 | ajaxDie(array(), "잘못된 동작입니다."); 31 | } 32 | ?> 33 | -------------------------------------------------------------------------------- /src/process/util/important.php: -------------------------------------------------------------------------------- 1 | real_escape_string($_POST['reason']); 12 | $res=$mysqli->query("INSERT INTO `kmlaonline_important_notices_table` (n_user, n_article, n_date, s_reason, s_process_reason) VALUES ({$me['n_id']}, $article_id, $date, '$reason', '')"); 13 | } 14 | if($res===false) 15 | ajaxDie(array(), "잘못된 글입니다."); 16 | else 17 | ajaxOk(); 18 | break; 19 | case 'accept': 20 | if(!$permission_to_edit) redirectAlert('/util/important', "권한이 없습니다."); 21 | $nid=$_POST['item']; 22 | if(!is_numeric($nid)) 23 | ajaxDie(array(), "잘못된 요청입니다."); 24 | $s_process_reason=trim($mysqli->real_escape_string($_POST['s_process_reason'])); 25 | if(strlen($s_process_reason)==0) 26 | ajaxDie(array(), "처리 이유를 입력해야 합니다."); 27 | if(false===$mysqli->query("UPDATE `kmlaonline_important_notices_table` SET n_state=1, s_process_reason='$s_process_reason' WHERE n_id=$nid")) 28 | ajaxDie(array(), "오류가 발생하였습니다."); 29 | else 30 | ajaxOk(array(), '/util/important', "승인하였습니다."); 31 | break; 32 | case 'deny': 33 | if(!$permission_to_edit) redirectAlert('/util/important', "권한이 없습니다."); 34 | $nid=$_POST['item']; 35 | if(!is_numeric($nid)) 36 | ajaxDie(array(), "잘못된 요청입니다."); 37 | $s_process_reason=trim($mysqli->real_escape_string($_POST['s_process_reason'])); 38 | if(strlen($s_process_reason)==0) 39 | ajaxDie(array(), "처리 이유를 입력해야 합니다."); 40 | if(false===$mysqli->query("UPDATE `kmlaonline_important_notices_table` SET n_state=2, s_process_reason='$s_process_reason' WHERE n_id=$nid")) 41 | ajaxDie(array(), "오류가 발생하였습니다."); 42 | else 43 | ajaxOk(array(), '/util/important', "거부하였습니다."); 44 | break; 45 | case 'expire': 46 | if(!$permission_to_edit) redirectAlert('/util/important', "권한이 없습니다."); 47 | $nid=$_POST['item']; 48 | if(!is_numeric($nid)) 49 | ajaxDie(array(), "잘못된 요청입니다."); 50 | $s_process_reason=trim($mysqli->real_escape_string($_POST['s_process_reason'])); 51 | if(strlen($s_process_reason)==0) 52 | ajaxDie(array(), "처리 이유를 입력해야 합니다."); 53 | if(false===$mysqli->query("UPDATE `kmlaonline_important_notices_table` SET n_state=3, s_process_reason='$s_process_reason' WHERE n_id=$nid")) 54 | ajaxDie(array(), "오류가 발생하였습니다."); 55 | else 56 | ajaxOk(array(), '/util/important', "만료시켰습니다."); 57 | break; 58 | case 'delete': 59 | if(!$permission_to_edit) redirectAlert('/util/important', "권한이 없습니다."); 60 | $nid=$_POST['item']; 61 | if(!is_numeric($nid)) 62 | ajaxDie(array(), "잘못된 요청입니다."); 63 | if(false===$mysqli->query("DELETE FROM `kmlaonline_important_notices_table` WHERE n_id=$nid")) 64 | ajaxDie(array(), "오류가 발생하였습니다."); 65 | else 66 | ajaxOk(array(), '/util/important', "삭제하였습니다."); 67 | break; 68 | default: 69 | ajaxDie(array(), "잘못된 동작입니다."); 70 | } -------------------------------------------------------------------------------- /src/process/util/karaoke.php: -------------------------------------------------------------------------------- 1 | query("truncate table kmlaonline_karaoke_table"); 8 | ajaxOk(array(), "/util/karaoke","초기화하였습니다."); 9 | }else{ 10 | ajaxDie(array(), "권한이 없습니다."); 11 | } 12 | break; 13 | case "add": 14 | $day = $_POST['day']; 15 | $period = $_POST['period']; 16 | if(!is_numeric($day) || !is_numeric($period)) 17 | ajaxDie(array(), "무언가가 잘못되었습니다."); 18 | $res = $mysqli->query("SELECT count(*) FROM kmlaonline_karaoke_table WHERE n_date=$day AND n_period=$period"); 19 | $res = $res->fetch_array(MYSQLI_BOTH); $res = $res[0]; 20 | if($res > 0) { 21 | ajaxDie(array(), "이미 예약되어 있습니다."); 22 | } 23 | $objective = $mysqli->real_escape_string($_POST['s_objective']); 24 | $who = $me['n_id']; 25 | $mysqli->query("INSERT INTO kmlaonline_karaoke_table (n_date, n_period, s_objective, n_who) VALUES ($day, $period, '$objective', $who)"); 26 | if($mysqli->affected_rows>0) ajaxOk(array(), "/util/karaoke","예약하였습니다."); 27 | else ajaxDie(array(), "오류가 발생하였습니다."); 28 | break; 29 | case "remove": 30 | $day = $_POST['day']; 31 | $period = $_POST['period']; 32 | if(!is_numeric($day) || !is_numeric($period)) 33 | ajaxDie(array(), "무언가가 잘못되었습니다."); 34 | $mysqli->query("DELETE FROM kmlaonline_karaoke_table WHERE n_date=$day AND n_period=$period"); 35 | ajaxOk(array(), "/util/karaoke","삭제하였습니다."); 36 | break; 37 | default: 38 | ajaxDie(array(), "잘못된 동작입니다."); 39 | } 40 | -------------------------------------------------------------------------------- /src/process/util/kmlaboard.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/src/process/util/kmlaboard.php -------------------------------------------------------------------------------- /src/process/util/lectureroom.php: -------------------------------------------------------------------------------- 1 | query("truncate table kmlaonline_lectureroom_table"); 9 | else 10 | $mysqli->query("delete from kmlaonline_lectureroom_table where n_long_period=0"); 11 | ajaxOk(array(), "/util/lectureroom","초기화하였습니다."); 12 | }else{ 13 | ajaxDie(array(), "권한이 없습니다."); 14 | } 15 | break; 16 | case "add": 17 | $day=$_POST['day']; 18 | $period=$_POST['period']; 19 | $floor=$_POST['floor']; 20 | if(!is_numeric($day) || !is_numeric($period) || !is_numeric($floor)) 21 | ajaxDie(array(), "무언가가 잘못되었습니다."); 22 | $res=$mysqli->query("SELECT count(*) FROM kmlaonline_lectureroom_table WHERE n_date=$day AND n_period=$period AND n_floor=$floor"); 23 | $res=$res->fetch_array(MYSQLI_BOTH); $res=$res[0]; 24 | if($res>0){ 25 | ajaxDie(array(), "이미 예약되어 있습니다."); 26 | } 27 | $objective=$mysqli->real_escape_string($_POST['s_objective']); 28 | $who=$me['n_id']; 29 | $n_long_period=isset($_POST['n_long_period'])?1:0; 30 | $mysqli->query("INSERT INTO kmlaonline_lectureroom_table (n_date, n_period, n_floor, s_objective, n_who, n_long_period) VALUES ($day, $period, $floor, '$objective', $who, $n_long_period)"); 31 | if($mysqli->affected_rows>0) ajaxOk(array(), "/util/lectureroom","예약하였습니다."); 32 | else ajaxDie(array(), "오류가 발생하였습니다."); 33 | break; 34 | case "remove": 35 | $day=$_POST['day']; 36 | $period=$_POST['period']; 37 | $floor=$_POST['floor']; 38 | if(!is_numeric($day) || !is_numeric($period) || !is_numeric($floor)) 39 | ajaxDie(array(), "무언가가 잘못되었습니다."); 40 | $mysqli->query("DELETE FROM kmlaonline_lectureroom_table WHERE n_date=$day AND n_period=$period AND n_floor=$floor"); 41 | ajaxOk(array(), "/util/lectureroom","삭제하였습니다."); 42 | break; 43 | default: 44 | ajaxDie(array(), "잘못된 동작입니다."); 45 | } -------------------------------------------------------------------------------- /src/process/util/library_api.php: -------------------------------------------------------------------------------- 1 | 43 | 44 | -------------------------------------------------------------------------------- /src/process/util/library_delay.php: -------------------------------------------------------------------------------- 1 | getAdditionalData($me['n_id'], 'n_student_id'); 5 | 6 | if(getLibraryUserPwd($n_student_id) && isset($_GET['request'])) { 7 | $pwd = getLibraryUserPwd($n_student_id); 8 | $ch = signIntoLibrary($n_student_id, $pwd); 9 | if($ch) { 10 | $ch = $ch['curl_obj']; 11 | $tmp = explode(",", $_GET['request']); 12 | $attr = explode("/", $tmp[1]); 13 | $val = explode("/", $tmp[2]); 14 | $str = ""; 15 | for($i = 0; $i < sizeof($attr); $i++){ 16 | $str .= $attr[$i] . "=" . $val[$i]; 17 | if($i != sizeof($attr) - 1) $str .= "&"; 18 | } 19 | 20 | $url = 'http://lib.minjok.hs.kr/usweb/set16/USMN' . $tmp[0] . '.asp?' . $str; 21 | curl_setopt($ch, CURLOPT_URL, $url); 22 | 23 | $output = curl_exec($ch); 24 | $output = mb_convert_encoding($output, "UTF-8", "EUC-KR"); 25 | 26 | $error_code = 0; 27 | $success = false; 28 | if(strpos($output, '연장횟수를')){ 29 | //메시지 내용 - 연장횟수를 초과하여 연장할 수 없습니다. 30 | $error_code = 1; 31 | //echo "연장 횟수 초과"; 32 | } else if(strpos($output, '로그인 후')){ 33 | //메시지 내용 - 로그인 후 이용하시기 바랍니다. 34 | $error_code = 2; 35 | //echo "로그인 되어 있지 않음"; 36 | } else if(strpos($output, '대출연장이')){ 37 | //메시지 내용 - 대출연장이 처리되었습니다. 38 | $success = true; 39 | //echo "성공"; 40 | } else { 41 | //로그인 되어 있는 상태에서 엉뚱한 요청을 보낸 경우 42 | $error_code = 3; 43 | //echo "알 수 없는 오류가 발생"; 44 | } 45 | 46 | if($success) { 47 | echo json_encode(array("status"=>"success")); 48 | http_response_code(200); 49 | } else { 50 | echo json_encode(array("status"=>"fail", "error_code"=>$error_code)); 51 | http_response_code(423); 52 | } 53 | } else { 54 | echo json_encode(array("error"=>"LOGIN_ERROR", "error_desc"=>"도서관 로그인 실패")); 55 | http_response_code(400); 56 | } 57 | } else { 58 | echo json_encode(array("error"=>"LOGIN_ERROR", "error_desc"=>"도서관 로그인 후 이용바랍니다.")); 59 | http_response_code(400); 60 | } 61 | 62 | } else { 63 | http_response_code(403); 64 | } -------------------------------------------------------------------------------- /src/process/util/library_logged_in.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/process/util/library_login.php: -------------------------------------------------------------------------------- 1 | getAdditionalData($me['n_id'], 'n_student_id'); 8 | // $login_result - curl object와 빌린 책 수를 array로 받음 9 | $login_result = signIntoLibrary($n_student_id, $pwd); 10 | 11 | if($login_result && $login_result != "login error"){ 12 | 13 | $ch = $login_result['curl_obj']; 14 | $book_num = $login_result['book_num']; 15 | 16 | $final_array = array(); 17 | $final_array['bookNum'] = $book_num; 18 | $final_array['bookList'] = fetchBorrowedBookList($ch, $book_num); 19 | curl_close($ch); 20 | 21 | echo json_encode($final_array); 22 | 23 | } else if($login_result == "login error"){ 24 | echo json_encode(array("error"=>"LOGIN_ERROR", "error_desc"=>"비밀번호가 올바르지 않습니다.")); 25 | http_response_code(400); 26 | } else { 27 | echo json_encode(array("error"=>"UNKNOWN_ERROR", "error_desc"=>"예기치 않은 문제가 발생하였습니다. 관리자에게 문의 바랍니다.")); 28 | http_response_code(400); 29 | } 30 | 31 | } else { 32 | http_response_code(403); 33 | } 34 | ?> 35 | 36 | -------------------------------------------------------------------------------- /src/process/util/library_submit_new.php: -------------------------------------------------------------------------------- 1 | date; 19 | $start_hr = $result->start_hour->value; 20 | $start_min = $result->start_min->value; 21 | $finish_hr = $result->finish_hour->value; 22 | $finish_min = $result->finish_min->value; 23 | $teacher = $result->selectedTeacher->n_id; 24 | $participant = $result->selectedStudent; 25 | $exeq_req = $result->exeq_req; 26 | $rest_req = $result->rest_req; 27 | // 2. notification 28 | 29 | // 3. save data 30 | $tmp = array(); 31 | 32 | foreach($participant as $std){ 33 | array_push($tmp, $std->n_id); 34 | } 35 | $participant_f = implode('|', $tmp); 36 | 37 | //TODO 연도 나중에 바꿔줄 것 (javascript로 받으세요) 38 | //function addBarbeque($date, $s_time, $f_time, $t_id, $title, $student_list, $rep_id, $rest_req="", $exeq_req="", $status) 39 | $barbeque->addBarbeque("2017-09-" . $date, $start_hr . ":" . $start_min, $finish_hr . ":" . $finish_min, $teacher, "임시 테스트", $participant_f, $me['n_id'], $rest_req, $exeq_req, 100); 40 | echo print_r($result); */ 41 | http_response_code(200); 42 | } else { 43 | http_response_code(404); 44 | } 45 | ?> -------------------------------------------------------------------------------- /src/process/util/outdoor-basic.php: -------------------------------------------------------------------------------- 1 | getAdditionalData($me['n_id']); 7 | $result['name'] = $me['s_name']; 8 | $result['grade'] = $temp['n_grade']; 9 | $result['class'] = $temp['s_class']; 10 | $result['room'] = $temp['s_room']; 11 | $result['phone_number'] = $me['s_phone']; 12 | 13 | echo json_encode($result); 14 | } 15 | ?> -------------------------------------------------------------------------------- /src/process/util/outdoor-stat.php: -------------------------------------------------------------------------------- 1 | real_escape_string($result); 6 | $query = "INSERT INTO kmlaonline_outdoor_stat_data (s_content) VALUE ('$result')"; 7 | 8 | if($mysqli->query($query)){ 9 | echo "stat success - from server"; 10 | http_response_code(200); 11 | } else { 12 | echo "stat failed"; 13 | http_response_code(400); 14 | } 15 | 16 | } else { 17 | http_response_code(404); 18 | } 19 | ?> -------------------------------------------------------------------------------- /src/process/util/schedule.php: -------------------------------------------------------------------------------- 1 | real_escape_string($_POST['s_data']); 7 | $s_mode=$mysqli->real_escape_string($_POST['s_mode']); 8 | $n_year=$_POST['n_year']; 9 | $n_month=$_POST['n_month']; 10 | $n_day=$_POST['n_day']; 11 | if($s_mode!=="food:0" && $s_mode!=="food:1" && $s_mode!=="food:2" && $s_mode!=="normal"){ 12 | ajaxDie(array(), "잘못된 동작입니다."); 13 | }else if(@checkdate($n_month,$n_day,$n_year)===true){ 14 | if(substr($s_mode,0,5)=="food:" && !isUserPermitted($me['n_id'], "edit_food_table")){ 15 | ajaxDie(array(), "권한이 없습니다."); 16 | } 17 | $mysqli->autocommit(false); 18 | $mysqli->query("DELETE FROM kmlaonline_schedule_table WHERE n_year=$n_year AND n_month=$n_month AND n_day=$n_day AND s_mode='$s_mode'"); 19 | if(strlen($s_data)>0) 20 | $mysqli->query("INSERT INTO kmlaonline_schedule_table (s_data, s_mode, n_year, n_month, n_day) VALUES ('$s_data', '$s_mode', $n_year, $n_month, $n_day)"); 21 | if($mysqli->errno){ 22 | $mysqli->rollback(); 23 | $mysqli->autocommit(true); 24 | ajaxDie(array(), "수정에 오류가 발생하였습니다: ".$mysqli->error); 25 | }else{ 26 | $mysqli->commit(); 27 | $mysqli->autocommit(true); 28 | ajaxOk(array(), "/util/schedule?mode=$s_mode&year=$n_year&month=$n_month"); 29 | } 30 | }else{ 31 | ajaxDie(array(), "날짜가 잘못되었습니다."); 32 | } 33 | break; 34 | default: 35 | ajaxDie(array(), "잘못된 동작입니다."); 36 | } -------------------------------------------------------------------------------- /src/process/util/test_notification.php: -------------------------------------------------------------------------------- 1 | getSocket(ZMQ::SOCKET_PUSH, 'my pusher'); 9 | $socket->connect("tcp://localhost:5555"); 10 | $socket->send(json_encode($result)); 11 | $failed = false; 12 | /* 13 | // 1. check validity of data 14 | $date = $result->date; 15 | $start_hr = $result->start_hour->value; 16 | $start_min = $result->start_min->value; 17 | $finish_hr = $result->finish_hour->value; 18 | $finish_min = $result->finish_min->value; 19 | $teacher = $result->selectedTeacher->n_id; 20 | $participant = $result->selectedStudent; 21 | $exeq_req = $result->exeq_req; 22 | $rest_req = $result->rest_req; 23 | // 2. notification 24 | 25 | // 3. save data 26 | $tmp = array(); 27 | 28 | foreach($participant as $std){ 29 | array_push($tmp, $std->n_id); 30 | } 31 | $participant_f = implode('|', $tmp); 32 | 33 | //TODO 연도 나중에 바꿔줄 것 (javascript로 받으세요) 34 | //function addBarbeque($date, $s_time, $f_time, $t_id, $title, $student_list, $rep_id, $rest_req="", $exeq_req="", $status) 35 | $barbeque->addBarbeque("2017-09-" . $date, $start_hr . ":" . $start_min, $finish_hr . ":" . $finish_min, $teacher, "임시 테스트", $participant_f, $me['n_id'], $rest_req, $exeq_req, 100); 36 | echo print_r($result); */ 37 | http_response_code(200); 38 | } else { 39 | http_response_code(404); 40 | } 41 | 42 | 43 | ?> -------------------------------------------------------------------------------- /src/range.php: -------------------------------------------------------------------------------- 1 | 0 && !connection_aborted()) { 8 | if ($bytes_left_to_read > $bufferSize) { 9 | echo fread($fstream, $bufferSize); 10 | $bytes_left_to_read -= $bufferSize; 11 | } else { 12 | echo fread($fstream, $bytes_left_to_read); 13 | fclose($fstream); 14 | return; 15 | } 16 | } 17 | fclose($fstream); 18 | } 19 | function outRange($filename) 20 | { 21 | header("Accept-Ranges: bytes"); 22 | if (isset($_SERVER['HTTP_RANGE'])) { 23 | $range = str_replace(' ', '', substr(strstr($_SERVER['HTTP_RANGE'], "="), 1)); 24 | $range = str_replace(',', ';', $range); 25 | $ranges = explode(";", $range); 26 | $rangeArray = array(); 27 | $rangeCount = 0; 28 | $rangeTotal = 0; 29 | $rangePrintString = ""; 30 | foreach ($ranges as $curr) { 31 | $pre = substr($curr, 0, strpos($curr, "-")); 32 | $post = substr($curr, strpos($curr, "-") + 1); 33 | if (substr($curr, 0, 1) == "-") { 34 | //[-x]: Last x bytes 35 | $sbyte = filesize($filename) - 1 - $post; 36 | $ebyte = filesize($filename) - 1; 37 | } else if (substr($curr, -1, 1) == "-") { 38 | //[x-]: From x byte (start from 0) 39 | $sbyte = $pre; 40 | $ebyte = filesize($filename) - 1; 41 | } else { 42 | $sbyte = $pre; 43 | $ebyte = $post; 44 | //[x-y]: Range (Includes x, y) 45 | } 46 | $sbyte = intval($sbyte); 47 | $ebyte = intval($ebyte); 48 | if ($ebyte >= filesize($filename)) { 49 | $ebyte = filesize($filename); 50 | } 51 | 52 | if ($sbyte > $ebyte) { 53 | $sbyte = $ebyte; 54 | } 55 | 56 | $rangeTotal += $ebyte - $sbyte + 1; 57 | $rangeArray[$rangeCount++] = array($sbyte, $ebyte); 58 | $rangePrintString .= $sbyte . "-" . $ebyte . "/" . filesize($filename) . "; "; 59 | } 60 | header("HTTP/1.1 206 Partial Content"); 61 | header("Status: 206 Partial Content"); 62 | header("Content-Length: " . $rangeTotal); 63 | header("Content-Range: " . $rangePrintString); 64 | for ($i = 0; $i < $rangeCount && !connection_aborted(); $i++) { 65 | streamPart($filename, $rangeArray[$i][0], $rangeArray[$i][1] - $rangeArray[$i][0] + 1); 66 | } 67 | } else { 68 | header("Content-Length: " . filesize($filename)); 69 | header("HTTP/1.1 200 OK"); 70 | header("Status: 200 OK"); 71 | streamPart($filename, 0, filesize($filename)); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/soreeengine/SoreeTools.php: -------------------------------------------------------------------------------- 1 | query("drop database " . $dbname); 10 | $mysqli->close(); 11 | } 12 | 13 | global $board, $member, $mysqli; 14 | $mysqli=@new mysqli($server, $id, $pw, $dbname); 15 | $newdb=false; 16 | if($mysqli->connect_error){ 17 | $newdb=true; 18 | $mysqli=new mysqli($server, $id, $pw); 19 | if($mysqli->connect_error){ 20 | return false; 21 | } 22 | $mysqli->query("create database " . $dbname); 23 | $mysqli->query("use " . $dbname); 24 | $mysqli->set_charset("utf8"); 25 | } 26 | $member=new Soreemember($mysqli, "{$dbname}_member"); 27 | $board=new Soreeboard($mysqli,"{$dbname}_board", $member); 28 | if($newdb || $force_renew){ 29 | $member->prepareFirstUse(); 30 | $board->prepareFirstUse(); 31 | } 32 | return $mysqli; 33 | } 34 | ?> -------------------------------------------------------------------------------- /swfupload/plugins/swfupload.cookies.js: -------------------------------------------------------------------------------- 1 | /* 2 | Cookie Plug-in 3 | 4 | This plug in automatically gets all the cookies for this site and adds them to the post_params. 5 | Cookies are loaded only on initialization. The refreshCookies function can be called to update the post_params. 6 | The cookies will override any other post params with the same name. 7 | */ 8 | 9 | var SWFUpload; 10 | if (typeof(SWFUpload) === "function") { 11 | SWFUpload.prototype.initSettings = function (oldInitSettings) { 12 | return function () { 13 | if (typeof(oldInitSettings) === "function") { 14 | oldInitSettings.call(this); 15 | } 16 | 17 | this.refreshCookies(false); // The false parameter must be sent since SWFUpload has not initialzed at this point 18 | }; 19 | }(SWFUpload.prototype.initSettings); 20 | 21 | // refreshes the post_params and updates SWFUpload. The sendToFlash parameters is optional and defaults to True 22 | SWFUpload.prototype.refreshCookies = function (sendToFlash) { 23 | if (sendToFlash === undefined) { 24 | sendToFlash = true; 25 | } 26 | sendToFlash = !!sendToFlash; 27 | 28 | // Get the post_params object 29 | var postParams = this.settings.post_params; 30 | 31 | // Get the cookies 32 | var i, cookieArray = document.cookie.split(';'), caLength = cookieArray.length, c, eqIndex, name, value; 33 | for (i = 0; i < caLength; i++) { 34 | c = cookieArray[i]; 35 | 36 | // Left Trim spaces 37 | while (c.charAt(0) === " ") { 38 | c = c.substring(1, c.length); 39 | } 40 | eqIndex = c.indexOf("="); 41 | if (eqIndex > 0) { 42 | name = c.substring(0, eqIndex); 43 | value = c.substring(eqIndex + 1); 44 | postParams[name] = value; 45 | } 46 | } 47 | 48 | if (sendToFlash) { 49 | this.setPostParams(postParams); 50 | } 51 | }; 52 | 53 | } 54 | -------------------------------------------------------------------------------- /swfupload/plugins/swfupload.queue.js: -------------------------------------------------------------------------------- 1 | /* 2 | Queue Plug-in 3 | 4 | Features: 5 | *Adds a cancelQueue() method for cancelling the entire queue. 6 | *All queued files are uploaded when startUpload() is called. 7 | *If false is returned from uploadComplete then the queue upload is stopped. 8 | If false is not returned (strict comparison) then the queue upload is continued. 9 | *Adds a QueueComplete event that is fired when all the queued files have finished uploading. 10 | Set the event handler with the queue_complete_handler setting. 11 | 12 | */ 13 | 14 | var SWFUpload; 15 | if (typeof(SWFUpload) === "function") { 16 | SWFUpload.queue = {}; 17 | 18 | SWFUpload.prototype.initSettings = (function (oldInitSettings) { 19 | return function () { 20 | if (typeof(oldInitSettings) === "function") { 21 | oldInitSettings.call(this); 22 | } 23 | 24 | this.queueSettings = {}; 25 | 26 | this.queueSettings.queue_cancelled_flag = false; 27 | this.queueSettings.queue_upload_count = 0; 28 | 29 | this.queueSettings.user_upload_complete_handler = this.settings.upload_complete_handler; 30 | this.queueSettings.user_upload_start_handler = this.settings.upload_start_handler; 31 | this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler; 32 | this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler; 33 | 34 | this.settings.queue_complete_handler = this.settings.queue_complete_handler || null; 35 | }; 36 | })(SWFUpload.prototype.initSettings); 37 | 38 | SWFUpload.prototype.startUpload = function (fileID) { 39 | this.queueSettings.queue_cancelled_flag = false; 40 | this.callFlash("StartUpload", [fileID]); 41 | }; 42 | 43 | SWFUpload.prototype.cancelQueue = function () { 44 | this.queueSettings.queue_cancelled_flag = true; 45 | this.stopUpload(); 46 | 47 | var stats = this.getStats(); 48 | while (stats.files_queued > 0) { 49 | this.cancelUpload(); 50 | stats = this.getStats(); 51 | } 52 | }; 53 | 54 | SWFUpload.queue.uploadStartHandler = function (file) { 55 | var returnValue; 56 | if (typeof(this.queueSettings.user_upload_start_handler) === "function") { 57 | returnValue = this.queueSettings.user_upload_start_handler.call(this, file); 58 | } 59 | 60 | // To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value. 61 | returnValue = (returnValue === false) ? false : true; 62 | 63 | this.queueSettings.queue_cancelled_flag = !returnValue; 64 | 65 | return returnValue; 66 | }; 67 | 68 | SWFUpload.queue.uploadCompleteHandler = function (file) { 69 | var user_upload_complete_handler = this.queueSettings.user_upload_complete_handler; 70 | var continueUpload; 71 | 72 | if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) { 73 | this.queueSettings.queue_upload_count++; 74 | } 75 | 76 | if (typeof(user_upload_complete_handler) === "function") { 77 | continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true; 78 | } else if (file.filestatus === SWFUpload.FILE_STATUS.QUEUED) { 79 | // If the file was stopped and re-queued don't restart the upload 80 | continueUpload = false; 81 | } else { 82 | continueUpload = true; 83 | } 84 | 85 | if (continueUpload) { 86 | var stats = this.getStats(); 87 | if (stats.files_queued > 0 && this.queueSettings.queue_cancelled_flag === false) { 88 | this.startUpload(); 89 | } else if (this.queueSettings.queue_cancelled_flag === false) { 90 | this.queueEvent("queue_complete_handler", [this.queueSettings.queue_upload_count]); 91 | this.queueSettings.queue_upload_count = 0; 92 | } else { 93 | this.queueSettings.queue_cancelled_flag = false; 94 | this.queueSettings.queue_upload_count = 0; 95 | } 96 | } 97 | }; 98 | } -------------------------------------------------------------------------------- /swfupload/swfupload.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/swfupload/swfupload.js -------------------------------------------------------------------------------- /swfupload/swfupload.queue.js: -------------------------------------------------------------------------------- 1 | /* 2 | Queue Plug-in 3 | 4 | Features: 5 | *Adds a cancelQueue() method for cancelling the entire queue. 6 | *All queued files are uploaded when startUpload() is called. 7 | *If false is returned from uploadComplete then the queue upload is stopped. 8 | If false is not returned (strict comparison) then the queue upload is continued. 9 | *Adds a QueueComplete event that is fired when all the queued files have finished uploading. 10 | Set the event handler with the queue_complete_handler setting. 11 | 12 | */ 13 | 14 | var SWFUpload; 15 | if (typeof(SWFUpload) === "function") { 16 | SWFUpload.queue = {}; 17 | 18 | SWFUpload.prototype.initSettings = (function (oldInitSettings) { 19 | return function () { 20 | if (typeof(oldInitSettings) === "function") { 21 | oldInitSettings.call(this); 22 | } 23 | 24 | this.queueSettings = {}; 25 | 26 | this.queueSettings.queue_cancelled_flag = false; 27 | this.queueSettings.queue_upload_count = 0; 28 | 29 | this.queueSettings.user_upload_complete_handler = this.settings.upload_complete_handler; 30 | this.queueSettings.user_upload_start_handler = this.settings.upload_start_handler; 31 | this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler; 32 | this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler; 33 | 34 | this.settings.queue_complete_handler = this.settings.queue_complete_handler || null; 35 | }; 36 | })(SWFUpload.prototype.initSettings); 37 | 38 | SWFUpload.prototype.startUpload = function (fileID) { 39 | this.queueSettings.queue_cancelled_flag = false; 40 | this.callFlash("StartUpload", [fileID]); 41 | }; 42 | 43 | SWFUpload.prototype.cancelQueue = function () { 44 | this.queueSettings.queue_cancelled_flag = true; 45 | this.stopUpload(); 46 | 47 | var stats = this.getStats(); 48 | while (stats.files_queued > 0) { 49 | this.cancelUpload(); 50 | stats = this.getStats(); 51 | } 52 | }; 53 | 54 | SWFUpload.queue.uploadStartHandler = function (file) { 55 | var returnValue; 56 | if (typeof(this.queueSettings.user_upload_start_handler) === "function") { 57 | returnValue = this.queueSettings.user_upload_start_handler.call(this, file); 58 | } 59 | 60 | // To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value. 61 | returnValue = (returnValue === false) ? false : true; 62 | 63 | this.queueSettings.queue_cancelled_flag = !returnValue; 64 | 65 | return returnValue; 66 | }; 67 | 68 | SWFUpload.queue.uploadCompleteHandler = function (file) { 69 | var user_upload_complete_handler = this.queueSettings.user_upload_complete_handler; 70 | var continueUpload; 71 | 72 | if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) { 73 | this.queueSettings.queue_upload_count++; 74 | } 75 | 76 | if (typeof(user_upload_complete_handler) === "function") { 77 | continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true; 78 | } else if (file.filestatus === SWFUpload.FILE_STATUS.QUEUED) { 79 | // If the file was stopped and re-queued don't restart the upload 80 | continueUpload = false; 81 | } else { 82 | continueUpload = true; 83 | } 84 | 85 | if (continueUpload) { 86 | var stats = this.getStats(); 87 | if (stats.files_queued > 0 && this.queueSettings.queue_cancelled_flag === false) { 88 | this.startUpload(); 89 | } else if (this.queueSettings.queue_cancelled_flag === false) { 90 | this.queueEvent("queue_complete_handler", [this.queueSettings.queue_upload_count]); 91 | this.queueSettings.queue_upload_count = 0; 92 | } else { 93 | this.queueSettings.queue_cancelled_flag = false; 94 | this.queueSettings.queue_upload_count = 0; 95 | } 96 | } 97 | }; 98 | } -------------------------------------------------------------------------------- /swfupload/swfupload.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/swfupload/swfupload.swf -------------------------------------------------------------------------------- /teacher/hjTool/HJTools.php: -------------------------------------------------------------------------------- 1 | query("drop database " . $dbname); 9 | $db->close(); 10 | } 11 | 12 | global $teacher, $barbeque, $db; 13 | $db = @new mysqli($server, $id, $pw, $dbname); 14 | $newdb = false; 15 | 16 | if($db->connect_error){ 17 | echo "Error occured when connecting db"; 18 | return false; 19 | } 20 | 21 | $teacher = new HJTeacher($db); 22 | $barbeque = new HJBarbeque($db); 23 | 24 | return $db; 25 | } 26 | ?> -------------------------------------------------------------------------------- /teacher/hjTool/dbHandler.php: -------------------------------------------------------------------------------- 1 | getTeacher($_SESSION['teacher_user']); 8 | if ($me === false) { 9 | session_destroy(); 10 | session_start(); 11 | } else { 12 | if ($me['n_access_date'] + 60 <= time()) { 13 | $teacher->recordTeacherAccess($me['n_id']); 14 | } 15 | 16 | } 17 | } 18 | 19 | //학생 전용 20 | function getMyProcessedBarbequeList($id, $rep = false) 21 | { 22 | global $barbeque, $teacher, $member; 23 | 24 | $my_bbq_list = $barbeque->getMyRawBarbequeList($id, $rep); 25 | $arr = array(); 26 | while ($row = $my_bbq_list->fetch_assoc()) { 27 | $row['teacher_name'] = $teacher->getTeacherNameById((int) $row['teacher_id']); 28 | 29 | $temp = explode("|", $row['student_list']); 30 | $st_name_arr = array(); 31 | for ($i = 0; $i < count($temp); $i++) { 32 | array_push($st_name_arr, $member->getMemberNameById((int) $temp[$i])); 33 | } 34 | $row['student_name_list'] = implode("|", $st_name_arr); 35 | 36 | unset($row['teacher_id']); 37 | array_push($arr, $row); 38 | } 39 | 40 | return $arr; 41 | } 42 | 43 | function getMyRequestedList($id, $type) 44 | { 45 | global $barbeque, $teacher, $member; 46 | 47 | $list = $barbeque->getBarbequeList_Teacher($id, $type); 48 | 49 | for ($i = 0; $i < count($list); $i++) { 50 | $temp = explode("|", $list[$i]['student_list']); 51 | $name_arr = array(); 52 | for ($j = 0; $j < count($temp); $j++) { 53 | array_push($name_arr, $member->getMemberNameById((int) $temp[$j])); 54 | } 55 | $list[$i]['student_list'] = implode("|", $name_arr); 56 | 57 | $list[$i]['rep_student'] = $member->getMemberNameById((int) $list[$i]['rep_student_id']); 58 | unset($list[$i]['rep_student_id']); 59 | } 60 | 61 | return $list; 62 | } 63 | -------------------------------------------------------------------------------- /theme/mobile/birthday.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/birthday.png -------------------------------------------------------------------------------- /theme/mobile/bkg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/bkg.png -------------------------------------------------------------------------------- /theme/mobile/dasan-extend.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/dasan-extend.jpg -------------------------------------------------------------------------------- /theme/mobile/dasan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/dasan.jpg -------------------------------------------------------------------------------- /theme/mobile/dasan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/dasan.png -------------------------------------------------------------------------------- /theme/mobile/food.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/food.png -------------------------------------------------------------------------------- /theme/mobile/ic_location_web_site.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/ic_location_web_site.png -------------------------------------------------------------------------------- /theme/mobile/kmlacafe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/kmlacafe.png -------------------------------------------------------------------------------- /theme/mobile/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/logo.png -------------------------------------------------------------------------------- /theme/mobile/logo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/logo.psd -------------------------------------------------------------------------------- /theme/mobile/main_block_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/main_block_main.png -------------------------------------------------------------------------------- /theme/mobile/menubar-base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/menubar-base.png -------------------------------------------------------------------------------- /theme/mobile/menubar-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/menubar-hover.png -------------------------------------------------------------------------------- /theme/mobile/menubar-panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/menubar-panel.png -------------------------------------------------------------------------------- /theme/mobile/search-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/search-mobile.png -------------------------------------------------------------------------------- /theme/mobile/section-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/section-header.png -------------------------------------------------------------------------------- /theme/mobile/sitemap-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/sitemap-mobile.png -------------------------------------------------------------------------------- /theme/mobile/sitemap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/sitemap.png -------------------------------------------------------------------------------- /theme/mobile/top_bkg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kmladotnet/kmlaonline/92c6afcc877d3209d2ab422056cb496dbc1ef9cd/theme/mobile/top_bkg.png --------------------------------------------------------------------------------