From f636ff571fb3fabb759e1b3831d16af663cc9a9a Mon Sep 17 00:00:00 2001 From: naoki hirata Date: Sun, 28 Oct 2018 15:37:05 +0900 Subject: [PATCH] =?utf8?q?=E6=90=BA=E5=B8=AF=E9=96=A2=E4=BF=82=E3=81=AE?= =?utf8?q?=E3=82=A6=E3=82=A3=E3=82=B8=E3=82=A7=E3=83=83=E3=83=88=E3=80=81?= =?utf8?q?=E3=83=86=E3=83=B3=E3=83=97=E3=83=AC=E3=83=BC=E3=83=88=E3=82=92?= =?utf8?q?=E5=89=8A=E9=99=A4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- include/container/baseFrameContainer.php | 44 +- include/container/m_indexFrameContainer.php | 3 - include/manager/envManager.php | 92 +--- include/manager/pageManager.php | 79 +-- include/manager/requestManager.php | 46 -- include/manager/systemManager.php | 50 -- include/sql/create_base.sql | 2 +- include/sql/update/2018101201_to_2018110101.sql | 43 ++ m/index.php | 20 - templates/m/_admin/index.php | 16 - templates/m/default/index.php | 16 - templates/m/default/template_thumbnail.png | Bin 9700 -> 0 bytes templates/m/smallfont/index.php | 18 - templates/m/smallfont/template_thumbnail.png | Bin 9700 -> 0 bytes .../admin_mainConfigsysWidgetContainer.php | 52 -- .../container/admin_mainPagedefWidgetContainer.php | 8 - .../admin_mainTemplistWidgetContainer.php | 4 - widgets/admin_main/include/db/admin_mainDb.php | 2 - .../include/template/configsystem.tmpl.html | 19 +- widgets/m/adtag/admin/index.php | 23 - .../container/admin_m_adtagWidgetContainer.php | 324 ------------ .../include/container/m_adtagWidgetContainer.php | 85 ---- widgets/m/adtag/include/template/admin.tmpl.html | 83 --- .../m/adtag/include/template/admin_list.tmpl.html | 72 --- widgets/m/adtag/include/template/index.tmpl.html | 3 - widgets/m/adtag/index.php | 23 - widgets/m/bbs_2ch/admin/index.php | 23 - widgets/m/bbs_2ch/images/ba.gif | Bin 856 -> 0 bytes widgets/m/bbs_2ch/images/icon32.png | Bin 1646 -> 0 bytes widgets/m/bbs_2ch/images/icon64.png | Bin 4036 -> 0 bytes widgets/m/bbs_2ch/images/tubo.gif | Bin 5869 -> 0 bytes .../admin_m_bbs_2chBaseWidgetContainer.php | 151 ------ .../admin_m_bbs_2chOtherWidgetContainer.php | 221 -------- .../container/admin_m_bbs_2chWidgetContainer.php | 88 ---- .../container/m_bbs_2chBaseWidgetContainer.php | 327 ------------ .../container/m_bbs_2chReadWidgetContainer.php | 250 --------- .../container/m_bbs_2chSubjectWidgetContainer.php | 96 ---- .../container/m_bbs_2chThreadWidgetContainer.php | 163 ------ .../container/m_bbs_2chTopWidgetContainer.php | 361 ------------- .../include/container/m_bbs_2chWidgetContainer.php | 117 ----- widgets/m/bbs_2ch/include/db/bbs_2chDb.php | 482 ------------------ widgets/m/bbs_2ch/include/help/index.php | 74 --- .../bbs_2ch/include/template/admin_other.tmpl.html | 204 -------- widgets/m/bbs_2ch/include/template/main.tmpl.html | 49 -- .../m/bbs_2ch/include/template/message.tmpl.html | 8 - .../m/bbs_2ch/include/template/newthread.tmpl.html | 39 -- .../m/bbs_2ch/include/template/subject.tmpl.html | 10 - .../m/bbs_2ch/include/template/thread.tmpl.html | 30 -- widgets/m/bbs_2ch/index.php | 23 - widgets/m/bbs_2ch_search_box/images/icon32.png | Bin 22676 -> 0 bytes widgets/m/bbs_2ch_search_box/images/icon64.png | Bin 23634 -> 0 bytes .../m_bbs_2ch_search_boxWidgetContainer.php | 80 --- .../include/template/index.tmpl.html | 6 - widgets/m/bbs_2ch_search_box/index.php | 23 - widgets/m/blog/admin/index.php | 23 - widgets/m/blog/images/icon32.png | Bin 1928 -> 0 bytes widgets/m/blog/images/icon64.png | Bin 4891 -> 0 bytes .../container/admin_m_blogBaseWidgetContainer.php | 119 ----- .../admin_m_blogConfigWidgetContainer.php | 109 ---- .../container/admin_m_blogWidgetContainer.php | 88 ---- .../container/m_blogBaseWidgetContainer.php | 177 ------- .../container/m_blogReadWidgetContainer.php | 475 ----------------- .../include/container/m_blogWidgetContainer.php | 107 ---- widgets/m/blog/include/db/blogDb.php | 401 --------------- widgets/m/blog/include/help/index.php | 31 -- .../m/blog/include/template/admin_config.tmpl.html | 54 -- .../blog/include/template/admin_message.tmpl.html | 7 - widgets/m/blog/include/template/message.tmpl.html | 7 - .../m/blog/include/template/thread_read.tmpl.html | 17 - widgets/m/blog/index.php | 23 - widgets/m/blog_category/admin/index.php | 23 - widgets/m/blog_category/images/icon32.png | Bin 24910 -> 0 bytes widgets/m/blog_category/images/icon64.png | Bin 29932 -> 0 bytes .../container/m_blog_categoryWidgetContainer.php | 100 ---- .../m/blog_category/include/db/blog_categoryDb.php | 37 -- .../blog_category/include/template/menu.tmpl.html | 3 - widgets/m/blog_category/index.php | 23 - widgets/m/blog_list/admin/index.php | 23 - widgets/m/blog_list/images/icon32.png | Bin 24910 -> 0 bytes widgets/m/blog_list/images/icon64.png | Bin 29932 -> 0 bytes .../container/m_blog_listWidgetContainer.php | 100 ---- widgets/m/blog_list/include/db/blog_listDb.php | 35 -- .../m/blog_list/include/template/main.tmpl.html | 5 - widgets/m/blog_list/index.php | 23 - widgets/m/blog_search/images/icon32.png | Bin 22676 -> 0 bytes widgets/m/blog_search/images/icon64.png | Bin 23634 -> 0 bytes .../container/m_blog_searchWidgetContainer.php | 83 --- .../m/blog_search/include/template/index.tmpl.html | 6 - widgets/m/blog_search/index.php | 23 - widgets/m/chacha/admin/index.php | 23 - widgets/m/chacha/images/default_avatar32.gif | Bin 1535 -> 0 bytes widgets/m/chacha/images/icon32.png | Bin 1723 -> 0 bytes widgets/m/chacha/images/icon64.png | Bin 5082 -> 0 bytes .../admin_m_chachaBaseWidgetContainer.php | 124 ----- .../admin_m_chachaOtherWidgetContainer.php | 119 ----- .../container/admin_m_chachaWidgetContainer.php | 88 ---- .../container/m_chachaBaseWidgetContainer.php | 211 -------- .../container/m_chachaMypageWidgetContainer.php | 257 ---------- .../container/m_chachaProfileWidgetContainer.php | 377 -------------- .../container/m_chachaReadWidgetContainer.php | 179 ------- .../container/m_chachaThreadWidgetContainer.php | 265 ---------- .../container/m_chachaTopWidgetContainer.php | 67 --- .../include/container/m_chachaWidgetContainer.php | 145 ------ widgets/m/chacha/include/db/chachaDb.php | 565 --------------------- .../chacha/include/template/admin_other.tmpl.html | 66 --- .../m/chacha/include/template/message.tmpl.html | 7 - widgets/m/chacha/include/template/mypage.tmpl.html | 31 -- .../m/chacha/include/template/profile.tmpl.html | 28 - widgets/m/chacha/include/template/thread.tmpl.html | 37 -- .../chacha/include/template/thread_read.tmpl.html | 17 - widgets/m/chacha/include/template/top.tmpl.html | 5 - widgets/m/chacha/index.php | 23 - widgets/m/contactus/admin/index.php | 23 - widgets/m/contactus/images/icon32.gif | Bin 1266 -> 0 bytes widgets/m/contactus/images/icon64.gif | Bin 1993 -> 0 bytes .../container/admin_m_contactusWidgetContainer.php | 119 ----- .../container/m_contactusWidgetContainer.php | 231 --------- .../m/contactus/include/db/contactus_mainDb.php | 53 -- .../m/contactus/include/template/admin.tmpl.html | 53 -- .../m/contactus/include/template/index.tmpl.html | 40 -- widgets/m/contactus/index.php | 23 - widgets/m/contactus_custom/admin/index.php | 23 - widgets/m/contactus_custom/images/icon32.gif | Bin 1266 -> 0 bytes widgets/m/contactus_custom/images/icon64.gif | Bin 1993 -> 0 bytes .../admin_m_contactus_customWidgetContainer.php | 471 ----------------- .../m_contactus_customWidgetContainer.php | 347 ------------- .../include/db/contactus_customDb.php | 22 - widgets/m/contactus_custom/include/help/index.php | 53 -- .../include/template/admin.tmpl.html | 205 -------- .../include/template/admin_list.tmpl.html | 93 ---- .../include/template/index.tmpl.html | 15 - widgets/m/contactus_custom/index.php | 23 - widgets/m/content/admin/index.php | 23 - widgets/m/content/images/icon32.png | Bin 2572 -> 0 bytes widgets/m/content/images/icon64.png | Bin 8704 -> 0 bytes .../container/admin_m_contentWidgetContainer.php | 403 --------------- .../include/container/m_contentWidgetContainer.php | 231 --------- widgets/m/content/include/db/contentDb.php | 327 ------------ .../content/include/template/admin_main.tmpl.html | 119 ----- .../include/template/admin_main_detail.tmpl.html | 103 ---- widgets/m/content/include/template/main.tmpl.html | 4 - .../m/content/include/template/search.tmpl.html | 10 - widgets/m/content/index.php | 23 - widgets/m/content_search_box/images/icon32.png | Bin 22676 -> 0 bytes widgets/m/content_search_box/images/icon64.png | Bin 23634 -> 0 bytes .../m_content_search_boxWidgetContainer.php | 68 --- .../include/template/index.tmpl.html | 6 - widgets/m/content_search_box/index.php | 23 - widgets/m/custom_footer/admin/index.php | 23 - widgets/m/custom_footer/images/icon32.png | Bin 21811 -> 0 bytes widgets/m/custom_footer/images/icon64.png | Bin 22316 -> 0 bytes .../admin_m_custom_footerWidgetContainer.php | 84 --- .../container/m_custom_footerWidgetContainer.php | 72 --- .../custom_footer/include/template/admin.tmpl.html | 45 -- .../custom_footer/include/template/index.tmpl.html | 3 - widgets/m/custom_footer/index.php | 23 - widgets/m/custom_header/admin/index.php | 23 - widgets/m/custom_header/images/icon32.gif | Bin 223 -> 0 bytes widgets/m/custom_header/images/icon64.gif | Bin 407 -> 0 bytes .../admin_m_custom_headerWidgetContainer.php | 81 --- .../container/m_custom_headerWidgetContainer.php | 62 --- .../custom_header/include/template/admin.tmpl.html | 32 -- .../custom_header/include/template/index.tmpl.html | 3 - widgets/m/custom_header/index.php | 23 - widgets/m/default_login/images/icon32.png | Bin 24251 -> 0 bytes widgets/m/default_login/images/icon64.png | Bin 27735 -> 0 bytes .../container/m_default_loginWidgetContainer.php | 118 ----- .../default_login/include/template/index.tmpl.html | 18 - widgets/m/default_login/index.php | 23 - widgets/m/g_analytics/admin/index.php | 23 - widgets/m/g_analytics/ga.php | 186 ------- widgets/m/g_analytics/images/icon32.png | Bin 1502 -> 0 bytes widgets/m/g_analytics/images/icon64.png | Bin 4087 -> 0 bytes .../admin_m_g_analyticsWidgetContainer.php | 81 --- .../container/m_g_analyticsWidgetContainer.php | 94 ---- widgets/m/g_analytics/include/help/index.php | 25 - .../m/g_analytics/include/template/admin.tmpl.html | 30 -- .../m/g_analytics/include/template/main.tmpl.html | 1 - widgets/m/g_analytics/index.php | 23 - widgets/m/googlemaps/admin/index.php | 23 - widgets/m/googlemaps/images/icon32.gif | Bin 751 -> 0 bytes widgets/m/googlemaps/images/icon64.gif | Bin 1362 -> 0 bytes .../admin_m_googlemapsWidgetContainer.php | 452 ----------------- .../container/m_googlemapsWidgetContainer.php | 189 ------- widgets/m/googlemaps/include/help/index.php | 55 -- .../m/googlemaps/include/template/admin.tmpl.html | 128 ----- .../include/template/admin_list.tmpl.html | 108 ---- .../m/googlemaps/include/template/index.tmpl.html | 17 - widgets/m/googlemaps/index.php | 23 - widgets/m/menu/admin/index.php | 23 - widgets/m/menu/images/icon32.png | Bin 24910 -> 0 bytes widgets/m/menu/images/icon64.png | Bin 29932 -> 0 bytes .../container/admin_m_menuWidgetContainer.php | 429 ---------------- .../include/container/m_menuWidgetContainer.php | 232 --------- widgets/m/menu/include/db/menuDb.php | 99 ---- widgets/m/menu/include/help/index.php | 49 -- widgets/m/menu/include/template/admin.tmpl.html | 134 ----- .../m/menu/include/template/admin_list.tmpl.html | 116 ----- widgets/m/menu/include/template/index.tmpl.html | 15 - widgets/m/menu/index.php | 23 - widgets/m/pc_content/admin/index.php | 23 - widgets/m/pc_content/images/icon32.png | Bin 2572 -> 0 bytes widgets/m/pc_content/images/icon64.png | Bin 8704 -> 0 bytes .../admin_m_pc_contentWidgetContainer.php | 374 -------------- .../container/m_pc_contentWidgetContainer.php | 141 ----- widgets/m/pc_content/include/db/pc_contentDb.php | 478 ----------------- widgets/m/pc_content/include/help/index.php | 60 --- .../include/template/admin_main.tmpl.html | 121 ----- .../include/template/admin_main_detail.tmpl.html | 98 ---- .../m/pc_content/include/template/main.tmpl.html | 7 - widgets/m/pc_content/index.php | 23 - widgets/m/quizk/admin/index.php | 23 - .../container/admin_m_quizkBaseWidgetContainer.php | 111 ---- .../container/admin_m_quizkCsvWidgetContainer.php | 265 ---------- .../admin_m_quizkOperationWidgetContainer.php | 117 ----- .../container/admin_m_quizkWidgetContainer.php | 90 ---- .../container/m_quizkBaseWidgetContainer.php | 46 -- .../container/m_quizkCompleteWidgetContainer.php | 78 --- .../container/m_quizkProgressWidgetContainer.php | 182 ------- .../container/m_quizkTopWidgetContainer.php | 58 --- .../include/container/m_quizkWidgetContainer.php | 134 ----- widgets/m/quizk/include/db/quizkDb.php | 414 --------------- .../m/quizk/include/template/admin_csv.tmpl.html | 88 ---- .../include/template/admin_operation.tmpl.html | 40 -- .../m/quizk/include/template/complete.tmpl.html | 8 - widgets/m/quizk/include/template/main.tmpl.html | 7 - widgets/m/quizk/include/template/message.tmpl.html | 6 - .../m/quizk/include/template/progress.tmpl.html | 33 -- widgets/m/quizk/include/template/top.tmpl.html | 5 - widgets/m/quizk/index.php | 23 - widgets/m/sample/index.php | 85 ---- .../include/container/m_sample2WidgetContainer.php | 55 -- widgets/m/sample2/include/template/index.tmpl.html | 57 --- widgets/m/sample2/index.php | 23 - .../container/m_sample_inputWidgetContainer.php | 71 --- .../sample_input/include/template/index.tmpl.html | 17 - widgets/m/sample_input/index.php | 23 - .../container/admin_qrcodeWidgetContainer.php | 2 +- 238 files changed, 83 insertions(+), 18356 deletions(-) create mode 100644 include/sql/update/2018101201_to_2018110101.sql delete mode 100644 m/index.php delete mode 100644 templates/m/_admin/index.php delete mode 100644 templates/m/default/index.php delete mode 100644 templates/m/default/template_thumbnail.png delete mode 100644 templates/m/smallfont/index.php delete mode 100644 templates/m/smallfont/template_thumbnail.png delete mode 100644 widgets/m/adtag/admin/index.php delete mode 100644 widgets/m/adtag/include/container/admin_m_adtagWidgetContainer.php delete mode 100644 widgets/m/adtag/include/container/m_adtagWidgetContainer.php delete mode 100644 widgets/m/adtag/include/template/admin.tmpl.html delete mode 100644 widgets/m/adtag/include/template/admin_list.tmpl.html delete mode 100644 widgets/m/adtag/include/template/index.tmpl.html delete mode 100644 widgets/m/adtag/index.php delete mode 100644 widgets/m/bbs_2ch/admin/index.php delete mode 100644 widgets/m/bbs_2ch/images/ba.gif delete mode 100644 widgets/m/bbs_2ch/images/icon32.png delete mode 100644 widgets/m/bbs_2ch/images/icon64.png delete mode 100644 widgets/m/bbs_2ch/images/tubo.gif delete mode 100644 widgets/m/bbs_2ch/include/container/admin_m_bbs_2chBaseWidgetContainer.php delete mode 100644 widgets/m/bbs_2ch/include/container/admin_m_bbs_2chOtherWidgetContainer.php delete mode 100644 widgets/m/bbs_2ch/include/container/admin_m_bbs_2chWidgetContainer.php delete mode 100644 widgets/m/bbs_2ch/include/container/m_bbs_2chBaseWidgetContainer.php delete mode 100644 widgets/m/bbs_2ch/include/container/m_bbs_2chReadWidgetContainer.php delete mode 100644 widgets/m/bbs_2ch/include/container/m_bbs_2chSubjectWidgetContainer.php delete mode 100644 widgets/m/bbs_2ch/include/container/m_bbs_2chThreadWidgetContainer.php delete mode 100644 widgets/m/bbs_2ch/include/container/m_bbs_2chTopWidgetContainer.php delete mode 100644 widgets/m/bbs_2ch/include/container/m_bbs_2chWidgetContainer.php delete mode 100644 widgets/m/bbs_2ch/include/db/bbs_2chDb.php delete mode 100644 widgets/m/bbs_2ch/include/help/index.php delete mode 100644 widgets/m/bbs_2ch/include/template/admin_other.tmpl.html delete mode 100644 widgets/m/bbs_2ch/include/template/main.tmpl.html delete mode 100644 widgets/m/bbs_2ch/include/template/message.tmpl.html delete mode 100644 widgets/m/bbs_2ch/include/template/newthread.tmpl.html delete mode 100644 widgets/m/bbs_2ch/include/template/subject.tmpl.html delete mode 100644 widgets/m/bbs_2ch/include/template/thread.tmpl.html delete mode 100644 widgets/m/bbs_2ch/index.php delete mode 100644 widgets/m/bbs_2ch_search_box/images/icon32.png delete mode 100644 widgets/m/bbs_2ch_search_box/images/icon64.png delete mode 100644 widgets/m/bbs_2ch_search_box/include/container/m_bbs_2ch_search_boxWidgetContainer.php delete mode 100644 widgets/m/bbs_2ch_search_box/include/template/index.tmpl.html delete mode 100644 widgets/m/bbs_2ch_search_box/index.php delete mode 100644 widgets/m/blog/admin/index.php delete mode 100644 widgets/m/blog/images/icon32.png delete mode 100644 widgets/m/blog/images/icon64.png delete mode 100644 widgets/m/blog/include/container/admin_m_blogBaseWidgetContainer.php delete mode 100644 widgets/m/blog/include/container/admin_m_blogConfigWidgetContainer.php delete mode 100644 widgets/m/blog/include/container/admin_m_blogWidgetContainer.php delete mode 100644 widgets/m/blog/include/container/m_blogBaseWidgetContainer.php delete mode 100644 widgets/m/blog/include/container/m_blogReadWidgetContainer.php delete mode 100644 widgets/m/blog/include/container/m_blogWidgetContainer.php delete mode 100644 widgets/m/blog/include/db/blogDb.php delete mode 100644 widgets/m/blog/include/help/index.php delete mode 100644 widgets/m/blog/include/template/admin_config.tmpl.html delete mode 100644 widgets/m/blog/include/template/admin_message.tmpl.html delete mode 100644 widgets/m/blog/include/template/message.tmpl.html delete mode 100644 widgets/m/blog/include/template/thread_read.tmpl.html delete mode 100644 widgets/m/blog/index.php delete mode 100644 widgets/m/blog_category/admin/index.php delete mode 100644 widgets/m/blog_category/images/icon32.png delete mode 100644 widgets/m/blog_category/images/icon64.png delete mode 100644 widgets/m/blog_category/include/container/m_blog_categoryWidgetContainer.php delete mode 100644 widgets/m/blog_category/include/db/blog_categoryDb.php delete mode 100644 widgets/m/blog_category/include/template/menu.tmpl.html delete mode 100644 widgets/m/blog_category/index.php delete mode 100644 widgets/m/blog_list/admin/index.php delete mode 100644 widgets/m/blog_list/images/icon32.png delete mode 100644 widgets/m/blog_list/images/icon64.png delete mode 100644 widgets/m/blog_list/include/container/m_blog_listWidgetContainer.php delete mode 100644 widgets/m/blog_list/include/db/blog_listDb.php delete mode 100644 widgets/m/blog_list/include/template/main.tmpl.html delete mode 100644 widgets/m/blog_list/index.php delete mode 100644 widgets/m/blog_search/images/icon32.png delete mode 100644 widgets/m/blog_search/images/icon64.png delete mode 100644 widgets/m/blog_search/include/container/m_blog_searchWidgetContainer.php delete mode 100644 widgets/m/blog_search/include/template/index.tmpl.html delete mode 100644 widgets/m/blog_search/index.php delete mode 100644 widgets/m/chacha/admin/index.php delete mode 100644 widgets/m/chacha/images/default_avatar32.gif delete mode 100644 widgets/m/chacha/images/icon32.png delete mode 100644 widgets/m/chacha/images/icon64.png delete mode 100644 widgets/m/chacha/include/container/admin_m_chachaBaseWidgetContainer.php delete mode 100644 widgets/m/chacha/include/container/admin_m_chachaOtherWidgetContainer.php delete mode 100644 widgets/m/chacha/include/container/admin_m_chachaWidgetContainer.php delete mode 100644 widgets/m/chacha/include/container/m_chachaBaseWidgetContainer.php delete mode 100644 widgets/m/chacha/include/container/m_chachaMypageWidgetContainer.php delete mode 100644 widgets/m/chacha/include/container/m_chachaProfileWidgetContainer.php delete mode 100644 widgets/m/chacha/include/container/m_chachaReadWidgetContainer.php delete mode 100644 widgets/m/chacha/include/container/m_chachaThreadWidgetContainer.php delete mode 100644 widgets/m/chacha/include/container/m_chachaTopWidgetContainer.php delete mode 100644 widgets/m/chacha/include/container/m_chachaWidgetContainer.php delete mode 100644 widgets/m/chacha/include/db/chachaDb.php delete mode 100644 widgets/m/chacha/include/template/admin_other.tmpl.html delete mode 100644 widgets/m/chacha/include/template/message.tmpl.html delete mode 100644 widgets/m/chacha/include/template/mypage.tmpl.html delete mode 100644 widgets/m/chacha/include/template/profile.tmpl.html delete mode 100644 widgets/m/chacha/include/template/thread.tmpl.html delete mode 100644 widgets/m/chacha/include/template/thread_read.tmpl.html delete mode 100644 widgets/m/chacha/include/template/top.tmpl.html delete mode 100644 widgets/m/chacha/index.php delete mode 100644 widgets/m/contactus/admin/index.php delete mode 100644 widgets/m/contactus/images/icon32.gif delete mode 100644 widgets/m/contactus/images/icon64.gif delete mode 100644 widgets/m/contactus/include/container/admin_m_contactusWidgetContainer.php delete mode 100644 widgets/m/contactus/include/container/m_contactusWidgetContainer.php delete mode 100644 widgets/m/contactus/include/db/contactus_mainDb.php delete mode 100644 widgets/m/contactus/include/template/admin.tmpl.html delete mode 100644 widgets/m/contactus/include/template/index.tmpl.html delete mode 100644 widgets/m/contactus/index.php delete mode 100644 widgets/m/contactus_custom/admin/index.php delete mode 100644 widgets/m/contactus_custom/images/icon32.gif delete mode 100644 widgets/m/contactus_custom/images/icon64.gif delete mode 100644 widgets/m/contactus_custom/include/container/admin_m_contactus_customWidgetContainer.php delete mode 100644 widgets/m/contactus_custom/include/container/m_contactus_customWidgetContainer.php delete mode 100644 widgets/m/contactus_custom/include/db/contactus_customDb.php delete mode 100644 widgets/m/contactus_custom/include/help/index.php delete mode 100644 widgets/m/contactus_custom/include/template/admin.tmpl.html delete mode 100644 widgets/m/contactus_custom/include/template/admin_list.tmpl.html delete mode 100644 widgets/m/contactus_custom/include/template/index.tmpl.html delete mode 100644 widgets/m/contactus_custom/index.php delete mode 100644 widgets/m/content/admin/index.php delete mode 100644 widgets/m/content/images/icon32.png delete mode 100644 widgets/m/content/images/icon64.png delete mode 100644 widgets/m/content/include/container/admin_m_contentWidgetContainer.php delete mode 100644 widgets/m/content/include/container/m_contentWidgetContainer.php delete mode 100644 widgets/m/content/include/db/contentDb.php delete mode 100644 widgets/m/content/include/template/admin_main.tmpl.html delete mode 100644 widgets/m/content/include/template/admin_main_detail.tmpl.html delete mode 100644 widgets/m/content/include/template/main.tmpl.html delete mode 100644 widgets/m/content/include/template/search.tmpl.html delete mode 100644 widgets/m/content/index.php delete mode 100644 widgets/m/content_search_box/images/icon32.png delete mode 100644 widgets/m/content_search_box/images/icon64.png delete mode 100644 widgets/m/content_search_box/include/container/m_content_search_boxWidgetContainer.php delete mode 100644 widgets/m/content_search_box/include/template/index.tmpl.html delete mode 100644 widgets/m/content_search_box/index.php delete mode 100644 widgets/m/custom_footer/admin/index.php delete mode 100644 widgets/m/custom_footer/images/icon32.png delete mode 100644 widgets/m/custom_footer/images/icon64.png delete mode 100644 widgets/m/custom_footer/include/container/admin_m_custom_footerWidgetContainer.php delete mode 100644 widgets/m/custom_footer/include/container/m_custom_footerWidgetContainer.php delete mode 100644 widgets/m/custom_footer/include/template/admin.tmpl.html delete mode 100644 widgets/m/custom_footer/include/template/index.tmpl.html delete mode 100644 widgets/m/custom_footer/index.php delete mode 100644 widgets/m/custom_header/admin/index.php delete mode 100644 widgets/m/custom_header/images/icon32.gif delete mode 100644 widgets/m/custom_header/images/icon64.gif delete mode 100644 widgets/m/custom_header/include/container/admin_m_custom_headerWidgetContainer.php delete mode 100644 widgets/m/custom_header/include/container/m_custom_headerWidgetContainer.php delete mode 100644 widgets/m/custom_header/include/template/admin.tmpl.html delete mode 100644 widgets/m/custom_header/include/template/index.tmpl.html delete mode 100644 widgets/m/custom_header/index.php delete mode 100644 widgets/m/default_login/images/icon32.png delete mode 100644 widgets/m/default_login/images/icon64.png delete mode 100644 widgets/m/default_login/include/container/m_default_loginWidgetContainer.php delete mode 100644 widgets/m/default_login/include/template/index.tmpl.html delete mode 100644 widgets/m/default_login/index.php delete mode 100644 widgets/m/g_analytics/admin/index.php delete mode 100644 widgets/m/g_analytics/ga.php delete mode 100644 widgets/m/g_analytics/images/icon32.png delete mode 100644 widgets/m/g_analytics/images/icon64.png delete mode 100644 widgets/m/g_analytics/include/container/admin_m_g_analyticsWidgetContainer.php delete mode 100644 widgets/m/g_analytics/include/container/m_g_analyticsWidgetContainer.php delete mode 100644 widgets/m/g_analytics/include/help/index.php delete mode 100644 widgets/m/g_analytics/include/template/admin.tmpl.html delete mode 100644 widgets/m/g_analytics/include/template/main.tmpl.html delete mode 100644 widgets/m/g_analytics/index.php delete mode 100644 widgets/m/googlemaps/admin/index.php delete mode 100644 widgets/m/googlemaps/images/icon32.gif delete mode 100644 widgets/m/googlemaps/images/icon64.gif delete mode 100644 widgets/m/googlemaps/include/container/admin_m_googlemapsWidgetContainer.php delete mode 100644 widgets/m/googlemaps/include/container/m_googlemapsWidgetContainer.php delete mode 100644 widgets/m/googlemaps/include/help/index.php delete mode 100644 widgets/m/googlemaps/include/template/admin.tmpl.html delete mode 100644 widgets/m/googlemaps/include/template/admin_list.tmpl.html delete mode 100644 widgets/m/googlemaps/include/template/index.tmpl.html delete mode 100644 widgets/m/googlemaps/index.php delete mode 100644 widgets/m/menu/admin/index.php delete mode 100644 widgets/m/menu/images/icon32.png delete mode 100644 widgets/m/menu/images/icon64.png delete mode 100644 widgets/m/menu/include/container/admin_m_menuWidgetContainer.php delete mode 100644 widgets/m/menu/include/container/m_menuWidgetContainer.php delete mode 100644 widgets/m/menu/include/db/menuDb.php delete mode 100644 widgets/m/menu/include/help/index.php delete mode 100644 widgets/m/menu/include/template/admin.tmpl.html delete mode 100644 widgets/m/menu/include/template/admin_list.tmpl.html delete mode 100644 widgets/m/menu/include/template/index.tmpl.html delete mode 100644 widgets/m/menu/index.php delete mode 100644 widgets/m/pc_content/admin/index.php delete mode 100644 widgets/m/pc_content/images/icon32.png delete mode 100644 widgets/m/pc_content/images/icon64.png delete mode 100644 widgets/m/pc_content/include/container/admin_m_pc_contentWidgetContainer.php delete mode 100644 widgets/m/pc_content/include/container/m_pc_contentWidgetContainer.php delete mode 100644 widgets/m/pc_content/include/db/pc_contentDb.php delete mode 100644 widgets/m/pc_content/include/help/index.php delete mode 100644 widgets/m/pc_content/include/template/admin_main.tmpl.html delete mode 100644 widgets/m/pc_content/include/template/admin_main_detail.tmpl.html delete mode 100644 widgets/m/pc_content/include/template/main.tmpl.html delete mode 100644 widgets/m/pc_content/index.php delete mode 100644 widgets/m/quizk/admin/index.php delete mode 100644 widgets/m/quizk/include/container/admin_m_quizkBaseWidgetContainer.php delete mode 100644 widgets/m/quizk/include/container/admin_m_quizkCsvWidgetContainer.php delete mode 100644 widgets/m/quizk/include/container/admin_m_quizkOperationWidgetContainer.php delete mode 100644 widgets/m/quizk/include/container/admin_m_quizkWidgetContainer.php delete mode 100644 widgets/m/quizk/include/container/m_quizkBaseWidgetContainer.php delete mode 100644 widgets/m/quizk/include/container/m_quizkCompleteWidgetContainer.php delete mode 100644 widgets/m/quizk/include/container/m_quizkProgressWidgetContainer.php delete mode 100644 widgets/m/quizk/include/container/m_quizkTopWidgetContainer.php delete mode 100644 widgets/m/quizk/include/container/m_quizkWidgetContainer.php delete mode 100644 widgets/m/quizk/include/db/quizkDb.php delete mode 100644 widgets/m/quizk/include/template/admin_csv.tmpl.html delete mode 100644 widgets/m/quizk/include/template/admin_operation.tmpl.html delete mode 100644 widgets/m/quizk/include/template/complete.tmpl.html delete mode 100644 widgets/m/quizk/include/template/main.tmpl.html delete mode 100644 widgets/m/quizk/include/template/message.tmpl.html delete mode 100644 widgets/m/quizk/include/template/progress.tmpl.html delete mode 100644 widgets/m/quizk/include/template/top.tmpl.html delete mode 100644 widgets/m/quizk/index.php delete mode 100644 widgets/m/sample/index.php delete mode 100644 widgets/m/sample2/include/container/m_sample2WidgetContainer.php delete mode 100644 widgets/m/sample2/include/template/index.tmpl.html delete mode 100644 widgets/m/sample2/index.php delete mode 100644 widgets/m/sample_input/include/container/m_sample_inputWidgetContainer.php delete mode 100644 widgets/m/sample_input/include/template/index.tmpl.html delete mode 100644 widgets/m/sample_input/index.php diff --git a/include/container/baseFrameContainer.php b/include/container/baseFrameContainer.php index 1acba2ff..66d4b394 100644 --- a/include/container/baseFrameContainer.php +++ b/include/container/baseFrameContainer.php @@ -26,7 +26,6 @@ class BaseFrameContainer extends Core const ERR_MESSAGE_ACCESS_DENY = 'Access denied.'; // ウィジェットアクセスエラーのメッセージ const SITE_ACCESS_EXCEPTION_IP = 'site_access_exception_ip'; // アクセス制御、例外とするIP const CONFIG_KEY_MSG_TEMPLATE = 'msg_template'; // メッセージ用テンプレート取得キー -// const CF_MOBILE_AUTO_REDIRECT = 'mobile_auto_redirect'; // 携帯の自動遷移 const TEMPLATE_GENERATOR_THEMLER = 'themler'; // テンプレート作成アプリケーション(Themler) /** @@ -276,14 +275,6 @@ class BaseFrameContainer extends Core return; } // #################### URLの遷移 ####################### - //if ($this->gSystem->getSystemConfig(self::CF_MOBILE_AUTO_REDIRECT)){ // 携帯自動遷移を行う場合 - if ($this->gSystem->mobileAutoRedirect()){ // 携帯自動遷移を行う場合 - // 携帯のときは携帯用URLへ遷移 - if ($this->gEnv->isMobile() && !$this->gEnv->getIsMobileSite()){ - $this->gPage->redirect($this->gEnv->getDefaultMobileUrl(true/*携帯用パラメータ付加*/), true/*遷移時のダイアログ表示を抑止*/); - return; - } - } if ($this->gSystem->smartphoneAutoRedirect()){ // スマートフォン自動遷移を行う場合 // スマートフォンのときはスマートフォンURLへ遷移 if ($this->gEnv->isSmartphone() && !$this->gEnv->getIsSmartphoneSite()){ @@ -673,26 +664,20 @@ class BaseFrameContainer extends Core $this->gEnv->setCurrentTemplateId($curTemplate, $subTemplateId); // テンプレート情報を取得 - $convType = 0; // 変換処理タイプ(0=デフォルト(Joomla!v1.0)、-1=携帯用、1=Joomla!v1.5、2=Joomla!v2.5) - if ($this->gEnv->getIsMobileSite()){ - $convType = -1; // 携帯サイト用変換 - } else { +// $convType = 0; // 変換処理タイプ(0=デフォルト(Joomla!v1.0)、-1=携帯用、1=Joomla!v1.5、2=Joomla!v2.5) +// if ($this->gEnv->getIsMobileSite()){ +// $convType = -1; // 携帯サイト用変換 +// } else { // テンプレートタイプを取得(0=デフォルト(Joomla!v1.0),1=Joomla!v1.5,2=Joomla!v2.5) $convType = $this->gEnv->getCurrentTemplateType(); - } +// } // バッファリングの準備 if (method_exists($this, '_prepareBuffer')) $this->_prepareBuffer($request); // ################### バッファリング開始 ###################### // ob_end_flush()までの出力をバッファリングする - if ($convType == -1){// 携帯用サイトの場合は出力エンコーディングを変更 - $mobileEncoding = $this->gEnv->getMobileEncoding(); // 携帯用エンコーディングを取得 - mb_http_output($mobileEncoding); - ob_start("mb_output_handler"); // 出力のバッファリング開始 - } else { - ob_start(); - } + ob_start(); // サブクラスの前処理を実行 if (method_exists($this, '_preBuffer')) $this->_preBuffer($request); @@ -1133,17 +1118,6 @@ class BaseFrameContainer extends Core // 遅延実行ウィジェットの出力を埋め込む。HTMLヘッダ出力する。 $destContents = $this->gPage->lateLaunchWidget($request, $srcContents); - - // 携帯インターフェイスのときのときは、手動変換後、バイナリコード(絵文字等)を埋め込む - if ($convType == -1){ // 携帯アクセスポイントの場合 - // 出力するコードに変換 - $destContents = mb_convert_encoding($destContents, $mobileEncoding, M3_ENCODING); - - // コンテンツ変換メソッドがある場合は実行 - if (method_exists($this, '_convContents')){ - $destContents = $this->_convContents($destContents);// 絵文字埋め込み処理等 - } - } // ##### CSS生成の場合は、すべてのウィジェット実行後出力を削除する ##### if ($cmd == M3_REQUEST_CMD_CSS) $destContents = ''; // CSS生成のとき @@ -1229,8 +1203,6 @@ class BaseFrameContainer extends Core if ($pageId == $this->gEnv->getDefaultPageId()){ // 通常サイトのとき $curTemplate = $this->gSystem->defaultTemplateId(); $subTemplateId = $this->gSystem->defaultSubTemplateId(); - } else if ($pageId == $this->gEnv->getDefaultMobilePageId()){ // 携帯サイトのとき - $curTemplate = $this->gSystem->defaultMobileTemplateId(); // 携帯用デフォルトテンプレート } else if ($pageId == $this->gEnv->getDefaultSmartphonePageId()){ // スマートフォン用サイトのとき $curTemplate = $this->gSystem->defaultSmartphoneTemplateId(); // スマートフォン用デフォルトテンプレート } else if ($pageId == $this->gEnv->getDefaultAdminPageId() || // 管理サイトのとき @@ -1266,9 +1238,7 @@ class BaseFrameContainer extends Core // セッションにないときはデフォルトを取得 if (empty($curTemplate)){ - if ($this->gEnv->getIsMobileSite()){// 携帯用サイトの場合 - $curTemplate = $this->gSystem->defaultMobileTemplateId(); // 携帯用デフォルトテンプレート - } else if ($this->gEnv->getIsSmartphoneSite()){// スマートフォン用サイトの場合 + if ($this->gEnv->getIsSmartphoneSite()){// スマートフォン用サイトの場合 $curTemplate = $this->gSystem->defaultSmartphoneTemplateId(); // スマートフォン用デフォルトテンプレート } else { $curTemplate = $this->gSystem->defaultTemplateId(); diff --git a/include/container/m_indexFrameContainer.php b/include/container/m_indexFrameContainer.php index 704d1541..a2842363 100644 --- a/include/container/m_indexFrameContainer.php +++ b/include/container/m_indexFrameContainer.php @@ -32,9 +32,6 @@ class m_indexFrameContainer extends BaseFrameContainer */ function _prepareBuffer($request) { - // 携帯の機種に応じて出力エンコーディングを設定する - //$encode = 'SJIS'; - //$this->gEnv->setMobileEncoding($encode); } /** * ビュー作成の前処理 diff --git a/include/manager/envManager.php b/include/manager/envManager.php index c7c1d8bd..1d8f9673 100644 --- a/include/manager/envManager.php +++ b/include/manager/envManager.php @@ -61,7 +61,6 @@ class EnvManager extends Core private $canUseDbSession; // DBセッションが使用できるかどうか private $canUseDb; // DBが使用可能状態にあるかどうか private $canUseCookie; // クッキーが使用可能かどうか - private $mobileUseSession; // 携帯でセッション管理を使用するかどうか private $canChangeLang; // 言語変更可能かどうか private $useSsl; // SSL機能を使用するかどうか private $useSslAdmin; // 管理画面にSSL機能を使用するかどうか @@ -77,7 +76,6 @@ class EnvManager extends Core private $isSmartphoneSite; // スマートフォン用URLへのアクセスかどうか private $isSubWidget; // サブウィジェットの起動かどうか private $isServerConnector; // サーバ接続かどうか - private $mobileEncoding; // 携帯用の入力、出力エンコーディング private $workDir; // 作業用ディレクトリ private $userAgent = array(); // アクセス端末の情報 private $menuAttr = array(); // メニューの表示属性 @@ -98,8 +96,6 @@ class EnvManager extends Core const DEFAULT_CSV_NL_CODE = 'csv_nl_code'; // デフォルトのCSV改行コード const DEFAULT_CSV_FILE_SUFFIX = 'csv_file_suffix'; // デフォルトのCSVファイル拡張子 const MULTI_LANGUAGE = 'multi_language'; // 多言語対応かどうか - const MOBILE_ENCODING = 'mobile_encoding'; // 携帯用入出力エンコーディング - const MOBILE_CHARSET = 'mobile_charset'; // 携帯用HTML上のエンコーディング表記 const DEFAULT_THEME_CSS_FILE = 'jquery-ui.custom.css'; // テーマファイル const CONFIG_ID_WORK_DIR = 'work_dir'; // 作業用ディレクトリ const DEFAULT_PAGE_ID = 'index'; // デフォルトのページID @@ -111,14 +107,12 @@ class EnvManager extends Core const USER_AGENT_TYPE_MOBILE = 'mobile'; // アクセス端末の種類(携帯) const CF_CSV_DOWNLOAD_ENCODING = 'csv_download_encoding'; // CSVダウンロードエンコーディング const CF_CSV_UPLOAD_ENCODING = 'csv_upload_encoding'; // CSVアップロードエンコーディング - const CF_MOBILE_USE_SESSION = 'mobile_use_session'; // 携帯でセッション管理を行うかどうか const CF_USE_SSL = 'use_ssl'; // SSL機能を使用するかどうか const CF_USE_SSL_ADMIN = 'use_ssl_admin'; // 管理画面にSSL機能を使用するかどうか const CF_SSL_URL = 'ssl_root_url'; // SSL用のルートURL const CF_DEFAULT_LANG = 'default_lang'; // デフォルト言語 const CF_MULTI_DOMAIN = 'multi_domain'; // マルチドメイン運用かどうか const CF_SITE_SMARTPHONE_URL = 'site_smartphone_url'; // スマートフォン用サイトURL - const CF_SITE_MOBILE_URL = 'site_mobile_url'; // 携帯用サイトURL const CF_REALTIME_SERVER_PORT = 'realtime_server_port'; // リアルタイムサーバ用ポート番号 const CF_MULTI_DEVICE_ADMIN = 'multi_device_admin'; // マルチデバイス最適化管理画面 const DEFAULT_SITE_NAME = 'サイト名未設定'; // 管理画面用のデフォルトサイト名 @@ -244,9 +238,6 @@ class EnvManager extends Core $this->useSsl = $this->gSystem->getSystemConfig(self::CF_USE_SSL); // SSL機能を使用するかどうか $this->useSslAdmin = $this->gSystem->getSystemConfig(self::CF_USE_SSL_ADMIN); // 管理画面にSSL機能を使用するかどうか $this->sslUrl = $this->gSystem->getSystemConfig(self::CF_SSL_URL); // SSL用URL - $this->mobileEncoding = $this->gSystem->getSystemConfig(self::MOBILE_ENCODING); // 携帯用の入力、出力エンコーディング - $this->mobileCharset = $this->gSystem->getSystemConfig(self::MOBILE_CHARSET); // 携帯用HTML上のエンコーディング表記 - $this->mobileUseSession = $this->gSystem->getSystemConfig(self::CF_MOBILE_USE_SESSION); // 携帯でセッション管理を使用するかどうか $value = $this->gSystem->getSystemConfig(self::CONFIG_ID_WORK_DIR);// 作業用ディレクトリ if (!empty($value)) $this->workDir = $value; } @@ -262,8 +253,6 @@ class EnvManager extends Core $url = ''; if ($this->isSmartphoneSite){ $url = $this->gSystem->getSystemConfig(self::CF_SITE_SMARTPHONE_URL); // スマートフォン用サイトURL - } else if ($this->isMobileSite){ - $url = $this->gSystem->getSystemConfig(self::CF_SITE_MOBILE_URL); // 携帯用サイトURL } if (!empty($url)) $this->currentDomainRootUrl = $url; } @@ -789,23 +778,8 @@ class EnvManager extends Core */ public function getDefaultMobileUrl($withMobileParam = false, $withFilename = true) { - static $mobileUrl; - - if ($this->multiDomain){ // マルチドメイン運用の場合 - if (!isset($mobileUrl)) $mobileUrl = $this->gSystem->getSystemConfig(self::CF_SITE_MOBILE_URL); // 携帯用サイトURL - - if (empty($mobileUrl)){ - $url = M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_MOBILE; - } else { - $url = $mobileUrl; - } - } else { - $url = M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_MOBILE; - } + $url = M3_SYSTEM_ROOT_URL . '/' . M3_DIR_NAME_MOBILE; if ($withFilename) $url .= '/' . M3_FILENAME_INDEX; - if ($withMobileParam){ // 携帯用のパラメータを付加するとき - $url = createUrl($url, $this->_getMobileUrlParam()); - } return $url; } /** @@ -2433,9 +2407,6 @@ class EnvManager extends Core */ public function createCurrentPageUrlForMobile($addParam = '', $withSessionId = true) { - // 携帯用パラメータ取得 - $param = $this->_getMobileUrlParam($withSessionId); - // ページサブID付加 $param['sub'] = $this->getCurrentPageSubId(); @@ -2557,42 +2528,6 @@ class EnvManager extends Core return $this->useSslAdmin; } /** - * 携帯用の入出力エンコーディングを設定 - * - * @param string エンコーディング - */ - public function setMobileEncoding($value) - { - $this->mobileEncoding = $value; - } - /** - * 携帯用の入出力エンコーディングを取得 - * - * @return string エンコーディング - */ - public function getMobileEncoding() - { - return $this->mobileEncoding; - } - /** - * 携帯用HTML上のエンコーディング表記を設定 - * - * @param string エンコーディング - */ - public function setMobileCharset($value) - { - $this->mobileCharset = $value; - } - /** - * 携帯用HTML上のエンコーディング表記を取得 - * - * @return string エンコーディング - */ - public function getMobileCharset() - { - return $this->mobileCharset; - } - /** * DBセッションが使用できるかどうか */ public function canUseDbSession() @@ -3005,31 +2940,6 @@ class EnvManager extends Core return $isSmartphone; } /** - * 携帯用のURLパラメータを取得 - * - * @param bool $withSessionId セッションIDを付加するかどうか - * @return array URLパラメータ - */ - function _getMobileUrlParam($withSessionId = true) - { - global $gInstanceManager; - - $param = array(); - $agent = $gInstanceManager->getMobileAgent(); - if (method_exists($agent, 'isNonMobile')){ - if (!$agent->isNonMobile()){ // 携帯端末でのアクセスの場合 - // ログインしている場合はセッションIDを付加(セッション管理機能が使用可能なときのみ) - //if (!empty($this->mobileUseSession) && $this->isCurrentUserLogined()) $param[session_name()] = session_id(); - // ログイン状況に関わらずセッションIDを付加(セッション管理機能が使用可能なときのみ) - if ($withSessionId && !empty($this->mobileUseSession)) $param[session_name()] = session_id(); - - // ドコモ端末の場合はiモードIDを送信させる - if ($agent->isDoCoMo()) $param['guid'] = 'ON'; - } - } - return $param; - } - /** * 管理画面の小画面デバイス最適化を行うかどうか * * @return bool true=最適化を行う、false=最適化を行わない diff --git a/include/manager/pageManager.php b/include/manager/pageManager.php index 34e304ec..badfd993 100644 --- a/include/manager/pageManager.php +++ b/include/manager/pageManager.php @@ -2490,8 +2490,6 @@ class PageManager extends Core if (empty($curTemplate)){ if ($pageId == $this->gEnv->getDefaultPageId()){ // 通常サイトのとき $curTemplate = $this->gSystem->defaultTemplateId(); - } else if ($pageId == $this->gEnv->getDefaultMobilePageId()){ // 携帯サイトのとき - $curTemplate = $this->gSystem->defaultMobileTemplateId(); // 携帯用デフォルトテンプレート } else if ($pageId == $this->gEnv->getDefaultSmartphonePageId()){ // スマートフォン用サイトのとき $curTemplate = $this->gSystem->defaultSmartphoneTemplateId(); // スマートフォン用デフォルトテンプレート } @@ -3451,11 +3449,7 @@ class PageManager extends Core $docTypeStr = ''; } } - if ($gEnvManager->getIsMobileSite()){ // 携帯用サイトへのアクセスの場合 - echo 'getMobileCharset() . '" ?>' . M3_NL; - } else { - echo '' . M3_NL; - } + echo '' . M3_NL; if (empty($docTypeStr)) $docTypeStr = ''; echo $docTypeStr . M3_NL; } @@ -3502,49 +3496,36 @@ class PageManager extends Core // 実行コマンドを取得 $cmd = $gRequestManager->trimValueOf(M3_REQUEST_PARAM_OPERATION_COMMAND); - if ($gEnvManager->getIsMobileSite()){ // 携帯サイトの場合 - // キャラクターセット - $headStr .= '' . M3_NL; - - // キャッシュを保存させない - $headStr .= '' . M3_NL; - $headStr .= '' . M3_NL; - $headStr .= '' . M3_NL; + if ($gEnvManager->getIsSmartphoneSite()){ // スマートフォン用サイトのときはHTML5で設定 + $this->isHtml5 = true; + } else { + $tempVer = $gEnvManager->getCurrentTemplateType(); // テンプレートタイプを取得(0=デフォルト(Joomla!v1.0),1=Joomla!v1.5,2=Joomla!v2.5) + if (intval($tempVer) >= 2) $this->isHtml5 = true; + } - // サイト構築エンジン - $headStr .= '' . M3_NL; - } else { // PC用サイト、管理用サイト、スマートフォン用サイトのとき - if ($gEnvManager->getIsSmartphoneSite()){ // スマートフォン用サイトのときはHTML5で設定 - $this->isHtml5 = true; - } else { - $tempVer = $gEnvManager->getCurrentTemplateType(); // テンプレートタイプを取得(0=デフォルト(Joomla!v1.0),1=Joomla!v1.5,2=Joomla!v2.5) - if (intval($tempVer) >= 2) $this->isHtml5 = true; - } - - // キャラクターセット - if ($this->isHtml5){ - $headStr .= '' . M3_NL; + // キャラクターセット + if ($this->isHtml5){ + $headStr .= '' . M3_NL; + } else { + $headStr .= '' . M3_NL; + $headStr .= '' . M3_NL; + $headStr .= '' . M3_NL; + } + if ($gEnvManager->isAdminDirAccess()){ // 管理画面へのアクセスのとき + // Bootstrapで必要なMETAタグを追加 + $headStr .= '' . M3_NL; + } + + // 基準ディレクトリの指定 + if ($cmd == M3_REQUEST_CMD_SHOW_POSITION || // 表示位置を表示するとき + $cmd == M3_REQUEST_CMD_SHOW_POSITION_WITH_WIDGET){ // 表示位置を表示するとき(ウィジェット付き) + + if ($gEnvManager->getUseSslAdmin()){ + $rootUrl = $gEnvManager->getSslRootUrl(); } else { - $headStr .= '' . M3_NL; - $headStr .= '' . M3_NL; - $headStr .= '' . M3_NL; - } - if ($gEnvManager->isAdminDirAccess()){ // 管理画面へのアクセスのとき - // Bootstrapで必要なMETAタグを追加 - $headStr .= '' . M3_NL; - } - - // 基準ディレクトリの指定 - if ($cmd == M3_REQUEST_CMD_SHOW_POSITION || // 表示位置を表示するとき - $cmd == M3_REQUEST_CMD_SHOW_POSITION_WITH_WIDGET){ // 表示位置を表示するとき(ウィジェット付き) - - if ($gEnvManager->getUseSslAdmin()){ - $rootUrl = $gEnvManager->getSslRootUrl(); - } else { - $rootUrl = $gEnvManager->getRootUrl(); - } - $headStr .= '' . M3_NL; + $rootUrl = $gEnvManager->getRootUrl(); } + $headStr .= '' . M3_NL; } return $headStr; } @@ -5621,8 +5602,6 @@ class PageManager extends Core if (empty($curTemplate)){ if ($pageId == $this->gEnv->getDefaultPageId()){ // 通常サイトのとき $curTemplate = $this->gSystem->defaultTemplateId(); - } else if ($pageId == $this->gEnv->getDefaultMobilePageId()){ // 携帯サイトのとき - $curTemplate = $this->gSystem->defaultMobileTemplateId(); // 携帯用デフォルトテンプレート } else if ($pageId == $this->gEnv->getDefaultSmartphonePageId()){ // スマートフォン用サイトのとき $curTemplate = $this->gSystem->defaultSmartphoneTemplateId(); // スマートフォン用デフォルトテンプレート } @@ -7554,8 +7533,6 @@ class PageManager extends Core $templateId = ''; if ($pageId == $this->gEnv->getDefaultPageId()){ // 通常サイトのとき $templateId = $this->gSystem->defaultTemplateId(); - } else if ($pageId == $this->gEnv->getDefaultMobilePageId()){ // 携帯サイトのとき - $templateId = $this->gSystem->defaultMobileTemplateId(); // 携帯用デフォルトテンプレート } else if ($pageId == $this->gEnv->getDefaultSmartphonePageId()){ // スマートフォン用サイトのとき $templateId = $this->gSystem->defaultSmartphoneTemplateId(); // スマートフォン用デフォルトテンプレート } diff --git a/include/manager/requestManager.php b/include/manager/requestManager.php index e8cf7629..549ec894 100644 --- a/include/manager/requestManager.php +++ b/include/manager/requestManager.php @@ -284,52 +284,6 @@ class RequestManager extends Core return preg_replace($search, $replace, $src); } /** - * (携帯用)POST,GETから値を取得(トリミング(前後の空白削除)あり) - * - * POSTまたはGETから値を取得し、トリミング(前後の空白削除)する - * デフォルトでHTMLタグを取り除く - * 携帯用の文字コード変換を行う - * - * @param string $name キー値 - * @param string $default 値が存在しないときのデフォルト値 - * @return string 取得値 - */ - public function mobileTrimValueOf($name, $default = '') - { - // 携帯用エンコーディングを取得 - $mobileEncoding = $this->gEnv->getMobileEncoding(); - - // 入力データの文字コードをシステム内部コードに変換する - $srcValue = $this->trimValueOf($name, $default); - if (is_array($srcValue)){ // 配列の場合 - $destValue = array(); - if (function_exists('mb_convert_encoding')){ - foreach (array_keys($srcValue) as $key){ - $destValue[] = mb_convert_encoding($srcValue[$key], M3_ENCODING, $mobileEncoding); - } - } - } else { - $destValue = ''; - if (function_exists('mb_convert_encoding')) $destValue = mb_convert_encoding($srcValue, M3_ENCODING, $mobileEncoding); - } - return $destValue; - } - /** - * 携帯用のテキストに変換 - * - * @param string $srcStr 変換するデータ - * @return string 変換後データ - */ - function convMobileText($srcStr) - { - // 携帯用エンコーディングを取得 - $mobileEncoding = $this->gEnv->getMobileEncoding(); - - $destStr = ''; - if (function_exists('mb_convert_encoding')) $destStr = mb_convert_encoding($srcStr, $mobileEncoding, M3_ENCODING); - return $destStr; - } - /** * 取得メソッドがGETかどうか * * @return bool true=GETメソッド、false=GET以外 diff --git a/include/manager/systemManager.php b/include/manager/systemManager.php index 8999b5f7..f0fdad80 100644 --- a/include/manager/systemManager.php +++ b/include/manager/systemManager.php @@ -24,7 +24,6 @@ class SystemManager extends Core private $defaultAdminTemplateId; // 管理画面用テンプレートID private $defaultTemplateId; // PC用テンプレートID private $defaultSubTemplateId; // PC用サブテンプレートID - private $defaultMobileTemplateId; // 携帯用テンプレートID private $defaultSmartphoneTemplateId; // スマートフォン用テンプレートID private $adminDefaultTheme; // 管理画面用jQueryUIテーマ private $permitInitSystem; // システム初期化可能かどうか @@ -32,7 +31,6 @@ class SystemManager extends Core private $sitePcInPublic; // PC用サイトの公開状況 private $siteMobileInPublic; // 携帯用サイトの公開状況 private $siteSmartphoneInPublic; // スマートフォン用サイトの公開状況 - private $mobileAutoRedirect; // 携帯の自動遷移 private $smartphoneAutoRedirect; // スマートフォンの自動遷移 private $usePageCache; // 表示キャッシュ機能を使用するかどうか private $pageCacheLifetime; // 画面キャッシュの更新時間(分) @@ -58,13 +56,11 @@ class SystemManager extends Core const CF_PAGE_CACHE_LIFETIME = 'page_cache_lifetime'; // 画面キャッシュの更新時間(分) const CF_DEFAULT_TEMPLATE = 'default_template'; // システム定義値取得用キー(PC用デフォルトテンプレート) const CF_DEFAULT_SUB_TEMPLATE = 'default_sub_template'; // システム定義値取得用キー(PC用デフォルトサブテンプレート) - const CF_DEFAULT_TEMPLATE_MOBILE = 'mobile_default_template'; // システム定義値取得用キー(携帯用デフォルトテンプレート) const CF_DEFAULT_TEMPLATE_SMARTPHONE = 'smartphone_default_template'; // システム定義値取得用キー(スマートフォン用デフォルトテンプレート) const CF_ADMIN_DEFAULT_THEME = 'admin_default_theme'; // 管理画面用jQueryUIテーマ const CF_DEFAULT_THEME = 'default_theme'; // フロント画面用jQueryUIテーマ const CF_ACCEPT_LANGUAGE = 'accept_language'; // アクセス可能言語 const CF_ADMIN_DEFAULT_TEMPLATE = 'admin_default_template'; // 管理用デフォルトテンプレート - const CF_MOBILE_AUTO_REDIRECT = 'mobile_auto_redirect'; // 携帯の自動遷移 const CF_SMARTPHONE_AUTO_REDIRECT = 'smartphone_auto_redirect'; // スマートフォンの自動遷移 const CF_HIERARCHICAL_PAGE = 'hierarchical_page'; // 階層化ページを使用するかどうか const DEFAULT_PAGE_CACHE_LIFETIME = 1440; // デフォルトの画面キャッシュの更新時間(分)。1日ごと。 @@ -89,7 +85,6 @@ class SystemManager extends Core $this->defaultAdminTemplateId = ''; // 管理画面用テンプレートID $this->defaultTemplateId = ''; // PC用テンプレートID $this->defaultSubTemplateId = ''; // PC用サブテンプレートID - $this->defaultMobileTemplateId = ''; // 携帯用テンプレートID $this->defaultSmartphoneTemplateId = ''; // スマートフォン用テンプレートID $this->adminDefaultTheme = ''; // 管理画面用jQueryUIテーマ $this->permitInitSystem = false; // システム初期化可能かどうか @@ -97,7 +92,6 @@ class SystemManager extends Core $this->sitePcInPublic = '1'; // PC用サイトの公開状況 $this->siteMobileInPublic = '1'; // 携帯用サイトの公開状況 $this->siteSmartphoneInPublic = '1'; // スマートフォン用サイトの公開状況 - $this->mobileAutoRedirect = '0'; // 携帯の自動遷移 $this->smartphoneAutoRedirect = '0'; // スマートフォンの自動遷移 $this->usePageCache = '0'; // 表示キャッシュ機能を使用するかどうか $this->pageCacheLifetime = self::DEFAULT_PAGE_CACHE_LIFETIME; // 画面キャッシュの更新時間(分) @@ -173,7 +167,6 @@ class SystemManager extends Core $this->defaultAdminTemplateId = $this->getSystemConfig(self::CF_ADMIN_DEFAULT_TEMPLATE); // 管理画面用テンプレートID $this->defaultTemplateId = $this->getSystemConfig(self::CF_DEFAULT_TEMPLATE); // PC用テンプレートID $this->defaultSubTemplateId = $this->getSystemConfig(self::CF_DEFAULT_SUB_TEMPLATE); // PC用サブテンプレートID - $this->defaultMobileTemplateId = $this->getSystemConfig(self::CF_DEFAULT_TEMPLATE_MOBILE);// 携帯用テンプレートID $this->defaultSmartphoneTemplateId = $this->getSystemConfig(self::CF_DEFAULT_TEMPLATE_SMARTPHONE); // スマートフォン用テンプレートID $this->adminDefaultTheme = $this->getSystemConfig(self::CF_ADMIN_DEFAULT_THEME); // 管理画面用jQueryUIテーマ if ($this->getSystemConfig(self::CF_PERMIT_INIT_SYSTEM) == '1'){// システム初期化可能かどうか @@ -194,8 +187,6 @@ class SystemManager extends Core if ($this->siteMobileInPublic == '') $this->siteMobileInPublic = '1'; // デフォルトは公開 $this->siteSmartphoneInPublic = $this->getSystemConfig(self::CF_SITE_SMARTPHONE_IN_PUBLIC); // スマートフォン用サイトの公開状況 if ($this->siteSmartphoneInPublic == '') $this->siteSmartphoneInPublic = '1'; // デフォルトは公開 - $this->mobileAutoRedirect = $this->getSystemConfig(self::CF_MOBILE_AUTO_REDIRECT); // 携帯の自動遷移 - if ($this->mobileAutoRedirect == '') $this->mobileAutoRedirect = '0'; $this->smartphoneAutoRedirect = $this->getSystemConfig(self::CF_SMARTPHONE_AUTO_REDIRECT); // スマートフォンの自動遷移 if ($this->smartphoneAutoRedirect == '') $this->smartphoneAutoRedirect = '0'; $this->usePageCache = $this->getSystemConfig(self::CF_USE_PAGE_CACHE); // 表示キャッシュ機能を使用するかどうか @@ -357,19 +348,6 @@ class SystemManager extends Core return $this->defaultSubTemplateId; } /** - * 携帯用デフォルトのテンプレートIDを取得 - * - * @param bool $reload 再取得するかどうか - * @return string デフォルトのテンプレートID - */ - function defaultMobileTemplateId($reload = false) - { - if ($reload){ - $this->defaultMobileTemplateId = $this->db->getSystemConfig(self::CF_DEFAULT_TEMPLATE_MOBILE); - } - return $this->defaultMobileTemplateId; - } - /** * スマートフォン用デフォルトのテンプレートIDを取得 * * @param bool $reload 再取得するかどうか @@ -400,20 +378,6 @@ class SystemManager extends Core return $ret; } /** - * 携帯用デフォルトテンプレートの変更 - * - * @param string $templateId デフォルトテンプレートID - * @return true=成功、false=失敗 - */ - function changeDefaultMobileTemplate($templateId) - { - $ret = $this->db->updateSystemConfig(self::CF_DEFAULT_TEMPLATE_MOBILE, $templateId); - - // データ再取得 - $this->defaultMobileTemplateId(true); - return $ret; - } - /** * スマートフォン用デフォルトテンプレートの変更 * * @param string $templateId デフォルトテンプレートID @@ -619,20 +583,6 @@ class SystemManager extends Core return $this->siteSmartphoneInPublic; // スマートフォン用サイトの公開状況 } /** - * 携帯の自動遷移を行うかどうか - * - * @param bool $reload 再取得するかどうか - * @return bool true=公開、false=非公開 - */ - public function mobileAutoRedirect($reload = false) - { - if ($reload){ - $this->mobileAutoRedirect = $this->db->getSystemConfig(self::CF_MOBILE_AUTO_REDIRECT); // 携帯の自動遷移 - if ($this->mobileAutoRedirect == '') $this->mobileAutoRedirect = '0'; - } - return $this->mobileAutoRedirect; - } - /** * スマートフォンの自動遷移を行うかどうか * * @param bool $reload 再取得するかどうか diff --git a/include/sql/create_base.sql b/include/sql/create_base.sql index 3392c14f..b951fcaf 100644 --- a/include/sql/create_base.sql +++ b/include/sql/create_base.sql @@ -641,7 +641,7 @@ CREATE TABLE _widgets ( wd_add_scripts_a TEXT NOT NULL, -- (管理機能用)追加スクリプトファイル(相対パス表記、「,」区切りで複数指定可) wd_add_css_a TEXT NOT NULL, -- (管理機能用)追加CSSファイル(相対パス表記、「,」区切りで複数指定可) wd_admin BOOLEAN DEFAULT false NOT NULL, -- 管理用ウィジェットかどうか - wd_mobile BOOLEAN DEFAULT false NOT NULL, -- 携帯対応かどうか + wd_mobile BOOLEAN DEFAULT false NOT NULL, -- 携帯対応かどうか(廃止予定) wd_show_name BOOLEAN DEFAULT false NOT NULL, -- ウィジェット名称を表示するかどうか(wd_hide_titleと統合?) wd_hide_title BOOLEAN DEFAULT false NOT NULL, -- 実稼働時に強制的にタイトルを非表示にするかどうか(廃止予定?) wd_enable_content BOOLEAN DEFAULT false NOT NULL, -- コンテンツ組み込み可能かどうか diff --git a/include/sql/update/2018101201_to_2018110101.sql b/include/sql/update/2018101201_to_2018110101.sql new file mode 100644 index 00000000..a8b1a8ca --- /dev/null +++ b/include/sql/update/2018101201_to_2018110101.sql @@ -0,0 +1,43 @@ +-- * +-- * バージョンアップ用スクリプト +-- * +-- * PHP versions 5 +-- * +-- * LICENSE: This source file is licensed under the terms of the GNU General Public License. +-- * +-- * @package Magic3 Framework +-- * @author 平田直毅(Naoki Hirata) +-- * @copyright Copyright 2006-2018 Magic3 Project. +-- * @license http://www.gnu.org/copyleft/gpl.html GPL License +-- * @version SVN: $Id$ +-- * @link http://www.magic3.org +-- * +-- -------------------------------------------------------------------------------------------------- +-- Magic3 v3.0バージョンアップ用スクリプト最終版 +-- -------------------------------------------------------------------------------------------------- + +-- *** システムベーステーブル *** +-- システム設定マスター +DELETE FROM _system_config WHERE sc_id = 'site_mobile_in_public'; -- 携帯用サイト公開 + +DELETE FROM _system_config WHERE sc_id = 'site_mobile_url'; -- 携帯用サイトURL +DELETE FROM _system_config WHERE sc_id = 'mobile_auto_redirect'; -- 携帯アクセスの自動遷移 +DELETE FROM _system_config WHERE sc_id = 'mobile_use_session'; -- 携帯セッション管理 +DELETE FROM _system_config WHERE sc_id = 'mobile_encoding'; -- 携帯用出力変換エンコード +DELETE FROM _system_config WHERE sc_id = 'mobile_charset'; -- 携帯HTML上でのエンコーディング表記 +DELETE FROM _system_config WHERE sc_id = 'mobile_default_template'; -- 携帯画面用デフォルトテンプレート +DELETE FROM _system_config WHERE sc_id = 'mobile_default_menu_id'; -- WordPressテンプレートで使用(現在未使用) + +-- ウィジェット情報 +DELETE FROM _widgets WHERE wd_mobile = true; + +-- ページIDマスター +DELETE FROM _page_id WHERE pg_id = 'm_index' AND pg_type = 0; + +-- ページ情報マスター +DELETE FROM _page_info WHERE pn_id = 'm_index'; + +-- テンプレート情報 +DELETE FROM _templates WHERE tm_mobile = true; + +-- *** システム標準テーブル *** diff --git a/m/index.php b/m/index.php deleted file mode 100644 index bb2df1d5..00000000 --- a/m/index.php +++ /dev/null @@ -1,20 +0,0 @@ - - * @copyright Copyright 2006-2008 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 277 2008-02-05 07:05:21Z fishbone $ - * @link http://www.magic3.org - */ -require_once(dirname(dirname(__FILE__)) . '/include/global.php'); - -// プログラム実行 -$gLaunchManager->goMobile(__FILE__); -?> diff --git a/templates/m/_admin/index.php b/templates/m/_admin/index.php deleted file mode 100644 index 280c403c..00000000 --- a/templates/m/_admin/index.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
-
-
-
- - diff --git a/templates/m/default/index.php b/templates/m/default/index.php deleted file mode 100644 index 280c403c..00000000 --- a/templates/m/default/index.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - -
-
-
-
- - diff --git a/templates/m/default/template_thumbnail.png b/templates/m/default/template_thumbnail.png deleted file mode 100644 index ec9804c42a36c723fcbe0e17cbcca6de5c219fed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9700 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 diff --git a/templates/m/smallfont/index.php b/templates/m/smallfont/index.php deleted file mode 100644 index 59616d48..00000000 --- a/templates/m/smallfont/index.php +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - -
-
-
-
-
-
- - diff --git a/templates/m/smallfont/template_thumbnail.png b/templates/m/smallfont/template_thumbnail.png deleted file mode 100644 index ec9804c42a36c723fcbe0e17cbcca6de5c219fed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9700 zcmX9^2RzjO|JNX?l)XoG5<-$$LeA_snaMnR@2n*0j5srdoP zh^SPEp;ZUG;wteKx-Mu>A9HtW5>0bUcNZsXD?4*e6+3rp9~XBA4^9bT(Pchotj~a=-5vQ+@dmp~55dwl_Zu zkO`2Hu7{uA!7+TU&y1vuu#>s|MZ!7MdrpIzztZx-)PKrx6%%ETBI8um-hbv0CIk)r zc9JzrZO0T^9+9+`UDF}N2G{p)$q$}jQF?lYxlylQi%CkpG%bFzqV8vwhmXMHS0~EP zCHGd0C2xhrjuqsQojbQTdpTHDmi1^?-TsT$g`nj^a4`RLn2OP+_#9EYbOaD~KclnIrWl_?6) z;_&zgTM0GJE1a2wBR_v?aA7%FDMyBenxa{5$MRs3lIV|@GLJC@`o->l7l$hv!Up?m z=;)rcTV#Ful;9~{KbHIl^G1WOqqB2qWud$iu5irtzlre
g*wVm)J63~lX=!Qp$;tMU{NiFl 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 diff --git a/widgets/admin_main/include/container/admin_mainConfigsysWidgetContainer.php b/widgets/admin_main/include/container/admin_mainConfigsysWidgetContainer.php index 836dc75b..fad30de8 100644 --- a/widgets/admin_main/include/container/admin_mainConfigsysWidgetContainer.php +++ b/widgets/admin_main/include/container/admin_mainConfigsysWidgetContainer.php @@ -37,16 +37,13 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge const CF_SITE_PC_IN_PUBLIC = 'site_pc_in_public'; // PC用サイトの公開状況 const CF_SITE_MOBILE_IN_PUBLIC = 'site_mobile_in_public'; // 携帯用サイトの公開状況 const CF_SITE_SMARTPHONE_IN_PUBLIC = 'site_smartphone_in_public'; // スマートフォン用サイトの公開状況 - const CF_MOBILE_AUTO_REDIRECT = 'mobile_auto_redirect'; // 携帯の自動遷移 const CF_SMARTPHONE_AUTO_REDIRECT = 'smartphone_auto_redirect'; // スマートフォンの自動遷移 const CF_SITE_SMARTPHONE_URL = 'site_smartphone_url'; // スマートフォン用サイトURL - const CF_SITE_MOBILE_URL = 'site_mobile_url'; // 携帯用サイトURL const CF_SITE_OPERATION_MODE = 'site_operation_mode'; // サイト運用モード const CF_ACCESS_IN_INTRANET = 'access_in_intranet'; // イントラネット運用 const CF_MULTI_DOMAIN = 'multi_domain'; // マルチドメイン運用 const CF_USE_LANDING_PAGE = 'use_landing_page'; // ランディングページ機能を使用するかどうか const CF_SITE_ACCESS_EXCEPTION_IP = 'site_access_exception_ip'; // アクセス制御、例外とするIP - const CF_MOBILE_USE_SESSION = 'mobile_use_session'; // 携帯でセッション管理を行うかどうか const CF_USE_PAGE_CACHE = 'use_page_cache'; // 画面キャッシュ機能を使用するかどうか const CF_USE_TEMPLATE_ID_IN_SESSION = 'use_template_id_in_session'; // セッションにテンプレートIDを保存 const CF_SSL_URL = 'ssl_root_url'; // SSL用のルートURL @@ -128,14 +125,11 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge $sslUrl = $request->trimValueOf('item_ssl_url'); // SSL用のURL $connectServerUrl = $request->trimValueOf('item_connect_server_url'); // ポータル接続先URL $siteSmartphoneUrl = $request->trimValueOf('item_site_smartphone_url'); // スマートフォン用サイトURL - $siteMobileUrl = $request->trimValueOf('item_site_mobile_url'); // 携帯用サイトURL $usePageCache = ($request->trimValueOf('item_use_page_cache') == 'on') ? 1 : 0; // 表示キャッシュ機能を使用するかどうか $canChangeTemplate = ($request->trimValueOf('item_can_change_template') == 'on') ? 1 : 0; // ユーザによるテンプレート変更を許可するかどうか $canDetailConfig = ($request->trimValueOf('item_can_detail_config') == 'on') ? 1 : 0; // 詳細システム設定が可能かどうか $multiDeviceAdmin = ($request->trimValueOf('item_multi_device_admin') == 'on') ? 1 : 0;// マルチデバイス最適化管理画面 - $mobileAutoRedirect = ($request->trimValueOf('item_mobile_auto_redirect') == 'on') ? 1 : 0; // 携帯の自動遷移 $smartphoneAutoRedirect = ($request->trimValueOf('item_smartphone_auto_redirect') == 'on') ? 1 : 0; // スマートフォンの自動遷移 - $mobileUseSession = ($request->trimValueOf('item_mobile_use_session') == 'on') ? 1 : 0; // 携帯でセッション管理するかどうか $sitePcInPublic = ($request->trimValueOf('item_site_pc_in_public') == 'on') ? 1 : 0; // PC用サイトの公開状況 $siteMobileInPublic = ($request->trimValueOf('item_site_mobile_in_public') == 'on') ? 1 : 0; // 携帯用サイトの公開状況 $siteSmartphoneInPublic = ($request->trimValueOf('item_site_smartphone_in_public') == 'on') ? 1 : 0; // スマートフォン用サイトの公開状況 @@ -144,7 +138,6 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge $useLandingPage = $request->trimCheckedValueOf('item_use_landing_page'); // ランディングページ機能を使用するかどうか $isActiveSitePc = ($request->trimValueOf('item_is_active_site_pc') == 'on') ? 1 : 0; // PC用サイト有効 $isActiveSiteSmartphone = ($request->trimValueOf('item_is_active_site_smartphone') == 'on') ? 1 : 0; // スマートフォン用サイト有効 - $isActiveSiteMobile = ($request->trimValueOf('item_is_active_site_mobile') == 'on') ? 1 : 0; // 携帯用サイト有効 $configWindowOpenByTab = ($request->trimValueOf('item_config_window_open_by_tab') == 'on') ? 1 : 0; // ウィジェット設定画面をタブで開くかどうか $multiLanguage = ($request->trimValueOf('item_multi_language') == 'on') ? 1 : 0; // 多言語対応 $lang = $request->trimValueOf('item_lang'); @@ -181,15 +174,9 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge if (!$this->db->updateSystemConfig(self::CF_MULTI_DEVICE_ADMIN, $multiDeviceAdmin)) $isErr = true;// マルチデバイス最適化管理画面 } if (!$isErr){ - if (!$this->db->updateSystemConfig(self::CF_MOBILE_AUTO_REDIRECT, $mobileAutoRedirect)) $isErr = true; - } - if (!$isErr){ if (!$this->db->updateSystemConfig(self::CF_SMARTPHONE_AUTO_REDIRECT, $smartphoneAutoRedirect)) $isErr = true; } if (!$isErr){ - if (!$this->db->updateSystemConfig(self::CF_MOBILE_USE_SESSION, $mobileUseSession)) $isErr = true;// 携帯でセッション管理するかどうか - } - if (!$isErr){ if (!$this->db->updateSystemConfig(self::CF_SITE_PC_IN_PUBLIC, $sitePcInPublic)) $isErr = true; } if (!$isErr){ @@ -214,9 +201,6 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge if (!$this->updateActiveAccessPoint(2/*スマートフォン*/, $isActiveSiteSmartphone)) $isErr = true;// スマートフォン用サイト有効 } if (!$isErr){ - if (!$this->updateActiveAccessPoint(1/*携帯*/, $isActiveSiteMobile)) $isErr = true;// 携帯用サイト有効 - } - if (!$isErr){ if (!$this->db->updateSystemConfig(self::CF_CONFIG_WINDOW_OPEN_TYPE, $configWindowOpenByTab)) $isErr = true; // ウィジェット設定画面をタブで開くかどうか } if (!$isErr){ @@ -236,10 +220,6 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge if (!$this->db->updateSystemConfig(self::CF_SITE_SMARTPHONE_URL, $siteSmartphoneUrl)) $isErr = true;// スマートフォン用サイトURL } if (!$isErr){ - $siteMobileUrl = rtrim($siteMobileUrl, '/');// 最後の「/」を除く - if (!$this->db->updateSystemConfig(self::CF_SITE_MOBILE_URL, $siteMobileUrl)) $isErr = true;// 携帯用サイトURL - } - if (!$isErr){ $workDir = rtrim($workDir, '/');// 最後の「/」を除く if (!$this->db->updateSystemConfig(self::CF_WORK_DIR, $workDir)) $isErr = true; } @@ -300,10 +280,7 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge $canChangeTemplate = $this->db->getSystemConfig(self::CF_USE_TEMPLATE_ID_IN_SESSION);// ユーザによるテンプレート変更を許可するかどうか $canDetailConfig = $this->db->getSystemConfig(self::CF_PERMIT_DETAIL_CONFIG); $multiDeviceAdmin = $this->db->getSystemConfig(self::CF_MULTI_DEVICE_ADMIN); // マルチデバイス最適化管理画面 -// $mobileAutoRedirect = $this->db->getSystemConfig(self::CF_MOBILE_AUTO_REDIRECT); - $mobileAutoRedirect = $this->gSystem->mobileAutoRedirect(true/*再取得*/); // 携帯の自動遷移 $smartphoneAutoRedirect = $this->gSystem->smartphoneAutoRedirect(true/*再取得*/); // スマートフォンの自動遷移 - $mobileUseSession = $this->db->getSystemConfig(self::CF_MOBILE_USE_SESSION);// 携帯でセッション管理するかどうか $workDir = $this->db->getSystemConfig(self::CF_WORK_DIR); $sitePcInPublic = $this->gSystem->sitePcInPublic(true/*再取得*/); // PC用サイトの公開状況 $siteMobileInPublic = $this->gSystem->siteMobileInPublic(true/*再取得*/); // 携帯用サイトの公開状況 @@ -313,9 +290,7 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge $useLandingPage = $this->db->getSystemConfig(self::CF_USE_LANDING_PAGE);// ランディングページ機能を使用するかどうか $isActiveSitePc = $this->isActiveAccessPoint(0/*PC*/); // PC用サイト有効かどうか $isActiveSiteSmartphone = $this->isActiveAccessPoint(2/*スマートフォン*/); // スマートフォン用サイト有効かどうか - $isActiveSiteMobile = $this->isActiveAccessPoint(1/*スマートフォン*/); // 携帯用サイト有効かどうか $siteSmartphoneUrl = $this->db->getSystemConfig(self::CF_SITE_SMARTPHONE_URL); // スマートフォン用サイトURL - $siteMobileUrl = $this->db->getSystemConfig(self::CF_SITE_MOBILE_URL); // 携帯用サイトURL $configWindowOpenByTab = $this->db->getSystemConfig(self::CF_CONFIG_WINDOW_OPEN_TYPE); // ウィジェット設定画面をタブで開くかどうか $multiLanguage = $this->gSystem->getSystemConfig(self::CF_MULTI_LANGUAGE); // 多言語対応かどうか $this->systemTemplate = $this->db->getSystemConfig(self::CF_SYSTEM_TEMPLATE);// システム画面用テンプレート @@ -382,10 +357,7 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge $canChangeTemplate = $this->db->getSystemConfig(self::CF_USE_TEMPLATE_ID_IN_SESSION);// ユーザによるテンプレート変更を許可するかどうか $canDetailConfig = $this->db->getSystemConfig(self::CF_PERMIT_DETAIL_CONFIG); $multiDeviceAdmin = $this->db->getSystemConfig(self::CF_MULTI_DEVICE_ADMIN); // マルチデバイス最適化管理画面 -// $mobileAutoRedirect = $this->db->getSystemConfig(self::CF_MOBILE_AUTO_REDIRECT); - $mobileAutoRedirect = $this->gSystem->mobileAutoRedirect(true/*再取得*/); // 携帯の自動遷移 $smartphoneAutoRedirect = $this->gSystem->smartphoneAutoRedirect(true/*再取得*/); // スマートフォンの自動遷移 - $mobileUseSession = $this->db->getSystemConfig(self::CF_MOBILE_USE_SESSION);// 携帯でセッション管理するかどうか $workDir = $this->db->getSystemConfig(self::CF_WORK_DIR); $sitePcInPublic = $this->gSystem->sitePcInPublic(true/*再取得*/); // PC用サイトの公開状況 $siteMobileInPublic = $this->gSystem->siteMobileInPublic(true/*再取得*/); // 携帯用サイトの公開状況 @@ -395,9 +367,7 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge $useLandingPage = $this->db->getSystemConfig(self::CF_USE_LANDING_PAGE);// ランディングページ機能を使用するかどうか $isActiveSitePc = $this->isActiveAccessPoint(0/*PC*/); // PC用サイト有効かどうか $isActiveSiteSmartphone = $this->isActiveAccessPoint(2/*スマートフォン*/); // スマートフォン用サイト有効かどうか - $isActiveSiteMobile = $this->isActiveAccessPoint(1/*スマートフォン*/); // 携帯用サイト有効かどうか $siteSmartphoneUrl = $this->db->getSystemConfig(self::CF_SITE_SMARTPHONE_URL); // スマートフォン用サイトURL - $siteMobileUrl = $this->db->getSystemConfig(self::CF_SITE_MOBILE_URL); // 携帯用サイトURL $configWindowOpenByTab = $this->db->getSystemConfig(self::CF_CONFIG_WINDOW_OPEN_TYPE); // ウィジェット設定画面をタブで開くかどうか $multiLanguage = $this->gSystem->getSystemConfig(self::CF_MULTI_LANGUAGE); // 多言語対応かどうか $this->systemTemplate = $this->db->getSystemConfig(self::CF_SYSTEM_TEMPLATE);// システム画面用テンプレート @@ -433,11 +403,8 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge // サイトURL $this->tmpl->addVar("_widget", "site_url", $this->gEnv->getRootUrl()); $this->tmpl->addVar("show_site_pc_open", "pc_access_url", $this->gEnv->getDefaultUrl()); - $this->tmpl->addVar("show_site_mobile_open", "mobile_access_url", $this->gEnv->getDefaultMobileUrl()); $this->tmpl->addVar("show_site_smartphone_open", "smartphone_access_url", $this->gEnv->getDefaultSmartphoneUrl()); $this->tmpl->addVar("_widget", "admin_access_url", $this->gEnv->getDefaultAdminUrl()); - // 携帯画面エンコード - $this->tmpl->addVar("show_site_mobile_open", "mobile_encode", $this->gEnv->getMobileEncoding()); // サイト運用状況を設定 $checked = ''; @@ -455,12 +422,6 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge } else { $this->tmpl->setAttribute('show_site_pc_close', 'visibility', 'visible'); } - $isActiveSite = $this->gSystem->getSiteActiveStatus(1); // 携帯用サイト - if ($isActiveSite){ - $this->tmpl->setAttribute('show_site_mobile_open', 'visibility', 'visible'); - } else { - $this->tmpl->setAttribute('show_site_mobile_close', 'visibility', 'visible'); - } $isActiveSite = $this->gSystem->getSiteActiveStatus(2); // スマートフォン用サイト if ($isActiveSite){ $this->tmpl->setAttribute('show_site_smartphone_open', 'visibility', 'visible'); @@ -489,9 +450,6 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge if ($sitePcInPublic) $checked = 'checked'; $this->tmpl->addVar("show_site_pc_open", "site_pc_in_public", $checked);// PC用サイトの公開状況 $checked = ''; - if ($siteMobileInPublic) $checked = 'checked'; - $this->tmpl->addVar("show_site_mobile_open", "site_mobile_in_public", $checked);// 携帯用サイトの公開状況 - $checked = ''; if ($siteSmartphoneInPublic) $checked = 'checked'; $this->tmpl->addVar("show_site_smartphone_open", "site_smartphone_in_public", $checked);// スマートフォン用サイトの公開状況 $this->tmpl->addVar("_widget", "access_in_intranet", $this->convertToCheckedString($accessInIntranet));// イントラネット運用 @@ -506,9 +464,6 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge if ($isActiveSiteSmartphone) $checked = 'checked'; $this->tmpl->addVar("_widget", "is_active_site_smartphone", $checked);// スマートフォン用サイト有効 $checked = ''; - if ($isActiveSiteMobile) $checked = 'checked'; - $this->tmpl->addVar("_widget", "is_active_site_mobile", $checked);// 携帯用サイト有効 - $checked = ''; if ($useSsl) $checked = 'checked'; $this->tmpl->addVar("_widget", "use_ssl", $checked);// SSL機能を使用するかどうか $checked = ''; @@ -543,7 +498,6 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge $this->tmpl->addVar("_widget", "root_url", $this->gEnv->getRootUrl()); $this->tmpl->addVar("_widget", "connect_server_url", $connectServerUrl);// ポータル接続先URL $this->tmpl->addVar("_widget", "site_smartphone_url", $siteSmartphoneUrl); // スマートフォン用サイトURL - $this->tmpl->addVar("_widget", "site_mobile_url", $siteMobileUrl); // 携帯用サイトURL // 共有SSL用のURL if (!empty($sslUrl)){ @@ -559,15 +513,9 @@ class admin_mainConfigsysWidgetContainer extends admin_mainConfigsystemBaseWidge $this->tmpl->addVar("_widget", "can_detail_config", $checked); $this->tmpl->addVar("_widget", "multi_device_admin", $this->convertToCheckedString($multiDeviceAdmin));// マルチデバイス最適化管理画面 $checked = ''; - if (!empty($mobileAutoRedirect)) $checked = 'checked'; - $this->tmpl->addVar("_widget", "mobile_auto_redirect", $checked);// 携帯の自動遷移 - $checked = ''; if (!empty($smartphoneAutoRedirect)) $checked = 'checked'; $this->tmpl->addVar("_widget", "smartphone_auto_redirect", $checked);// スマートフォンの自動遷移 $checked = ''; - if (!empty($mobileUseSession)) $checked = 'checked'; - $this->tmpl->addVar("_widget", "mobile_use_session", $checked); - $checked = ''; if (!empty($configWindowOpenByTab)) $checked = 'checked'; // ウィジェット設定画面をタブで開くかどうか $this->tmpl->addVar("_widget", "config_window_open_by_tab", $checked); diff --git a/widgets/admin_main/include/container/admin_mainPagedefWidgetContainer.php b/widgets/admin_main/include/container/admin_mainPagedefWidgetContainer.php index 9db67717..450530b1 100644 --- a/widgets/admin_main/include/container/admin_mainPagedefWidgetContainer.php +++ b/widgets/admin_main/include/container/admin_mainPagedefWidgetContainer.php @@ -214,14 +214,6 @@ class admin_mainPagedefWidgetContainer extends BaseAdminWidgetContainer // デフォルトテンプレート取得 switch ($task){ - case 'pagedef_mobile': // 携帯用設定画面のとき - $this->templateId = $this->gSystem->defaultMobileTemplateId(); - $deviceType = 1; // デバイスタイプ(携帯) - $taskStr = 'pagedef_mobile'; - $previewWidth = '600px'; - $this->tmpl->addVar("_widget", "preview_option_class", 'class="layout_top_border layout_side_border"'); // プレビューエリアにトップとサイドのボーダーラインを付加 - $this->tmpl->addVar("_widget", "template_normal_disabled", 'disabled'); - break; case 'pagedef_smartphone': // スマートフォン用設定画面 $this->templateId = $this->gSystem->defaultSmartphoneTemplateId(); $deviceType = 2; // デバイスタイプ(スマートフォン) diff --git a/widgets/admin_main/include/container/admin_mainTemplistWidgetContainer.php b/widgets/admin_main/include/container/admin_mainTemplistWidgetContainer.php index 49b6d1f8..2254474a 100644 --- a/widgets/admin_main/include/container/admin_mainTemplistWidgetContainer.php +++ b/widgets/admin_main/include/container/admin_mainTemplistWidgetContainer.php @@ -462,10 +462,6 @@ class admin_mainTemplistWidgetContainer extends admin_mainTempBaseWidgetContaine $this->defalutTemplate = $this->gSystem->defaultTemplateId();// デフォルトのテンプレート $installDir = $this->gEnv->getTemplatesPath();// テンプレート格納ディレクトリ break; - case '1': // 携帯用テンプレート - $this->defalutTemplate = $this->gSystem->defaultMobileTemplateId();// デフォルトのテンプレート - $installDir = $this->gEnv->getTemplatesPath() . '/' . M3_DIR_NAME_MOBILE;// テンプレート格納ディレクトリ - break; case '2': // スマートフォン用テンプレート $this->defalutTemplate = $this->gSystem->defaultSmartphoneTemplateId();// デフォルトのテンプレート $installDir = $this->gEnv->getTemplatesPath() . '/' . M3_DIR_NAME_SMARTPHONE;// テンプレート格納ディレクトリ diff --git a/widgets/admin_main/include/db/admin_mainDb.php b/widgets/admin_main/include/db/admin_mainDb.php index b8551ca2..d87896fd 100644 --- a/widgets/admin_main/include/db/admin_mainDb.php +++ b/widgets/admin_main/include/db/admin_mainDb.php @@ -21,8 +21,6 @@ class admin_mainDb extends BaseDb private $now; // 現在日時 private $userId; // ログイン中のユーザ private $maxNo; // 最大管理番号 -// const CF_DEFAULT_TEMPLATE = 'default_template'; // システム定義値取得用キー(PC用デフォルトテンプレート) -// const CF_DEFAULT_TEMPLATE_MOBILE = 'mobile_default_template'; // システム定義値取得用キー(携帯用デフォルトテンプレート) // 取得値 const CAN_DETAIL_CONFIG = 'permit_detail_config'; // 詳細設定が可能かどうか diff --git a/widgets/admin_main/include/template/configsystem.tmpl.html b/widgets/admin_main/include/template/configsystem.tmpl.html index 8467bad8..a2ab771f 100644 --- a/widgets/admin_main/include/template/configsystem.tmpl.html +++ b/widgets/admin_main/include/template/configsystem.tmpl.html @@ -99,7 +99,7 @@ $(function(){ - アクセスポイント + アクセスポイント 管理用 @@ -113,11 +113,6 @@ $(function(){
閉鎖中
- 携帯用
画面エンコーディング:{MOBILE_ENCODE}
-
-
閉鎖中
- - 管理画面モード @@ -137,16 +132,13 @@ $(function(){
SSL証明書期限:{SSL_EXPIRE_DT}
- アクセスポイント + アクセスポイント PC用
スマートフォン用
マルチドメインURL: - 携帯用
マルチドメインURL: - - ネットワーク
@@ -173,13 +165,6 @@ $(function(){
- 携帯 -
- - -
- - 管理画面
管理画面用jQueryUIテーマ
- - - - - - - -
-
- - - - - - - - - - - - - - - -
名前 - - - - -
タグ内容
- - - - - - - - - -
-
- - -
- diff --git a/widgets/m/adtag/include/template/admin_list.tmpl.html b/widgets/m/adtag/include/template/admin_list.tmpl.html deleted file mode 100644 index 9f8df452..00000000 --- a/widgets/m/adtag/include/template/admin_list.tmpl.html +++ /dev/null @@ -1,72 +0,0 @@ - - -
-
- -
- - - - - - - - -
- - -
- - - - - - - - - - - - - - - - - -
選択名前使用
{NAME}{DEF_COUNT}
-
- -
-
-
diff --git a/widgets/m/adtag/include/template/index.tmpl.html b/widgets/m/adtag/include/template/index.tmpl.html deleted file mode 100644 index 0a69e438..00000000 --- a/widgets/m/adtag/include/template/index.tmpl.html +++ /dev/null @@ -1,3 +0,0 @@ - -{CONTENT} - diff --git a/widgets/m/adtag/index.php b/widgets/m/adtag/index.php deleted file mode 100644 index 89962193..00000000 --- a/widgets/m/adtag/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 1858 2009-05-06 13:44:08Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/bbs_2ch/admin/index.php b/widgets/m/bbs_2ch/admin/index.php deleted file mode 100644 index 25e40aeb..00000000 --- a/widgets/m/bbs_2ch/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 4028 2011-03-11 04:11:33Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/bbs_2ch/images/ba.gif b/widgets/m/bbs_2ch/images/ba.gif deleted file mode 100644 index fa1d375af9ec923d587e28d6aabe52dbf0d2dca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 zcmV-e1E>5)Nk%w1VLSjl0FeLy+`y*Lvz*1PnX{gfA^8LZ6afDKEC2ui06YLZ00092 zoR6u??HHb%)Cm!?4tVnmhT^4lo(2GCDWq;T3PYHwW#Hzzj`MYj6Gbc{L~DhEd151g z>9YZSNSxuJx=cxXnE_NNOQM`6fcG-P$Y#JTbzmC~g;>rjncjF|ovYSV1eF#>6*bo4 z#HPp6Wza*yG!@YiR&%1_)z)&MRb_I3s0PV2N)vTN_VVy4sThXX|VO=%@)oR!Q1AMXYjHqwQSfMgTG#>mHNqmCZ7PD?Ye-mFr8>J*bRtWsLF zB!FPzc;X0`j);KLahI}iu68%#+|`QYBEx4j`cAsr38+>Yg5Mza^@EQtct~!bMD`P< z($Hou8+ueavgFgxIH{0fro~1|J|nY$v_u%8HeO5yi#-b^BX@j6bJopxkfqJTmU{!^ zuNKSbHK(5v^<>NMA}t${ISvEu#OA-hyScIijz6t{MQZ*SSf)|IEV{M-!nTld$yFB^ z6(QJCf(^LbW?x&e0RoSK3kro>a{h%T27gLegbNe)2t-I)I|y`FG>W-$A3AU>aL`gT zWp_>y2~f2FjWRl;z>DJPh#E;>{is7oKo0p;aI?kGNPwL*H~n~` z)*j7#m`8@dxyKHCQA+bkS$$x@5g-Nv6b=Gg=@m_KDM_a$DK1hq&2y4;875QGB?R6F z{rHEYM+3fg<{HcG!_Gy4AoQ4#k=S!sdo;0u(19a8s7F6WW%Ldct!LYk2nA;g9S zuwlh4_y8mJ`2Z~W00_Y<(g+EO6%r96@mK)EB!iRq5xebnJa%{4?pIZH*L|>Pce}ge zK_d+#gfvGg-FvF8?(cu@xvzpR?SE|Ii|Y5_ukX*faLaKMchkw_`j6gw@QdI6{x2U4 zHgrEP>A`~s@+aR~op;>i8;<9G#lpH2+!aPIxtLts3Nfb1H`Z>c&n@85qX+Ko)cU+k zc(*0;9@ef4?5eP4$q{57M`Bb=6gH>@4N6gijOVgAn&s6#LuSUalQ*X4m!Itw`vtuB?hn5=J?s1|47}@}lu2m}TE#Sj zh)NjX2X&4bbxLta6-`5EVi)jS++mkQB1^_|8Fn3{BM?F$1X#de3ACmjw3yGN<(=iZ z)n|LfKlTam{jE!o_hu9cHYd&9Rpy z{l3C*E)}|^Sh+d7c9C|~6|ld#`{L-Nd^|rfc5QKLf}&?gNZD2RX_0kdop+t~_ELn! zVzBrkCW@Neyf*$?8m2;c*=a9paJpSM+)BDIAw4t(V>H@mlu>Biu4~&ajWKAeG1he7 z8*94XdrM;s)*4QQB8p@3!Amu~m31v5XmsF$#6jc?Z_l`GDVn_X+Fy zZjGTLGy#es&v9b3{0j@{W8CRz0Ceqb3}>il=i4sj>#m4Nnc-MEI;Yq zUYNPv5#V$xvr{7r-+puDyHTsfGp~uZomFfxnD)kVRXOlo8HF}6fn)g7_6|<@jBBny zx-KG>#m!A{|K`+6v3U5etwX=i72pa|-+ycU$I@7_<+W%CgBXO<-u;Xh7<8_rWi_$MMsmzg?0~!IkS);o3cgE*@ zjw^Hg^yd$M4cM-LAP7$OkNoZFrPRcD49eBW3jy7Ajl~LZq)Wz0Fd~zTS(kh6A|r(W z8}5=&6^0zckn5qeqN-XPg+aVgs+K?6EEH7mXMNn@;G>Pr_km{bg~UAH|77E9%X44P zD~NOpEgT%_kam)chy)WPnKCYuN-`R0a47zA-}~$!>?-RMu(yA@ zS@^^+VN7o8uypjaSlWMH@OPgV%i9N~%5D^QVdp@jC$i53yUGUt3!K@}+;=KbG}?&b sy$e|70@jJ_3pc@k;eX*v`@gY&1E}1rEQlnLLjV8(07*qoM6N<$g3eDKlK=n! diff --git a/widgets/m/bbs_2ch/images/icon64.png b/widgets/m/bbs_2ch/images/icon64.png deleted file mode 100644 index 3ee6c67ebae824504845c3b794d99f4b42f9aed2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4036 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 - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_bbs_2chBaseWidgetContainer.php 4037 2011-03-19 13:54:56Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/bbs_2chDb.php'); - -class admin_m_bbs_2chBaseWidgetContainer extends BaseAdminWidgetContainer -{ - protected $_db; // DB接続オブジェクト - protected $_boardId; // 掲示板ID - const DEFAULT_BBS_ID = 'board1'; // デフォルトの掲示板ID - const DEFAULT_TOP_PAGE = 'other'; // デフォルトのトップページ - const DEFAULT_BOTTOM_MESSAGE = '
どのような形の削除依頼であれ公開させていただきます。
'; // デフォルトのトップ画面下部メッセージ - const DEFAULT_THREAD_END_MESSAGE = "このスレッドは[#RES_MAX_NO#]を超えました。\r\nもう書けないので、新しいスレッドを立ててくださいです。。。"; // デフォルトのレス上限メッセージ - const DEFAULT_ADMIN_NAME = 'サイト運営者'; // サイト運営者名 - const WIDGET_TITLE_NAME = '2ちゃんねる風BBSメイン'; // ウィジェットタイトル名 - const CF_BBS_TITLE = 'title'; // 掲示板タイトル - const CF_TITLE_COLOR = 'title_color'; // タイトルカラー - const CF_TOP_LINK = 'top_link'; // トップ画像のリンク先 - const CF_TOP_IMAGE = 'top_image'; // トップ画像 - const CF_BBS_GUIDE = 'bbs_guide'; // 掲示板規則 - const CF_BOTTOM_MESSAGE = 'bottom_message'; // トップ画面下部メッセージ - const CF_THREAD_END_MESSAGE = 'thread_end_message'; // レス上限メッセージ - const CF_BG_IMAGE = 'bg_image'; // 背景画像 - const CF_BG_COLOR = 'bg_color'; // 背景色 - const CF_TEXT_COLOR = 'text_color'; // 文字色 - const CF_MENU_COLOR = 'menu_color'; // メニュー背景色 - const CF_MAKE_THREAD_COLOR = 'makethread_color'; // スレッド作成部背景色 - const CF_THREAD_COLOR = 'thread_color'; // スレッド表示部背景色 - const CF_LINK_COLOR = 'link_color'; // リンク色 - const CF_ALINK_COLOR = 'alink_color'; // リンク色 - const CF_VLINK_COLOR = 'vlink_color'; // リンク色 - const CF_NAME_COLOR = 'name_color'; // 投稿者名文字色 - const CF_FILE_UPLOAD = 'file_upload'; // ファイルアップロード許可 - const CF_SUBJECT_LENGTH = 'subject_length'; // 件名最大長 - const CF_NAME_LENGTH = 'name_length'; // 投稿者名最大長 - const CF_EMAIL_LENGTH = 'email_length'; // emailアドレス最大長 - const CF_MESSAGE_LENGTH = 'message_length'; // 最大メッセージ長 - const CF_ERR_MESSAGE_COLOR = 'err_message_color'; // エラーメッセージ文字色 - const CF_SUBJECT_COLOR = 'subject_color'; // 件名文字色 - const CF_LINE_LENGTH = 'line_length'; // 投稿文行長 - const CF_LINE_COUNT = 'line_count'; // 投稿文行数 - const CF_RES_ANCHOR_LINK_COUNT = 'res_anchor_link_count'; // レスアンカーリンク数 - const CF_THREAD_COUNT = 'thread_count'; // トップ画面に表示するスレッド最大数 - const CF_RES_COUNT = 'res_count'; // トップ画面に表示するレス最大数 - const CF_THREAD_RES = 'thread_res'; // 1スレッドに投稿できるレス数の上限 - const CF_MENU_THREAD_COUNT = 'menu_thread_count'; // メニューに表示するスレッド最大数 - const CF_SHOW_EMAIL = 'show_email'; // Eメールアドレスを表示 - const CF_AUTOLINK = 'autolink'; // 自動的にリンクを作成 - const CF_NONAME_NAME = 'noname_name'; // 名前未設定時の表示名 - const CF_ADMIN_NAME = 'admin_name'; // サイト運営者名 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->_db = new bbs_2chDb(); - - // BBS定義を読み込む - $this->_loadConfig(); - - $this->_boardId = self::DEFAULT_BBS_ID; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _postAssign($request, &$param) - { - // ウィンドウオープンタイプ取得 - $openBy = $request->trimValueOf(M3_REQUEST_PARAM_OPEN_BY); // ウィンドウオープンタイプ - if (!empty($openBy)) $this->addOptionUrlParam(M3_REQUEST_PARAM_OPEN_BY, $openBy); - - // 表示画面を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TOP_PAGE; - - // パンくずリストを作成 - switch ($task){ - case 'other': // その他設定 - $linkList = ' >> 基本設定';// パンくずリスト - break; - } - // ####### 上段メニューの作成 ####### - $menuText = '
' . M3_NL; - $menuText .= '
    ' . M3_NL; - $baseUrl = $this->getAdminUrlWithOptionParam(true);// 画面定義ID付き - - // その他設定 - $current = ''; - $link = $baseUrl . '&task=other'; - if ($task == 'other'){ - $current = 'id="current"'; - } - $menuText .= '
  • 基本設定
  • ' . M3_NL; - - // 上段メニュー終了 - $menuText .= '
' . M3_NL; - $menuText .= '
' . M3_NL; - - // 作成データの埋め込み - $linkList = '
'; - $outputText .= '
' . $linkList . $menuText . '
' . M3_NL; - $this->tmpl->addVar("_widget", "menu_items", $outputText); - } - /** - * BBS定義値をDBから取得 - * - * @return bool true=取得成功、false=取得失敗 - */ - function _loadConfig() - { - $this->_configArray = array(); - - // BBS定義を読み込み - $ret = $this->_db->getAllConfig($rows); - if ($ret){ - // 取得データを連想配列にする - $configCount = count($rows); - for ($i = 0; $i < $configCount; $i++){ - $key = $rows[$i]['tg_id']; - $value = $rows[$i]['tg_value']; - $this->_configArray[$key] = $value; - } - } - return $ret; - } -} -?> diff --git a/widgets/m/bbs_2ch/include/container/admin_m_bbs_2chOtherWidgetContainer.php b/widgets/m/bbs_2ch/include/container/admin_m_bbs_2chOtherWidgetContainer.php deleted file mode 100644 index 108c79cd..00000000 --- a/widgets/m/bbs_2ch/include/container/admin_m_bbs_2chOtherWidgetContainer.php +++ /dev/null @@ -1,221 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_bbs_2chOtherWidgetContainer.php 4028 2011-03-11 04:11:33Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_m_bbs_2chBaseWidgetContainer.php'); - -class admin_m_bbs_2chOtherWidgetContainer extends admin_m_bbs_2chBaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'admin_other.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $defaultLang = $this->gEnv->getDefaultLanguage(); - $act = $request->trimValueOf('act'); - - $bbsTitle = $request->trimValueOf('bbs_title'); // 掲示板タイトル - $topLink = $request->trimValueOf('title_link'); // トップ画像のリンク先 - $topImage = $request->trimValueOf('top_image'); // トップ画像 - $bgImage = $request->trimValueOf('bg_image'); // 背景画像 - $bbsGuide = $request->valueOf('bbs_guide'); // 掲示板規則(HTML許可) - $bottomMessage = $request->valueOf('bottom_message'); // トップ画面下部メッセージ(HTML許可) - $textColor = $request->valueOf('text_color'); // 文字色 - $bgColor = $request->valueOf('bg_color'); // 背景色 - //$titleColor = $request->valueOf('title_color'); // タイトルカラー - $menuColor = $request->valueOf('menu_color'); // メニュー背景色 - $threadColor = $request->valueOf('thread_color'); // スレッド表示部背景色 - $makeThreadColor = $request->valueOf('makethread_color'); // スレッド作成部背景色 - $linkColor = $request->valueOf('link_color'); // リンク色 - $alinkColor = $request->valueOf('alink_color'); // リンク色(アクティブ) - $vlinkColor = $request->valueOf('vlink_color'); // リンク色(アクセス済み) - $subjectColor = $request->valueOf('subject_color'); // 件名文字色 - $nameColor = $request->valueOf('name_color'); // 投稿者名文字色 - $errMessageColor = $request->valueOf('err_message_color'); // エラーメッセージ文字色 - $subjectLength = $request->valueOf('subject_length'); // 件名最大長 - $nameLength = $request->valueOf('name_length'); // 投稿者名最大長 - $emailLength = $request->valueOf('email_length'); // emailアドレス最大長 - $messageLength = $request->valueOf('message_length'); // 投稿文最大長 - $lineLength = $request->valueOf('line_length'); // 投稿文行長 - $lineCount = $request->valueOf('line_count'); // 投稿文行数 - $resAnchorLinkCount = $request->valueOf('res_anchor_link_count'); // レスアンカーリンク数 - $threadCount = $request->valueOf('thread_count'); // トップ画面のスレッド最大数 - $resCount = $request->valueOf('res_count'); // トップ画面のレス最大数 - $threadRes = $request->valueOf('thread_res'); // 投稿可能なレス数の上限 - $menuThreadCount = $request->valueOf('menu_thread_count'); // メニューのスレッド最大数 - $nonameName = $request->valueOf('noname_name'); // 名前未設定時の表示名 - $adminName = $request->valueOf('admin_name'); // サイト運営者名 - $threadEndMessage = $request->valueOf('thread_end_message'); // スレッド終了メッセージ - - $reloadData = false; // データの再読み込み - if ($act == 'update'){ // 設定更新のとき - // 入力値のエラーチェック - - if ($this->getMsgCount() == 0){ // エラーのないとき - // パスの修正 - if (!empty($topImage)) $topImage = $this->gEnv->getMacroPath($topImage); - if (!empty($bgImage)) $bgImage = $this->gEnv->getMacroPath($bgImage); - - $ret = $this->_db->updateConfig(self::CF_BBS_TITLE, $bbsTitle); // 掲示板タイトル - if ($ret) $this->_db->updateConfig(self::CF_TOP_LINK, $topLink); // トップ画像のリンク先 - if ($ret) $this->_db->updateConfig(self::CF_TOP_IMAGE, $topImage); // トップ画像 - if ($ret) $this->_db->updateConfig(self::CF_BG_IMAGE, $bgImage); // 背景画像 - if ($ret) $this->_db->updateConfig(self::CF_BBS_GUIDE, $bbsGuide); // 掲示板規則 - if ($ret) $this->_db->updateConfig(self::CF_BOTTOM_MESSAGE, $bottomMessage); // トップ画面下部メッセージ - if ($ret) $this->_db->updateConfig(self::CF_TEXT_COLOR, $textColor); // 文字色 - if ($ret) $this->_db->updateConfig(self::CF_BG_COLOR, $bgColor); // 背景色 - //if ($ret) $this->_db->updateConfig(self::CF_TITLE_COLOR, $titleColor); // タイトルカラー - if ($ret) $this->_db->updateConfig(self::CF_MENU_COLOR, $menuColor); // メニュー背景色 - if ($ret) $this->_db->updateConfig(self::CF_THREAD_COLOR, $threadColor); // スレッド表示部背景色 - if ($ret) $this->_db->updateConfig(self::CF_MAKE_THREAD_COLOR, $makeThreadColor); // スレッド作成部背景色 - if ($ret) $this->_db->updateConfig(self::CF_LINK_COLOR, $linkColor); // リンク色 - if ($ret) $this->_db->updateConfig(self::CF_ALINK_COLOR, $alinkColor); // リンク色(アクティブ) - if ($ret) $this->_db->updateConfig(self::CF_VLINK_COLOR, $vlinkColor); // リンク色(アクセス済み) - if ($ret) $this->_db->updateConfig(self::CF_SUBJECT_COLOR, $subjectColor); // 件名文字色 - if ($ret) $this->_db->updateConfig(self::CF_NAME_COLOR, $nameColor); // 投稿者名文字色 - if ($ret) $this->_db->updateConfig(self::CF_ERR_MESSAGE_COLOR, $errMessageColor); // エラーメッセージ文字色 - if ($ret) $this->_db->updateConfig(self::CF_SUBJECT_LENGTH, $subjectLength); // 件名最大長 - if ($ret) $this->_db->updateConfig(self::CF_NAME_LENGTH, $nameLength); // 投稿者名最大長 - if ($ret) $this->_db->updateConfig(self::CF_EMAIL_LENGTH, $emailLength); // emailアドレス最大長 - if ($ret) $this->_db->updateConfig(self::CF_MESSAGE_LENGTH, $messageLength); // 投稿文最大長 - if ($ret) $this->_db->updateConfig(self::CF_LINE_LENGTH, $lineLength); // 投稿文行長 - if ($ret) $this->_db->updateConfig(self::CF_LINE_COUNT, $lineCount); // 投稿文行数 - if ($ret) $this->_db->updateConfig(self::CF_RES_ANCHOR_LINK_COUNT, $resAnchorLinkCount); // レスアンカーリンク数 - if ($ret) $this->_db->updateConfig(self::CF_THREAD_COUNT, $threadCount); // トップ画面のスレッド最大数 - if ($ret) $this->_db->updateConfig(self::CF_RES_COUNT, $resCount); // トップ画面のレス最大数 - if ($ret) $this->_db->updateConfig(self::CF_THREAD_RES, $threadRes); // 投稿可能なレス数の上限 - if ($ret) $this->_db->updateConfig(self::CF_MENU_THREAD_COUNT, $menuThreadCount); // メニューのスレッド最大数 - if ($ret) $this->_db->updateConfig(self::CF_NONAME_NAME, $nonameName); // 名前未設定時の表示名 - if ($ret) $this->_db->updateConfig(self::CF_ADMIN_NAME, $adminName); // サイト運営者名 - if ($ret) $this->_db->updateConfig(self::CF_THREAD_END_MESSAGE, $threadEndMessage); // スレッド終了メッセージ - - if ($ret){ - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - - // BBS定義を再読み込み - $this->_loadConfig(); - $reloadData = true; // データの再読み込み - } else { - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } - $this->gPage->updateParentWindow();// 親ウィンドウを更新 - } - } else { // 初期表示の場合 - $reloadData = true; // データの再読み込み - } - if ($reloadData){ - $bbsTitle = $this->_configArray[self::CF_BBS_TITLE]; // 掲示板タイトル - $topLink = $this->_configArray[self::CF_TOP_LINK]; // トップ画像のリンク先 - $topImage = $this->_configArray[self::CF_TOP_IMAGE]; // トップ画像 - $bgImage = $this->_configArray[self::CF_BG_IMAGE]; // 背景画像 - $bbsGuide = $this->_configArray[self::CF_BBS_GUIDE]; // 掲示板規則 - $bottomMessage = $this->_configArray[self::CF_BOTTOM_MESSAGE]; // トップ画面下部メッセージ - if (is_null($bottomMessage)) $bottomMessage = self::DEFAULT_BOTTOM_MESSAGE; - $textColor = $this->_configArray[self::CF_TEXT_COLOR]; // 文字色 - $bgColor = $this->_configArray[self::CF_BG_COLOR]; // 背景色 - //$titleColor = $this->_configArray[self::CF_TITLE_COLOR]; // タイトルカラー - $menuColor = $this->_configArray[self::CF_MENU_COLOR]; // メニュー背景色 - $threadColor = $this->_configArray[self::CF_THREAD_COLOR]; // スレッド表示部背景色 - $makeThreadColor = $this->_configArray[self::CF_MAKE_THREAD_COLOR]; // スレッド作成部背景色 - $linkColor = $this->_configArray[self::CF_LINK_COLOR]; // リンク色 - $alinkColor = $this->_configArray[self::CF_ALINK_COLOR]; // リンク色(アクティブ) - $vlinkColor = $this->_configArray[self::CF_VLINK_COLOR]; // リンク色(アクセス済み) - $subjectColor = $this->_configArray[self::CF_SUBJECT_COLOR]; // 件名文字色 - $nameColor = $this->_configArray[self::CF_NAME_COLOR]; // 投稿者名文字色 - $errMessageColor = $this->_configArray[self::CF_ERR_MESSAGE_COLOR]; // エラーメッセージ文字色 - $subjectLength = $this->_configArray[self::CF_SUBJECT_LENGTH]; // 件名最大長 - $nameLength = $this->_configArray[self::CF_NAME_LENGTH]; // 投稿者名最大長 - $emailLength = $this->_configArray[self::CF_EMAIL_LENGTH]; // emailアドレス最大長 - $messageLength = $this->_configArray[self::CF_MESSAGE_LENGTH]; // 投稿文最大長 - $lineLength = $this->_configArray[self::CF_LINE_LENGTH]; // 投稿文行長 - $lineCount = $this->_configArray[self::CF_LINE_COUNT]; // 投稿文行数 - $resAnchorLinkCount = $this->_configArray[self::CF_RES_ANCHOR_LINK_COUNT]; // レスアンカーリンク数 - $threadCount = $this->_configArray[self::CF_THREAD_COUNT]; // トップ画面のスレッド最大数 - $resCount = $this->_configArray[self::CF_RES_COUNT]; // トップ画面のレス最大数 - $threadRes = $this->_configArray[self::CF_THREAD_RES]; // 投稿可能なレス数の上限 - $menuThreadCount = $this->_configArray[self::CF_MENU_THREAD_COUNT]; // メニューのスレッド最大数 - $nonameName = $this->_configArray[self::CF_NONAME_NAME]; // 名前未設定時の表示名 - $adminName = $this->_configArray[self::CF_ADMIN_NAME]; // サイト運営者名 - if (empty($adminName)) $adminName = self::DEFAULT_ADMIN_NAME; - $threadEndMessage = $this->_configArray[self::CF_THREAD_END_MESSAGE]; // スレッド終了メッセージ - if (empty($threadEndMessage)) $threadEndMessage = self::DEFAULT_THREAD_END_MESSAGE; - - // パスの修正 - $topImage = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->gEnv->getRootUrl(), $topImage); - $bgImage = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->gEnv->getRootUrl(), $bgImage); - } - // 画面に書き戻す - $this->tmpl->addVar("_widget", "bbs_title", $bbsTitle); // 掲示板タイトル - $this->tmpl->addVar("_widget", "top_link", $topLink); // トップ画像のリンク先 - $this->tmpl->addVar("_widget", "top_image", $topImage); // トップ画像 - $this->tmpl->addVar("_widget", "bg_image", $bgImage); // 背景画像 - $this->tmpl->addVar("_widget", "bbs_guide", $bbsGuide); // 掲示板規則 - $this->tmpl->addVar("_widget", "bottom_message", $bottomMessage); // トップ画面下部メッセージ - $this->tmpl->addVar("_widget", "text_color", $textColor); // 文字色 - $this->tmpl->addVar("_widget", "bg_color", $bgColor); // 背景色 - //$this->tmpl->addVar("_widget", "title_color", $titleColor); // タイトルカラー - $this->tmpl->addVar("_widget", "menu_color", $menuColor); // メニュー背景色 - $this->tmpl->addVar("_widget", "thread_color", $threadColor); // スレッド表示部背景色 - $this->tmpl->addVar("_widget", "makethread_color", $makeThreadColor); // スレッド作成部背景色 - $this->tmpl->addVar("_widget", "link_color", $linkColor); // リンク色 - $this->tmpl->addVar("_widget", "alink_color", $alinkColor); // リンク色(アクティブ) - $this->tmpl->addVar("_widget", "vlink_color", $vlinkColor); // リンク色(アクセス済み) - $this->tmpl->addVar("_widget", "subject_color", $subjectColor); // 件名文字色 - $this->tmpl->addVar("_widget", "name_color", $nameColor); // 投稿者名文字色 - $this->tmpl->addVar("_widget", "err_message_color", $errMessageColor); // エラーメッセージ文字色 - $this->tmpl->addVar("_widget", "subject_length", $subjectLength); // 件名最大長 - $this->tmpl->addVar("_widget", "name_length", $nameLength); // 投稿者名最大長 - $this->tmpl->addVar("_widget", "email_length", $emailLength); // emailアドレス最大長 - $this->tmpl->addVar("_widget", "message_length", $messageLength); // 投稿文最大長 - $this->tmpl->addVar("_widget", "line_length", $lineLength); // 投稿文行長 - $this->tmpl->addVar("_widget", "line_count", $lineCount); // 投稿文行数 - $this->tmpl->addVar("_widget", "res_anchor_link_count", $resAnchorLinkCount); // レスアンカーリンク数 - $this->tmpl->addVar("_widget", "thread_count", $threadCount); // トップ画面のスレッド最大数 - $this->tmpl->addVar("_widget", "res_count", $resCount); // トップ画面のレス最大数 - $this->tmpl->addVar("_widget", "thread_res", $threadRes); // 投稿可能なレス数の上限 - $this->tmpl->addVar("_widget", "menu_thread_count", $menuThreadCount); // メニューのスレッド最大数 - $this->tmpl->addVar("_widget", "noname_name", $nonameName); // 名前未設定時の表示名 - $this->tmpl->addVar("_widget", "admin_name", $adminName); // サイト運営者名 - $this->tmpl->addVar("_widget", "thread_end_message", $threadEndMessage); // スレッド終了メッセージ - } -} -?> diff --git a/widgets/m/bbs_2ch/include/container/admin_m_bbs_2chWidgetContainer.php b/widgets/m/bbs_2ch/include/container/admin_m_bbs_2chWidgetContainer.php deleted file mode 100644 index 6901929b..00000000 --- a/widgets/m/bbs_2ch/include/container/admin_m_bbs_2chWidgetContainer.php +++ /dev/null @@ -1,88 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_bbs_2chWidgetContainer.php 4037 2011-03-19 13:54:56Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_m_bbs_2chBaseWidgetContainer.php'); - -class admin_m_bbs_2chWidgetContainer extends admin_m_bbs_2chBaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * ディスパッチ処理(メインコンテナのみ実行) - * - * HTTPリクエストの内容を見て処理をコンテナに振り分ける - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return bool このクラスの_setTemplate(), _assign()へ処理を継続するかどうかを返す。 - * true=処理を継続、false=処理を終了 - */ - function _dispatch($request, &$param) - { - // 表示画面を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TOP_PAGE; - - // コンテナを起動 - $goWidget = false; // サブウィジェットを実行するかどうか - switch ($task){ - case 'other': // その他設定 - $goWidget = true; // サブウィジェットを実行するかどうか - break; - default: - break; - } - if ($goWidget){ // サブウィジェットを実行するかどうか - $this->gLaunch->goSubWidget($task, true); // 管理者機能で呼び出し - return false; - } else { - $this->SetMsg(self::MSG_APP_ERR, "画面が見つかりません"); - return true; - } - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'message.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _assign($request, &$param) - { - } -} -?> diff --git a/widgets/m/bbs_2ch/include/container/m_bbs_2chBaseWidgetContainer.php b/widgets/m/bbs_2ch/include/container/m_bbs_2chBaseWidgetContainer.php deleted file mode 100644 index 36bbb4ad..00000000 --- a/widgets/m/bbs_2ch/include/container/m_bbs_2chBaseWidgetContainer.php +++ /dev/null @@ -1,327 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_bbs_2chBaseWidgetContainer.php 4037 2011-03-19 13:54:56Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/bbs_2chDb.php'); - -class m_bbs_2chBaseWidgetContainer extends BaseMobileWidgetContainer -{ - protected $_db; // DB接続オブジェクト - protected $_configArray; // BBS定義値 - protected $_headCss; // CSS定義 - protected $_boardId; // 掲示板ID - protected $_currentPageUrl; // 現在のページのURL -// protected $_postUrl; // POST用のURL - protected $_autolink; // リンクを自動作成 - protected $_spacer; // スペーサ - const SPACER_FORMAT = '
'; // スペーサフォーマット - const MACRO_RES_MAX_NO = 'RES_MAX_NO'; // レス上限数マクロ - const DEFAULT_BBS_ID = 'board1'; // デフォルトの掲示板ID - const DEFAULT_LAST_MESSAGE_COUNT = 50; // メッセージ取得用デフォルトの最新メッセージ数 - const DEFAULT_MESSAGE_COUNT_PER_PAGE = 100; // メッセージ取得用デフォルトの1ページあたりメッセージ数 - const DEFAULT_BOTTOM_MESSAGE = '
どのような形の削除依頼であれ公開させていただきます。
'; // デフォルトのトップ画面下部メッセージ - const DEFAULT_THREAD_END_MESSAGE = "このスレッドは[#RES_MAX_NO#]を超えました。\r\nもう書けないので、新しいスレッドを立ててくださいです。。。"; // デフォルトのレス上限メッセージ - const DEFAULT_EMAIL_NOT_UPDATE = 'sage'; // スレッドの日付更新を行わないEmailアドレス - const DEFAULT_ADMIN_NAME = 'サイト運営者'; // サイト運営者名 - const CF_BBS_TITLE = 'title'; // 掲示板タイトル - const CF_TITLE_COLOR = 'title_color'; // タイトルカラー - const CF_TOP_LINK = 'top_link'; // トップ画像のリンク先 - const CF_TOP_IMAGE = 'top_image'; // トップ画像 - const CF_BBS_GUIDE = 'bbs_guide'; // 掲示板規則 - const CF_BOTTOM_MESSAGE = 'bottom_message'; // トップ画面下部メッセージ - const CF_THREAD_END_MESSAGE = 'thread_end_message'; // レス上限メッセージ - const CF_BG_IMAGE = 'bg_image'; // 背景画像 - const CF_BG_COLOR = 'bg_color'; // 背景色 - const CF_TEXT_COLOR = 'text_color'; // 文字色 - const CF_MENU_COLOR = 'menu_color'; // メニュー背景色 - const CF_MAKE_THREAD_COLOR = 'makethread_color'; // スレッド作成部背景色 - const CF_THREAD_COLOR = 'thread_color'; // スレッド表示部背景色 - const CF_LINK_COLOR = 'link_color'; // リンク色 - const CF_ALINK_COLOR = 'alink_color'; // リンク色 - const CF_VLINK_COLOR = 'vlink_color'; // リンク色 - const CF_NAME_COLOR = 'name_color'; // 投稿者名文字色 - const CF_FILE_UPLOAD = 'file_upload'; // ファイルアップロード許可 - const CF_SUBJECT_LENGTH = 'subject_length'; // 件名最大長 - const CF_NAME_LENGTH = 'name_length'; // 投稿者名最大長 - const CF_EMAIL_LENGTH = 'email_length'; // emailアドレス最大長 - const CF_MESSAGE_LENGTH = 'message_length'; // 最大メッセージ長 - const CF_ERR_MESSAGE_COLOR = 'err_message_color'; // エラーメッセージ文字色 - const CF_SUBJECT_COLOR = 'subject_color'; // 件名文字色 - const CF_LINE_LENGTH = 'line_length'; // 投稿文行長 - const CF_LINE_COUNT = 'line_count'; // 投稿文行数 - const CF_RES_ANCHOR_LINK_COUNT = 'res_anchor_link_count'; // レスアンカーリンク数 - const CF_THREAD_COUNT = 'thread_count'; // トップ画面に表示するスレッド最大数 - const CF_RES_COUNT = 'res_count'; // トップ画面に表示するレス最大数 - const CF_THREAD_RES = 'thread_res'; // 1スレッドに投稿できるレス番号の上限 - const CF_MENU_THREAD_COUNT = 'menu_thread_count'; // メニューに表示するスレッド最大数 - const CF_SHOW_EMAIL = 'show_email'; // Eメールアドレスを表示 - const CF_AUTOLINK = 'autolink'; // 自動的にリンクを作成 - const CF_NONAME_NAME = 'noname_name'; // 名前未設定時の表示名 - const CF_ADMIN_NAME = 'admin_name'; // サイト運営者名 - // 画面 - const TASK_TOP = 'top'; // トップ画面 - const TASK_SUBJECT = 'subject'; // スレッド件名 - const TASK_THREAD = 'thread'; // スレッド処理 - const TASK_NEW_THREAD = 'newthread'; // スレッド新規作成 - const TASK_READ_THREAD = 'read'; // スレッド表示 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->_db = new bbs_2chDb(); - - // BBS定義を読み込む - $this->_loadConfig(); - - $this->_boardId = self::DEFAULT_BBS_ID; - //$this->_currentPageUrl = $this->gEnv->createCurrentPageUrl(); // 現在のページのURL - $this->_currentPageUrl = $this->gEnv->createCurrentPageUrlForMobile(); // 現在のページのURL -// $this->_postUrl = $this->gEnv->getCurrentRequestUri(); // POST用のURL - $this->_autolink = $this->_configArray[self::CF_AUTOLINK]; // リンクを自動作成 - $this->_spacer = sprintf(self::SPACER_FORMAT, $this->getUrl($this->gEnv->getRootUrl()));// スペーサ作成 - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _postAssign($request, &$param) - { - // トップ画像 - $titleColor = $this->_configArray[self::CF_TITLE_COLOR]; // タイトルカラー - $topImage = $this->_configArray[self::CF_TOP_IMAGE]; - if (!empty($topImage)){ - $topLink = $this->convertUrlToHtmlEntity($this->_configArray[self::CF_TOP_LINK]); // トップ画像のリンク先 - - // パスの修正 - $pos = strpos($topImage, '/'); - if ($pos === false){ // ファイル名だけのとき - $topImage = $this->gEnv->getCurrentWidgetImagesUrl() . '/' . $topImage; - } else { - $topImage = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->gEnv->getRootUrl(), $topImage); - } - $topImage = ''; - if (!empty($topLink)) $topImage = '' . $topImage . ''; - } - $this->tmpl->addVar("_widget", "top_image", $topImage); // トップ画像 - - // 掲示板タイトル、説明 - $title = $this->_configArray[self::CF_BBS_TITLE]; // 掲示板タイトル - $this->tmpl->addVar("_widget", "bbs_title", $this->convertToDispString($title)); - $this->tmpl->addVar("_widget", "guide", $this->_configArray[self::CF_BBS_GUIDE]); - - // 共通のスタイル - $bbsStyle = ''; -/* $bgImage = $this->_configArray[self::CF_BG_IMAGE]; - $pos = strpos($bgImage, '/'); - if ($pos === false){ // ファイル名だけのとき - $bgImage = $this->gEnv->getCurrentWidgetImagesUrl() . '/' . $bgImage; - } else { - $bgImage = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->gEnv->getRootUrl(), $bgImage); - }*/ - $bgColor = $this->_configArray[self::CF_BG_COLOR]; - $textColor = $this->_configArray[self::CF_TEXT_COLOR]; // 文字色 -// $bbsStyle .= 'background-image:url(' . $bgImage . ');'; - $bbsStyle .= 'background-color:' . $bgColor . ';'; - $bbsStyle .= 'color:' . $textColor . ';'; - $this->tmpl->addVar("_widget", "bbs_style", $bbsStyle); - - $menuColor = $this->_configArray[self::CF_MENU_COLOR]; // メニュー背景色 - $menuStyle .= 'background-color:' . $menuColor . ';'; - $this->tmpl->addVar("_widget", "menu_style", $menuStyle); - - // メッセージカラーを設定 - if ($this->getMsgCount(1) > 0 || $this->getMsgCount(2) > 0){ // エラーメッセージが出力されているとき - $errMessageColor = $this->_configArray[self::CF_ERR_MESSAGE_COLOR]; // エラーメッセージ色 - if (!empty($errMessageColor)){ - $errMessageStyle .= 'color:' . $errMessageColor . ';'; - $attr = 'style="' . $errMessageStyle . '"'; - $this->setMessageAttr($attr); - } - } - - // 追加CSSを作成 - $cssId = $this->gEnv->getCurrentWidgetId() . '_0'; - $this->_headCss .= '#' . $cssId . ' a {text-decoration:underline;}' . M3_NL; - $this->_headCss .= '#' . $cssId . ' a:link {color:' . $this->_configArray[self::CF_LINK_COLOR] . ';}' . M3_NL; - $this->_headCss .= '#' . $cssId . ' a:active {color:' . $this->_configArray[self::CF_ALINK_COLOR] . ';}' . M3_NL; - //$this->_headCss .= '#' . $cssId . ' a:hover {color:' . $this->_configArray[self::CF_VLINK_COLOR] . ';}' . M3_NL; - $this->_headCss .= '#' . $cssId . ' a:visited {color:' . $this->_configArray[self::CF_VLINK_COLOR] . ';}' . M3_NL; - $this->tmpl->addVar("_widget", "css_id", $cssId); // CSS用ID - - // 遷移先を設定 - $this->tmpl->addVar("_widget", "bbs_url", $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrl(), true))); - $this->tmpl->addVar("_widget", "subject_url", $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrl() . '&task=' . self::TASK_SUBJECT, true))); // スレッド件名 - $this->tmpl->addVar("_widget", "newthread_url", $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrl() . '&task=' . self::TASK_NEW_THREAD, true))); // 新規スレッド作成 - } - /** - * CSSデータをHTMLヘッダ部に設定 - * - * CSSデータをHTMLのheadタグ内に追加出力する。 - * _assign()よりも後に実行される。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。 - * @return string CSS文字列。出力しない場合は空文字列を設定。 - */ - function _addCssToHead($request, &$param) - { - return $this->_headCss; - } - /** - * BBS定義値をDBから取得 - * - * @return bool true=取得成功、false=取得失敗 - */ - function _loadConfig() - { - $this->_configArray = array(); - - // BBS定義を読み込み - $ret = $this->_db->getAllConfig($rows); - if ($ret){ - // 取得データを連想配列にする - $configCount = count($rows); - for ($i = 0; $i < $configCount; $i++){ - $key = $rows[$i]['tg_id']; - $value = $rows[$i]['tg_value']; - $this->_configArray[$key] = $value; - } - } - return $ret; - } - /** - * 投稿文入力データのエラーチェック - * - * @param string $boardId 掲示板ID - * @param string $threadId スレッドID(-1のときチェックなし) - * @param string $name ユーザ名 - * @param string $email Eメールアドレス - * @param string $message 投稿文 - * @return bool true=正常終了、false=異常終了 - */ - function checkMessageInput($boardId, $threadId, $name, $email, $message) - { - // 入力チェック - if ($threadId != -1) $this->checkInput($threadId, 'スレッドID'); - $this->checkInput($message, '本文', 'ERROR:本文がありません!'); - - if ($this->getMsgCount() == 0){ - // スレッドIDが正しいかチェック - if ($threadId != -1){ - $ret = $this->_db->getThreadInfo($boardId, $threadId, $row); - if ($ret){ - // レス可能かチェック - $resCount = $this->_configArray[self::CF_THREAD_RES]; - if ($row['th_message_count'] >= $resCount){ - $this->setUserErrorMsg('このスレッドは' . $resCount . 'を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。'); - } - - // 書き込み可能かチェック - /*#.datが存在してないか書けないならばいばい - if (!is_writable($DATAFILE)) DispError("ERROR!","ERROR:このスレッドには書けません!");*/ - } else { - $this->setUserErrorMsg('ERROR:スレッドIDが不正です!'); - } - } - - // 本文の文字数を取得 - if (function_exists('mb_strlen')){ - $length = mb_strlen($message); - } else { - $length = strlen($message); - } - if ($length > $this->_configArray[self::CF_MESSAGE_LENGTH]){ - $this->setUserErrorMsg('ERROR:本文が長すぎます!(最大文字数' . $this->_configArray[self::CF_MESSAGE_LENGTH] . ')'); - } else { - // 行数のチェック - $lines = preg_split("/(\015\012)|(\015)|(\012)/", $message); - if (count($lines) > $this->_configArray[self::CF_LINE_COUNT]) $this->setUserErrorMsg('ERROR:改行が多すぎます!'); - - // 1行の長さのチェック - $maxLineLength = $this->_configArray[self::CF_LINE_LENGTH]; - foreach ($lines as $line) { - // 文字数を取得 - if (function_exists('mb_strlen')){ - $length = mb_strlen($line); - } else { - $length = strlen($line); - } - if ($length > $maxLineLength){ - $this->setUserErrorMsg('ERROR:長すぎる行があります!(最大文字数' . $maxLineLength . ')'); - break; - } - } - - // レスアンカーリンク数チェック - if (preg_match_all("/>>[0-9]/", $message, $matches) > $this->_configArray[self::CF_RES_ANCHOR_LINK_COUNT]) $this->setUserErrorMsg('レスアンカーリンクが多すぎます!'); - } - - // 名前 - if (function_exists('mb_strlen')){ - $length = mb_strlen($name); - } else { - $length = strlen($name); - } - if ($length > $this->_configArray[self::CF_NAME_LENGTH]) $this->setUserErrorMsg('ERROR:名前が長すぎます!(最大文字数' . $this->_configArray[self::CF_NAME_LENGTH] . ')'); - - // メールアドレス - if (function_exists('mb_strlen')){ - $length = mb_strlen($email); - } else { - $length = strlen($email); - } - if ($length > $this->_configArray[self::CF_EMAIL_LENGTH]) $this->setUserErrorMsg('ERROR:メールアドレスが長すぎます!(最大文字数' . $this->_configArray[self::CF_EMAIL_LENGTH] . ')'); - } - if ($this->getMsgCount() == 0){ - return true; - } else { - return false; - } - } - /** - * メッセージを表示用に変換 - * - * @param string $message 変換元メッセージ - * @param string $threadId スレッドID - * @return string 変換後メッセージ - */ - function convDispMessage($message, $threadId) - { - // リンク変換 - if (!empty($this->_autolink)){ // 自動リンク作成のとき - $message = preg_replace("/(https?):\/\/([\w;\/\?:\@&=\+\$,\-\.!~\*'\(\)%#]+)/", "$1://$2", $message); - - // メッセージへのリンク - $baseUrl = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId, true)); - $messageUrl = $baseUrl . $this->convertUrlToHtmlEntity('&' . M3_REQUEST_PARAM_ITEM_NO . '='); - $messageListUrl = $baseUrl . $this->convertUrlToHtmlEntity('&' . M3_REQUEST_PARAM_LIST_NO . '='); - $message = preg_replace("/>>([0-9]+)(?![-\d])/", '>>$1', $message); - $message = preg_replace("/>>([0-9]+)\-([0-9]+)/", '>>$1-$2', $message); - } - return $message; - } -} -?> diff --git a/widgets/m/bbs_2ch/include/container/m_bbs_2chReadWidgetContainer.php b/widgets/m/bbs_2ch/include/container/m_bbs_2chReadWidgetContainer.php deleted file mode 100644 index fc07090f..00000000 --- a/widgets/m/bbs_2ch/include/container/m_bbs_2chReadWidgetContainer.php +++ /dev/null @@ -1,250 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_bbs_2chReadWidgetContainer.php 4039 2011-03-21 05:37:18Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_bbs_2chBaseWidgetContainer.php'); - -class m_bbs_2chReadWidgetContainer extends m_bbs_2chBaseWidgetContainer -{ - private $threadStyle; // スレッド部表示スタイル - private $subjectColor; // 件名文字色 - private $nameColor; // 登録者名文字色 - private $createEmailLink; // Eメールのリンクを作成するかどうか - private $isExistsMessage; // メッセージが存在するかどうか - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'thread.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - $postTicket = $request->trimValueOf('ticket'); // POST確認用 - $threadId = $request->trimValueOf(M3_REQUEST_PARAM_BBS_THREAD_ID); // スレッドID - $list = $request->trimValueOf(M3_REQUEST_PARAM_LIST_NO); // 取得メッセージ - $no = intval($request->trimValueOf(M3_REQUEST_PARAM_ITEM_NO)); // 取得メッセージ - $message = $request->mobileTrimValueOf('bbs_message');// 投稿メッセージ - $name = $request->mobileTrimValueOf('bbs_name');// 名前 - $email = $request->trimValueOf('bbs_email');// Eメールアドレス - - if ($act == 'add'){ // 投稿追加のとき - if (!empty($postTicket) && $postTicket == $request->getSessionValue(M3_SESSION_POST_TICKET)){ // 正常なPOST値のとき - // 入力項目のエラーチェック - $this->checkMessageInput($this->_boardId, $threadId, $name, $email, $message); - - // エラーなしの場合は、データを更新 - if ($this->getMsgCount() == 0){ - // 新規投稿文の追加 - if (strcasecmp($email, self::DEFAULT_EMAIL_NOT_UPDATE) == 0){ // 日付更新を行わないとき - $updateDt = false; - } else { - $updateDt = true; // 日付を更新 - } - $ret = $this->_db->addMessage($this->_boardId, $threadId, $name, $email, $message, $updateDt, $newSerial); - - if ($ret){ // データ追加成功のとき - //$this->setMsg(self::MSG_GUIDANCE, 'スレッドを作成しました'); - $this->setMsg(self::MSG_GUIDANCE, '書きこみが終わりました。'); - - // 入力項目を使用不可に設定 - $this->tmpl->addVar("thread_area", "name_disabled", 'disabled '); - $this->tmpl->addVar("thread_area", "email_disabled", 'disabled '); - $this->tmpl->addVar("thread_area", "message_disabled", 'disabled '); - $this->tmpl->addVar("thread_area", "button_disabled", 'disabled '); - - // スレッドが最大数に達したときはメッセージを追加 - $ret = $this->_db->getThreadInfo($this->_boardId, $threadId, $row); - if ($ret){ - $resCount = $this->_configArray[self::CF_THREAD_RES]; - if ($row['th_message_count'] >= $resCount){ - $adminName = $this->_configArray[self::CF_ADMIN_NAME]; // サイト運営者名 - if (empty($adminName)) $adminName = self::DEFAULT_ADMIN_NAME; - $overMessage = $this->_configArray[self::CF_THREAD_END_MESSAGE]; // デフォルトのレス上限メッセージ - if (empty($overMessage)) $overMessage = self::DEFAULT_THREAD_END_MESSAGE; - $overMessage = str_replace(M3_TAG_START . self::MACRO_RES_MAX_NO . M3_TAG_END, $resCount, $overMessage);// レス上限数を埋め込む - $ret = $this->_db->addMessage($this->_boardId, $threadId, $adminName, ''/*Eメール*/, $overMessage, $updateDt, $newSerial); - } - } - } else { - //$this->setMsg(self::MSG_APP_ERR, 'スレッドを作成に失敗しました'); - $this->setMsg(self::MSG_APP_ERR, '書きこみに失敗しました。'); - } - } else { - // 入力データを再設定 - $this->tmpl->addVar("thread_area", "bbs_name", $this->convertToDispString($name)); - $this->tmpl->addVar("thread_area", "bbs_email", $this->convertToDispString($email)); - $this->tmpl->addVar("thread_area", "bbs_message", $this->convertToDispString($message)); - } - } else { - $this->setMsg(self::MSG_APP_ERR, '不正な投稿により、書きこみに失敗しました。'); - } - $request->unsetSessionValue(M3_SESSION_POST_TICKET); // セッション値をクリア - } - - // 表示スタイル作成 - $this->createEmailLink = $this->_configArray[self::CF_SHOW_EMAIL]; // Eメールのリンクを作成するかどうか - $threadColor = $this->_configArray[self::CF_THREAD_COLOR]; // スレッド表示部背景色 - $this->threadStyle .= 'background-color:' . $threadColor . ';'; - $this->subjectColor = $this->_configArray[self::CF_SUBJECT_COLOR]; // 件名文字色 - $this->nameColor = $this->_configArray[self::CF_NAME_COLOR]; // 登録者名文字色 - - // スレッドIDが正しいかチェック - $ret = $this->_db->getThreadInfo($this->_boardId, $threadId, $row); - if ($ret){ - $offset = 0; // データ取得開始位置 - $limit = 0; // 取得数、すべて取得 - - // 表示範囲を取得 - if (empty($list) && !empty($no)){ // メッセージNoで取得のとき - $offset = $no -1; - if ($offset < 0) $offset = 0; - $limit = 1; - } else { // 一覧で取得のとき - if (strStartsWith($list, 'l')){ // 最新から取得の場合 - $messageCount = intval(substr($list, 1)); - if ($messageCount <= 0) $messageCount = 1; - $offset = $row['th_message_count'] - $messageCount; - if ($offset < 0) $offset = 0; - $limit = $messageCount; - } - } - // 投稿文を作成 - $this->_db->getThreadMessageByRange(array($this, 'itemsLoop'), $this->_boardId, $threadId, $limit, $offset); - - // リンク作成 - $threadUrl = $this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId; - $threadNewUrl = $this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId . '&' . M3_REQUEST_PARAM_LIST_NO . '=l1'; - $thread50Url = $this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId . '&' . M3_REQUEST_PARAM_LIST_NO . '=l' . self::DEFAULT_LAST_MESSAGE_COUNT; - $thread100Url = $this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId . '&' . M3_REQUEST_PARAM_LIST_NO . '=' . self::DEFAULT_MESSAGE_COUNT_PER_PAGE; - $reloadUrl = $this->_currentPageUrl; - - // 画面にデータを埋め込む - $this->tmpl->addVar("thread_area", "bbs_url", $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrl(), true))); - $this->tmpl->addVar("thread_area", "thread_url", $this->convertUrlToHtmlEntity($this->getUrl($threadUrl, true)));// スレッド全表示URL - $this->tmpl->addVar("thread_area", "threadNew_url", $this->convertUrlToHtmlEntity($this->getUrl($threadNewUrl, true)));// スレッド最新表示URL - $this->tmpl->addVar("thread_area", "thread50_url", $this->convertUrlToHtmlEntity($this->getUrl($thread50Url, true)));// スレッド最新50表示URL - $this->tmpl->addVar("thread_area", "thread100_url", $this->convertUrlToHtmlEntity($this->getUrl($thread100Url, true)));// スレッド100まで表示URL - $this->tmpl->addVar("thread_area", "reload_url", $this->convertUrlToHtmlEntity($this->getUrl($reloadUrl, true)));// 画面再表示 - $this->tmpl->addVar("thread_area", "thread_id", $threadId); - $this->tmpl->addVar("thread_area", "subject", $this->convertToDispString($row['th_subject'])); // スレッド件名 - $this->tmpl->addVar("thread_area", "subject_color", $this->subjectColor); // 件名表示色 - - // スレッドが存在しないときはタグを非表示にする - if (!$this->isExistsMessage){ - $this->setUserErrorMsg('ERROR:メッセージが存在しません!'); - - $this->tmpl->setAttribute('message_list', 'visibility', 'hidden'); - } - // ハッシュキー作成 - $postTicket = md5(time() . $this->gAccess->getAccessLogSerialNo()); - $request->setSessionValue(M3_SESSION_POST_TICKET, $postTicket); // セッションに保存 - $this->tmpl->addVar("thread_area", "ticket", $postTicket); // 画面に書き出し - } else { - $this->setUserErrorMsg('ERROR:スレッドIDが不正です!'); - - // スレッド表示部を非表示にする - $this->tmpl->setAttribute('thread_area', 'visibility', 'hidden'); - } - - // 送信先 - $this->tmpl->addVar("thread_area", "post_url", $this->_currentPageUrl); - - // 画面にデータを埋め込む - $this->tmpl->addVar("thread_area", "thread_style", $this->threadStyle); - } - /** - * 取得したコンテンツ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function itemsLoop($index, $fetchedRow) - { - $no = $fetchedRow['te_index']; // メッセージインデックス番号 - - // ##### メッセージ部分を作成 ##### - // 登録者名作成 - $name = $this->convertToDispString($fetchedRow['te_user_name']); // ユーザ名 - if (empty($name)) $name = $this->_configArray[self::CF_NONAME_NAME]; // 名前未設定時の表示名 - $email = $this->convertToDispString($fetchedRow['te_email']); // Eメール - if (!empty($email) && !empty($this->createEmailLink)){ // Eメールリンク作成のとき - $name = '' . $name . ''; - } else { - $name = '' . $name . ''; - } - - // 日付作成 - $weekDay = array('日', '月', '火', '水', '木', '金', '土'); - $timestamp = strtotime($fetchedRow['te_regist_dt']); - $weekNo = intval(date('w', $timestamp)); - $date = date('Y/m/d(' . $weekDay[$weekNo] . ') H:i:s', $timestamp); - - // 投稿文 - $message = $this->convertToDispString($fetchedRow['te_message']);// 文字エスケープ処理 - $message = $this->convertToPreviewText($message); // 改行をBRタグに変換 - if ($fetchedRow['te_index'] == 1) $message .= '
'; // トップのメッセージは改行を追加 - - // メッセージ変換 - $message = $this->convDispMessage($message, $fetchedRow['te_thread_id']); - - // 削除メッセージのとき - if ($fetchedRow['te_deleted']){ - $name = '参照不可'; - $message = '参照できません。'; - } - - $row = array( - 'no' => $no, // メッセージインデックス番号 - 'name' => $name, // 投稿者名 - 'date' => $date, // 投稿日付 - 'message' => $message // 投稿文 - ); - $this->tmpl->addVars('message_list', $row); - $this->tmpl->parseTemplate('message_list', 'a'); - - // メッセージが存在するかどうか - $this->isExistsMessage = true; - return true; - } -} -?> diff --git a/widgets/m/bbs_2ch/include/container/m_bbs_2chSubjectWidgetContainer.php b/widgets/m/bbs_2ch/include/container/m_bbs_2chSubjectWidgetContainer.php deleted file mode 100644 index d427d72c..00000000 --- a/widgets/m/bbs_2ch/include/container/m_bbs_2chSubjectWidgetContainer.php +++ /dev/null @@ -1,96 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_bbs_2chSubjectWidgetContainer.php 4033 2011-03-18 01:43:53Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_bbs_2chBaseWidgetContainer.php'); - -class m_bbs_2chSubjectWidgetContainer extends m_bbs_2chBaseWidgetContainer -{ - private $isExistsThread; // スレッドが存在するかどうか - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'subject.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - // 検索キーワードを取得 - $keyword = $request->trimValueOf(M3_REQUEST_PARAM_KEYWORD); - - // スレッドメニュー作成 - if (empty($keyword)){ - $this->_db->getThread(array($this, 'itemsLoop'), $this->_boardId, -1/*すべて取得*/); - } else { - $this->_db->getThreadByKeyword(array($this, 'itemsLoop'), $this->_boardId, -1/*すべて取得*/, $keyword); - } - - // スレッドが存在しないときはタグを非表示にする - if (!$this->isExistsThread) $this->tmpl->setAttribute('itemlist', 'visibility', 'hidden'); - } - /** - * 取得したコンテンツ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function itemsLoop($index, $fetchedRow) - { - // トップ画面に表示するスレッド最大数 - $threadId = $fetchedRow['th_id']; - $no = $index + 1; - $subject = $fetchedRow['th_subject'] . '(' . $fetchedRow['th_message_count'] . ')'; - $url = $this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId; - - $row = array( - 'no' => $no, // インデックス番号 - 'url' => $this->convertUrlToHtmlEntity($this->getUrl($url, true)), // スレッド画面へのリンク - 'subject' => $this->convertToDispString($subject) // スレッド件名 - ); - $this->tmpl->addVars('itemlist', $row); - $this->tmpl->parseTemplate('itemlist', 'a'); - - $this->isExistsThread = true; // スレッドが存在するかどうか - return true; - } -} -?> diff --git a/widgets/m/bbs_2ch/include/container/m_bbs_2chThreadWidgetContainer.php b/widgets/m/bbs_2ch/include/container/m_bbs_2chThreadWidgetContainer.php deleted file mode 100644 index 8e514b98..00000000 --- a/widgets/m/bbs_2ch/include/container/m_bbs_2chThreadWidgetContainer.php +++ /dev/null @@ -1,163 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_bbs_2chThreadWidgetContainer.php 4038 2011-03-20 12:21:33Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_bbs_2chBaseWidgetContainer.php'); - -class m_bbs_2chThreadWidgetContainer extends m_bbs_2chBaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == self::TASK_NEW_THREAD){ // 新規スレッド作成画面 - return 'newthread.tmpl.html'; - } else { // スレッド一覧画面 - return 'thread.tmpl.html'; - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == self::TASK_NEW_THREAD){ // 新規スレッド作成画面 - return $this->createNewThread($request); - } else { // スレッド一覧画面 - return $this->createThreadList($request); - } - } - /** - * 新規スレッド投稿画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param なし - */ - function createNewThread($request) - { - $act = $request->trimValueOf('act'); - $postTicket = $request->trimValueOf('ticket'); // POST確認用 - $subject = $request->mobileTrimValueOf('bbs_subject');// 投稿件名 - $message = $request->mobileTrimValueOf('bbs_message');// 投稿メッセージ - $name = $request->mobileTrimValueOf('bbs_name');// 名前 - $email = $request->trimValueOf('bbs_email');// Eメールアドレス - - $isCompleted = false; // 登録完了かどうか - if ($act == 'add'){ // 新規追加のとき - if (!empty($postTicket) && $postTicket == $request->getSessionValue(M3_SESSION_POST_TICKET)){ // 正常なPOST値のとき - // 入力チェック - $this->checkInput($subject, 'タイトル', 'ERROR:タイトルが存在しません!'); - if (function_exists('mb_strlen')){ - $length = mb_strlen($subject); - } else { - $length = strlen($subject); - } - if ($length > $this->_configArray[self::CF_SUBJECT_LENGTH]) $this->setUserErrorMsg('ERROR:タイトルが長すぎます!(最大文字数' . $this->_configArray[self::CF_SUBJECT_LENGTH] . ')'); - - // その他の入力項目のエラーチェック - $this->checkMessageInput($this->_boardId, -1/*スレッドIDチェックなし*/, $name, $email, $message); - - // エラーなしの場合は、データを更新 - if ($this->getMsgCount() == 0){ - // スレッドID作成 - $threadId = md5(time() . $this->gRequest->trimServerValueOf('REMOTE_ADDR')); - - // 新規スレッドの追加 - $ret = $this->_db->addNewThread($this->_boardId, $threadId, $subject, $name, $email, $message); - - if ($ret){ // データ追加成功のとき - //$this->setMsg(self::MSG_GUIDANCE, 'スレッドを作成しました'); - $this->setMsg(self::MSG_GUIDANCE, '書きこみが終わりました。'); - $isCompleted = true; // 投稿完了 - } else { - //$this->setMsg(self::MSG_APP_ERR, 'スレッドを作成に失敗しました'); - $this->setMsg(self::MSG_APP_ERR, '書きこみに失敗しました。'); - } - } - } else { - $this->setMsg(self::MSG_APP_ERR, '不正な投稿により、書きこみに失敗しました。'); - } - $request->unsetSessionValue(M3_SESSION_POST_TICKET); // セッション値をクリア - } - - // 入力データを再設定 - if ($isCompleted){ // 投稿完了のとき - $this->tmpl->setAttribute('result_area', 'visibility', 'visible');// 投稿エリアを表示 - $this->tmpl->addVar("result_area", "subject", $this->convertToDispString($subject)); - $this->tmpl->addVar("result_area", "message", $this->convertToDispString($message)); - $this->tmpl->addVar("result_area", "name", $this->convertToDispString($name)); - $this->tmpl->addVar("result_area", "email", $this->convertToDispString($email)); - } else { - $this->tmpl->setAttribute('input_area', 'visibility', 'visible');// 投稿エリアを表示 - $this->tmpl->addVar("input_area", "subject", $this->convertToDispString($subject)); - $this->tmpl->addVar("input_area", "message", $this->convertToDispString($message)); - } - - $makeThreadColor = $this->_configArray[self::CF_MAKE_THREAD_COLOR]; // スレッド作成部背景色 - $makeThreadStyle .= 'background-color:' . $makeThreadColor . ';'; - $this->tmpl->addVar("_widget", "make_thread_style", $makeThreadStyle); - - $enctype = 'application/x-www-form-urlencoded'; - if (!empty($this->_configArray[self::CF_FILE_UPLOAD])){ // ファイルアップロード許可のとき - $enctype = 'multipart/form-data'; - $this->tmpl->setAttribute('file_upload', 'visibility', 'visible');// ファイルアップロード領域追加 - } - $this->tmpl->addVar("_widget", "enctype", $enctype); - - // ハッシュキー作成 - $postTicket = md5(time() . $this->gAccess->getAccessLogSerialNo()); - $request->setSessionValue(M3_SESSION_POST_TICKET, $postTicket); // セッションに保存 - $this->tmpl->addVar("_widget", "ticket", $postTicket); // 画面に書き出し - - // 送信先 - $this->tmpl->addVar("_widget", "post_url", $this->_currentPageUrl); - } - /** - * 取得したコンテンツ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function itemsLoop($index, $fetchedRow) - { - return true; - } -} -?> diff --git a/widgets/m/bbs_2ch/include/container/m_bbs_2chTopWidgetContainer.php b/widgets/m/bbs_2ch/include/container/m_bbs_2chTopWidgetContainer.php deleted file mode 100644 index fad6883a..00000000 --- a/widgets/m/bbs_2ch/include/container/m_bbs_2chTopWidgetContainer.php +++ /dev/null @@ -1,361 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_bbs_2chTopWidgetContainer.php 4039 2011-03-21 05:37:18Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_bbs_2chBaseWidgetContainer.php'); - -class m_bbs_2chTopWidgetContainer extends m_bbs_2chBaseWidgetContainer -{ - private $threadCount; // スレッド表示数 - private $threadId; // スレッドID - private $threadIdArray = array(); // 表示するスレッドID - private $threadInfoArray = array(); // 表示中のスレッドの情報 - private $headTitle; // METAタグタイトル - private $headDesc; // METAタグ要約 - private $headKeyword; // METAタグキーワード - private $headCss; // ヘッダ追加CSS - private $threadStyle; // スレッド部表示スタイル - private $subjectColor; // 件名文字色 - private $nameColor; // 登録者名文字色 - private $createEmailLink; // Eメールのリンクを作成するかどうか - private $isExistsMessage; // メッセージが存在するかどうか - private $ticket; // POST確認用ハッシュキー - private $bbsName; // 入力再設定用(名前) - private $bbsEmail; // 入力再設定用(Eメールアドレス) - private $bbsMessage; // 入力再設定用(投稿メッセージ) - const DEFAULT_MENU_NAME = 'menu'; // スレッドメニューの名前 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $act = $request->trimValueOf('act'); - return 'main.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - $postTicket = $request->trimValueOf('ticket'); // POST確認用 - $this->threadId = $request->trimValueOf(M3_REQUEST_PARAM_BBS_THREAD_ID); // スレッドID - $message = $request->mobileTrimValueOf('bbs_message');// 投稿メッセージ - $name = $request->mobileTrimValueOf('bbs_name');// 名前 - $email = $request->trimValueOf('bbs_email');// Eメールアドレス - - if ($act == 'add'){ // 投稿追加のとき - if (!empty($postTicket) && $postTicket == $request->getSessionValue(M3_SESSION_POST_TICKET)){ // 正常なPOST値のとき - // 入力項目のエラーチェック - $this->checkMessageInput($this->_boardId, $this->threadId, $name, $email, $message); - - // エラーなしの場合は、データを更新 - if ($this->getMsgCount() == 0){ - // 新規投稿文の追加 - if (strcasecmp($email, self::DEFAULT_EMAIL_NOT_UPDATE) == 0){ // 日付更新を行わないとき - $updateDt = false; - } else { - $updateDt = true; // 日付を更新 - } - $ret = $this->_db->addMessage($this->_boardId, $this->threadId, $name, $email, $message, $updateDt, $newSerial); - - if ($ret){ // データ追加成功のとき - //$this->setMsg(self::MSG_GUIDANCE, 'スレッドを作成しました'); - $this->setMsg(self::MSG_GUIDANCE, '書きこみが終わりました。'); - - // 入力項目を使用不可に設定 - $this->tmpl->addVar("_widget", "name_disabled", 'disabled '); - $this->tmpl->addVar("_widget", "email_disabled", 'disabled '); - $this->tmpl->addVar("_widget", "subject_disabled", 'disabled '); - $this->tmpl->addVar("_widget", "message_disabled", 'disabled '); - $this->tmpl->addVar("_widget", "button_disabled", 'disabled '); - - // スレッドが最大数に達したときはメッセージを追加 - $ret = $this->_db->getThreadInfo($this->_boardId, $this->threadId, $row); - if ($ret){ - $resCount = $this->_configArray[self::CF_THREAD_RES]; - if ($row['th_message_count'] >= $resCount){ - $adminName = $this->_configArray[self::CF_ADMIN_NAME]; // サイト運営者名 - if (empty($adminName)) $adminName = self::DEFAULT_ADMIN_NAME; - $overMessage = $this->_configArray[self::CF_THREAD_END_MESSAGE]; // デフォルトのレス上限メッセージ - if (empty($overMessage)) $overMessage = self::DEFAULT_THREAD_END_MESSAGE; - $overMessage = str_replace(M3_TAG_START . self::MACRO_RES_MAX_NO . M3_TAG_END, $resCount, $overMessage);// レス上限数を埋め込む - $ret = $this->_db->addMessage($this->_boardId, $this->threadId, $adminName, ''/*Eメール*/, $overMessage, $updateDt, $newSerial); - } - } - } else { - //$this->setMsg(self::MSG_APP_ERR, 'スレッドを作成に失敗しました'); - $this->setMsg(self::MSG_APP_ERR, '書きこみに失敗しました。'); - } - } else { - // 入力データを再設定 - $this->bbsName = $name; // 入力再設定用(名前) - $this->bbsEmail = $email; // 入力再設定用(Eメールアドレス) - $this->bbsMessage = $message; // 入力再設定用(投稿メッセージ) - } - } else { - $this->setMsg(self::MSG_APP_ERR, '不正な投稿により、書きこみに失敗しました。'); - } - $request->unsetSessionValue(M3_SESSION_POST_TICKET); // セッション値をクリア - } - // ハッシュキー作成 - $this->ticket = md5(time() . $this->gAccess->getAccessLogSerialNo()); - $request->setSessionValue(M3_SESSION_POST_TICKET, $this->ticket); // セッションに保存 - - // 表示スタイル作成 - $this->createEmailLink = $this->_configArray[self::CF_SHOW_EMAIL]; // Eメールのリンクを作成するかどうか - $threadColor = $this->_configArray[self::CF_THREAD_COLOR]; // スレッド表示部背景色 - $this->threadStyle .= 'background-color:' . $threadColor . ';'; - //$this->tmpl->addVar("_widget", "thread_style", $this->threadStyle); - $makeThreadColor = $this->_configArray[self::CF_MAKE_THREAD_COLOR]; // スレッド作成部背景色 - $makeThreadStyle .= 'background-color:' . $makeThreadColor . ';'; - $this->subjectColor = $this->_configArray[self::CF_SUBJECT_COLOR]; // 件名文字色 - $this->nameColor = $this->_configArray[self::CF_NAME_COLOR]; // 登録者名文字色 - - // ファイルアップロード領域 - if (!empty($this->_configArray[self::CF_FILE_UPLOAD])){ // ファイルアップロード許可のとき - $this->tmpl->setAttribute('file_upload', 'visibility', 'visible');// ファイルアップロード領域追加 - } - - // スレッドメニュー作成 - $this->threadCount = $this->_configArray[self::CF_THREAD_COUNT]; - $this->_db->getThread(array($this, 'itemsLoop'), $this->_boardId, $this->_configArray[self::CF_MENU_THREAD_COUNT]/*メニューに表示するスレッド最大数*/); - - // 投稿文を作成 - // メッセージの最小インデックス番号を求める - $resCount = $this->_configArray[self::CF_RES_COUNT]; // トップ画面に表示するレス最大数 - $minIndexArray = array(); - for ($i = 0; $i < count($this->threadIdArray); $i++){ - $minIndex = 2; // 2番目のメッセージ以降 - if ($this->threadInfoArray[$i]['th_message_count'] > $resCount + 1) $minIndex = $this->threadInfoArray[$i]['th_message_count'] - $resCount + 1; - $minIndexArray[] = $minIndex; - } - $this->_db->getThreadMessage(array($this, 'messagesLoop'), $this->_boardId, $this->threadIdArray, $minIndexArray); - - // スレッドが存在しないときはタグを非表示にする - if (!$this->isExistsMessage) $this->tmpl->setAttribute('thread_list', 'visibility', 'hidden'); - - // 掲示板規則部 - $this->tmpl->addVar("_widget", "make_thread_style", $makeThreadStyle); - $this->tmpl->addVar("_widget", "menu_name", self::DEFAULT_MENU_NAME);// スレッドメニューの名前 - $this->tmpl->addVar("_widget", "menu_anchor", '#' . self::DEFAULT_MENU_NAME);// スレッドメニューへのアンカーリンク - if ($this->isExistsMessage){ - $firstAnchorTag = '▼'; - } else { - $firstAnchorTag = '▼'; - } - $this->tmpl->addVar("_widget", "first_anchor", $firstAnchorTag); // 最初のスレッドへのアンカーリンク - - // 画面下部メッセージ - $bottomMessage = $this->_configArray[self::CF_BOTTOM_MESSAGE]; - if (is_null($bottomMessage)) $bottomMessage = self::DEFAULT_BOTTOM_MESSAGE; - $this->tmpl->addVar("_widget", "bottom_message", $bottomMessage); - - // 送信先 - $this->tmpl->addVar("_widget", "post_url", $this->_currentPageUrl); - - // その他 - $this->tmpl->addVar("_widget", "ad", ""); // 広告バナー等 - $this->tmpl->addVar("_widget", "spacer", "$this->_spacer"); // スペーサ - } - /** - * 取得したスレッド件名をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function itemsLoop($index, $fetchedRow) - { - // トップ画面に表示するスレッド最大数 - $no = $index + 1; - $subject = $fetchedRow['th_subject'] . '(' . $fetchedRow['th_message_count'] . ')'; - $threadLinkUrl = $this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $fetchedRow['th_id'] . '&' . M3_REQUEST_PARAM_LIST_NO . '=l' . self::DEFAULT_LAST_MESSAGE_COUNT; - if ($index < $this->threadCount){ - $subject = $no . ':' . $this->convertToDispString($subject); - - // スレッドIDを追加 - $this->threadIdArray[] = $fetchedRow['th_id']; - - // スレッド情報を追加 - $this->threadInfoArray[] = $fetchedRow; - } else { - $subject = $no . ':' . $this->convertToDispString($subject); - } - - $row = array( - 'url' => $this->convertUrlToHtmlEntity($this->getUrl($threadLinkUrl, true)), // スレッドリンク先 - 'subject' => $subject // スレッド件名 - ); - $this->tmpl->addVars('itemlist', $row); - $this->tmpl->parseTemplate('itemlist', 'a'); - return true; - } - /** - * 取得したスレッドメッセージをテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function messagesLoop($index, $fetchedRow) - { - static $threadIndex = 0; - - $threadId = $fetchedRow['te_thread_id']; - $messageCount = $this->threadInfoArray[$threadIndex]['th_message_count']; // メッセージ総数 - $no = $fetchedRow['te_index']; // メッセージインデックス番号 - - // メッセージが最大を超えたときは終了 - if ($no > $messageCount) return true; - - $findLastMessage = false; - if ($no == $messageCount) $findLastMessage = true;// 最後のメッセージかどうか - - // ##### メッセージ部分を作成 ##### - // 登録者名作成 - $name = $this->convertToDispString($fetchedRow['te_user_name']); // ユーザ名 - if (empty($name)) $name = $this->_configArray[self::CF_NONAME_NAME]; // 名前未設定時の表示名 - $email = $this->convertToDispString($fetchedRow['te_email']); // Eメール - if (!empty($email) && !empty($this->createEmailLink)){ // Eメールリンク作成のとき - $name = '' . $name . ''; - } else { - $name = '' . $name . ''; - } - - // 日付作成 - $weekDay = array('日', '月', '火', '水', '木', '金', '土'); - $timestamp = strtotime($fetchedRow['te_regist_dt']); - $weekNo = intval(date('w', $timestamp)); - $date = date('Y/m/d(' . $weekDay[$weekNo] . ') H:i:s', $timestamp); - - // 投稿文 - $message = $this->convertToDispString($fetchedRow['te_message']);// 文字エスケープ処理 - $message = $this->convertToPreviewText($message); // 改行をBRタグに変換 - if ($fetchedRow['te_index'] == 1) $message .= '
'; // トップのメッセージは改行を追加 - - // メッセージ変換 - $message = $this->convDispMessage($message, $threadId); - - // 削除メッセージのとき - if ($fetchedRow['te_deleted']){ - $name = '参照不可'; - $message = '参照できません。'; - } - - $row = array( - 'no' => $no, // メッセージインデックス番号 - 'name' => $name, // 投稿者名 - 'date' => $date, // 投稿日付 - 'message' => $message // 投稿文 - ); - $this->tmpl->addVars('message_list', $row); - $this->tmpl->parseTemplate('message_list', 'a'); - - // ##### スレッドごとの出力 ##### - if ($findLastMessage){ // 最後のメッセージの場合 - $threadInfo = $this->threadInfoArray[$threadIndex]; - $threadUrl = $this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId; - $thread50Url = $this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId . '&' . M3_REQUEST_PARAM_LIST_NO . '=l' . self::DEFAULT_LAST_MESSAGE_COUNT; - $thread100Url = $this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId . '&' . M3_REQUEST_PARAM_LIST_NO . '=' . self::DEFAULT_MESSAGE_COUNT_PER_PAGE; - $reloadUrl = $this->_currentPageUrl; - - // アンカーリンク作成 - if ($threadIndex == 0){ - $foreAnchor = '#' . count($this->threadIdArray); - if (count($this->threadIdArray) == 1){ - $nextAnchor = '#1'; - } else { - $nextAnchor = '#' . ($threadIndex + 2); - } - } else if ($threadIndex < count($this->threadIdArray) -1){ - $foreAnchor = '#' . $threadIndex; - $nextAnchor = '#' . ($threadIndex + 2); - } else { - $foreAnchor = '#' . $threadIndex; - $nextAnchor = '#1'; - } - - // ファイルアップロード領域の表示 - $enctype = 'application/x-www-form-urlencoded'; - if (!empty($this->_configArray[self::CF_FILE_UPLOAD])){ // ファイルアップロード許可のとき - $enctype = 'multipart/form-data'; - } - // 入力データを再設定 - $bbsName = ''; // 入力再設定用(名前) - $bbsEmail = ''; // 入力再設定用(Eメールアドレス) - $bbsMessage = ''; // 入力再設定用(投稿メッセージ) - if ($this->threadId == $threadId){ - if (!empty($this->bbsName)) $bbsName = $this->bbsName; // 入力再設定用(名前) - if (!empty($this->bbsEmail)) $bbsEmail = $this->bbsEmail; // 入力再設定用(Eメールアドレス) - if (!empty($this->bbsMessage)) $bbsMessage = $this->bbsMessage; // 入力再設定用(投稿メッセージ) - } - $row = array( - 'bbs_name' => $this->convertToDispString($bbsName), // 入力再設定用(名前) - 'bbs_email' => $this->convertToDispString($bbsEmail), // 入力再設定用(Eメールアドレス) - 'bbs_message' => $this->convertToDispString($bbsMessage), // 入力再設定用(投稿メッセージ) - 'enctype' => $enctype, // ファイルアップロード領域 - 'index' => $threadIndex + 1, // スレッドインデックス番号 - 'menu_anchor' => '#' . self::DEFAULT_MENU_NAME, // スレッドメニューへのアンカーリンク - 'fore_anchor' => $foreAnchor, // 前スレッドリンク - 'next_anchor' => $nextAnchor, // 次スレッドリンク - 'message_count' => $threadInfo['th_message_count'], // メッセージ総数 - 'thread_id' => $threadId, // スレッドID - 'subject' => $this->convertToDispString($threadInfo['th_subject']), // スレッド件名 - 'subject_color' => $this->subjectColor, // 件名表示色 - 'thread_style' => $this->threadStyle, // スレッド表示スタイル - 'thread_url' => $this->convertUrlToHtmlEntity($this->getUrl($threadUrl, true)), // スレッド全表示URL - 'thread50_url' => $this->convertUrlToHtmlEntity($this->getUrl($thread50Url, true)), // スレッド最新50表示URL - 'thread100_url' => $this->convertUrlToHtmlEntity($this->getUrl($thread100Url, true)), // スレッド100まで表示URL - 'reload_url' => $this->convertUrlToHtmlEntity($this->getUrl($reloadUrl, true)), // 画面再表示 - 'post_url' => $this->_currentPageUrl, // POST先URL - 'ticket' => $this->ticket, // POST確認用ハッシュキー - 'spacer' => $this->_spacer // スペーサ - ); - $this->tmpl->addVars('thread_list', $row); - $this->tmpl->parseTemplate('thread_list', 'a'); - - $this->tmpl->clearTemplate('message_list'); // メッセージを一旦クリア - $threadIndex++; - } - // メッセージが存在するかどうか - $this->isExistsMessage = true; - return true; - } -} -?> diff --git a/widgets/m/bbs_2ch/include/container/m_bbs_2chWidgetContainer.php b/widgets/m/bbs_2ch/include/container/m_bbs_2chWidgetContainer.php deleted file mode 100644 index af3feb0c..00000000 --- a/widgets/m/bbs_2ch/include/container/m_bbs_2chWidgetContainer.php +++ /dev/null @@ -1,117 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_bbs_2chWidgetContainer.php 4028 2011-03-11 04:11:33Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_bbs_2chBaseWidgetContainer.php'); - -class m_bbs_2chWidgetContainer extends m_bbs_2chBaseWidgetContainer -{ - const DEFAULT_TASK = 'top'; // デフォルトの画面 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * ディスパッチ処理(メインコンテナのみ実行) - * - * HTTPリクエストの内容を見て処理をコンテナに振り分ける - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return bool このクラスの_setTemplate(), _assign()へ処理を継続するかどうかを返す。 - * true=処理を継続、false=処理を終了 - */ - function _dispatch($request, &$param) - { - // 実行処理を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)){ - // スレッドIDを取得 - $threadId = $request->trimValueOf(M3_REQUEST_PARAM_BBS_THREAD_ID); - if (empty($threadId)) $request->trimValueOf(M3_REQUEST_PARAM_BBS_THREAD_ID_SHORT); - - // 検索キーワードを取得 - $keyword = $request->trimValueOf(M3_REQUEST_PARAM_KEYWORD); - - // スレッドIDが設定されているときはスレッド表示タスクを設定 - if (empty($threadId)){ - if (empty($keyword)){ - $task = self::DEFAULT_TASK; - } else { // 検索キーワードが設定されている場合 - $task = self::TASK_SUBJECT; // 件名一覧 - } - } else { - $task = self::TASK_READ_THREAD; // スレッド表示 - } - } else if ($task == self::TASK_NEW_THREAD){ // スレッド新規作成 - $task = self::TASK_THREAD; - } - - // ##### コンテナを起動 ##### - switch ($task){ - case self::TASK_TOP: // トップ画面 - case self::TASK_SUBJECT: // スレッド件名 - case self::TASK_THREAD: // スレッド処理 - case self::TASK_READ_THREAD: // スレッド表示 - $this->gLaunch->goSubWidget($task); - return false; - default: - $this->SetMsg(self::MSG_APP_ERR, "画面が見つかりません"); - return true; - } - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - return 'message.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _assign($request, &$param) - { - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - - // 要求画面によってテンプレートを変更 - switch ($task){ - case self::TASK_TOP: // トップ画面 - default: - // メッセージを表示 - //$this->tmpl->addVar("_widget", "login_url", $this->gEnv->createCurrentPageUrl() . '&task=login'); // ログイン用URL - break; - } - } -} -?> diff --git a/widgets/m/bbs_2ch/include/db/bbs_2chDb.php b/widgets/m/bbs_2ch/include/db/bbs_2chDb.php deleted file mode 100644 index 7ebef725..00000000 --- a/widgets/m/bbs_2ch/include/db/bbs_2chDb.php +++ /dev/null @@ -1,482 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: bbs_2chDb.php 4028 2011-03-11 04:11:33Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getDbPath() . '/baseDb.php'); - -class bbs_2chDb extends BaseDb -{ - /** - * BBS定義値をすべて取得 - * - * @param array $rows レコード - * @param string $boardId 掲示板ID - * @return bool 1行以上取得 = true, 取得なし= false - */ - function getAllConfig(&$rows, $boardId = '') - { - $queryStr = 'SELECT * FROM bbs_2ch_config '; - $queryStr .= 'WHERE tg_board_id = ? '; - $queryStr .= 'ORDER BY tg_index'; - $retValue = $this->selectRecords($queryStr, array($boardId), $rows); - return $retValue; - } - /** - * BBS定義値を更新 - * - * @param string $key キーとなる項目値 - * @param string $value 値 - * @param string $boardId 掲示板ID - * @return true = 正常、false=異常 - */ - function updateConfig($key, $value, $boardId = '') - { - // トランザクションスタート - $this->startTransaction(); - - $queryStr = 'SELECT tg_value FROM bbs_2ch_config '; - $queryStr .= 'WHERE tg_board_id = ? '; - $queryStr .= 'AND tg_id = ? '; - $ret = $this->selectRecord($queryStr, array($boardId, $key), $row); - if ($ret){ - $queryStr = 'UPDATE bbs_2ch_config '; - $queryStr .= 'SET tg_value = ? '; - $queryStr .= 'WHERE tg_board_id = ? '; - $queryStr .= 'AND tg_id = ? '; - $ret = $this->execStatement($queryStr, array($value, $boardId, $key)); - } else { - $queryStr = 'INSERT INTO bbs_2ch_config ('; - $queryStr .= 'tg_board_id, '; - $queryStr .= 'tg_id, '; - $queryStr .= 'tg_value '; - $queryStr .= ') VALUES ('; - $queryStr .= '?, ?, ?'; - $queryStr .= ')'; - $ret = $this->execStatement($queryStr, array($boardId, $key, $value)); - } - // トランザクション終了 - $ret = $this->endTransaction(); - return $ret; - } - /** - * スレッドの新規追加 - * - * @param string $boardId 掲示板ID - * @param string $threadId スレッドID - * @param string $subject スレッド件名 - * @param string $userName 投稿者名 - * @param string $email Eメールアドレス - * @param string $message 投稿メッセージ - * @return bool true = 成功、false = 失敗 - */ - function addNewThread($boardId, $threadId, $subject, $userName, $email, $message) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ - $accessLog = $this->gEnv->getCurrentAccessLogSerial(); - - // トランザクション開始 - $this->startTransaction(); - - // データを追加 - $queryStr = 'INSERT INTO bbs_2ch_thread '; - $queryStr .= '('; - $queryStr .= 'th_board_id, '; - $queryStr .= 'th_id, '; - $queryStr .= 'th_subject, '; - $queryStr .= 'th_message_count, '; - $queryStr .= 'th_dt, '; - $queryStr .= 'th_log_serial, '; - $queryStr .= 'th_create_user_id, '; - $queryStr .= 'th_create_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($boardId, $threadId, $subject, 1, $now, $accessLog, $user, $now)); - - $queryStr = 'INSERT INTO bbs_2ch_thread_message '; - $queryStr .= '('; - $queryStr .= 'te_board_id, '; - $queryStr .= 'te_thread_id, '; - $queryStr .= 'te_index, '; - $queryStr .= 'te_user_name, '; - $queryStr .= 'te_email, '; - $queryStr .= 'te_message, '; - $queryStr .= 'te_regist_dt, '; - $queryStr .= 'te_log_serial, '; - $queryStr .= 'te_update_user_id, '; - $queryStr .= 'te_update_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($boardId, $threadId, 1, $userName, $email, $message, $now, $accessLog, $user, $now)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * スレッド件名を取得 - * - * @param function $callback コールバック関数 - * @param string $boardId 掲示板ID - * @param int $limit 取得数(-1=すべて取得) - * @return なし - */ - function getThread($callback, $boardId, $limit) - { - $queryStr = 'SELECT * FROM bbs_2ch_thread '; - $queryStr .= 'WHERE th_board_id = ? '; - $queryStr .= 'AND th_deleted = false '; // 削除されていない - if ($limit == -1){ - $queryStr .= 'ORDER BY th_dt DESC'; - } else { - $queryStr .= 'ORDER BY th_dt DESC limit ' . intval($limit); - } - $this->selectLoop($queryStr, array($boardId), $callback, null); - } - /** - * スレッド件名を検索キーワードで取得 - * - * @param function $callback コールバック関数 - * @param string $boardId 掲示板ID - * @param int $limit 取得数(-1=すべて取得) - * @param string $keyword 検索キーワード - * @return なし - */ - function getThreadByKeyword($callback, $boardId, $limit, $keyword) - { - $queryStr = 'SELECT th_id,th_subject,th_message_count FROM bbs_2ch_thread_message LEFT JOIN bbs_2ch_thread ON te_board_id = th_board_id AND te_thread_id = th_id AND th_deleted = false '; - $queryStr .= 'WHERE te_board_id = ? '; - $queryStr .= 'AND te_deleted = false '; // 削除されていない - - // 「'"\」文字をエスケープ - $keyword = addslashes($keyword); - $queryStr .= 'AND (te_user_name LIKE \'%' . $keyword . '%\' '; - $queryStr .= 'OR te_email LIKE \'%' . $keyword . '%\' '; - $queryStr .= 'OR te_message LIKE \'%' . $keyword . '%\') '; - - $queryStr .= 'GROUP BY th_id '; - if ($limit == -1){ - $queryStr .= 'ORDER BY th_dt DESC'; - } else { - $queryStr .= 'ORDER BY th_dt DESC limit ' . intval($limit); - } - $this->selectLoop($queryStr, array($boardId), $callback, null); - } - /** - * スレッドメッセージを取得 - * - * @param function $callback コールバック関数 - * @param string $boardId 掲示板ID - * @param array $threadId スレッドID - * @param array $minIndexArray メッセージインデックス番号の最小値 - * @return なし - */ - function getThreadMessage($callback, $boardId, $threadId, $minIndexArray) - { - // スレッドの指定がないときは終了 - if (empty($threadId)) return; - - // CASE文作成 - $threadCount = count($threadId); - $caseStr = 'CASE te_thread_id '; - $thread = ''; - for ($i = 0; $i < $threadCount; $i++){ - $threadIdStr = addslashes($threadId[$i]); - $caseStr .= 'WHEN \'' . $threadIdStr . '\' THEN ' . $i . ' '; - $thread .= '\'' . $threadIdStr . '\','; - } - $caseStr .= 'END AS no'; - $thread = rtrim($thread, ','); - - // スレッドのメッセージ取得条件作成 - $condStr = 'AND ('; - for ($i = 0; $i < $threadCount; $i++){ - if ($i > 0) $condStr .= 'OR '; - $threadIdStr = addslashes($threadId[$i]); - $condStr .= '(te_thread_id = \'' . $threadIdStr . '\' '; - $condStr .= 'AND (te_index = 1 OR te_index >= ' . intval($minIndexArray[$i]) . ')) '; - } - $condStr .= ') '; - - $queryStr = 'SELECT *, ' . $caseStr . ' FROM bbs_2ch_thread_message '; - $queryStr .= 'WHERE te_board_id = ? '; - $queryStr .= $condStr; - $queryStr .= 'ORDER BY no, te_index'; - $this->selectLoop($queryStr, array($boardId), $callback, null); - } - /** - * スレッドメッセージを範囲で取得 - * - * @param function $callback コールバック関数 - * @param string $boardId 掲示板ID - * @param array $threadId スレッドID - * @param int $limit 取得する項目数(0のときすべて) - * @param int $offset 取得開始位置(0~) - * @return なし - */ - function getThreadMessageByRange($callback, $boardId, $threadId, $limit, $offset) - { - $queryStr = 'SELECT * FROM bbs_2ch_thread_message '; - $queryStr .= 'WHERE te_board_id = ? '; - $queryStr .= 'AND te_thread_id = ? '; - if ($limit <= 0){ - $queryStr .= 'ORDER BY te_index'; - } else { - $queryStr .= 'ORDER BY te_index limit ' . intval($limit) . ' offset ' . intval($offset); - } - $this->selectLoop($queryStr, array($boardId, $threadId), $callback); - } - /** - * スレッド情報の取得 - * - * @param string $boardId 掲示板ID - * @param string $threadId スレッドID - * @param array $row 取得データ - * @return true=正常、false=異常 - */ - function getThreadInfo($boardId, $threadId, &$row) - { - $queryStr = 'SELECT * FROM bbs_2ch_thread '; - $queryStr .= 'WHERE th_board_id = ? '; - $queryStr .= 'AND th_id = ? '; - $queryStr .= 'AND th_deleted = false '; // 削除されていない - $ret = $this->selectRecord($queryStr, array($boardId, $threadId), $row); - return $ret; - } - /** - * 投稿文の追加 - * - * @param string $boardId 掲示板ID - * @param string $threadId スレッドID - * @param string $userName 投稿者名 - * @param string $email Eメールアドレス - * @param string $message 投稿メッセージ - * @param bool $updateDt 日付を更新するかどうか - * @param int $newSerial 新規シリアル番号 - * @return bool true = 成功、false = 失敗 - */ - function addMessage($boardId, $threadId, $userName, $email, $message, $updateDt, &$newSerial) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - $user = $this->gEnv->getCurrentUserId(); // 現在のユーザ - $accessLog = $this->gEnv->getCurrentAccessLogSerial(); - - // トランザクション開始 - $this->startTransaction(); - - // スレッドがあるかどうかチェック - $queryStr = 'SELECT * FROM bbs_2ch_thread '; - $queryStr .= 'WHERE th_board_id = ? '; - $queryStr .= 'AND th_id = ? '; - $queryStr .= 'AND th_deleted = false '; // 削除されていない - $ret = $this->selectRecord($queryStr, array($boardId, $threadId), $row); - if ($ret){ - $params = array(); - $messageCount = $row['th_message_count'] + 1; // メッセージ数 - $queryStr = 'UPDATE bbs_2ch_thread '; - $queryStr .= 'SET th_message_count = ?, '; $params[] = $messageCount; - if ($updateDt){ - $queryStr .= 'th_dt = ?, '; $params[] = $now; // 日付を更新 - } - $queryStr .= 'th_update_user_id = ?, '; $params[] = $user; - $queryStr .= 'th_update_dt = ? '; $params[] = $now; - $queryStr .= 'WHERE th_serial = ?'; $params[] = $row['th_serial']; - $ret = $this->execStatement($queryStr, $params); - } else { // 存在しない場合は終了 - $this->endTransaction(); - return false; - } - // 投稿文を追加 - $queryStr = 'INSERT INTO bbs_2ch_thread_message '; - $queryStr .= '('; - $queryStr .= 'te_board_id, '; - $queryStr .= 'te_thread_id, '; - $queryStr .= 'te_index, '; - $queryStr .= 'te_user_name, '; - $queryStr .= 'te_email, '; - $queryStr .= 'te_message, '; - $queryStr .= 'te_regist_dt, '; - $queryStr .= 'te_log_serial, '; - $queryStr .= 'te_update_user_id, '; - $queryStr .= 'te_update_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($boardId, $threadId, $messageCount, $userName, $email, $message, $now, $accessLog, $user, $now)); - - // 新規のシリアル番号取得 - $queryStr = 'SELECT MAX(te_serial) AS mx FROM bbs_2ch_thread_message '; - $ret = $this->selectRecord($queryStr, array(), $row); - if ($ret) $newSerial = $row['mx']; - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * 投稿メッセージを取得(管理用) - * - * @param string $boardId 掲示板ID - * @param int $limit 取得数 - * @param int $page 取得するページ(1~) - * @param function $callback コールバック関数 - * @return なし - */ - function getMessage($boardId, $limit, $page, $callback) - { - if ($limit < 0) $limit = 0; - - $offset = $limit * ($page -1); - if ($offset < 0) $offset = 0; - - $queryStr = 'SELECT * FROM bbs_2ch_thread_message LEFT JOIN bbs_2ch_thread ON te_board_id = th_board_id AND te_thread_id = th_id AND th_deleted = false '; - $queryStr .= 'WHERE te_board_id = ? '; - $queryStr .= 'AND te_deleted = false '; // 削除されていない - $queryStr .= 'ORDER BY th_dt DESC, te_index '; - $queryStr .= 'LIMIT ' . $limit . ' OFFSET ' . $offset; - $this->selectLoop($queryStr, array($boardId), $callback); - } - /** - * 投稿メッセージ数を取得(管理用) - * - * @param string $boardId 掲示板ID - * @return int 項目数 - */ - function getMessageCount($boardId) - { - $queryStr = 'SELECT * FROM bbs_2ch_thread_message LEFT JOIN bbs_2ch_thread ON te_board_id = th_board_id AND te_thread_id = th_id AND th_deleted = false '; - $queryStr .= 'WHERE te_board_id = ? '; - $queryStr .= 'AND te_deleted = false '; // 削除されていない - return $this->selectRecordCount($queryStr, array($boardId)); - } - /** - * メッセージをシリアル番号で取得(管理用) - * - * @param string $serial シリアル番号 - * @param array $row レコード - * @return bool 取得 = true, 取得なし= false - */ - function getMessageBySerial($serial, &$row) - { - $queryStr = 'SELECT * FROM bbs_2ch_thread_message LEFT JOIN bbs_2ch_thread ON te_board_id = th_board_id AND te_thread_id = th_id AND th_deleted = false '; - $queryStr .= 'WHERE te_serial = ? '; - $ret = $this->selectRecord($queryStr, array($serial), $row); - return $ret; - } - /** - * メッセージ項目の削除 - * - * @param array $serial シリアルNo - * @return true=成功、false=失敗 - */ - function delMessage($serial) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ - - if (!is_array($serial) || count($serial) <= 0) return true; - - // トランザクション開始 - $this->startTransaction(); - - // 指定のシリアルNoのレコードが削除状態でないかチェック - $delThread = array(); // 削除するスレッドのID - for ($i = 0; $i < count($serial); $i++){ - $queryStr = 'SELECT * FROM bbs_2ch_thread_message '; - $queryStr .= 'WHERE te_deleted = false '; // 未削除 - $queryStr .= 'AND te_serial = ? '; - $ret = $this->selectRecord($queryStr, array($serial[$i]), $row); - - // 存在しない場合は、既に削除されたとして終了 - if ($ret){ - $boardId = $row['te_board_id']; - $index = $row['te_index']; - if ($index == 1) $delThread[] = $row['te_thread_id']; - } else { - $this->endTransaction(); - return false; - } - } - - // レコードを削除 - $queryStr = 'UPDATE bbs_2ch_thread_message '; - $queryStr .= 'SET te_deleted = true, '; // 削除 - $queryStr .= 'te_update_user_id = ?, '; - $queryStr .= 'te_update_dt = ? '; - $queryStr .= 'WHERE te_serial in (' . implode($serial, ',') . ') '; - $this->execStatement($queryStr, array($userId, $now)); - - // スレッド削除 - if (count($delThread) > 0){ - $delId = ''; - for ($i = 0; $i < count($delThread); $i++){ - $delId .= '\'' . addslashes($delThread[$i]) . '\','; - } - $delId = rtrim($delId, ','); - $queryStr = 'UPDATE bbs_2ch_thread '; - $queryStr .= 'SET th_deleted = true, '; // 削除 - $queryStr .= 'th_update_user_id = ?, '; - $queryStr .= 'th_update_dt = ? '; - $queryStr .= 'WHERE th_board_id = ? '; - $queryStr .= 'AND th_id in (' . $delId . ') '; - $queryStr .= 'AND th_deleted = false '; - $this->execStatement($queryStr, array($userId, $now, $boardId)); - - // 削除するスレッドに属するメッセージはすべて削除 - $queryStr = 'UPDATE bbs_2ch_thread_message '; - $queryStr .= 'SET te_deleted = true, '; // 削除 - $queryStr .= 'te_update_user_id = ?, '; - $queryStr .= 'te_update_dt = ? '; - $queryStr .= 'WHERE te_board_id = ? '; - $queryStr .= 'AND te_thread_id in (' . $delId . ') '; - $queryStr .= 'AND te_deleted = false '; - $this->execStatement($queryStr, array($userId, $now, $boardId)); - } - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * メッセージ項目の更新 - * - * @param int $serial シリアルNo - * @param string $userName 投稿者名 - * @param string $email Eメールアドレス - * @param string $message 投稿メッセージ - * @return bool true = 成功、false = 失敗 - */ - function updateMessage($serial, $userName, $email, $message) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ - - // トランザクション開始 - $this->startTransaction(); - - // メッセージを更新 - $queryStr = 'UPDATE bbs_2ch_thread_message '; - $queryStr .= 'SET te_user_name = ?, '; - $queryStr .= 'te_email = ?, '; - $queryStr .= 'te_message = ?, '; - $queryStr .= 'te_update_user_id = ?, '; - $queryStr .= 'te_update_dt = ? '; - $queryStr .= 'WHERE te_serial = ?'; - $this->execStatement($queryStr, array($userName, $email, $message, $userId, $now, $serial)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } -} -?> diff --git a/widgets/m/bbs_2ch/include/help/index.php b/widgets/m/bbs_2ch/include/help/index.php deleted file mode 100644 index 3d9354d8..00000000 --- a/widgets/m/bbs_2ch/include/help/index.php +++ /dev/null @@ -1,74 +0,0 @@ - - * @copyright Copyright 2006-2008 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 4028 2011-03-11 04:11:33Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -global $HELP; - -// ########## コンテンツ一覧 ########## -$HELP['content']['title'] = 'コンテンツ一覧'; -$HELP['content']['body'] = 'コンテンツの一覧です。'; -$HELP['content_check']['title'] = '選択用チェックボックス'; -$HELP['content_check']['body'] = '編集や削除を行う項目を選択します。'; -$HELP['content_id']['title'] = 'コンテンツID'; -$HELP['content_id']['body'] = 'コンテンツを識別するためのIDです。新規追加時に自動的に設定されます。'; -$HELP['content_name']['title'] = '名前'; -$HELP['content_name']['body'] = 'コンテンツの名前です。コンテンツのタイトルとして表示されます。'; -$HELP['content_visible']['title'] = '公開'; -$HELP['content_visible']['body'] = 'コンテンツをユーザに公開するかどうかを制御します。非公開に設定の場合はユーザから参照することはできません。'; -$HELP['content_limited']['title'] = 'ユーザ制限'; -$HELP['content_limited']['body'] = 'コンテンツの参照をログインしたユーザに限定するかどうかを設定します。チェックが入っているコンテンツはログインユーザだけが参照可能です。'; -$HELP['content_active_term']['title'] = '公開期間'; -$HELP['content_active_term']['body'] = 'コンテンツをユーザに公開する期間を設定します。空の場合は制限なしを示します。'; -$HELP['content_default']['title'] = 'デフォルト項目'; -$HELP['content_default']['body'] = 'URLのパラメータでコンテンツIDが指定されていない場合に表示されるコンテンツを指定します。1つだけ設定可能です。'; -$HELP['content_update_user']['title'] = '更新者'; -$HELP['content_update_user']['body'] = 'コンテンツを更新したユーザです。'; -$HELP['content_update_dt']['title'] = '更新日時'; -$HELP['content_update_dt']['body'] = 'コンテンツを更新した日時です。'; -$HELP['content_view_count']['title'] = '閲覧数'; -$HELP['content_view_count']['body'] = 'コンテンツがユーザに閲覧された回数です。管理者の閲覧はカウントされません。'; -$HELP['content_act']['title'] = '操作'; -$HELP['content_act']['body'] = '各種操作を行います。
●メニューに追加
「メインメニュー」ウィジェットにコンテンツを表示するメニュー項目を追加します。'; -$HELP['content_html']['title'] = 'HTML'; -$HELP['content_html']['body'] = 'コンテンツの内容となるHTMLです。'; -$HELP['content_ref_custom']['title'] = '置換文字列を参照'; -$HELP['content_ref_custom']['body'] = 'コンテンツに埋め込んだ置換文字列はコンテンツ表示時に設定文字列に変換します。置換文字列の設定値を参照します。'; -$HELP['content_key']['title'] = '外部参照用キー'; -$HELP['content_key']['body'] = '外部ウィジェットからの取得用キーです。'; -$HELP['other_show_title']['title'] = 'コンテンツタイトルの表示'; -$HELP['other_show_title']['body'] = 'コンテンツのタイトルの表示制御を行います。'; -$HELP['other_show_message_deny']['title'] = '参照不可の場合はメッセージを表示'; -$HELP['other_show_message_deny']['body'] = 'ユーザが参照不可のコンテンツにアクセスした場合のメッセージを設定します。'; -$HELP['content_meta_title']['title'] = 'タイトル名'; -$HELP['content_meta_title']['body'] = 'ヘッダ部のtitleタグに設定される文字列です。Webブラウザの画面タイトルとして表示されます。'; -$HELP['content_meta_description']['title'] = 'ページ要約'; -$HELP['content_meta_description']['body'] = 'ヘッダ部のdescriptionタグに設定される文字列です。120文字程度で記述します。'; -$HELP['content_meta_keywords']['title'] = '検索キーワード'; -$HELP['content_meta_keywords']['body'] = 'ヘッダ部のkeywordsタグに設定される文字列です。検索エンジン用のキーワードを「,」区切りで10個以下で記述します。'; - -$HELP['content_new_btn']['title'] = '新規ボタン'; -$HELP['content_new_btn']['body'] = '新規コンテンツを追加します。'; -$HELP['content_edit_btn']['title'] = '編集ボタン'; -$HELP['content_edit_btn']['body'] = '選択されているコンテンツを編集します。
コンテンツを選択するには、一覧の左端のチェックボックスにチェックを入れます。'; -$HELP['content_del_btn']['title'] = '削除ボタン'; -$HELP['content_del_btn']['body'] = '選択されているコンテンツを削除します。
コンテンツを選択するには、一覧の左端のチェックボックスにチェックを入れます。'; -$HELP['content_ret_btn']['title'] = '戻るボタン'; -$HELP['content_ret_btn']['body'] = 'コンテンツ一覧へ戻ります。'; -$HELP['content_preview_btn']['title'] = 'プレビューボタン'; -$HELP['content_preview_btn']['body'] = 'コンテンツを表示した実際の画面です。'; -?> diff --git a/widgets/m/bbs_2ch/include/template/admin_other.tmpl.html b/widgets/m/bbs_2ch/include/template/admin_other.tmpl.html deleted file mode 100644 index c0793fd8..00000000 --- a/widgets/m/bbs_2ch/include/template/admin_other.tmpl.html +++ /dev/null @@ -1,204 +0,0 @@ -/** - * 表示データ作成用テンプレート(patTemplate) - * - * LICENSE: This source file is licensed under the terms of the GNU General Public License. - * - * @package Magic3 Framework - * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2013 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ - - - - - -
-{MENU_ITEMS} - -
- - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
掲示板タイトル
トップ画像リンク先
トップ画像
背景画像
掲示板規則
画面下部メッセージ
文字色
背景色
メニュー背景色
スレッド表示部背景色
スレッド作成部背景色
リンク色
リンク色(アクティブ)
リンク色(アクセス済み)
件名文字色
投稿者名文字色
エラーメッセージ文字色
件名最大長
投稿者名最大長
emailアドレス最大長
投稿文最大長
投稿文行長
投稿文行数
レスアンカーリンク数
トップ画面のスレッド最大数
トップ画面のレス最大数
投稿可能なレス数の上限
メニューのスレッド最大数
名前未設定時の表示名
サイト運営者名
スレッド終了メッセージ
-
- -
-
-
-
diff --git a/widgets/m/bbs_2ch/include/template/main.tmpl.html b/widgets/m/bbs_2ch/include/template/main.tmpl.html deleted file mode 100644 index 1baab1a4..00000000 --- a/widgets/m/bbs_2ch/include/template/main.tmpl.html +++ /dev/null @@ -1,49 +0,0 @@ - -
-{TOP_IMAGE} - -
-
{BBS_TITLE}
-
■{FIRST_ANCHOR}
-
{GUIDE}
-{AD} -
- - {SUBJECT}  -
-
- -
-[{INDEX}:{MESSAGE_COUNT}]{SUBJECT}
- {NO} 名前:{NAME}
{DATE}
{MESSAGE}

-
- - - - - 名前:

E-mail(省略可):

- 本文:
-
- -
- 全部読む - 最新50 - 1-100 - 板のトップ - リロード -
-
-
-
-
-
- - - -
-
-{BOTTOM_MESSAGE} -
-BBSホームに戻る[0] -
-
diff --git a/widgets/m/bbs_2ch/include/template/message.tmpl.html b/widgets/m/bbs_2ch/include/template/message.tmpl.html deleted file mode 100644 index b03b51a6..00000000 --- a/widgets/m/bbs_2ch/include/template/message.tmpl.html +++ /dev/null @@ -1,8 +0,0 @@ - -
-{MENU_ITEMS} -
-

{MESSAGE}

- -
-
diff --git a/widgets/m/bbs_2ch/include/template/newthread.tmpl.html b/widgets/m/bbs_2ch/include/template/newthread.tmpl.html deleted file mode 100644 index fa89edd3..00000000 --- a/widgets/m/bbs_2ch/include/template/newthread.tmpl.html +++ /dev/null @@ -1,39 +0,0 @@ - -
- - - -
-{TOP_IMAGE} - -
-{BBS_TITLE}
-{GUIDE}
- -タイトル:
-
-名前:
-
-E-mail(省略可):
-
-内容:
-
- - -
- -タイトル:
-{SUBJECT}
-名前:
-{NAME}
-E-mail(省略可):
-{EMAIL}
-内容:
-{MESSAGE}
-
-
-
-BBSホームに戻る[0] -
-
-
diff --git a/widgets/m/bbs_2ch/include/template/subject.tmpl.html b/widgets/m/bbs_2ch/include/template/subject.tmpl.html deleted file mode 100644 index 06e8b898..00000000 --- a/widgets/m/bbs_2ch/include/template/subject.tmpl.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/widgets/m/bbs_2ch/include/template/thread.tmpl.html b/widgets/m/bbs_2ch/include/template/thread.tmpl.html deleted file mode 100644 index 97dcb904..00000000 --- a/widgets/m/bbs_2ch/include/template/thread.tmpl.html +++ /dev/null @@ -1,30 +0,0 @@ - -
-{TOP_IMAGE} - - -
- 全部 æœ€æ–°50
- {SUBJECT}
- {NO} 名前:{NAME}
{DATE}
{MESSAGE}

-
-新着レスの表示 -
- 全部読む æœ€æ–°50 1-100
-
- - - - - 名前:

E-mail(省略可):

- 本文:
-
- - -
-
-
-
-BBSホームに戻る[0] -
-
diff --git a/widgets/m/bbs_2ch/index.php b/widgets/m/bbs_2ch/index.php deleted file mode 100644 index 25e40aeb..00000000 --- a/widgets/m/bbs_2ch/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 4028 2011-03-11 04:11:33Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/bbs_2ch_search_box/images/icon32.png b/widgets/m/bbs_2ch_search_box/images/icon32.png deleted file mode 100644 index 84553c15fd094d37de15f9a9915a4a9909db815f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22676 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%0D*N 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 Q&iJ#ZTu)XW54rch0CoVc%>V!Z diff --git a/widgets/m/bbs_2ch_search_box/include/container/m_bbs_2ch_search_boxWidgetContainer.php b/widgets/m/bbs_2ch_search_box/include/container/m_bbs_2ch_search_boxWidgetContainer.php deleted file mode 100644 index 47f7e477..00000000 --- a/widgets/m/bbs_2ch_search_box/include/container/m_bbs_2ch_search_boxWidgetContainer.php +++ /dev/null @@ -1,80 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_bbs_2ch_search_boxWidgetContainer.php 4047 2011-03-27 05:11:08Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); - -class m_bbs_2ch_search_boxWidgetContainer extends BaseMobileWidgetContainer -{ - const TARGET_WIDGET = 'm/bbs_2ch'; // 呼び出しウィジェットID - const DEFAULT_TITLE = '2ちゃんねる風BBS検索'; // デフォルトのウィジェットタイトル名 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - if ($act == 'bbs_search'){ // ブログ検索のとき - // キーワード取得 - $keyword = $request->mobileTrimValueOf('keyword'); - - // ブログメインに検索結果を表示させる - $url = $this->gPage->createWidgetCmdUrl(self::TARGET_WIDGET, $this->gEnv->getCurrentWidgetId(), M3_REQUEST_PARAM_KEYWORD . '=' . urlencode($keyword)); - $this->gPage->redirect($url, true/*遷移時のダイアログ表示を抑止*/); - } - // パラメータを埋め込む - $this->tmpl->addVar("_widget", "url", $this->gEnv->createCurrentPageUrlForMobile()); - } - /** - * ウィジェットのタイトルを設定 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string ウィジェットのタイトル名 - */ - function _setTitle($request, &$param) - { - return self::DEFAULT_TITLE; - } -} -?> diff --git a/widgets/m/bbs_2ch_search_box/include/template/index.tmpl.html b/widgets/m/bbs_2ch_search_box/include/template/index.tmpl.html deleted file mode 100644 index 5e4969ab..00000000 --- a/widgets/m/bbs_2ch_search_box/include/template/index.tmpl.html +++ /dev/null @@ -1,6 +0,0 @@ - -
- -
-
-
diff --git a/widgets/m/bbs_2ch_search_box/index.php b/widgets/m/bbs_2ch_search_box/index.php deleted file mode 100644 index 29e9b146..00000000 --- a/widgets/m/bbs_2ch_search_box/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 4043 2011-03-23 11:23:26Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/blog/admin/index.php b/widgets/m/blog/admin/index.php deleted file mode 100644 index d5bf05a3..00000000 --- a/widgets/m/blog/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3452 2010-08-04 09:14:14Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/blog/images/icon32.png b/widgets/m/blog/images/icon32.png deleted file mode 100644 index cc2ef6f10004c6036bae9da806137e5a001407d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1928 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 - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_blogBaseWidgetContainer.php 3836 2010-11-17 06:05:07Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/blogDb.php'); - -class admin_m_blogBaseWidgetContainer extends BaseAdminWidgetContainer -{ - protected $_db; // DB接続オブジェクト - protected $_blogId; // ブログID - const DEFAULT_TOP_PAGE = 'config'; // デフォルトのトップページ - const WIDGET_TITLE_NAME = 'ブログ(携帯)'; // ウィジェットタイトル名 - const CF_ENTRY_VIEW_COUNT = 'm:entry_view_count'; // 記事表示数 - const CF_ENTRY_VIEW_ORDER = 'm:entry_view_order'; // 記事表示方向 - const CF_TITLE_COLOR = 'm:title_color'; // タイトルの背景色 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // サブウィジェット起動のときだけ初期処理実行 - if ($this->gEnv->getIsSubWidget()){ - // DBオブジェクト作成 - $this->_db = new blogDb(); - - $this->_blogId = ''; - - // ブログ定義を読み込む - $this->_loadConfig($this->_blogId); - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _postAssign($request, &$param) - { - // ウィンドウオープンタイプ取得 - $openBy = $request->trimValueOf(M3_REQUEST_PARAM_OPEN_BY); // ウィンドウオープンタイプ - if (!empty($openBy)) $this->addOptionUrlParam(M3_REQUEST_PARAM_OPEN_BY, $openBy); - - // 表示画面を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TOP_PAGE; - - // パンくずリストを作成 - switch ($task){ - case 'config': // 基本設定 - $linkList = ' >> 基本設定';// パンくずリスト - break; - } - // ####### 上段メニューの作成 ####### - $menuText = '' . M3_NL; - - // 作成データの埋め込み - $linkList = '
'; - $outputText .= '
' . $linkList . $menuText . '
' . M3_NL; - $this->tmpl->addVar("_widget", "menu_items", $outputText); - } - /** - * ブログ定義値をDBから取得 - * - * @param string $blogId ブログID - * @return bool true=取得成功、false=取得失敗 - */ - function _loadConfig($blogId) - { - $this->_configArray = array(); - - // BBS定義を読み込み - $ret = $this->_db->getAllConfig($rows, $blogId); - if ($ret){ - // 取得データを連想配列にする - $configCount = count($rows); - for ($i = 0; $i < $configCount; $i++){ - $key = $rows[$i]['bg_id']; - $value = $rows[$i]['bg_value']; - $this->_configArray[$key] = $value; - } - } - return $ret; - } -} -?> diff --git a/widgets/m/blog/include/container/admin_m_blogConfigWidgetContainer.php b/widgets/m/blog/include/container/admin_m_blogConfigWidgetContainer.php deleted file mode 100644 index 40cb5bfc..00000000 --- a/widgets/m/blog/include/container/admin_m_blogConfigWidgetContainer.php +++ /dev/null @@ -1,109 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_blogConfigWidgetContainer.php 3836 2010-11-17 06:05:07Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_m_blogBaseWidgetContainer.php'); - -class admin_m_blogConfigWidgetContainer extends admin_m_blogBaseWidgetContainer -{ - const DEFAULT_VIEW_COUNT = 3; // デフォルトの表示記事数 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'admin_config.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $defaultLang = $this->gEnv->getDefaultLanguage(); - - $act = $request->trimValueOf('act'); - $entryViewCount = $request->trimValueOf('item_entry_view_count'); // 記事表示数 - $entryViewOrder = $request->trimValueOf('item_entry_view_order'); // 記事表示順 - $titleColor = $request->trimValueOf('item_title_color'); // タイトルの背景色 - - $reloadData = false; // データの再読み込み - if ($act == 'update'){ // 設定更新のとき - // 入力値のエラーチェック - $this->checkNumeric($entryViewCount, '記事表示順'); - - if ($this->getMsgCount() == 0){ // エラーのないとき - $isErr = false; - - if (!$isErr){ - if (!$this->_db->updateConfig(self::CF_ENTRY_VIEW_COUNT, $entryViewCount)) $isErr = true;// 記事表示数 - } - if (!$isErr){ - if (!$this->_db->updateConfig(self::CF_ENTRY_VIEW_ORDER, $entryViewOrder)) $isErr = true;// 記事表示順 - } - if (!$isErr){ - if (!$this->_db->updateConfig(self::CF_TITLE_COLOR, $titleColor)) $isErr = true;// タイトルの背景色 - } - - if ($isErr){ - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } else { - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - - // ブログ定義を読み込む - $this->_loadConfig($this->_blogId); - $reloadData = true; // データの再読み込み - } - } - } else { // 初期表示の場合 - $reloadData = true; // データの再読み込み - } - // データ再取得 - if ($reloadData){ - $entryViewCount = $this->_configArray[self::CF_ENTRY_VIEW_COUNT];// 記事表示数 - $entryViewOrder = $this->_configArray[self::CF_ENTRY_VIEW_ORDER];// 記事表示順 - $titleColor = $this->_configArray[self::CF_TITLE_COLOR]; // タイトルの背景色 - } - // 画面に書き戻す - $this->tmpl->addVar("_widget", "view_count", $entryViewCount);// 記事表示数 - if (empty($entryViewOrder)){ // 順方向 - $this->tmpl->addVar("_widget", "view_order_inc_selected", 'selected');// 記事表示順 - } else { - $this->tmpl->addVar("_widget", "view_order_dec_selected", 'selected');// 記事表示順 - } - $this->tmpl->addVar("_widget", "title_color", $titleColor);// タイトルの背景色 - } -} -?> diff --git a/widgets/m/blog/include/container/admin_m_blogWidgetContainer.php b/widgets/m/blog/include/container/admin_m_blogWidgetContainer.php deleted file mode 100644 index 1a26d3bc..00000000 --- a/widgets/m/blog/include/container/admin_m_blogWidgetContainer.php +++ /dev/null @@ -1,88 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_blogWidgetContainer.php 3459 2010-08-07 08:04:18Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_m_blogBaseWidgetContainer.php'); - -class admin_m_blogWidgetContainer extends admin_m_blogBaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * ディスパッチ処理(メインコンテナのみ実行) - * - * HTTPリクエストの内容を見て処理をコンテナに振り分ける - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return bool このクラスの_setTemplate(), _assign()へ処理を継続するかどうかを返す。 - * true=処理を継続、false=処理を終了 - */ - function _dispatch($request, &$param) - { - // 表示画面を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TOP_PAGE; - - // コンテナを起動 - $goWidget = false; // サブウィジェットを実行するかどうか - switch ($task){ - case 'config': // 基本設定 - $goWidget = true; // サブウィジェットを実行するかどうか - break; - default: - break; - } - if ($goWidget){ // サブウィジェットを実行するかどうか - $this->gLaunch->goSubWidget($task, true); // 管理者機能で呼び出し - return false; - } else { - $this->SetMsg(self::MSG_APP_ERR, "画面が見つかりません"); - return true; - } - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'admin_message.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _assign($request, &$param) - { - } -} -?> diff --git a/widgets/m/blog/include/container/m_blogBaseWidgetContainer.php b/widgets/m/blog/include/container/m_blogBaseWidgetContainer.php deleted file mode 100644 index 76ec931d..00000000 --- a/widgets/m/blog/include/container/m_blogBaseWidgetContainer.php +++ /dev/null @@ -1,177 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_blogBaseWidgetContainer.php 3836 2010-11-17 06:05:07Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/blogDb.php'); - -class m_blogBaseWidgetContainer extends BaseMobileWidgetContainer -{ - protected $_db; // DB接続オブジェクト - protected $_mobileId; // 携帯ID - protected $_blogId; // ブログID - protected $_spacer; // スペーサ - protected $_currentPageUrl;// 現在のページのURL(携帯用のパラメータ付き) - // 表示設定 - const ERR_MESSAGE_COLOR = '#ff0000'; // エラーメッセージカラー - const SPACER_FORMAT = '
'; // スペーサフォーマット - const LINK_PAGE_COUNT = 5; // リンクページ数 - const SEARCH_BODY_SIZE = 200; // 検索結果の記事本文の文字列最大長 - - // 値定義 - const CF_ENTRY_VIEW_COUNT = 'm:entry_view_count'; // 記事表示数 - const CF_ENTRY_VIEW_ORDER = 'm:entry_view_order'; // 記事表示方向 - const CF_SEARCH_COUNT = 'm:search_count'; // 検索記事数 - const CF_SEARCH_ORDER = 'm:search_order'; // 検索記事表示方向 - const CF_TITLE_COLOR = 'm:title_color'; // タイトルの背景色 - - // 画面 - const DEFAULT_TASK = 'read'; // デフォルトの画面 - const TASK_READ = 'read'; // スレッド表示 - // URL用パラメータ -// const URL_PARAM_MEMBER_ID = 'memberid'; // 会員ID -// const URL_PARAM_MESSAGE_ID = 'messageid'; // メッセージID - // 共通のCSS - const CSS_LINK_STYLE_BOTTOM = 'text-align:center;'; // 下のリンク部のスタイル - const CSS_LINK_STYLE_INNER_BOTTOM = 'text-align:right;'; // 内枠の下のリンク部のスタイル - // 画面タイトル - const DEFAULT_TITLE_SEARCH = '検索'; // 検索時のデフォルトタイトル - // 表示メッセージ - const MESSAGE_NO_ENTRY_TITLE = 'ブログ記事未登録'; - const MESSAGE_NO_ENTRY = 'ブログ記事は登録されていません'; // ブログ記事が登録されていないメッセージ - const MESSAGE_FIND_NO_ENTRY = 'ブログ記事が見つかりません'; - const MESSAGE_EXT_ENTRY = '続きを読む'; // 投稿記事に続きがある場合の表示 - const MESSAGE_EXT_ENTRY_PRE = '… '; // 投稿記事に続きがある場合の表示 - const MESSAGE_SEARCH_KEYWORD = '検索キーワード: '; // 検索キーワード用ラベル - // アクセス分析用 - const CONTENT_TYPE = 'bg'; // 参照数カウント用 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // 端末IDを取得 - $this->_mobileId = $this->gEnv->getMobileId(); - - // サブウィジェット起動のときだけ初期処理実行 - if ($this->gEnv->getIsSubWidget()){ - // DBオブジェクト作成 - $this->_db = new blogDb(); - - // 定義ID取得 - // 定義IDから掲示板IDを作成 - $configId = $this->gEnv->getCurrentWidgetConfigId(); - $this->_blogId = ''; - - // BBS定義を読み込む - $this->_loadConfig($this->_blogId); - - //$this->_currentPageUrl = $this->gEnv->createCurrentPageUrl(); // 現在のページのURL - $this->_currentPageUrl = $this->gEnv->createCurrentPageUrlForMobile();// 現在のページのURL(携帯用のパラメータ付き) - - // スペーサ作成 - $this->_spacer = sprintf(self::SPACER_FORMAT, $this->getUrl($this->gEnv->getRootUrl())); - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _postAssign($request, &$param) - { - // 共通のリンク設定 - $this->tmpl->addVar("_widget", "link_style_bottom", self::CSS_LINK_STYLE_BOTTOM);// 下のリンク部のスタイル - $this->tmpl->addVar("_widget", "link_style_inner_bottom", self::CSS_LINK_STYLE_INNER_BOTTOM);// 内枠下のリンク部のスタイル - $this->tmpl->addVar('_widget', 'top_url', $this->gEnv->createCurrentPageUrlForMobile('')); - - // メッセージカラーを設定 - if ($this->getMsgCount(1) > 0 || $this->getMsgCount(2) > 0){ // エラーメッセージが出力されているとき - $errMessageColor = self::ERR_MESSAGE_COLOR; // エラーメッセージ色 - $errMessageStyle = ''; - if (!empty($errMessageColor)) $errMessageStyle .= 'color:' . $errMessageColor . ';'; - $attr = 'style="' . $errMessageStyle . 'text-align:center;"'; - $this->setMessageAttr($attr); - } else if ($this->getMsgCount(3) > 0){ // ガイダンスメッセージが出力されているとき - $attr = 'style="text-align:center;"'; - $this->setMessageAttr($attr); - } - } - /** - * ブログ定義値をDBから取得 - * - * @param string $blogId ブログID - * @return bool true=取得成功、false=取得失敗 - */ - function _loadConfig($blogId) - { - $this->_configArray = array(); - - // BBS定義を読み込み - $ret = $this->_db->getAllConfig($rows, $blogId); - if ($ret){ - // 取得データを連想配列にする - $configCount = count($rows); - for ($i = 0; $i < $configCount; $i++){ - $key = $rows[$i]['bg_id']; - $value = $rows[$i]['bg_value']; - $this->_configArray[$key] = $value; - } - } - return $ret; - } - /** - * メッセージを表示用に変換 - * - * @param string $message 変換元メッセージ - * @param string $threadId スレッドID - * @return string 変換後メッセージ - */ - function convDispMessage($message, $threadId) - { - // リンク変換 - /*if (!empty($this->_autolink)){ // 自動リンク作成のとき - $message = preg_replace("/(https?):\/\/([\w;\/\?:\@&=\+\$,\-\.!~\*'\(\)%#]+)/", "$1://$2", $message); - - // メッセージへのリンク - // $baseUrl = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId, true)); - $messageUrl = $baseUrl . $this->convertUrlToHtmlEntity('&' . M3_REQUEST_PARAM_ITEM_NO . '='); - $messageListUrl = $baseUrl . $this->convertUrlToHtmlEntity('&' . M3_REQUEST_PARAM_LIST_NO . '='); - $message = preg_replace("/>>([0-9]+)(?![-\d])/", '>>$1', $message); - $message = preg_replace("/>>([0-9]+)\-([0-9]+)/", '>>$1-$2', $message); - }*/ - return $message; - } - /** - * テキストデータを表示用のテキストに変換 - * - * 変換内容 ・改行コードをスペース「 ã€ã«å¤‰æ› - * - * @param string $src 変換するデータ - * @return string 変換後データ - */ - function _convertToPreviewTextWithSpace($src) - { - return preg_replace("/(\015\012)|(\015)|(\012)/", " ", $src); - } -} -?> diff --git a/widgets/m/blog/include/container/m_blogReadWidgetContainer.php b/widgets/m/blog/include/container/m_blogReadWidgetContainer.php deleted file mode 100644 index 8a67c3d2..00000000 --- a/widgets/m/blog/include/container/m_blogReadWidgetContainer.php +++ /dev/null @@ -1,475 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_blogReadWidgetContainer.php 3836 2010-11-17 06:05:07Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_blogBaseWidgetContainer.php'); - -class m_blogReadWidgetContainer extends m_blogBaseWidgetContainer -{ - private $messageCount; // メッセージ数 - private $isExistsMessage; // メッセージが存在するかどうか - private $isExistsNextPage; // 次のページがあるかどうか - private $pageTitle; // 画面タイトル、パンくずリスト用タイトル - const DEFAULT_SEARCH_COUNT = 5; // デフォルトの検索記事数 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'thread_read.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - // パラメータ初期化 - $now = date("Y/m/d H:i:s"); // 現在日時 - $this->currentDay = date("Y/m/d"); // 日 - $this->currentHour = (int)date("H"); // 時間 - $this->langId = $this->gEnv->getCurrentLanguage(); - $this->pageTitle = ''; // 画面タイトル、パンくずリスト用タイトル - - // 定義値取得 - $entryViewCount = $this->_configArray[self::CF_ENTRY_VIEW_COUNT];// 記事表示数 - if (empty($entryViewCount)) $entryViewCount = self::DEFAULT_VIEW_COUNT; - $entryViewOrder = $this->_configArray[self::CF_ENTRY_VIEW_ORDER];// 記事表示順 - $titleColor = $this->_configArray[self::CF_TITLE_COLOR];// タイトル背景色 - - // 入力値取得 - $act = $request->trimValueOf('act'); - $pageNo = $request->trimIntValueOf(M3_REQUEST_PARAM_PAGE_NO, '1'); // ページ番号 - $entryId = $request->trimValueOf('entryid'); - $startDt = $request->trimValueOf('start'); - $endDt = $request->trimValueOf('end'); - $year = $request->trimValueOf('year'); // 年指定 - $month = $request->trimValueOf('month'); // 月指定 - $day = $request->trimValueOf('day'); // 日指定 - //$keyword = $request->trimValueOf('keyword');// 検索キーワード - $keyword = $request->mobileTrimValueOf('keyword');// 検索キーワード - $category = $request->trimValueOf(M3_REQUEST_PARAM_CATEGORY_ID); // カテゴリID - - $showDefault = false; // デフォルト状態での表示 - if ($act == 'search'){ // 検索 - // キーワード検索のとき - if (empty($keyword)){ - $message = '検索キーワードが入力されていません'; - } else { - // 検索項目数 - $searchCount = self::DEFAULT_SEARCH_COUNT; // 検索記事数 - - // 検索キーワードを記録 - $this->gInstance->getAnalyzeManager()->logSearchWord($this->gEnv->getCurrentWidgetId(), $keyword); - - /* - // 検索キーワードログを残す - // スペース区切りの場合はワードを分割 - - // 全角英数を半角に、半角カナ全角ひらがなを全角カナに変換 - $basicWord = $keyword; - if (function_exists('mb_convert_kana')) $basicWord = mb_convert_kana($basicWord, 'aKCV'); - $basicWord = strtolower($basicWord); // 大文字を小文字に変換 - - // 検索キーワードログ書き込み - $cid = $this->gAccess->getClientId();// クッキー値のクライアントID - //$this->db->writeKeywordLog($cid, $this->gEnv->getCurrentWidgetId(), $keyword, $basicWord); - */ - - // 総数を取得 - $totalCount = $this->_db->searchEntryItemsCountByKeyword($now, $keyword, $this->langId); - - // リンク文字列作成、ページ番号調整 - $convKeyword = $request->convMobileText($keyword); // 検索キーワードを携帯用のコードへ変換 - $pageLink = $this->createPageLink($pageNo, $totalCount, $searchCount, $this->_currentPageUrl . '&act=search&keyword=' . urlencode($convKeyword)); - - // 記事一覧を表示 - $this->_db->searchEntryItemsByKeyword($searchCount, $pageNo, $now, $keyword, $this->langId, array($this, 'searchItemsLoop')); - - if ($this->isExistsViewData){ - // ページリンクを埋め込む - if (!empty($pageLink)){ - $this->tmpl->setAttribute('page_link', 'visibility', 'visible'); // リンク表示 - $this->tmpl->addVar("page_link", "page_link", $pageLink); - } - $message = self::MESSAGE_SEARCH_KEYWORD . $keyword; - } else { // 検索結果なしの場合 - $this->tmpl->setAttribute('entrylist', 'visibility', 'hidden'); - $message = self::MESSAGE_FIND_NO_ENTRY; - } - } - $this->setGuidanceMsg($message); // ユーザ向けメッセージ - $this->pageTitle = self::DEFAULT_TITLE_SEARCH; // 画面タイトル、パンくずリスト用タイトル - } else if ($act == 'view'){ // 記事を表示のとき - // コメントを受け付けるときは、コメント入力欄を表示 - // ***** 記事を表示する前に呼び出す必要あり ***** - /*if (!empty($receiveComment)){ - $this->tmpl->setAttribute('entry_footer', 'visibility', 'visible'); // コメントへのリンク - }*/ - if (!empty($category)){ // カテゴリー指定のとき - // 総数を取得 - $totalCount = $this->_db->getEntryItemsCountByCategory($now, $category, $this->langId); - - // リンク文字列作成、ページ番号調整 - $pageLink = $this->createPageLink($pageNo, $totalCount, $entryViewCount, $this->_currentPageUrl . '&act=view&' . M3_REQUEST_PARAM_CATEGORY_ID . '=' . $category); - - // 記事一覧を表示 - $this->_db->getEntryItemsByCategory($entryViewCount, $pageNo, $now, $category, $this->langId, $entryViewOrder, array($this, 'itemsLoop')); - - // タイトルの設定 - $ret = $this->_db->getCategoryByCategoryId($category, $this->gEnv->getDefaultLanguage(), $row); - if ($ret) $title = $row['bc_name']; - - // ブログ記事データがないときはデータなしメッセージ追加 - if ($this->isExistsViewData){ - // ページリンクを埋め込む - if (!empty($pageLink)){ - $this->tmpl->setAttribute('page_link', 'visibility', 'visible'); // リンク表示 - $this->tmpl->addVar("page_link", "page_link", $pageLink); - } - } else { - $title = self::MESSAGE_NO_ENTRY_TITLE; - $this->setGuidanceMsg(self::MESSAGE_NO_ENTRY); // ユーザ向けメッセージ - } - } else if (!empty($year) && !empty($month)){ - if (empty($day)){ // 月指定のとき - $startDt = $year . '/' . $month . '/1'; - $endDt = $this->getNextMonth($year . '/' . $month) . '/1'; - - // 総数を取得 - $totalCount = $this->_db->getEntryItemsCount($now, $startDt, $endDt, $this->langId); - - // リンク文字列作成、ページ番号調整 - $pageLink = $this->createPageLink($pageNo, $totalCount, $entryViewCount, $this->_currentPageUrl . '&act=view&year=' . $year . '&month=' . $month); - - // 記事一覧作成 - $this->_db->getEntryItems($entryViewCount, $pageNo, $now, $entryId, $startDt/*期間開始*/, $endDt/*期間終了*/, $this->langId, $entryViewOrder, array($this, 'itemsLoop')); - - if ($this->isExistsViewData){ - // ページリンクを埋め込む - if (!empty($pageLink)){ - $this->tmpl->setAttribute('page_link', 'visibility', 'visible'); // リンク表示 - $this->tmpl->addVar("page_link", "page_link", $pageLink); - } - } - // 年月の表示 - $title = $year . 'å¹´ ' . $month . '月'; - - // ブログ記事データがないときはデータなしメッセージ追加 - if (!$this->isExistsViewData) $this->setGuidanceMsg(self::MESSAGE_NO_ENTRY); // ユーザ向けメッセージ - } else { - $startDt = $year . '/' . $month . '/' . $day; - $endDt = $this->getNextDay($year . '/' . $month . '/' . $day); - - // 総数を取得 - $totalCount = $this->_db->getEntryItemsCount($now, $startDt, $endDt, $this->langId); - - // リンク文字列作成、ページ番号調整 - $pageLink = $this->createPageLink($pageNo, $totalCount, $entryViewCount, $this->_currentPageUrl . '&act=view&year=' . $year . '&month=' . $month . '&day=' . $day); - - // 記事一覧作成 - $this->_db->getEntryItems($entryViewCount, $pageNo, $now, $entryId, $startDt/*期間開始*/, $endDt/*期間終了*/, $this->langId, $entryViewOrder, array($this, 'itemsLoop')); - - if ($this->isExistsViewData){ - // ページリンクを埋め込む - if (!empty($pageLink)){ - $this->tmpl->setAttribute('page_link', 'visibility', 'visible'); // リンク表示 - $this->tmpl->addVar("page_link", "page_link", $pageLink); - } - } - - // 年月日の表示 - $title = $year . 'å¹´ ' . $month . '月 ' . $day . '日'; - - // ブログ記事データがないときはデータなしメッセージ追加 - if (!$this->isExistsViewData) $this->setGuidanceMsg(self::MESSAGE_NO_ENTRY); // ユーザ向けメッセージ - } - } - $this->pageTitle = $title; // カテゴリー名を画面タイトルにする - } else { - $showDefault = true; // デフォルト状態での表示 - } - // ##### デフォルトの表示では、最新のn件の記事を表示または、記事ID指定で1つの記事を表示 - if ($showDefault){ - // コメントを受け付けるときは、コメント入力欄を表示 - if (!empty($receiveComment)){ - if (empty($entryId)){ - $this->tmpl->setAttribute('entry_footer', 'visibility', 'visible'); // コメントへのリンク - } else { // 記事ID指定の場合のみコメント入力可能 - $this->isOutputComment = true;// コメントを出力するかどうか - - $this->tmpl->setAttribute('show_comment', 'visibility', 'visible'); // 既存コメントを表示 - $this->tmpl->addVar("_widget", "entry_id", $entryId); // 記事を指定 - - // ### コメント入力欄の表示 ### - $this->tmpl->setAttribute('add_comment', 'visibility', 'visible'); - $this->tmpl->addVar("add_comment", "send_button_label", $sendButtonLabel);// 送信ボタンラベル - $this->tmpl->addVar("add_comment", "send_status", $sendStatus);// 送信状況 - } - } - if (empty($entryId)){ - // 総数を取得 - $totalCount = $this->_db->getEntryItemsCount($now, $startDt, $endDt, $this->langId); - - // リンク文字列作成、ページ番号調整 - $pageLink = $this->createPageLink($pageNo, $totalCount, $entryViewCount, $this->_currentPageUrl); - - // 記事一覧作成 - $this->_db->getEntryItems($entryViewCount, $pageNo, $now, 0/* 期間で指定 */, $startDt/*期間開始*/, $endDt/*期間終了*/, $this->langId, $entryViewOrder, array($this, 'itemsLoop')); - - if ($this->isExistsViewData){ - // ページリンクを埋め込む - if (!empty($pageLink)){ - $this->tmpl->setAttribute('page_link', 'visibility', 'visible'); // リンク表示 - $this->tmpl->addVar("page_link", "page_link", $pageLink); - } - } - } else { - $this->viewExtEntry = true; // 記事ID指定のときは続き(全文)を表示 - $this->_db->getEntryItems($entryViewCount, $pageNo, $now, $entryId, $startDt/*期間開始*/, $endDt/*期間終了*/, $this->langId, $entryViewOrder, array($this, 'itemsLoop')); - - // 記事がないときはコメントを隠す - if (!$this->isExistsViewData){ - $this->tmpl->setAttribute('entrylist', 'visibility', 'hidden'); - //$this->tmpl->setAttribute('add_comment', 'visibility', 'hidden'); - } - } - - // 年月日の表示 - // ブログ記事データがないときはデータなしメッセージ追加 - if (!$this->isExistsViewData){ - $title = self::MESSAGE_NO_ENTRY_TITLE; - $this->pageTitle = $title; // HTMLヘッダタイトル - $this->setGuidanceMsg(self::MESSAGE_NO_ENTRY); // ユーザ向けメッセージ - } - } - - // タイトルの設定 - if (!empty($title)){ - // タイトル作成 - $titleStr = '
' . $this->convertToDispString($title) . '
'; - - $this->tmpl->setAttribute('show_title', 'visibility', 'visible'); // 年月表示 - $this->tmpl->addVar("show_title", "title", $titleStr); - } - - // HTMLサブタイトルを設定 - $this->gPage->setHeadSubTitle($this->pageTitle); - } - /** - * 取得したコンテンツ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function itemsLoop($index, $fetchedRow) - { - // 参照ビューカウントを更新 - if (!$this->gEnv->isSystemManageUser()){ // システム運用者以上の場合はカウントしない - $this->gInstance->getAnalyzeManager()->updateContentViewCount(self::CONTENT_TYPE, $fetchedRow['be_serial'], $this->currentDay, $this->currentHour); - } - - $entryId = $fetchedRow['be_id'];// 記事ID - $title = $fetchedRow['be_name'];// タイトル - $date = $fetchedRow['be_regist_dt'];// 日付 - - // ページタイトルの設定 - if (empty($this->pageTitle)) $this->pageTitle = $title; // 画面タイトル、パンくずリスト用タイトル - - // コメントを取得 - /*$commentCount = $this->commentDb->getCommentCountByEntryId($entryId, $this->langId); // コメント総数 - if ($this->isOutputComment){// コメントを出力のとき - // コメントの内容を取得 - $ret = $this->commentDb->getCommentByEntryId($entryId, $this->langId, $row); - if ($ret){ - $this->tmpl->clearTemplate('commentlist'); - for ($i = 0; $i < count($row); $i++){ - $userName = $this->convertToDispString($row[$i]['bo_user_name']); // 投稿ユーザは入力値を使用 - $url = $this->convertToDispString($row[$i]['bo_url']); - $commentInfo = $this->convertToDispString($row[$i]['bo_regist_dt']) . '  ' . $userName; - if (!empty($url)) $commentInfo .= '
' . $url; - $comment = $this->convertToPreviewText($this->convertToDispString($row[$i]['bo_html'])); // 改行コードをbrタグに変換 - $commentRow = array( - 'comment_title' => $this->convertToDispString($row[$i]['bo_name']), // コメントタイトル - 'comment' => $comment, // コメント内容 - 'user_name' => $userName, // 投稿ユーザ名 - 'comment_info' => $commentInfo // コメント情報 - ); - $this->tmpl->addVars('commentlist', $commentRow); - $this->tmpl->parseTemplate('commentlist', 'a'); - } - } else { // コメントなしのとき - $this->tmpl->clearTemplate('commentlist'); - $commentRow = array( - 'comment' => 'コメントはありません', // コメント内容 - 'comment_info' => '' // コメント情報 - ); - $this->tmpl->addVars('commentlist', $commentRow); - $this->tmpl->parseTemplate('commentlist', 'a'); - } - }*/ - - // 記事へのリンクを生成 - $linkUrl = $this->getUrl($this->gEnv->getDefaultMobileUrl() . '?'. M3_REQUEST_PARAM_BLOG_ENTRY_ID . '=' . $entryId, true/*リンク用*/); - $link = 'コメント(' . $commentCount . ')'; - - // HTMLを出力(出力内容は特にエラーチェックしない) - $entryText = $fetchedRow['be_html']; - if ($this->viewExtEntry){ // 続きを表示するかどうか - if (!empty($fetchedRow['be_html_ext'])) $entryText = $fetchedRow['be_html_ext'];// 続きがある場合は続きを出力 - $entryText = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->getUrl($this->gEnv->getRootUrl()), $entryText);// アプリケーションルートを変換 - } else { - // 続きがある場合はリンクを付加 - $entryText = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->getUrl($this->gEnv->getRootUrl()), $entryText);// アプリケーションルートを変換 - if (!empty($fetchedRow['be_html_ext'])){ - $entryText .= self::MESSAGE_EXT_ENTRY_PRE . '' . self::MESSAGE_EXT_ENTRY . ''; - } - } - // 携帯用コンテンツに変換 - $entryText = $this->gInstance->getTextConvManager()->autoConvPcContentToMobile($entryText, $this->currentRootUrl/*現在のページのルートURL*/, - M3_VIEW_TYPE_BLOG/*ブログコンテンツ*/, $fetchedRow['be_create_dt']/*コンテンツ作成日時*/); - - // 記事のフッター部 - $this->tmpl->clearTemplate('entry_footer'); - $row = array( - 'permalink' => $this->convertUrlToHtmlEntity($linkUrl), // パーマリンク - 'link' => $link // コメントへのリンク - ); - $this->tmpl->addVars('entry_footer', $row); - $this->tmpl->parseTemplate('entry_footer', 'a'); - - $row = array( - 'permalink' => $this->convertUrlToHtmlEntity($linkUrl), // パーマリンク - 'title' => $title, - 'date' => $date, // 日付 - 'entry' => $entryText // 投稿記事 - ); - $this->tmpl->addVars('entrylist', $row); - $this->tmpl->parseTemplate('entrylist', 'a'); - $this->isExistsViewData = true; // 表示データがあるかどうか - return true; - } - /** - * 取得したコンテンツ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function searchItemsLoop($index, $fetchedRow) - { - $entryId = $fetchedRow['be_id'];// 記事ID - $title = $fetchedRow['be_name'];// タイトル - $date = $fetchedRow['be_regist_dt'];// 日付 - - // 記事へのリンクを生成 - $linkUrl = $this->getUrl($this->gEnv->getDefaultMobileUrl() . '?'. M3_REQUEST_PARAM_BLOG_ENTRY_ID . '=' . $entryId, true/*リンク用*/); - $link = '' . $title . ''; - - // テキストに変換。HTMLタグ削除。 - $entryText = $this->gInstance->getTextConvManager()->htmlToText($fetchedRow['be_html']); - - // 検索結果用にテキストを詰める。改行、タブ、スペース削除。 - $entryText = str_replace(array("\r", "\n", "\t", " "), '', $entryText); - - // 文字列長を修正 - if (function_exists('mb_strimwidth')){ - $entryText = mb_strimwidth($entryText, 0, self::SEARCH_BODY_SIZE, '…'); - } else { - $entryText = substr($entryText, 0, self::SEARCH_BODY_SIZE) . '...'; - } - - $row = array( - 'title' => $link, // リンク付きタイトル - 'date' => $date, // 日付 - 'entry' => $entryText // 投稿記事 - ); - $this->tmpl->addVars('entrylist', $row); - $this->tmpl->parseTemplate('entrylist', 'a'); - $this->isExistsViewData = true; // 表示データがあるかどうか - return true; - } - /** - * ページリンク作成 - * - * @param int $pageNo ページ番号(1~)。ページ番号が範囲外にある場合は自動的に調整 - * @param int $totalCount 総項目数 - * @param int $viewItemCount 1ページあたりの項目数 - * @param string $baseUrl リンク用のベースURL - * @return string リンクHTML - */ - function createPageLink(&$pageNo, $totalCount, $viewItemCount, $baseUrl) - { - // 表示するページ番号の修正 - $pageCount = (int)(($totalCount -1) / $viewItemCount) + 1; // 総ページ数 - if ($pageNo < 1) $pageNo = 1; - if ($pageNo > $pageCount) $pageNo = $pageCount; - - // ページング用リンク作成 - $pageLink = ''; - if ($pageCount > 1){ // ページが2ページ以上のときリンクを作成 - // ページ数1から「LINK_PAGE_COUNT」までのリンクを作成 - $maxPageCount = $pageCount < self::LINK_PAGE_COUNT ? $pageCount : self::LINK_PAGE_COUNT; - for ($i = 1; $i <= $maxPageCount; $i++){ - if ($i == $pageNo){ - $link = ' ' . $i; - } else { - $linkUrl = $this->getUrl($baseUrl . '&page=' . $i, true/*リンク用*/); - $link = ' ' . $i . ''; - } - $pageLink .= $link; - } - // 残りは「...」表示 - if ($pageCount > self::LINK_PAGE_COUNT) $pageLink .= ' ...'; - } - if ($pageNo > 1){ // 前ページがあるとき - $linkUrl = $this->getUrl($baseUrl . '&page=' . ($pageNo -1), true/*リンク用*/); - $link = '前へ[1]'; - $pageLink = $link . $pageLink; - } - if ($pageNo < $pageCount){ // 次ページがあるとき - $linkUrl = $this->getUrl($baseUrl . '&page=' . ($pageNo +1), true/*リンク用*/); - $link = ' æ¬¡ã¸[2]'; - $pageLink .= $link; - } - return $pageLink; - } -} -?> diff --git a/widgets/m/blog/include/container/m_blogWidgetContainer.php b/widgets/m/blog/include/container/m_blogWidgetContainer.php deleted file mode 100644 index 9955449c..00000000 --- a/widgets/m/blog/include/container/m_blogWidgetContainer.php +++ /dev/null @@ -1,107 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_blogWidgetContainer.php 3463 2010-08-07 10:46:20Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_blogBaseWidgetContainer.php'); - -class m_blogWidgetContainer extends m_blogBaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * ディスパッチ処理(メインコンテナのみ実行) - * - * HTTPリクエストの内容を見て処理をコンテナに振り分ける - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return bool このクラスの_setTemplate(), _assign()へ処理を継続するかどうかを返す。 - * true=処理を継続、false=処理を終了 - */ - function _dispatch($request, &$param) - { - // 実行処理を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TASK; - - // アクセス権をチェック - switch ($task){ - case self::TASK_READ: // ブログ参照 - // 携帯以外からのアクセスの場合はエラー - //if (empty($this->_mobileId)) return true; - break; - } - - // ##### コンテナを起動 ##### - switch ($task){ - case self::TASK_READ: // ブログ参照 - $this->gLaunch->goSubWidget($task); - return false; - default: - $this->SetMsg(self::MSG_APP_ERR, "画面が見つかりません"); - return true; - } - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - - // 要求画面によってテンプレートを変更 - switch ($task){ - default: - return 'message.tmpl.html'; - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _assign($request, &$param) - { - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TASK; - - // 要求画面によってテンプレートを変更 - switch ($task){ - case self::TASK_READ: // スレッド一覧画面 - $this->setUserErrorMsg('携帯電話以外からは実行できません'); - $this->tmpl->addVar('_widget', 'top_url', $this->_currentPageUrl); - break; - default: - break; - } - } -} -?> diff --git a/widgets/m/blog/include/db/blogDb.php b/widgets/m/blog/include/db/blogDb.php deleted file mode 100644 index c5f8bd1f..00000000 --- a/widgets/m/blog/include/db/blogDb.php +++ /dev/null @@ -1,401 +0,0 @@ - - * @copyright Copyright 2006-2016 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getDbPath() . '/baseDb.php'); - -class blogDb extends BaseDb -{ - /** - * ブログ定義値をすべて取得 - * - * 掲示板IDが空のデフォルト値は常に読み込む - * - * @param array $rows レコード - * @param string $blogId ブログID(空の場合はデフォルト値を取得) - * @return bool 1行以上取得 = true, 取得なし= false - */ - function getAllConfig(&$rows, $blogId = '') - { - $queryStr = 'SELECT * FROM blog_config '; - $queryStr .= 'WHERE bg_blog_id = \'\' '; - $queryStr .= 'OR bg_blog_id = ? '; - $queryStr .= 'ORDER BY bg_blog_id, bg_index'; - $retValue = $this->selectRecords($queryStr, array($blogId), $rows); - return $retValue; - } - /** - * ブログ定義値を更新 - * - * @param string $key キーとなる項目値 - * @param string $value 値 - * @param string $blogId 掲示板ID - * @return true = 正常、false=異常 - */ - function updateConfig($key, $value, $blogId = '') - { - // トランザクションスタート - $this->startTransaction(); - - $queryStr = 'SELECT bg_value FROM blog_config '; - $queryStr .= 'WHERE bg_blog_id = ? '; - $queryStr .= 'AND bg_id = ? '; - $ret = $this->selectRecord($queryStr, array($blogId, $key), $row); - if ($ret){ - $queryStr = 'UPDATE blog_config '; - $queryStr .= 'SET bg_value = ? '; - $queryStr .= 'WHERE bg_blog_id = ? '; - $queryStr .= 'AND bg_id = ? '; - $ret = $this->execStatement($queryStr, array($value, $blogId, $key)); - } else { - $queryStr = 'INSERT INTO blog_config ('; - $queryStr .= 'bg_blog_id, '; - $queryStr .= 'bg_id, '; - $queryStr .= 'bg_value '; - $queryStr .= ') VALUES ('; - $queryStr .= '?, ?, ?'; - $queryStr .= ')'; - $ret = $this->execStatement($queryStr, array($blogId, $key, $value)); - } - // トランザクション終了 - $ret = $this->endTransaction(); - return $ret; - } - /** - * エントリー項目を検索(表示用) - * - * @param int $limit 取得する項目数 - * @param int $page 取得するページ(1~) - * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない) - * @param string $keyword 検索キーワード - * @param string $langId 言語 - * @param function $callback コールバック関数 - * @return なし - */ - function searchEntryItemsByKeyword($limit, $page, $now, $keyword, $langId, $callback) - { - $offset = $limit * ($page -1); - if ($offset < 0) $offset = 0; - $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値 - $params = array(); - - $queryStr = 'SELECT * FROM blog_entry '; - $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId; - $queryStr .= 'AND be_deleted = false '; // 削除されていない - $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象 - $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得 - - // タイトルと記事を検索 - if (!empty($keyword)){ - // 「'"\」文字をエスケープ - $keyword = addslashes($keyword); - - $queryStr .= 'AND (be_name LIKE \'%' . $keyword . '%\' '; - $queryStr .= 'OR be_html LIKE \'%' . $keyword . '%\' '; - $queryStr .= 'OR be_html_ext LIKE \'%' . $keyword . '%\' '; - $queryStr .= 'OR be_description LIKE \'%' . $keyword . '%\') '; - } - - // 公開期間を指定 - $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) '; - $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) '; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - - $queryStr .= 'ORDER BY be_regist_dt desc limit ' . $limit . ' offset ' . $offset; - $this->selectLoop($queryStr, $params, $callback, null); - } - /** - * 検索条件のエントリー項目数を取得(表示用) - * - * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない) - * @param string $keyword 検索キーワード - * @param string $langId 言語 - * @return int 項目数 - */ - function searchEntryItemsCountByKeyword($now, $keyword, $langId) - { - $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値 - $params = array(); - - $queryStr = 'SELECT * FROM blog_entry '; - $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId; - $queryStr .= 'AND be_deleted = false '; // 削除されていない - $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象 - $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得 - - // タイトルと記事を検索 - if (!empty($keyword)){ - // 「'"\」文字をエスケープ - $keyword = addslashes($keyword); - - $queryStr .= 'AND (be_name LIKE \'%' . $keyword . '%\' '; - $queryStr .= 'OR be_html LIKE \'%' . $keyword . '%\' '; - $queryStr .= 'OR be_html_ext LIKE \'%' . $keyword . '%\' '; - $queryStr .= 'OR be_description LIKE \'%' . $keyword . '%\') '; - } - - // 公開期間を指定 - $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) '; - $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) '; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - return $this->selectRecordCount($queryStr, $params); - } - /** - * エントリー項目を取得(表示用) - * - * @param int $limit 取得する項目数 - * @param int $page 取得するページ(1~) - * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない) - * @param int $entryId エントリーID(0のときは期間で取得) - * @param timestamp $startDt 期間(開始日) - * @param timestamp $endDt 期間(終了日) - * @param string $langId 言語 - * @param int $order 取得順(0=昇順,1=降順) - * @param function $callback コールバック関数 - * @return なし - */ - function getEntryItems($limit, $page, $now, $entryId, $startDt, $endDt, $langId, $order, $callback) - { - $offset = $limit * ($page -1); - if ($offset < 0) $offset = 0; - $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値 - $params = array(); - - // エントリーIDの指定がない場合は、期間で取得 - if (empty($entryId)){ - $queryStr = 'SELECT * FROM blog_entry '; - $queryStr .= 'WHERE be_deleted = false '; // 削除されていない - $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象 - $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データを表示 - $queryStr .= 'AND be_language_id = ? '; $params[] = $langId; - $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得 - - // 検索条件 - if (!empty($startDt)){ - $queryStr .= 'AND ? <= be_regist_dt '; - $params[] = $startDt; - } - if (!empty($endDt)){ - $queryStr .= 'AND be_regist_dt < ? '; - $params[] = $endDt; - } - - // 公開期間を指定 - $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) '; - $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) '; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - - $ord = ''; - if (!empty($order)) $ord = 'DESC '; - $queryStr .= 'ORDER BY be_regist_dt ' . $ord . 'LIMIT ' . $limit . ' offset ' . $offset;// 投稿順 - $this->selectLoop($queryStr, $params, $callback, null); - } else { - $queryStr = 'SELECT * FROM blog_entry '; - $queryStr .= 'WHERE be_deleted = false '; // 削除されていない - $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象 - $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データを表示 - $queryStr .= 'AND be_id = ? '; $params[] = $entryId; - $queryStr .= 'AND be_language_id = ? '; $params[] = $langId; - $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得 - - // 公開期間を指定 - $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) '; - $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) '; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - $this->selectLoop($queryStr, $params, $callback, null); // 「公開」(2)データを表示 - } - } - - /** - * エントリー項目数を取得(表示用) - * - * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない) - * @param timestamp $startDt 期間(開始日) - * @param timestamp $endDt 期間(終了日) - * @param string $langId 言語 - * @return int 項目数 - */ - function getEntryItemsCount($now, $startDt, $endDt, $langId) - { - $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値 - $params = array(); - - $queryStr = 'SELECT * FROM blog_entry '; - $queryStr .= 'WHERE be_deleted = false '; // 削除されていない - $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象 - $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データを表示 - $queryStr .= 'AND be_language_id = ? '; $params[] = $langId; - $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得 - - // 検索条件 - if (!empty($startDt)){ - $queryStr .= 'AND ? <= be_regist_dt '; - $params[] = $startDt; - } - if (!empty($endDt)){ - $queryStr .= 'AND be_regist_dt < ? '; - $params[] = $endDt; - } - - // 公開期間を指定 - $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) '; - $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) '; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - return $this->selectRecordCount($queryStr, $params); - } - /** - * エントリー項目をカテゴリー指定で取得(表示用) - * - * @param int $limit 取得する項目数 - * @param int $page 取得するページ(1~) - * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない) - * @param int $categoryId カテゴリーID - * @param string $langId 言語 - * @param int $order 取得順(0=昇順,1=降順) - * @param function $callback コールバック関数 - * @return なし - */ - function getEntryItemsByCategory($limit, $page, $now, $categoryId, $langId, $order, $callback) - { - $offset = $limit * ($page -1); - if ($offset < 0) $offset = 0; - $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値 - $params = array(); - - $queryStr = 'SELECT distinct(be_serial) FROM blog_entry RIGHT JOIN blog_entry_with_category ON be_serial = bw_entry_serial '; - $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId; - $queryStr .= 'AND be_deleted = false '; // 削除されていない - $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象 - $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データ - $queryStr .= 'AND bw_category_id = ? '; $params[] = $categoryId;// 記事カテゴリー - $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得 - - // 公開期間を指定 - $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) '; - $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) '; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - - // シリアル番号を取得 - $serialArray = array(); - $ret = $this->selectRecords($queryStr, $params, $serialRows); - if ($ret){ - for ($i = 0; $i < count($serialRows); $i++){ - $serialArray[] = $serialRows[$i]['be_serial']; - } - } - $serialStr = implode(',', $serialArray); - if (empty($serialStr)) $serialStr = '0'; // 0レコードのときはダミー値を設定 - - $queryStr = 'SELECT * FROM blog_entry '; - $queryStr .= 'WHERE be_serial in (' . $serialStr . ') '; - $ord = ''; - if (!empty($order)) $ord = 'DESC '; - $queryStr .= 'ORDER BY be_regist_dt ' . $ord . 'LIMIT ' . $limit . ' offset ' . $offset;// 投稿順 - $this->selectLoop($queryStr, array(), $callback, null); - } - /** - * エントリー項目数をカテゴリー指定で取得(表示用) - * - * @param timestamp $now 現在日時(現在日時より未来の投稿日時の記事は取得しない) - * @param int $categoryId カテゴリーID - * @param string $langId 言語 - * @return int エントリー項目数 - */ - function getEntryItemsCountByCategory($now, $categoryId, $langId) - { - $initDt = $this->gEnv->getInitValueOfTimestamp(); // 日時初期化値 - $params = array(); - - $queryStr = 'SELECT distinct(be_serial) FROM blog_entry RIGHT JOIN blog_entry_with_category ON be_serial = bw_entry_serial '; - $queryStr .= 'WHERE be_language_id = ? '; $params[] = $langId; - $queryStr .= 'AND be_deleted = false '; // 削除されていない - $queryStr .= 'AND be_history_index >= 0 '; // 正規(Regular)記事を対象 - $queryStr .= 'AND be_status = ? '; $params[] = 2; // 「公開」(2)データ - $queryStr .= 'AND bw_category_id = ? '; $params[] = $categoryId;// 記事カテゴリー - $queryStr .= 'AND be_regist_dt <= ? '; $params[] = $now; // 投稿日時が現在日時よりも過去のものを取得 - - // 公開期間を指定 - $queryStr .= 'AND (be_active_start_dt = ? OR (be_active_start_dt != ? AND be_active_start_dt <= ?)) '; - $queryStr .= 'AND (be_active_end_dt = ? OR (be_active_end_dt != ? AND be_active_end_dt > ?)) '; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - - // シリアル番号を取得 - $serialArray = array(); - $ret = $this->selectRecords($queryStr, $params, $serialRows); - if ($ret){ - for ($i = 0; $i < count($serialRows); $i++){ - $serialArray[] = $serialRows[$i]['be_serial']; - } - } - $serialStr = implode(',', $serialArray); - if (empty($serialStr)) $serialStr = '0'; // 0レコードのときはダミー値を設定 - - $queryStr = 'SELECT * FROM blog_entry '; - $queryStr .= 'WHERE be_serial in (' . $serialStr . ') '; - return $this->selectRecordCount($queryStr, array()); - } - /** - * ブログカテゴリーをカテゴリーIDで取得 - * - * @param int $id カテゴリーID - * @param string $langId 言語ID - * @param array $row レコード - * @return bool 取得 = true, 取得なし= false - */ - function getCategoryByCategoryId($id, $langId, &$row) - { - $queryStr = 'SELECT * FROM blog_category LEFT JOIN _login_user ON bc_create_user_id = lu_id AND lu_deleted = false '; - $queryStr .= 'WHERE bc_deleted = false '; // 削除されていない - $queryStr .= 'AND bc_id = ? '; - $queryStr .= 'AND bc_language_id = ? '; - $ret = $this->selectRecord($queryStr, array($id, $langId), $row); - return $ret; - } -} -?> diff --git a/widgets/m/blog/include/help/index.php b/widgets/m/blog/include/help/index.php deleted file mode 100644 index ec1378f9..00000000 --- a/widgets/m/blog/include/help/index.php +++ /dev/null @@ -1,31 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3836 2010-11-17 06:05:07Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -global $HELP; - -// ########## ブログ設定 ########## -$HELP['config_title']['title'] = 'ブログ設定'; -$HELP['config_title']['body'] = 'ブログ機能の携帯用の設定を行います。'; -$HELP['config_view_count']['title'] = '記事表示数'; -$HELP['config_view_count']['body'] = 'ブログ記事を一覧表示する場合の記事の表示数を設定します。'; -$HELP['config_view_order']['title'] = '記事表示順'; -$HELP['config_view_order']['body'] = 'ブログ記事を一覧表示する場合の記事の表示順を設定します。'; -$HELP['config_title_color']['title'] = 'タイトル背景色'; -$HELP['config_title_color']['body'] = 'タイトルの背景色を設定します。'; -?> diff --git a/widgets/m/blog/include/template/admin_config.tmpl.html b/widgets/m/blog/include/template/admin_config.tmpl.html deleted file mode 100644 index c0c699f6..00000000 --- a/widgets/m/blog/include/template/admin_config.tmpl.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - -
-{MENU_ITEMS} - -
- - -
- -
- - - - - - - - - - - - - - - - -
ブログ設定
記事表示数
記事表示順 - -
タイトル背景色 - -
-
- -
- -
-
-
diff --git a/widgets/m/blog/include/template/admin_message.tmpl.html b/widgets/m/blog/include/template/admin_message.tmpl.html deleted file mode 100644 index 653fc1cf..00000000 --- a/widgets/m/blog/include/template/admin_message.tmpl.html +++ /dev/null @@ -1,7 +0,0 @@ - -
-
-

{MESSAGE}

- -
-
diff --git a/widgets/m/blog/include/template/message.tmpl.html b/widgets/m/blog/include/template/message.tmpl.html deleted file mode 100644 index 6825e57e..00000000 --- a/widgets/m/blog/include/template/message.tmpl.html +++ /dev/null @@ -1,7 +0,0 @@ - - - -
 
-
 
- -
diff --git a/widgets/m/blog/include/template/thread_read.tmpl.html b/widgets/m/blog/include/template/thread_read.tmpl.html deleted file mode 100644 index 97f6ecaf..00000000 --- a/widgets/m/blog/include/template/thread_read.tmpl.html +++ /dev/null @@ -1,17 +0,0 @@ - -{TITLE} - - -
- -
{DATE}
-
{ENTRY}
-
{LINK}
-
-{SPACER} -
-
{PAGE_LINK}
-
 
- -
diff --git a/widgets/m/blog/index.php b/widgets/m/blog/index.php deleted file mode 100644 index d5bf05a3..00000000 --- a/widgets/m/blog/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3452 2010-08-04 09:14:14Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/blog_category/admin/index.php b/widgets/m/blog_category/admin/index.php deleted file mode 100644 index 8da1ffb2..00000000 --- a/widgets/m/blog_category/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3833 2010-11-17 01:45:54Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/blog_category/images/icon32.png b/widgets/m/blog_category/images/icon32.png deleted file mode 100644 index 58c1d16fd44436783e8da1aa8aa4279b4f07b29c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24910 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 diff --git a/widgets/m/blog_category/images/icon64.png b/widgets/m/blog_category/images/icon64.png deleted file mode 100644 index ce70280423b133a2e8f8780e94bdf177e272670d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29932 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�)EBv07j{5Rdx}qP7{vu9w92~`nmCl6Aq|YbC2{)Ra*W6SBx>s# zKFX~IWOJ+r5#W{Q#h;t-QGcYIyKW8Zs&d2t#4*94*P_8}Fh|7?V%Wg_B|liN zts#6VWu8apUditE_LqS_)-0HRm1>L6f>s;h#jl;Si0=aY9|*Riaho7h?IN zic8z)xq-|q^? z5*qZ`4R#*%Ra_(2(mA?k12M+82B7srbgZ|6*?k*%s-}S$JlV|!u3*4=*YyA+#zCkh zty{IM?Z~@YbzK8ar9Pta;X|xIcAG8%zKvL$_WxF$Me*xTZtbgf(9>i0x(-DO%eU+^ zP)ipgOqxIJF3jy-+haGWFj)VDsKgIm%(_o*Z|Zg`s1TsmhYED#R_&)8=rbEMMM16C z90w?EN#t}$YdvbONq-o%k0yfp?SAHYnzOm-HdJ?lp^G4>Qx3;1)~=`nJr!Kgti+60 z^XrRD;ln|}vOy(*o53>Hl}Tkj7m|m9=E+y8{Hq%OvJXn)K}f2_EgvnlZR$Vwus!3P zP{u>3uiND}4V1ZN{^Y!*uG~e9eUnI&{j9kb3;-Kz4~J-xLqs+kkLsinBJ^wdFfP^Y zsFn)Bm_n*GZ7y`7Q;@64<$%QWF{uzs@!kWWS0wBHMwUC!`y{s>-$F6>l)& zrfwbSwnu6B2rVxqKVn{~n^^*%fn!En~`V3uy^c?K^z1&TeYc`1~ z@3UpQhgt^j8|e4FA!xsu@ni8q<1kd)~ zq3vU_mAQLh@8)PGGni{sZ>Q}PLAv5wWHF}q9D29zu2vbr9FuFVt-~&32jnn9)3S)U zqmfyhQ(3K^v5_EJ9I+Hw2^{C*TPkmuZcee9&i>7TNM!G?Mx=y*R9HAwxrcKjZ z_{mAmek3IozKD$XWO2SOBsp8^sxH$b@`o!?p})+goFdKPL^m|`>vCcXCVp>@x%t{; zF56Na=J)J2d!x@o^ab;mTB>yK>h#Y85iq90!(QFEzX4}CP%@M8vCLijiyJn*eX|Zr z+hsj0hPigDs;qu10jCdoZ74Fp&}uAYl;FdcW&)#nSZf-b-YTC3S28Rdun%o=B&_iw zs&vZ=$WoXCDnAT193YXyOzg&>)do8pg7D`Oi6zrBA;H7Yof)mEG`*?NPY1J}yT$iW z#^d{~qXX?694Bi2KZ%R~{hyP#n47%!Ebm`1l9H48@+0AF(!EFbeG;;Qw~0LWyKUiO zm=HDS*jmgF?la#x5@^%_;ppf8ZXrgkU^WXwLdHw5#hPTTAmM5Alhn=mHebX)da;Bu z)e2&fJJ0`9Xw=RMPq%jtxU$j zx-6LXeNU(cPL{i>Jg_8;Pc&oNS4^QQr+lf&K{rs9+X@idNq> zXDc>*tHA7g(v1z{SfQst1KS1z zOsUf7BrAt?z57m-^xvWTwn@mKMk!3}ZrqZSce^_;`%&NmE8v%eL;sU(Z;3)DAYIPZ zc2V!;BV--89IO9TMq zB4Y;>8YD%$S_$~<9i9o`6G>@8&{4bv{uf{J9+Zcd?}Cu1johj> zZT-yCA_#6{v;l#@ku}EL`0&T4HvUOBIG=43w7HXCXf7rqw{ekP>2hsAv^U6hE_tGZhnJ0i zN+v~s<{F$XDWi@m4D5hk*}v)SZU`Otd2mE|uzOWoIV4(We10Hcm*KQ}tWFca7At+& zHx0ir(`3J4*MbX;n4LT%+=kz6|8g^D6g9IC19B|V5xqT?CgF>K{~DKTym(=!IZw6L z-}q>~UrD(ALogA{bf?gM*y4rK?)^hf?{XMOp?!wEB@4$Bp;IBpc8-XO@94p6wEq5= zQTr&>q`Y2_7JUvr1Mq66INrvkU{42mmX}SmNLS1q42By$fhfoRrKY3ih~~nG)HeL} z+$?kTqPl?pT(0vlme0yw@&#XXBhz%0a6QmxS%20Xuc(Ffkx_dqfhS;p3cN7#>P<9k z&@W<^PDV7EzYQL9vei?=fvxN{;v!=AjA=f#M;-KuY(eA6neR(UJc))q*mX$du}pM( z*z1JT^^QTG6r?L`ql)B`&<-@&r&@Xkz9tMubK?E)KyDqyu>8WW$UKu@r4BMoO-2vheuixM1ZauT~aQMH6HBe7SDhKLjf4;*Jq;3yl<9tiIbpX|oEb&+`J znT9FgL>1LlB&HmW@`D#H}bxeqxI^ zDR(y6QSsELnB+}GKjl;awt7n!v8Hpnw+~bsmlY$;#7-`kvnQ9E^lC>Y?|HK0Fcl5Ez^*(gtpsyi+(@YmaJc2Op^Eck=!~}0Q?yppYQQQa33l5Up-w4enyAftd0b0Q*p@B zod5=9g*E+ecNIPt(i@jy-vOTeG(%r|B^H9O1zbaaZWfYe-+*H0_QRHuL-85!To4Wg z)m6D6ryOZ(UNPk6Zz+6($SVTq7t~6&7DxhC&^t1j=g8^x&7H5q2Y=&&CcL^>2x@~w zf$HqF&td>UEFVbPM$;ZXN!_i_KOZ~9L~L6*TY`e9g{(Zs28tE0xrX_b)d+2QswHaG zaEEa{0xfJ8_^ZYn%O5={TuTC!-@aRjMti#+8>@v1MwY^U|k&_P|-KE zUw|PNr;U3yXZf-I#!uMkH36#Ng~}_~d@{Zf@?f1%cdqf~S4fz#UxBU0iMg9d~oXQx&0kTKI{b$(B7H<+8E zDl&^iyFrC%rfrJ>j2$6&8-IXeHOZ(-3sPl;Z3X&X!_Cxn@M%6Xz!FGXOZS0J8VQ4C z)j!jm53wX^^^*;PklHqailfLD#oQs0Oi ztwz+%ljIu2r+pmEo9O>K3ZHDL= z93^dzvI>)5`D4WfXcL(N)Bp&6+BFj-9<()QR+klXCkL-_Rmm1#Dk2}GH4^Hky|aI_ zH?jb<%ASe%P*)}2mN@&tjHLxZYpL8QU;c=E_ z64o184COI=Q{V$#-!)!CCSp_P^H`IKEIY4i+oX)F#kY9Jp-O$)qwGaa1{r9QzJ4Su zM;R_Z(P9@4$-s&=`ftwM-Z8DPMf(+i=2z^RM8o4lKR4%9ko!X~9Cta|6?O|zIJ?ud zlQ^qALJTIoFRgro)J!WA2=BtCTv^BJP%Q0b9{SClMI;SnK~#t{o;QG zuy6iD0qoQl@3m`Zqn{spo_K2b)|2_h+P{g76Tpn{(+Ks(EuchL z-@0OyBx97cgT>?VTR5Cc<0uOuNy0(hvC>S#68fZ<`pD9&o1)m++17FJc1wUn3fit@ z!nY1XBG(7f;#0S<8$p27N3cLFTo}B@l5YpUKw!aRoY14AUucf>BB2O)D>{aQ9X!q z1b+Gvx`ecAi|>Qp&5)=t#C~1Rs51eiX}z%KsCPHeP+nN}0bkkB+JBA%Q5+EI_-6KEEwJ)3D^?X3YOIY4KHLLU?F-8B zPOeQO9m{LIh&8Nc0wt0vdzxKAKuXguozHe1uqS6QUY@!+EXP55GQqQYqaSJ*Dq#;t z#}H6zrnGFw%aPqW%w_DYv_>n2af(IjVe82~%AUCAno(yI<@oS-Grs}NEfj7gx&EB{ z9z!v79FI7dE60(RA+ z)ycuE6%F?A6K>q)Nakr(SYA*&Smy;MZCE7oAnzu1yvQMd;MM1ziZ@nqN(}(pr>Vr- z7q-4KgH!{>x*Kf9&$qeR?H%u%DVxOhYHerWVr#x^z39xO)j!%GQJ!E_%N3eved(32 z${7%l$@AuWex@(tC?gqNRORJ=f_q_m(hhfj=sF8+rTjk zbW{tR)z_=Z>8#sW7=n*FUsESjnw% zwB{hTCZ$7=1(S*VAlwrMn-NbtZwxKsVf@7c*^!Y^cubB zaHNuIZ#r&!s#=Fq8^mXfI~oS+bovLG|JQB!D2r2Z=Ea9fT>^@ zEq%jEPveXJ|}3Dx=8<6K9Lyz#CqX}&)N^usb8kDxMH=?AsZ&ol*Z~}dbewm z*=4AVPw5XoPh{#vOqC2K$-7%iA@+w!EEo3~$y@f}B)GEv@1%V0XLmF$Fr>aD$^AB> zFD!C^w5@-}fSbj4n|0fFj_>5|1NK>iYbq*H-k2`(?j`x&s+IM1X?|{dKL=CJ`ikDU zIZ1SK{{5sosu_3CyQKmgZxnjDr8afoVdVG|w+##=l_DcEY9zSM-Ys@Sobx#G&3_w; zpWmkHbJr(ne$1B;vY)Qq$P{U~z%5mxu@UOHn>+T7c4V&ceo`M%!^wr6c)Lu*{x;Z9 zg9Ozxvn+~reUTb?_;z}22Z15VH{%EJ6%CI$j67AnTW~UBnaK4}u%_g${7Ku??j`>t zhd2*Kaa632N0!T<`1buTWPRc0F#)xa_aa%L+xyyQAKY~e$D1y1+iJON{1~o|GyQV- zOj5$lK%cJyE`?iiS1CS?IjIHLD%LB0Z#bTSp^#l&+~IqK`K_FIwO?T`-HvcbWWIUd zN6nBs5q8|ldKD7nksmvT}>kHs!9KjFN=l=3+hbI0XfA zGBTu+yCr@219|itA6=Ar|IEuP?qDxH@5mw+M0ffccP7)^g?Z95bT>zX+k?|N@tl_P zMx1F*p2~#&^=Shm<@pnQZK@%g`bGLnjM;WvwvNS!1Yxm!?v*c*3P}9`3{ZfrSEMs&rt@ohTkw-<#cMctt zwCJgk$;k%iEPDMl4GkL`nWAFOB$-_IsT;=56-QldE9_hjPMFfygWtBo!c)Ah#;u2+ z!AhK`tZ%5=AJ>Dy*GAWB@I8&6P*1n+bnV)olF)r{OL=(wOkQEj=hWrRM?^&{fs3g+ zo24;)!~DFJZZpR?py5<>8PT>QIyZ3a)ra=Ghg1}jA4>l2t{l03MC2v!hnMc36lM~5 z?$=j@PZllQJaw=p_?;_g>`+m(fK-=4-*$Bxr~^m>r?Y1fF(JmhRu(Tkza(}KjPP?O zKE0p(@=J99rp=`PvRsB%jG4I9&;|TThCtD$9ueg1^Pi>htFKR3Ss4{ra(K14OGDNZ zvW@-7?@p^@>!A-N+Z!^Bjy2JQvvdr96laK0K(r)&JcX|5w{XNTUfhkox6zKJliuz)v&pUlOr zasBiT7dQ1?oUH7GKknFD7RM?<2TYqgHDH$GvOTriZuk8Fpl9!P?oNOH_4~T%)2B~E zXsd<)Y&DL4{&hV~i(%+c{7T{6?eEzE#z}D((=?=vmm2L3;QsB(38?H(F%d+8l(8yg z{bH}N$mz$$H!yw)GRJL`Hu;OlF^+bUn>tY?S3-<2@=oS|gR+fH^tq!-N{UK8xo3_& zz9}9L_qs|Ly#n+`7PqRKY@d) zbTqKzgpKg`y}i9mPfr?0+qG-FxW>`91qB6}^a{B*?2RJ#Lz7;qkBVPAWaxMJcHp)$ zZ`|tlxR&zZ^p|_^;^W*$hR=Au%GCmma@vfKy?d=?D#j4c4uB-D)(AyzRgRo}aP(=L;!bVw7Hz05K_<3I-ODXV>b8x}E&Xj= z{VDv5g8Ry@D_+Kf=gr@6+_g##<2}>xC@~p`x;8l0%hhdE08Dn>)}(2N-&7Af(T~SP z*^!=m1Vy)zB=Vce-+9+foBpUgj|^0r%2ViFX*9bg++Ij~r7P51HF$kv?Z`u;EB43^ z0dWB}%awvZaHsGLdfjXXf&>zmi4BqIq2r{d58m(e_K&1XGL8_obQBT~U0#(%JQ$Ri zqeeCv-NBU+&wtasfP;a_k>ZUwy$8_)QPRFDbqVu!PAn}{>(9?%DwWUO8}f>ss!d%g zRjy)pNk!9+)raF0g=$u>4qpGF1{~O&YKTh-6DjTo&>`t=v80Uvv(v!4sM+lMZtEUUElsdw{&q^E(YHQ+6(Q+RFPBf5g_^Npw3uQk9N!i;cD`G3%{T zG{Ib)9*mRKSr!sHz_N5|*m3CQEBiFQ0+bE?WKQLgNdrie-hDkJ$NGvTqChyv{u(04JkQ>oot{@>F zIN)3vvb)V`zca_uBGcKL)}5Q&{ZQ>Twq9vl9-{-=?ANiBcZMb&v3YA8?iBxASU!uZ-FZp;x3UxSqye|9Z9%@Afx@ssePxC; z5R&|{)_r}k4T)*2lxpXiIo@>cgg7Q zK`^^GKFVP_!X49=#(z56ZTJT@YRLjGA-G7QVg0v;h(8Z{Ce48ktn?N!N)pZz20E)7 zX=%s1XHIK1$F@Rz4uJr;5rH_9xRLXog-tE*zB_*ZdHu4`CVj~C@bOrynU*DYOQVZU zUE6!blubFkXf8DWiD(d9^N4M#+_}#}Cm&4Je!-FuTAcRjTty`hS|7{U^aVH*&ep-P ze~EQ_TSD=msP6|J6@N2qSq6zT+v>`}+}xji{yov!3;A5CPT%)?)_2Fheh#1V58YQS z`TjEr_gl#Rm?#MYP$l;Tf(c_d>-!0Gbr8AS~} zrrusFRg3Bz<*TzLxF@dn8(*jUHu%PzIxlHXJXrHr0&eMEdv8?OE

XMa#S_%t6lTT zw4m?FvX_wDD-U*?YaXIC?tSW52pl{AmOR-0iT~pKtNliqJHx9xJ!dWo;uph|&OF++ zJD-9TI&$>116VyVe(&rC48Yg)b zdxZ{)qJ*nV&3id2#0En`jtQZCR*VCj$SEp9FRy_xnZQ zuPB{%ll4LA2Q%t+@rLQ3#BaE}sFvS*yBLij>{#!5%wF|+iqMrctxOaW2b&(?3u1m{ z4Tzt$UA8li%z5&ohPXw0;389f4K?0xXAR}AOzkvp-Py#y^!=iu^E2ACG$sRTe46)2 z=*Gr7QO(G=E_sF56q66M&v_VBG7IImIf0q3CB7hH{bh$<$)j3!JfYx7jo5K@0~Uwg z7}CJ!bldd|lS^riBHZ&1wVeJ9x4CbrXD!jOO!06~6VUekeN&Y6Y8AIsdPY{h>xvFj z796|0otO#3!9Zl)0aNoN<#WPoVslO~Fr<6&x>F><$Y+I!mp?#C6cJ;k-qQ?Gb9`%wkC&mnQy-wIojU9~z=Yedpfz^&q|ZHGO(6etIs3(j>Ti%YMn;{gACzR+YMHI#pmZK06X`u zMW5a-OxZ;*B@P#N6D;CiIPr(b*G6wY0Q6;N|(8 rjTKI5(yE`n4^B@r*tZ|mYyuoM!k>n$#ghM7_%OO_cBjJN+1vjEU?-!+ diff --git a/widgets/m/blog_list/include/container/m_blog_listWidgetContainer.php b/widgets/m/blog_list/include/container/m_blog_listWidgetContainer.php deleted file mode 100644 index 8124ecdf..00000000 --- a/widgets/m/blog_list/include/container/m_blog_listWidgetContainer.php +++ /dev/null @@ -1,100 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_blog_listWidgetContainer.php 3740 2010-10-27 01:22:39Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/blog_listDb.php'); - -class m_blog_listWidgetContainer extends BaseWidgetContainer -{ - private $db; // DB接続オブジェクト - private $langId; // 言語 - const TARGET_WIDGET = 'blog_main'; // 呼び出しウィジェットID - const DEFAULT_TITLE = 'ブログリスト'; // デフォルトのウィジェットタイトル名 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new blog_listDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'main.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $this->langId = $this->gEnv->getCurrentLanguage(); // 表示言語を取得 - - // ブログリストを作成 - $this->db->getAllBlog(array($this, 'blogListLoop')); - } - /** - * ウィジェットのタイトルを設定 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string ウィジェットのタイトル名 - */ - function _setTitle($request, &$param) - { - return self::DEFAULT_TITLE; - } - /** - * 取得したデータをテンプレートに設定する - * - * @param int $index 行番号(0~) - * @param array $fetchedRow フェッチ取得した行 - * @param object $param 未使用 - * @return bool true=処理続行の場合、false=処理終了の場合 - */ - function blogListLoop($index, $fetchedRow, $param) - { - // リンク先の作成 - $name = $fetchedRow['bl_name']; - $linkUrl = $this->gEnv->getDefaultUrl() . '?' . M3_REQUEST_PARAM_BLOG_ID . '=' . $fetchedRow['bl_id']; - $row = array( - 'link_url' => $this->convertUrlToHtmlEntity($this->getUrl($linkUrl, true/*リンク用*/)), // リンク - 'name' => $this->convertToDispString($name) // タイトル - ); - $this->tmpl->addVars('itemlist', $row); - $this->tmpl->parseTemplate('itemlist', 'a'); - return true; - } -} -?> diff --git a/widgets/m/blog_list/include/db/blog_listDb.php b/widgets/m/blog_list/include/db/blog_listDb.php deleted file mode 100644 index 7422cbdf..00000000 --- a/widgets/m/blog_list/include/db/blog_listDb.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: blog_listDb.php 3740 2010-10-27 01:22:39Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getDbPath() . '/baseDb.php'); - -class blog_listDb extends BaseDb -{ - /** - * ブログ一覧を取得 - * - * @param function $callback コールバック関数 - * @return なし - */ - function getAllBlog($callback) - { - $queryStr = 'SELECT * FROM blog_id '; - $queryStr .= 'WHERE bl_deleted = false '; // 削除されていない - $queryStr .= 'AND bl_visible = true '; - $queryStr .= 'ORDER BY bl_index, bl_id'; - $this->selectLoop($queryStr, array(), $callback); - } -} -?> diff --git a/widgets/m/blog_list/include/template/main.tmpl.html b/widgets/m/blog_list/include/template/main.tmpl.html deleted file mode 100644 index 1174fe8c..00000000 --- a/widgets/m/blog_list/include/template/main.tmpl.html +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/widgets/m/blog_list/index.php b/widgets/m/blog_list/index.php deleted file mode 100644 index 70b85d95..00000000 --- a/widgets/m/blog_list/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3740 2010-10-27 01:22:39Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/blog_search/images/icon32.png b/widgets/m/blog_search/images/icon32.png deleted file mode 100644 index 84553c15fd094d37de15f9a9915a4a9909db815f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22676 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%0D*N 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 Q&iJ#ZTu)XW54rch0CoVc%>V!Z diff --git a/widgets/m/blog_search/include/container/m_blog_searchWidgetContainer.php b/widgets/m/blog_search/include/container/m_blog_searchWidgetContainer.php deleted file mode 100644 index 519d99ef..00000000 --- a/widgets/m/blog_search/include/container/m_blog_searchWidgetContainer.php +++ /dev/null @@ -1,83 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_blog_searchWidgetContainer.php 3508 2010-08-18 11:05:42Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); -//require_once($gEnvManager->getCommonPath() . '/htmlEdit.php'); - -class m_blog_searchWidgetContainer extends BaseMobileWidgetContainer -{ - const TARGET_WIDGET = 'm/blog'; // 呼び出しウィジェットID - const DEFAULT_TITLE = 'ブログ検索'; // デフォルトのウィジェットタイトル名 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - if ($act == 'blog_search'){ // ブログ検索のとき - // キーワード取得 - $keyword = $request->mobileTrimValueOf('keyword'); // 一旦内部コードへ変換 - $keyword = $request->convMobileText($keyword); // 再度携帯用コードへ変換 - - // ブログメインに検索結果を表示させる - $url = $this->gPage->createWidgetCmdUrl(self::TARGET_WIDGET, $this->gEnv->getCurrentWidgetId(), 'act=search&keyword=' . urlencode($keyword)); - $this->redirect($url); - } - // パラメータ埋め込み - $this->tmpl->addVar('_widget', 'url', $this->gEnv->createCurrentPageUrlForMobile()); - $this->tmpl->addVar('_widget', 'act', 'blog_search'); - } - /** - * ウィジェットのタイトルを設定 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string ウィジェットのタイトル名 - */ - function _setTitle($request, &$param) - { - return self::DEFAULT_TITLE; - } -} -?> diff --git a/widgets/m/blog_search/include/template/index.tmpl.html b/widgets/m/blog_search/include/template/index.tmpl.html deleted file mode 100644 index 40bd5f99..00000000 --- a/widgets/m/blog_search/include/template/index.tmpl.html +++ /dev/null @@ -1,6 +0,0 @@ - -
- -
-
-
diff --git a/widgets/m/blog_search/index.php b/widgets/m/blog_search/index.php deleted file mode 100644 index 78d8a148..00000000 --- a/widgets/m/blog_search/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3502 2010-08-18 06:45:51Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/chacha/admin/index.php b/widgets/m/chacha/admin/index.php deleted file mode 100644 index 99ff01c9..00000000 --- a/widgets/m/chacha/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ -goWidget(__FILE__); -?> diff --git a/widgets/m/chacha/images/default_avatar32.gif b/widgets/m/chacha/images/default_avatar32.gif deleted file mode 100644 index fe7d7616a9bc6262b58d8ca5970fcea8fd46c19a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1535 zcmeH`eN)m00DynIVFG{h0`DK^ud|&;w;sC#KI!OsJeHfAyZGpY;cCIR^3?lD^!52)*50@f z;CVMJ3kwQgG^e#1nny;*T1+px zwK+v!#HH{Bhw?5g#e}_cjW`^R)roIhrq8B~@#pRgzrTO-!@Ko2b5>s6=!&hV=BxAC z)`z``!LO(LCawv_?#e(=CpFA04Ajo|h~1O7V#SJSeKaZO$Lgx8i;nP1rpuqq9cLiu~;cy?o4bVR-e0%~xyMa?^GT$hHWAPip zj}F+9w0Q5JVSSxZzeh<-%WgHdA?q;y5m7V^LY@NbPR*s6nk8B`O+2hAy;W)5#LDLr z33^Y|%}n~pf}&lWaeL>9O9at(f{HuTh#tnV_V4#?-hp0ityARNDm;1`j>xurJs#%? zVp14JZ(5W)B`gi~%Hb(J;q3{gNAfE;TrItGI~QvEQKiK;vriUdSdG%ThC-2|Yz2H{06qiehXKtL zUW3%nj0u7>722ZcA>^jiY!eT)XMF+ig=9b44{unVg?acf7?28*-Jt|XuUt9U5RC+p z4?TnDQZhx8wdJ_5xz0xC@EJdWpcQ-;v;Y(6E6g|eA>405O z$f3xkwn`6rSGe$S!NJu7*a1RN*#m5P{_ z-{4ja2aZ^hsGlNKv%G8g%ghSz@b?T0fn}T+v9W+aIf}hKI*G!L&+OQ99uwF(gxKwM Oh7ZlNwsRm5AnsouE&65v diff --git a/widgets/m/chacha/images/icon32.png b/widgets/m/chacha/images/icon32.png deleted file mode 100644 index e6513e1e24265fdb22695e6129eb719fcf2e5681..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1723 zcmV;s21NOZP)mQCv^Y-1~5rPK~#90&6jJ8T~!swe`}v}?rY|DX6O|9qMZmW zjjf_-nhFtvMkPgKKt5;`@T&=!s2?mzLrhFcz?euv!b6Otk<<{0@eyqB3z5Wr0I7uv zmI|#DER~_{I5YR$$JuKwKb$ku89St;YU;i@x%cjS_WJ+UW3PR#xH}hfgo~>F{{WC) z=t3FYJ<8RWwTU?UpF8FLqwWRSd4Dw^$W;$+ow)w;>nBzY-%v}_547s(P?nOp<3+T7 zKG1G&5D&e4Y--=>XW#mRAOFTH{}q7bi%)!Y+lKMmJ~T0UL%p7qiv)TDqp)&qBMsD2 z!2ofX=@fqO*qJ9^dj0fc_Ny=NyC49$?$Ikgc=g&JY~8s0rdA{6=w!}pH_|PXXil00 z(hvYAs-fo8(m*py7#T`gKi;C-jsEn36OW#F?73a;yWf4^0O97J?bz|rHG7tiHdefH zVuqm05fOv z>NeAz{>fvnO@8*Td%tvOk+TcGEW73LjaxR1Kc4qBymoSip?aX62Fx505GXwdgn)<; zL@E%Of0=`s)5;QRsc_)f8KSY$T8+K3{eh7s0YvT$L(Rs$olYE^&IdHJ1hvvLH*n+Z z=gMmga4Fvbb1&yB08_)wY1IP9|Iwk5rduxGv}Wg$0L{;B+ZK?U`$Z%XLDg}!(vTT$ zHt(4!n1h<5YN&%(a0`Xa%XFAJS%9cY8srYS_TiQ10JMkex7LDSYSpEfmd3QouT?;5 zPAm+qiq4`DwSt+uN6R{}=%p=F+>D~IWvkYYe*PSQ{=lvgN^dnd?Nq;+ktNWN_USp@6kx;c4`=A`ilQjUvIKCPfR`nOROJU?ArOKi zBGt^<{Fk09QOn580hk(?A?^$YN->CQ7Xh^Djar@;Nw-%p)JSQyGEzwqg}7jsx`PJ@ zi6Hnq6qJQI7rjEYj9xU<439=Jh;+LJonFKP*&={Vm!_S=f9rQNI@7aCrx$57Ga8MI zdMzc8p$HNn1_Kikr0mIaJEBTo)VVY&{UXxum%_bXQ5GkV1x_ylcw+ah4Da~yVG1^u zg`;$4oxB&xY8j1sq+Uy@*AnVkLMjOw&ZfZe`Q6fwN`DaP_Dk_t6u26qj=Pa13C)Zb z7Xbh?GWkVtzK|CR4iX%qQ@9hO((T2n|0g7=kc5OJ$l1`F5v!a>RWvGYikO2c?oJ{? zmN-v(s8$u7mRk=i zow%gkU}z|L=FRh&jQIs>``B}o%NkVNnh2uVOBAR$z(S>{vV zPT8zX!3@+FiH{D~8Cg~voX%&rPw%_q;F16U%Xd8T&}ggi^%IjF3M;o8A`k>5KoBHU z+ft;AP-Vll>d9L6ZdXSOWqhp3NW0G4r>4KvdFIah7wVk@AeUViR&KrRC%vA1ZKgY@ z077*VRUmWXm3|2Ua|gv-Hw^+C*NuX}(YH_U>OcFX3Uzw@ND+;0KOzFnT1u;#a>;O=@v$aZ5*VoR>hX7fK6(7)-G2Cc zuP*83djZIxd4IE=Tv^ltSr$<2P#*g)OJMuRP;K?v70r69ky6hRq&hjHD!snuXQuPN zpPI>^I{C*p_W0y|2bZ$HNNZsVM1)nJdf>jRu2}J%H%?45oe#8E41U_te5dc<^^SzFq6kQVFVvURb-|(UX{0o^|4yClZ RYyJQL002ovPDHLkV1j-*KL-E+ diff --git a/widgets/m/chacha/images/icon64.png b/widgets/m/chacha/images/icon64.png deleted file mode 100644 index 11fb723c4789cbdc7136b53111efb03f61d6c987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5082 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 diff --git a/widgets/m/chacha/include/container/admin_m_chachaBaseWidgetContainer.php b/widgets/m/chacha/include/container/admin_m_chachaBaseWidgetContainer.php deleted file mode 100644 index 3da6811d..00000000 --- a/widgets/m/chacha/include/container/admin_m_chachaBaseWidgetContainer.php +++ /dev/null @@ -1,124 +0,0 @@ -getContainerPath() . '/baseAdminWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/chachaDb.php'); - -class admin_m_chachaBaseWidgetContainer extends BaseAdminWidgetContainer -{ - protected $_db; // DB接続オブジェクト - protected $_boardId; // 掲示板ID - const DEFAULT_BBS_ID_HEAD = 'board'; // デフォルトの掲示板ID - const DEFAULT_TOP_PAGE = 'other'; // デフォルトのトップページ - const WIDGET_TITLE_NAME = 'マイクロブログ(携帯)'; // ウィジェットタイトル名 - const CF_TEXT_COLOR = 'text_color'; // 文字色 - const CF_BG_COLOR = 'bg_color'; // 背景色 - const CF_INNER_BG_COLOR = 'inner_bg_color'; // 内枠背景色 - const CF_PROFILE_COLOR = 'profile_color'; // プロフィール背景色 - const CF_ERR_MESSAGE_COLOR = 'err_message_color'; // エラーメッセージ文字色 - const CF_MESSAGE_LENGTH = 'message_length'; // 最大メッセージ長 - const CF_TOP_CONTENTS = 'm:top_contents'; // トップコンテンツ(携帯) - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // サブウィジェット起動のときだけ初期処理実行 - if ($this->gEnv->getIsSubWidget()){ - // DBオブジェクト作成 - $this->_db = new chachaDb(); - - $this->_boardId = self::DEFAULT_BBS_ID_HEAD . '0'; - - // BBS定義を読み込む - $this->_loadConfig($this->_boardId); - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _postAssign($request, &$param) - { - // ウィンドウオープンタイプ取得 - $openBy = $request->trimValueOf(M3_REQUEST_PARAM_OPEN_BY); // ウィンドウオープンタイプ - if (!empty($openBy)) $this->addOptionUrlParam(M3_REQUEST_PARAM_OPEN_BY, $openBy); - - // 表示画面を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TOP_PAGE; - - // パンくずリストを作成 - switch ($task){ - case 'other': // その他設定 - $linkList = ' >> 基本設定';// パンくずリスト - break; - } - // ####### 上段メニューの作成 ####### - $menuText = '' . M3_NL; - - // 作成データの埋め込み - $linkList = '
'; - $outputText .= '
' . $linkList . $menuText . '
' . M3_NL; - $this->tmpl->addVar("_widget", "menu_items", $outputText); - } - /** - * ブログ定義値をDBから取得 - * - * @param string $boardId 掲示板ID - * @return bool true=取得成功、false=取得失敗 - */ - function _loadConfig($boardId) - { - $this->_configArray = array(); - - // BBS定義を読み込み - $ret = $this->_db->getAllConfig($rows, $boardId); - if ($ret){ - // 取得データを連想配列にする - $configCount = count($rows); - for ($i = 0; $i < $configCount; $i++){ - $key = $rows[$i]['mc_id']; - $value = $rows[$i]['mc_value']; - $this->_configArray[$key] = $value; - } - } - return $ret; - } -} -?> diff --git a/widgets/m/chacha/include/container/admin_m_chachaOtherWidgetContainer.php b/widgets/m/chacha/include/container/admin_m_chachaOtherWidgetContainer.php deleted file mode 100644 index 7169de5b..00000000 --- a/widgets/m/chacha/include/container/admin_m_chachaOtherWidgetContainer.php +++ /dev/null @@ -1,119 +0,0 @@ -getCurrentWidgetContainerPath() . '/admin_m_chachaBaseWidgetContainer.php'); - -class admin_m_chachaOtherWidgetContainer extends admin_m_chachaBaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'admin_other.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $defaultLang = $this->gEnv->getDefaultLanguage(); - $act = $request->trimValueOf('act'); - -/* $textColor = $request->trimValueOf('text_color'); // 文字色 - $bgColor = $request->trimValueOf('bg_color'); // 背景色 - $innerBgColor = $request->trimValueOf('inner_bg_color'); // 内枠背景色 - $profileColor = $request->trimValueOf('profile_color'); // プロフィール背景色 - $errMessageColor = $request->trimValueOf('err_message_color'); // エラーメッセージ文字色 - $messageLength = $request->trimValueOf('message_length'); // 投稿文最大長 - */ - $topContents = $request->valueOf('top_contents'); // トップコンテンツ - - $reloadData = false; // データの再読み込み - if ($act == 'update'){ // 設定更新のとき - // 入力値のエラーチェック - - if ($this->getMsgCount() == 0){ // エラーのないとき - $ret = true; - /* if ($ret) $this->_db->updateConfig(self::CF_TEXT_COLOR, $textColor, $this->_boardId); // 文字色 - if ($ret) $this->_db->updateConfig(self::CF_BG_COLOR, $bgColor, $this->_boardId); // 背景色 - if ($ret) $this->_db->updateConfig(self::CF_INNER_BG_COLOR, $innerBgColor, $this->_boardId); // 内枠背景色 - if ($ret) $this->_db->updateConfig(self::CF_PROFILE_COLOR, $profileColor, $this->_boardId); // プロフィール背景色 - if ($ret) $this->_db->updateConfig(self::CF_ERR_MESSAGE_COLOR, $errMessageColor, $this->_boardId); // エラーメッセージ文字色 - if ($ret) $this->_db->updateConfig(self::CF_MESSAGE_LENGTH, $messageLength, $this->_boardId); // 投稿文最大長 - */ - if ($ret){ - // 絵文字画像タグをMagic3内部タグに変換 - $this->gInstance->getTextConvManager()->convToEmojiTag($topContents, $html); - - $this->_db->updateConfig(self::CF_TOP_CONTENTS, $html, $this->_boardId); // トップコンテンツ - } - - if ($ret){ - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - } else { - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } - $this->gPage->updateParentWindow();// 親ウィンドウを更新 - } - } else { // 初期表示の場合 - $reloadData = true; // データの再読み込み - } - if ($reloadData){ -/* $textColor = $this->_configArray[self::CF_TEXT_COLOR]; // 文字色 - $bgColor = $this->_configArray[self::CF_BG_COLOR]; // 背景色 - $innerBgColor = $this->_configArray[self::CF_INNER_BG_COLOR]; // 内枠背景色 - $profileColor = $this->_configArray[self::CF_PROFILE_COLOR]; // プロフィール背景色 - $errMessageColor = $this->_configArray[self::CF_ERR_MESSAGE_COLOR]; // エラーメッセージ文字色 - $messageLength = $this->_configArray[self::CF_MESSAGE_LENGTH]; // 投稿文最大長*/ - $topContents = $this->_configArray[self::CF_TOP_CONTENTS]; // トップコンテンツ - - // コンテンツの変換 - $topContents = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->getUrl($this->gEnv->getRootUrl()), $topContents); // Magic3ルートURLの変換 - $this->gInstance->getTextConvManager()->convFromEmojiTag($topContents, $topContents);// Magic3内部タグから絵文字画像タグに変換 - } - // 画面に書き戻す -/* $this->tmpl->addVar("_widget", "text_color", $textColor); // 文字色 - $this->tmpl->addVar("_widget", "bg_color", $bgColor); // 背景色 - $this->tmpl->addVar("_widget", "inner_bg_color", $innerBgColor); // 内枠背景色 - $this->tmpl->addVar("_widget", "profile_color", $profileColor); // プロフィール背景色 - $this->tmpl->addVar("_widget", "err_message_color", $errMessageColor); // エラーメッセージ文字色 - $this->tmpl->addVar("_widget", "message_length", $messageLength); // 投稿文最大長 - */ - $this->tmpl->addVar("_widget", "top_contents", $topContents); // トップコンテンツ - } -} -?> diff --git a/widgets/m/chacha/include/container/admin_m_chachaWidgetContainer.php b/widgets/m/chacha/include/container/admin_m_chachaWidgetContainer.php deleted file mode 100644 index 12a8e71a..00000000 --- a/widgets/m/chacha/include/container/admin_m_chachaWidgetContainer.php +++ /dev/null @@ -1,88 +0,0 @@ -getCurrentWidgetContainerPath() . '/admin_m_chachaBaseWidgetContainer.php'); - -class admin_m_chachaWidgetContainer extends admin_m_chachaBaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * ディスパッチ処理(メインコンテナのみ実行) - * - * HTTPリクエストの内容を見て処理をコンテナに振り分ける - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return bool このクラスの_setTemplate(), _assign()へ処理を継続するかどうかを返す。 - * true=処理を継続、false=処理を終了 - */ - function _dispatch($request, &$param) - { - // 表示画面を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TOP_PAGE; - - // コンテナを起動 - $goWidget = false; // サブウィジェットを実行するかどうか - switch ($task){ - case 'other': // その他設定 - $goWidget = true; // サブウィジェットを実行するかどうか - break; - default: - break; - } - if ($goWidget){ // サブウィジェットを実行するかどうか - $this->gLaunch->goSubWidget($task, true); // 管理者機能で呼び出し - return false; - } else { - $this->SetMsg(self::MSG_APP_ERR, "画面が見つかりません"); - return true; - } - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'message.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _assign($request, &$param) - { - } -} -?> diff --git a/widgets/m/chacha/include/container/m_chachaBaseWidgetContainer.php b/widgets/m/chacha/include/container/m_chachaBaseWidgetContainer.php deleted file mode 100644 index a75480b9..00000000 --- a/widgets/m/chacha/include/container/m_chachaBaseWidgetContainer.php +++ /dev/null @@ -1,211 +0,0 @@ -getContainerPath() . '/baseMobileWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/chachaDb.php'); - -class m_chachaBaseWidgetContainer extends BaseMobileWidgetContainer -{ - protected $_db; // DB接続オブジェクト - protected $_mobileId; // 携帯ID - protected $_boardId; // 掲示板ID - protected $_autolink; // リンクを自動作成 - protected $_spacer; // スペーサ - const ERR_MESSAGE_COLOR = '#ff0000'; // エラーメッセージカラー - const SPACER_FORMAT = '
'; // スペーサフォーマット - const CREATE_CODE_RETRY_COUNT = 10; // コード生成のリトライ数 - const DEFAULT_BBS_ID_HEAD = 'board'; // デフォルトの掲示板ID - const AVATAR_DIR = '/widgets/chacha/avatar32'; // アバター格納ディレクトリ - const DEFAULT_AVATAR_ICON_FILE = '/images/default_avatar32.gif'; // デフォルトのアバターアイコン(携帯) - const DEFAULT_AVATAR_FILE_EXT = 'gif'; // アバターファイルのデフォルト拡張子 - const AVATAR_SIZE = 32; // アバター画像のサイズ - // 値定義 - const CF_AUTOLINK = 'autolink'; // 自動的にリンクを作成 - const CF_MESSAGE_COUNT_MYPAGE = 'm:message_count_mypage'; // マイページのメッセージ表示項目数(携帯) - const CF_TOP_CONTENTS = 'm:top_contents'; // トップコンテンツ(携帯) - const CF_MESSAGE_LENGTH = 'message_length'; // 最大メッセージ長 - // 画面 - const DEFAULT_TASK = 'top'; // デフォルトの画面 - const TASK_TOP = 'top'; // トップ画面 - const TASK_THREAD = 'thread'; // スレッド処理 - const TASK_READ = 'read'; // スレッド表示 - const TASK_PROFILE = 'profile'; // プロフィール表示 - const TASK_MYPAGE = 'mypage'; // マイページ表示 - // URL用パラメータ - const URL_PARAM_MEMBER_ID = 'memberid'; // 会員ID - const URL_PARAM_MESSAGE_ID = 'messageid'; // メッセージID - // 共通のCSS - const CSS_LINK_STYLE_TOP = 'text-align:right;'; // 上のリンク部のスタイル - const CSS_LINK_STYLE_BOTTOM = 'text-align:center;'; // 下のリンク部のスタイル -// const CSS_LINK_STYLE_BOTTOM_RIGHT = 'text-align:right;';// 下右のリンク部のスタイル - const CSS_LINK_STYLE_INNER_BOTTOM = 'text-align:right;'; // 内枠の下のリンク部のスタイル - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // 端末IDを取得 - $this->_mobileId = $this->gEnv->getMobileId(); - - // サブウィジェット起動のときだけ初期処理実行 - if ($this->gEnv->getIsSubWidget()){ - // DBオブジェクト作成 - $this->_db = new chachaDb(); - - // 定義ID取得 - // 定義IDから掲示板IDを作成 - $configId = $this->gEnv->getCurrentWidgetConfigId(); - $this->_boardId = self::DEFAULT_BBS_ID_HEAD . intval($configId); - - // BBS定義を読み込む - $this->_loadConfig($this->_boardId); - - //$this->_currentPageUrl = $this->gEnv->createCurrentPageUrl(); // 現在のページのURL - $this->_currentPageUrl = $this->gEnv->createCurrentPageUrlForMobile();// 現在のページのURL(携帯用のパラメータ付き) - $this->_autolink = $this->_configArray[self::CF_AUTOLINK]; // リンクを自動作成 - - // スペーサ作成 - $this->_spacer = sprintf(self::SPACER_FORMAT, $this->getUrl($this->gEnv->getRootUrl())); - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _postAssign($request, &$param) - { - // 共通のリンク設定 - $this->tmpl->addVar("_widget", "link_style_top", self::CSS_LINK_STYLE_TOP);// 上下のリンク部のスタイル - $this->tmpl->addVar("_widget", "link_style_bottom", self::CSS_LINK_STYLE_BOTTOM);// 下のリンク部のスタイル - //$this->tmpl->addVar("_widget", "link_style_bottom_right", self::CSS_LINK_STYLE_BOTTOM_RIGHT);// 下右のリンク部のスタイル - $this->tmpl->addVar("_widget", "link_style_inner_bottom", self::CSS_LINK_STYLE_INNER_BOTTOM);// 内枠下のリンク部のスタイル - $this->tmpl->addVar('_widget', 'top_url', $this->gEnv->createCurrentPageUrlForMobile('')); - - // メッセージカラーを設定 - if ($this->getMsgCount(1) > 0 || $this->getMsgCount(2) > 0){ // エラーメッセージが出力されているとき - $errMessageColor = self::ERR_MESSAGE_COLOR; // エラーメッセージ色 - $errMessageStyle = ''; - if (!empty($errMessageColor)) $errMessageStyle .= 'color:' . $errMessageColor . ';'; - $attr = 'style="' . $errMessageStyle . 'text-align:center;"'; - $this->setMessageAttr($attr); - } else if ($this->getMsgCount(3) > 0){ // ガイダンスメッセージが出力されているとき - $attr = 'style="text-align:center;"'; - $this->setMessageAttr($attr); - } - } - /** - * ブログ定義値をDBから取得 - * - * @param string $boardId 掲示板ID - * @return bool true=取得成功、false=取得失敗 - */ - function _loadConfig($boardId) - { - $this->_configArray = array(); - - // BBS定義を読み込み - $ret = $this->_db->getAllConfig($rows, $boardId); - if ($ret){ - // 取得データを連想配列にする - $configCount = count($rows); - for ($i = 0; $i < $configCount; $i++){ - $key = $rows[$i]['mc_id']; - $value = $rows[$i]['mc_value']; - $this->_configArray[$key] = $value; - } - } - return $ret; - } - /** - * アバターファイルのURLを取得 - * - * @param string $memberId 会員ID - * @return string URL - */ - function getAvatarUrl($memberId) - { - $avatarImagePath = $this->gEnv->getResourcePath() . self::AVATAR_DIR . '/' . $memberId . '.' . self::DEFAULT_AVATAR_FILE_EXT; - if (file_exists($avatarImagePath)){ // アバターファイルが見つからないときはデフォルトを使用 - $avatarImageUrl = $this->gEnv->getResourceUrl() . self::AVATAR_DIR . '/' . $memberId . '.' . self::DEFAULT_AVATAR_FILE_EXT; - } else { - $avatarImageUrl = $this->gEnv->getCurrentWidgetRootUrl() . self::DEFAULT_AVATAR_ICON_FILE; - } - return $avatarImageUrl; - } - /** - * メッセージを表示用に変換 - * - * @param string $message 変換元メッセージ - * @param string $threadId スレッドID - * @return string 変換後メッセージ - */ - function convDispMessage($message, $threadId) - { - // リンク変換 - if (!empty($this->_autolink)){ // 自動リンク作成のとき - $message = preg_replace("/(https?):\/\/([\w;\/\?:\@&=\+\$,\-\.!~\*'\(\)%#]+)/", "$1://$2", $message); - - // メッセージへのリンク - // $baseUrl = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . M3_REQUEST_PARAM_BBS_THREAD_ID . '=' . $threadId, true)); - $messageUrl = $baseUrl . $this->convertUrlToHtmlEntity('&' . M3_REQUEST_PARAM_ITEM_NO . '='); - $messageListUrl = $baseUrl . $this->convertUrlToHtmlEntity('&' . M3_REQUEST_PARAM_LIST_NO . '='); - $message = preg_replace("/>>([0-9]+)(?![-\d])/", '>>$1', $message); - $message = preg_replace("/>>([0-9]+)\-([0-9]+)/", '>>$1-$2', $message); - } - return $message; - } - /** - * ランダム文字列を作成 - * - * @param string $baseChars 使用する文字 - * @param int $length 作成する文字列の長さ - * @return string ランダム文字列。作成できなかった場合は空文字列。 - */ - function _createRandString($baseChars, $length) - { - // 文字列の初期化 - $destStr = ''; - - if (!(is_numeric($length) && $length > 0)) return $destStr; - - for ($i = 0; $i < $length; $i++){ - $pos = rand(0, strlen($baseChars) -1); - $destStr .= $baseChars[$pos]; - } - return $destStr; - } - /** - * テキストデータを表示用のテキストに変換 - * - * 変換内容 ・改行コードをスペース「 ã€ã«å¤‰æ› - * - * @param string $src 変換するデータ - * @return string 変換後データ - */ - function _convertToPreviewTextWithSpace($src) - { - return preg_replace("/(\015\012)|(\015)|(\012)/", " ", $src); - } -} -?> diff --git a/widgets/m/chacha/include/container/m_chachaMypageWidgetContainer.php b/widgets/m/chacha/include/container/m_chachaMypageWidgetContainer.php deleted file mode 100644 index c9bca04b..00000000 --- a/widgets/m/chacha/include/container/m_chachaMypageWidgetContainer.php +++ /dev/null @@ -1,257 +0,0 @@ -getCurrentWidgetContainerPath() . '/m_chachaBaseWidgetContainer.php'); - -class m_chachaMypageWidgetContainer extends m_chachaBaseWidgetContainer -{ - private $messageCount; // 表示メッセージ数 - private $isExistsMessage; // メッセージが存在するかどうか - private $isExistsNextPage; // 次のページがあるかどうか - const THREAD_ID_LENGTH = 5; // スレッドIDの長さ - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'mypage.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - $pageNo = $request->trimIntValueOf(M3_REQUEST_PARAM_PAGE_NO, '1'); // ページ番号 - $postTicket = $request->trimValueOf('ticket'); // POST確認用 - $memberId = $request->trimValueOf(self::URL_PARAM_MEMBER_ID); // 会員ID - $message = $request->mobileTrimValueOf('message'); // 投稿メッセージ - - // 現在アクセス中の端末IDを取得 - $canPost = false; // ブログ投稿可能かどうか - $clientId = $this->_mobileId; - - // 自分のブログページのときは投稿可能 - $clientMemberId = ''; // 現在の端末の会員ID - $ret = $this->_db->getMemberInfoByDeviceId($clientId, $row); - if ($ret) $clientMemberId = $row['mb_id']; - if (empty($memberId)){ - if (!empty($clientMemberId)){ // 登録メンバーのとき - $memberId = $clientMemberId; - $canPost = true; // ブログ投稿可能かどうか - } - } else if ($memberId == $clientMemberId){ - $canPost = true; // ブログ投稿可能かどうか - } - - if ($act == 'add'){ // 投稿追加のとき - if (!empty($postTicket) && $postTicket == $request->getSessionValue(M3_SESSION_POST_TICKET)){ // 正常なPOST値のとき - // 投稿権限のチェック - if (!$canPost) $this->setUserErrorMsg('投稿権限がありません'); - - // 入力項目のエラーチェック - //$this->checkMessageInput($this->_boardId, $threadId, $name, $email, $message); - if ($this->checkInput($message, 'メッセージ')){ - // 文字数のチェック - $messageLength = $this->_configArray[self::CF_MESSAGE_LENGTH]; // 最大メッセージ長 - if (getLetterCount($message) > $messageLength) $this->setUserErrorMsg('メッセージは' . $messageLength . '文字まで入力可能です'); - } - if (empty($memberId)) $this->setUserErrorMsg('会員IDが不正です'); - - // エラーなしの場合は、データを更新 - if ($this->getMsgCount() == 0){ - // スレッドID作成 - $threadId = $this->createThreadId(); - if (empty($threadId)){ - $this->setAppErrorMsg('スレッドIDが作成できません'); - } else { - // 新規投稿文の追加 - $ret = $this->_db->addNewThread($this->_boardId, $threadId, $memberId, ''/*件名*/, $message); - - if ($ret){ // データ追加成功のとき - $this->setGuidanceMsg('投稿完了しました'); - - $message = ''; // メッセージクリア - } else { - $this->setAppErrorMsg('投稿に失敗しました'); - } - } - } - } - $request->unsetSessionValue(M3_SESSION_POST_TICKET); // セッション値をクリア - } - - // 会員情報を取得 - $ret = $this->_db->getMemberInfoById($memberId, $row); - if ($ret){ - // アバターを設定 - $avatarImageUrl = $this->getAvatarUrl($memberId);// アバター画像URL - $imageTag = ''; - $this->tmpl->addVar("thread_area", "avatar_image", $imageTag); // 画像 - - // 投稿文を作成 - $this->messageCount = $this->_configArray[self::CF_MESSAGE_COUNT_MYPAGE]; // 最大項目数 - $this->_db->getThreadByMemberId($this->_boardId, $memberId, $this->messageCount, $pageNo, array($this, 'itemsLoop'), true); - - // 画面にデータを埋め込む - $this->tmpl->addVar("thread_area", "name", $this->convertToDispString($row['mb_name'])); // ユーザ名 - - if ($canPost){ // ブログ投稿可能なとき - $this->tmpl->setAttribute('add_area', 'visibility', 'visible');// 投稿エリアを表示 - $this->tmpl->addVar("add_area", "member_id", $memberId); // 会員ID - $this->tmpl->addVar('add_area', 'act', 'add'); // 新規登録 - $this->tmpl->addVar("add_area", "current_url", $this->gEnv->getCurrentRequestUri()); - - // ハッシュキー作成 - $postTicket = md5(time() . $this->gAccess->getAccessLogSerialNo()); - $request->setSessionValue(M3_SESSION_POST_TICKET, $postTicket); // セッションに保存 - $this->tmpl->addVar("add_area", "ticket", $postTicket); // 画面に書き出し - } - - // スレッドが存在しないときはタグを非表示にする - if (!$this->isExistsMessage){ - // 投稿なしのメッセージを表示。自分自身のマイページのときは表示しない。 - if (!$canPost) $this->tmpl->setAttribute('no_message_area', 'visibility', 'visible'); - - $this->tmpl->setAttribute('message_list', 'visibility', 'hidden'); - } - // リンク作成 - //$registLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&task=' . self::TASK_PROFILE . '&' . self::URL_PARAM_MEMBER_ID . '=' . $memberId, true)); - $registLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile('task=' . self::TASK_PROFILE . '&' . self::URL_PARAM_MEMBER_ID . '=' . $memberId))); - $registName = 'プロフィール'; - $this->tmpl->addVar("_widget", "regist_url", $registLink); - $this->tmpl->addVar("_widget", "regist_name", $registName); - - // ページ遷移用リンク - $pageLink = ''; - if ($pageNo > 1){ // 前のページがあるとき - $foreLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MEMBER_ID . '=' . $memberId . '&page=' . ($pageNo -1), true)); - $pageLink .= '前へ[1]'; - } - if ($this->isExistsNextPage){ // 次のページがあるとき - if (!empty($pageLink)) $pageLink .= '  '; - $nextLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MEMBER_ID . '=' . $memberId . '&page=' . ($pageNo +1), true)); - $pageLink .= '次へ[2]'; - } - $this->tmpl->addVar("_widget", "page_link", $pageLink); - } else { - $this->setUserErrorMsg('会員IDが不正です'); - - // スレッド表示部を非表示にする - $this->tmpl->setAttribute('thread_area', 'visibility', 'hidden'); - } - - // 画面にデータを埋め込む - $this->tmpl->addVar("add_area", "message", $message); - } - /** - * 取得したコンテンツ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function itemsLoop($index, $fetchedRow) - { - // 最大表示数を超えたときは終了 - if ($index >= $this->messageCount){ - $this->isExistsNextPage = true; // 次のページあり - return false; - } - - // 日付作成 - $weekDay = array('日', '月', '火', 'æ°´', '木', '金', '土'); - $timestamp = strtotime($fetchedRow['mm_regist_dt']); - $weekNo = intval(date('w', $timestamp)); - $date = date('m/d(' . $weekDay[$weekNo] . ') H:i:s', $timestamp); - - // 投稿文 - $message = $this->convertToDispString($fetchedRow['mm_message']);// 文字エスケープ処理 - $message = $this->convertToPreviewText($message); // 改行をBRタグに変換 - if ($fetchedRow['mm_index'] == 1) $message .= '
'; // トップのメッセージは改行を追加 - - // メッセージ変換 - $message = $this->convDispMessage($message, $fetchedRow['mm_thread_id']); - - // メッセージID - $messageId = $fetchedRow['mm_thread_id']; - $messageCount = $fetchedRow['mt_message_count'] -1; // メッセージ数 - if ($messageCount <= 0) $messageCount = ''; // 返信がないときはメッセージ数を表示しない - $messageLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MESSAGE_ID . '=' . $messageId)); - $messageIdTag = '#' . $messageId . ''; - - // 削除メッセージのとき - /*if ($fetchedRow['mm_deleted']){ - $message = '参照できません。'; - }*/ - - $row = array( - 'id' => $messageIdTag, // メッセージID - 'message_count' => $messageCount, // メッセージ数 - 'date' => $date, // 投稿日付 - 'message' => $message, // 投稿文 - 'spacer' => $this->_spacer // スペーサ - ); - $this->tmpl->addVars('message_list', $row); - $this->tmpl->parseTemplate('message_list', 'a'); - - // メッセージが存在するかどうか - $this->isExistsMessage = true; - return true; - } - /** - * スレッドIDを作成 - * - * @return string スレッドID - */ - function createThreadId() - { - $threadId = ''; - - for ($i = 0; $i < self::CREATE_CODE_RETRY_COUNT; $i++){ - // 「0,I,L,O,i,l,o」除くランダム文字列を作成 - $threadId = $this->_createRandString('123456789ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz', self::THREAD_ID_LENGTH); - - // すでに登録済みかどうかチェック - $ret = $this->_db->isExistsThreadId($threadId); - if (!$ret) break; - } - return $threadId; - } -} -?> diff --git a/widgets/m/chacha/include/container/m_chachaProfileWidgetContainer.php b/widgets/m/chacha/include/container/m_chachaProfileWidgetContainer.php deleted file mode 100644 index 4c13f44b..00000000 --- a/widgets/m/chacha/include/container/m_chachaProfileWidgetContainer.php +++ /dev/null @@ -1,377 +0,0 @@ -getCurrentWidgetContainerPath() . '/m_chachaBaseWidgetContainer.php'); - -class m_chachaProfileWidgetContainer extends m_chachaBaseWidgetContainer -{ - const DEFAULT_PAGE_TITLE = 'プロフィール'; - const MEMBER_ID_LENGTH = 5; // 会員IDの桁数 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'profile.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - $postTicket = $request->trimValueOf('ticket'); // POST確認用 - $memberId = $request->trimValueOf(self::URL_PARAM_MEMBER_ID); // 会員ID - - // ##### ユーザの識別 ##### - // ユーザIDでユーザのプロフィールを参照。ユーザIDがない場合は自分自身のプロフィールを表示。 - // クライアントIDを取得 - $canEdit = false; // データ編集可能かどうか - $isNew = false; // 新規登録かどうか - - // クライアントIDを取得 - $clientId = $this->_mobileId; - - // 会員情報が登録されている場合は更新。登録されていない場合は新規登録。 - $clientMemberId = ''; // 現在の端末の会員ID - $ret = $this->_db->getMemberInfoByDeviceId($clientId, $row); - if ($ret) $clientMemberId = $row['mb_id']; - if (empty($memberId)){ - if (empty($clientMemberId)){ - $isNew = true; // 新規登録処理 - } else { - $memberId = $clientMemberId; - } - $canEdit = true; // データ編集可能かどうか - } else if ($memberId == $clientMemberId){ // 自分自身のデータのとき - $canEdit = true; // データ編集可能かどうか - } - - $name = $request->mobileTrimValueOf('name'); // ユーザ名 - $email = $request->mobileTrimValueOf('email'); // Eメール - $url = $request->mobileTrimValueOf('url'); // URL - $avatar = ''; // アバターファイル名 - $showEmail = ($request->trimValueOf('show_email') == 'on') ? 1 : 0; // Eメールアドレスを公開するかどうか - - $reloadData = false; // データの再読み込み - if ($act == 'add'){ // 新規追加のとき - if (!empty($postTicket) && $postTicket == $request->getSessionValue(M3_SESSION_POST_TICKET)){ // 正常なPOST値のとき - // 入力チェック - $this->checkInput($name, 'ニックネーム'); - $this->checkMailAddress($email, 'Eメール', true/*空OK*/); - $this->checkInput($clientId, '端末ID'); - - if ($this->_db->isExistsMemberName($name)) $this->setUserErrorMsg('このニックネームはすでに存在しています'); - - // エラーなしの場合は、データを登録 - if ($this->getMsgCount() == 0){ - // 会員ID作成 - $memberId = $this->createMemberId(); - if (empty($memberId)){ - $this->setAppErrorMsg('IDが作成できません'); - } else { - // 一般ユーザの場合はユーザIDも登録 - $userId = 0; - $userInfo = $this->gEnv->getCurrentUserInfo(); - if (!is_null($userInfo) && $userInfo->userType == UserInfo::USER_TYPE_NORMAL) $userId = $this->gEnv->getCurrentUserId(); - - $ret = $this->_db->addMember($clientId, $memberId, $userId, $name, $email, $url, ''/*アバターファイル名*/, $showEmail); - if ($ret){ - $this->setGuidanceMsg('登録完了しました'); - $reloadData = true; // データの再読み込み - - $isNew = false; // 更新処理画面を表示 - } - } - } - } - $request->unsetSessionValue(M3_SESSION_POST_TICKET); // セッション値をクリア - } else if ($act == 'update'){ // 設定更新のとき - if (!empty($postTicket) && $postTicket == $request->getSessionValue(M3_SESSION_POST_TICKET)){ // 正常なPOST値のとき - // 更新権限のチェック - if (!$canEdit) $this->setUserErrorMsg('更新権限がありません'); - - // 入力チェック - $this->checkInput($name, 'ニックネーム'); - $this->checkMailAddress($email, 'Eメール', true/*空OK*/); - $this->checkInput($clientId, '端末ID'); - - $ret = $this->_db->getMemberInfoByDeviceId($clientId, $row); - if ($ret){ - if ($name != $row['mb_name'] && $this->_db->isExistsMemberName($name)) $this->setUserErrorMsg('このニックネームはすでに存在しています'); - } - - // エラーなしの場合は、データを更新 - if ($this->getMsgCount() == 0){ - $ret = $this->_db->updateMember($clientId, $name, $email, $url, $avatar, $showEmail, $newSerial); - if ($ret){ - $this->setGuidanceMsg('更新完了しました'); - $reloadData = true; // データの再読み込み - } - } - } - $request->unsetSessionValue(M3_SESSION_POST_TICKET); // セッション値をクリア - } else { - $reloadData = true; // データの再読み込み - } - - // データの再取得 - if ($reloadData){ - $ret = $this->_db->getMemberInfoById($memberId, $row); - if ($ret){ - $name = $row['mb_name']; // ユーザ名 - $email = $row['mb_email']; // Eメール - $url = $row['mb_url']; // URL - $showEmail = $row['mb_show_email']; // Eメールを公開するかどうか - } else if (!empty($memberId)){ - $this->setUserErrorMsg('登録されていないユーザです'); - $memberId = ''; // 会員ID初期化 - $canEdit = false; // データ編集不可 - } - } - // リンク作成 - $mypageUrl = ''; - //if (!empty($memberId)) $mypageUrl = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MEMBER_ID . '=' . $memberId, true)); - if (!empty($memberId)) $mypageUrl = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile(self::URL_PARAM_MEMBER_ID . '=' . $memberId))); - - // 編集状態の設定 - if ($canEdit){ // 編集可の場合 - // 各部の表示制御 - if ($isNew){ // 新規登録のとき - // メッセージ - if ($this->getMsgCount() == 0) $this->setGuidanceMsg('ユーザ登録して下さい'); - - $this->tmpl->setAttribute('add_area', 'visibility', 'visible');// 新規登録ボタン表示 - $this->tmpl->addVar('_widget', 'act', 'add'); // 新規登録 - } else { // 更新のとき - $this->tmpl->setAttribute('update_area', 'visibility', 'visible');// 更新ボタン表示 - $this->tmpl->addVar('_widget', 'act', 'update'); // 更新 - } - // 各入力部表示 - $this->tmpl->setAttribute('name_input_area', 'visibility', 'visible'); // 名前編集 - $this->tmpl->setAttribute('name_required_area', 'visibility', 'visible'); // 「必須」メッセージ - $this->tmpl->setAttribute('email_area', 'visibility', 'visible'); // Eメール入力 - $this->tmpl->setAttribute('url_area', 'visibility', 'visible'); // URL入力 - $this->tmpl->setAttribute('show_email_area', 'visibility', 'visible'); // Eメール公開 - - // リンクを表示 - $mypageName = '';// マイページURL - $mypageLink = ''; - if (!empty($mypageUrl)){ - $mypageName = '投稿[3]'; - $mypageLink = '投稿[3]
'; - } - $this->tmpl->addVar("_widget", "mypage_name", $mypageName); - $this->tmpl->addVar("_widget", "mypage_link", $mypageLink); - //$this->tmpl->setAttribute('top_link_area', 'visibility', 'visible'); - //$this->tmpl->addVar("_widget", "mypage_url", $mypageUrl); // マイページURL - - // 値の埋め込み - $this->tmpl->addVar("name_input_area", "name", $name); // ユーザ名 - $this->tmpl->addVar("show_email_area", "email", $email); // Eメール - $this->tmpl->addVar("url_area", "url", $url); // URL - if ($showEmail) $this->tmpl->addVar("show_email_area", "show_email", 'checked'); // Eメールを公開するかどうか - $this->tmpl->addVar('_widget', 'current_url', $this->gEnv->createCurrentPageUrlForMobile('task=' . self::TASK_PROFILE)); - - // ハッシュキー作成 - $postTicket = md5(time() . $this->gAccess->getAccessLogSerialNo()); - $request->setSessionValue(M3_SESSION_POST_TICKET, $postTicket); // セッションに保存 - $this->tmpl->addVar("_widget", "ticket", $postTicket); // 画面に書き出し - } else { - if (!empty($memberId)){ - // 各部の表示制御 - $this->tmpl->setAttribute('name_area', 'visibility', 'visible'); // 名前表示 - if ($showEmail) $this->tmpl->setAttribute('email_area', 'visibility', 'visible'); - - // 値の埋め込み - $this->tmpl->addVar("name_area", "name", $name); // ユーザ名 - $this->tmpl->addVar("name_area", "mypage_url", $mypageUrl); // マイページURL - $this->tmpl->addVar("email_area", "email", $email); // Eメール - $urlStr = ''; - if (!empty($url)) $urlStr = '' . $this->convertToDispString($url) . ''; - $this->tmpl->addVar("_widget", "url", $urlStr); // URL - } - } - - $this->tmpl->addVar("_widget", "page_title", self::DEFAULT_PAGE_TITLE); // ページタイトル - - $memberIdStr = ''; - if (!empty($mypageUrl)) $memberIdStr = '' . $this->convertToDispString($memberId) . ''; - $this->tmpl->addVar("_widget", "id", $memberIdStr); // マイブログページへのリンク - - // アバター画像 - $avatarImageUrl = $this->getAvatarUrl($memberId);// アバター画像URL - $imageTag = ''; - $this->tmpl->addVar("_widget", "avatar_img", $imageTag); // 画像 - } - /** - * 会員IDを作成 - * - * @return string 会員ID - */ - function createMemberId() - { - $memberId = ''; - - for ($i = 0; $i < self::CREATE_CODE_RETRY_COUNT; $i++){ - // 「0」除くランダム文字列を作成 - $memberId = $this->_createRandString('123456789', self::MEMBER_ID_LENGTH); - - // すでに登録済みかどうかチェック - $ret = $this->_db->isExistsMemberId($memberId); - if (!$ret) break; - } - return $memberId; - } - /** - * 画像の種別を取得 - * - * @param string $mime MIMEコンテンツタイプ - * @return string 画像の種別 - */ - function getImageType($mime) - { - if ($mime != ''){ - if ($mime == 'image/gif') return 'gif'; - if ($mime == 'image/jpeg') return 'jpeg'; - if ($mime == 'image/jpg') return 'jpeg'; - if ($mime == 'image/pjpeg') return 'jpeg'; - if ($mime == 'image/png') return 'png'; - } - return ''; - } - /** - * サムネールを作成 - * - * @param string $type MIMEコンテンツタイプ - * @param string $path 拡張子 - * @param int $size サムネールの縦横サイズ - * @return object 画像オブジェクト - */ - function createThumb($type, $path, $size) - { - // 画像作成 - switch ($type){ - case "jpeg": - $img = @imagecreatefromjpeg($path); - break; - case "gif": - $img = @imagecreatefromgif($path); - break; - case "png": - $img = @imagecreatefrompng($path); - break; - default: - return false; - } - - // size for thumbnail - $width = imagesx($img); - $height = imagesy($img); - - if ($width > $height){ - $n_height = $height * ($size / $width); - $n_width = $size; - } else { - $n_width = $width * ($size / $height); - $n_height = $size; - } - - $x = 0; - $y = 0; - if ($n_width < $size) $x = round(($size - $n_width) / 2); - if ($n_height < $size) $y = round(($size - $n_height) / 2); - - // imagecreatetruecolor - $thumb = imagecreatetruecolor($size, $size); - - $bgcolor = imagecolorallocate($thumb, 255, 255, 255); - imagefill($thumb, 0, 0, $bgcolor); - - // imagecopyresized (imagecopyresampled) - if (function_exists("imagecopyresampled")){ - if (!imagecopyresampled($thumb, $img, $x, $y, 0, 0, $n_width, $n_height, $width, $height)){ - if (!imagecopyresized($thumb, $img, $x, $y, 0, 0, $n_width, $n_height, $width, $height)) return false; - } - } else { - if (!imagecopyresized($thumb, $img, $x, $y, 0, 0, $n_width, $n_height, $width, $height)) return false; - } - return $thumb; - } - /** - * サムネールを出力 - * - * @param string $type MIMEコンテンツタイプ - * @param object $image 画像オブジェクト - * @param string $path ファイル保存の場合のパス - * @return bool true=成功、false=失敗 - */ - function outputThumb($type, &$image, $path = null) - { - $ret = false; - if (is_null($path)){ - switch ($type){ - case "jpeg": - $ret = imagejpeg($image); - break; - case "gif": - $ret = imagegif($image); - break; - case "png": - $ret = imagepng($image); - break; - } - } else { - switch ($type){ - case "jpeg": - $ret = imagejpeg($image, $path); - break; - case "gif": - $ret = imagegif($image, $path); - break; - case "png": - $ret = imagepng($image, $path); - break; - } - } - // イメージを破棄 - imagedestroy($image); - - return $ret; - } -} -?> diff --git a/widgets/m/chacha/include/container/m_chachaReadWidgetContainer.php b/widgets/m/chacha/include/container/m_chachaReadWidgetContainer.php deleted file mode 100644 index 508fc369..00000000 --- a/widgets/m/chacha/include/container/m_chachaReadWidgetContainer.php +++ /dev/null @@ -1,179 +0,0 @@ -getCurrentWidgetContainerPath() . '/m_chachaBaseWidgetContainer.php'); - -class m_chachaReadWidgetContainer extends m_chachaBaseWidgetContainer -{ - private $messageCount; // メッセージ数 - private $isExistsMessage; // メッセージが存在するかどうか - private $isExistsNextPage; // 次のページがあるかどうか - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'thread_read.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - $pageNo = $request->trimIntValueOf(M3_REQUEST_PARAM_PAGE_NO, '1'); // ページ番号 - - // クライアントIDを取得 - $clientId = $this->_mobileId; - - // 会員IDを取得 - $clientMemberId = ''; // 現在の端末の会員ID - $ret = $this->_db->getMemberInfoByDeviceId($clientId, $row); - if ($ret) $clientMemberId = $row['mb_id']; - - // 表示メッセージ取得 - // 1つ多く呼び出し、次のページがあるか確認 - $this->messageCount = $this->_configArray[self::CF_MESSAGE_COUNT_MYPAGE]; // 最大項目数 - $this->_db->getThread($this->_boardId, $this->messageCount, $pageNo, array($this, 'itemsLoop'), true); - - // 登録用リンクを作成。会員として認識できないときはプロフィール画面へ、認識できる場合はマイページ画面へ遷移。 - if (empty($clientMemberId)){ - //$registLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&task=' . self::TASK_PROFILE, true)); - $registLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile('task=' . self::TASK_PROFILE))); - $registName = 'ユーザ登録'; - } else { - //$registLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&task=' . self::TASK_MYPAGE . '&' . self::URL_PARAM_MEMBER_ID . '=' . $clientMemberId, true)); - $registLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile('task=' . self::TASK_MYPAGE . '&' . self::URL_PARAM_MEMBER_ID . '=' . $clientMemberId))); - $registName = '投稿'; - } - $this->tmpl->addVar("_widget", "regist_url", $registLink); - $this->tmpl->addVar("_widget", "regist_name", $registName); - $this->tmpl->addVar("_widget", "current_url", $this->gEnv->getCurrentRequestUri()); - - // スレッドが存在しないときは一覧を非表示にする - if (!$this->isExistsMessage){ - $this->setGuidanceMsg('メッセージが投稿されていません'); - - $this->tmpl->setAttribute('message_list', 'visibility', 'hidden'); - } - - // ページ遷移用リンク - $pageLink = ''; - if ($pageNo > 1){ // 前のページがあるとき - //$foreLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&task=' . self::TASK_READ . '&page=' . ($pageNo -1), true)); - $foreLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile('task=' . self::TASK_READ . '&page=' . ($pageNo -1), false/*セッションID削除*/))); - $pageLink .= '前へ[1]'; - } - if ($this->isExistsNextPage){ // 次のページがあるとき - if (!empty($pageLink)) $pageLink .= '  '; - //$nextLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&task=' . self::TASK_READ . '&page=' . ($pageNo +1), true)); - $nextLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile('task=' . self::TASK_READ . '&page=' . ($pageNo +1), false/*セッションID削除*/))); - $pageLink .= '次へ[2]'; - } - $this->tmpl->addVar("_widget", "page_link", $pageLink); - } - /** - * 取得したメッセージ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function itemsLoop($index, $fetchedRow) - { - // 最大表示数を超えたときは終了 - if ($index >= $this->messageCount){ - $this->isExistsNextPage = true; // 次のページあり - return false; - } - - // メッセージ用のデータを取得 - $no = $fetchedRow['mt_update_no']; // スレッド更新番号 - $memberId = $fetchedRow['mb_id']; // 会員ID - $memberName = $fetchedRow['mb_name']; // 会員名 - $messageId = $fetchedRow['mm_thread_id']; - $messageCount = $fetchedRow['mt_message_count'] -1; // メッセージ数 - if ($messageCount <= 0) $messageCount = ''; // 返信がないときはメッセージ数を表示しない - $mypageLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MEMBER_ID . '=' . $memberId)); - $messageLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MESSAGE_ID . '=' . $messageId)); - - // 名前作成 - $nameTag = '' . $this->convertToDispString($memberName) . ''; - - // 日付作成 - $weekDay = array('日', '月', '火', 'æ°´', '木', '金', '土'); - $timestamp = strtotime($fetchedRow['mm_regist_dt']); - $weekNo = intval(date('w', $timestamp)); - //$date = date('Y/m/d(' . $weekDay[$weekNo] . ') H:i:s', $timestamp); - $date = date('m/d(' . $weekDay[$weekNo] . ') H:i:s', $timestamp); - - // 投稿文 - $message = $this->convertToDispString($fetchedRow['mm_message']);// 文字エスケープ処理 - $message = $this->_convertToPreviewTextWithSpace($message); // 改行をスペースに変換 - $message = $this->convDispMessage($message, $fetchedRow['mm_thread_id']);// メッセージ内のリンクを作成 - - // メッセージID - $messageIdTag = '#' . $messageId . ''; - - // 削除メッセージのとき - /*if ($fetchedRow['mm_deleted']){ - $message = '参照できません。'; - }*/ - // アバター画像を設定 - $avatarImageUrl = $this->getAvatarUrl($memberId); - $avatarTag = ''; -// $avatarTag = '' . $avatarTag . ''; - $row = array( - 'no' => $no, // 項目番号 - 'id' => $messageIdTag, // メッセージID - 'message_count' => $messageCount, // メッセージ数 - 'name' => $nameTag, // 会員名 - 'date' => $date, // 投稿日付 - 'message' => $message, // 投稿文 - 'avatar' => $avatarTag, // アバター画像 - 'spacer' => $this->_spacer // スペーサ - ); - $this->tmpl->addVars('message_list', $row); - $this->tmpl->parseTemplate('message_list', 'a'); - - // メッセージが存在するかどうか - $this->isExistsMessage = true; - return true; - } -} -?> diff --git a/widgets/m/chacha/include/container/m_chachaThreadWidgetContainer.php b/widgets/m/chacha/include/container/m_chachaThreadWidgetContainer.php deleted file mode 100644 index 0a20a0ef..00000000 --- a/widgets/m/chacha/include/container/m_chachaThreadWidgetContainer.php +++ /dev/null @@ -1,265 +0,0 @@ -getCurrentWidgetContainerPath() . '/m_chachaBaseWidgetContainer.php'); - -class m_chachaThreadWidgetContainer extends m_chachaBaseWidgetContainer -{ - private $messageCount; // メッセージ数 - private $isExistsMessage; // メッセージが存在するかどうか - private $isExistsNextPage; // 次のページがあるかどうか - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'thread.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - $postTicket = $request->trimValueOf('ticket'); // POST確認用 - $pageNo = $request->trimIntValueOf(M3_REQUEST_PARAM_PAGE_NO, '1'); // ページ番号 - $messageId = $request->trimValueOf(self::URL_PARAM_MESSAGE_ID); // メッセージID - $message = $request->mobileTrimValueOf('message'); // 投稿メッセージ - - // 現在アクセス中の端末IDを取得 - $canPost = false; // ブログ投稿可能かどうか - $clientId = $this->_mobileId; - - // 登録ユーザのときは投稿可能 - $clientMemberId = ''; // 現在の端末の会員ID - $ret = $this->_db->getMemberInfoByDeviceId($clientId, $row); - if ($ret) $clientMemberId = $row['mb_id']; - if (!empty($clientMemberId)) $canPost = true; // ブログ返信可能かどうか - - $reloadData = false; // データの再読み込み - if ($act == 'add'){ // 新規追加のとき - if (!empty($postTicket) && $postTicket == $request->getSessionValue(M3_SESSION_POST_TICKET)){ // 正常なPOST値のとき - // 投稿権限のチェック - if (!$canPost) $this->setUserErrorMsg('投稿権限がありません'); - - // 入力項目のエラーチェック - if ($this->checkInput($message, 'メッセージ')){ - // 文字数のチェック - $messageLength = $this->_configArray[self::CF_MESSAGE_LENGTH]; // 最大メッセージ長 - if (getLetterCount($message) > $messageLength) $this->setUserErrorMsg('メッセージは' . $messageLength . '文字まで入力可能です'); - } - if (empty($clientMemberId)) $this->setUserErrorMsg('会員IDが不正です'); - - // エラーなしの場合は、データを更新 - if ($this->getMsgCount() == 0){ - $ret = $this->_db->addNewReply($this->_boardId, $messageId, $clientMemberId, $message); - if ($ret){ // データ追加成功のとき - $this->setGuidanceMsg('投稿完了しました'); - - $message = ''; // メッセージクリア - } else { - $this->setAppErrorMsg('投稿に失敗しました'); - } - } - } - $request->unsetSessionValue(M3_SESSION_POST_TICKET); // セッション値をクリア - } else { - $reloadData = true; // データの再読み込み - } - - // スレッド情報取得 - $ret = $this->_db->getThreadInfo($this->_boardId, $messageId, $row); - if ($ret){ - // メッセージ用のデータを取得 - $memberId = $row['mb_id']; // 会員ID - $memberName = $row['mb_name']; // 会員名 - $messageId = $row['mm_thread_id']; - $messageCount = $row['mt_message_count'] -1; // メッセージ数 - $mypageLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MEMBER_ID . '=' . $memberId, true)); - $messageLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MESSAGE_ID . '=' . $messageId, true)); - - // 名前作成 - $nameTag = '' . $this->convertToDispString($memberName) . ''; - - // 日付作成 - $weekDay = array('日', '月', '火', 'æ°´', '木', '金', '土'); - $timestamp = strtotime($row['mm_regist_dt']); - $weekNo = intval(date('w', $timestamp)); - $date = date('m/d(' . $weekDay[$weekNo] . ') H:i:s', $timestamp); - - // 投稿文 - $topMessage = $this->convertToDispString($row['mm_message']);// 文字エスケープ処理 - $topMessage = $this->_convertToPreviewTextWithSpace($topMessage); // 改行をスペースに変換 - $topMessage = $this->convDispMessage($topMessage, $row['mm_thread_id']);// メッセージ内のリンクを作成 - - // メッセージID - $messageIdTag = '#' . $messageId . ''; - - // アバター画像を設定 - $avatarImageUrl = $this->getAvatarUrl($memberId); - $avatarTag = ''; - //$avatarTag = '' . $avatarTag . ''; - - $this->tmpl->addVar("thread_area", "id", $messageIdTag); // メッセージID - $this->tmpl->addVar("thread_area", "thread_message_count", $messageCount); // メッセージ数 - $this->tmpl->addVar("thread_area", "name", $nameTag); // 会員名 - $this->tmpl->addVar("thread_area", "date", $date); // 投稿日付 - $this->tmpl->addVar("thread_area", "thread_message", $topMessage); // 投稿文 - $this->tmpl->addVar("thread_area", "avatar", $avatarTag); // アバター画像 - - // 登録用リンクを作成。会員として認識できないときはプロフィール画面。 - $registName = ''; - $registLink = ''; - if (empty($clientMemberId)){ - $registName = 'ユーザ登録[3]'; - $registUrl = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&task=' . self::TASK_PROFILE, true)); - $registLink = '' . $registName . ''; - } - $this->tmpl->addVar("_widget", "regist_name", $registName); - $this->tmpl->addVar("_widget", "regist_link", $registLink); - - // 表示メッセージ取得 - // 1つ多く呼び出し、次のページがあるか確認 - $this->messageCount = $this->_configArray[self::CF_MESSAGE_COUNT_MYPAGE]; // 最大項目数 - $this->_db->getThreadReply(array($this, 'itemsLoop'), $this->_boardId, $messageId, $this->messageCount, $pageNo, true); - - // スレッドが存在しないときは一覧を非表示にする - if (!$this->isExistsMessage){ - // 投稿なしのメッセージを表示 - $this->tmpl->setAttribute('no_message_area', 'visibility', 'visible'); - $this->tmpl->setAttribute('message_list', 'visibility', 'hidden'); - } - - // ページ遷移用リンク - $pageLink = ''; - if ($pageNo > 1){ // 前のページがあるとき - $foreLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MESSAGE_ID . '=' . $messageId . '&page=' . ($pageNo -1), true)); - $pageLink .= '前へ[1]'; - } - if ($this->isExistsNextPage){ // 次のページがあるとき - if (!empty($pageLink)) $pageLink .= '  '; - $nextLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MESSAGE_ID . '=' . $messageId . '&page=' . ($pageNo +1), true)); - $pageLink .= '次へ[2]'; - } - $this->tmpl->addVar("_widget", "page_link", $pageLink); - - if ($canPost){ // ブログ返信可能なとき - $this->tmpl->setAttribute('add_area', 'visibility', 'visible');// 投稿エリアを表示 - $this->tmpl->addVar('add_area', 'act', 'add'); // 登録 - $this->tmpl->addVar("add_area", "member_id", $memberId); // 会員ID - $this->tmpl->addVar("add_area", "message", $message); - $this->tmpl->addVar("add_area", "current_url", $this->gEnv->getCurrentRequestUri()); - - // ハッシュキー作成 - $postTicket = md5(time() . $this->gAccess->getAccessLogSerialNo()); - $request->setSessionValue(M3_SESSION_POST_TICKET, $postTicket); // セッションに保存 - $this->tmpl->addVar("add_area", "ticket", $postTicket); // 画面に書き出し - } - } else { - $this->setUserErrorMsg('メッセージIDが不正です'); - - // スレッド表示部を非表示にする - $this->tmpl->setAttribute('thread_area', 'visibility', 'hidden'); - } - } - /** - * 取得したメッセージ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function itemsLoop($index, $fetchedRow) - { - // 最大表示数を超えたときは終了 - if ($index >= $this->messageCount){ - $this->isExistsNextPage = true; // 次のページあり - return false; - } - - // メッセージ用のデータを取得 - $memberId = $fetchedRow['mb_id']; // 会員ID - $memberName = $fetchedRow['mb_name']; // 会員名 - $messageId = $fetchedRow['mm_thread_id']; - $messageId .= '-' . $fetchedRow['mm_index']; - $mypageLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MEMBER_ID . '=' . $memberId, true)); - $messageLink = $this->convertUrlToHtmlEntity($this->getUrl($this->_currentPageUrl . '&' . self::URL_PARAM_MESSAGE_ID . '=' . $messageId, true)); - - // 名前作成 - $nameTag = '' . $this->convertToDispString($memberName) . ''; - - // 日付作成 - $weekDay = array('日', '月', '火', 'æ°´', '木', '金', '土'); - $timestamp = strtotime($fetchedRow['mm_regist_dt']); - $weekNo = intval(date('w', $timestamp)); - $date = date('m/d(' . $weekDay[$weekNo] . ') H:i:s', $timestamp); - - // 投稿文 - $message = $this->convertToDispString($fetchedRow['mm_message']);// 文字エスケープ処理 - $message = $this->_convertToPreviewTextWithSpace($message); // 改行をスペースに変換 - $message = $this->convDispMessage($message, $fetchedRow['mm_thread_id']);// メッセージ内のリンクを作成 - - // メッセージID - $messageIdTag = '#' . $messageId . ''; - - // 削除メッセージのとき - /*if ($fetchedRow['mm_deleted']){ - $message = '参照できません。'; - }*/ - // アバター画像を設定 - $avatarImageUrl = $this->getAvatarUrl($memberId); - $avatarTag = ''; - //$avatarTag = '' . $avatarTag . ''; - - $row = array( - 'id' => $messageIdTag, // メッセージID - 'name' => $nameTag, // 会員名 - 'date' => $date, // 投稿日付 - 'message' => $message, // 投稿文 - 'avatar' => $avatarTag, // アバター画像 - 'spacer' => $this->_spacer // スペーサ - ); - $this->tmpl->addVars('message_list', $row); - $this->tmpl->parseTemplate('message_list', 'a'); - - // メッセージが存在するかどうか - $this->isExistsMessage = true; - return true; - } -} -?> diff --git a/widgets/m/chacha/include/container/m_chachaTopWidgetContainer.php b/widgets/m/chacha/include/container/m_chachaTopWidgetContainer.php deleted file mode 100644 index 1ccf2881..00000000 --- a/widgets/m/chacha/include/container/m_chachaTopWidgetContainer.php +++ /dev/null @@ -1,67 +0,0 @@ -getCurrentWidgetContainerPath() . '/m_chachaBaseWidgetContainer.php'); - -class m_chachaTopWidgetContainer extends m_chachaBaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'top.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - // トップコンテンツ - $topContents = $this->_configArray[self::CF_TOP_CONTENTS]; - $topContents = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->getUrl($this->gEnv->getRootUrl()), $topContents); // Magic3ルートURLの変換 - $this->gInstance->getTextConvManager()->convFromEmojiTag($topContents, $topContents);// Magic3内部タグから絵文字画像タグに変換 - $this->tmpl->addVar("_widget", "top_contents", $topContents); - - // URL - $this->tmpl->addVar('_widget', 'read_url', $this->gEnv->createCurrentPageUrlForMobile('task=' . self::TASK_READ)); - $registLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile('task=' . self::TASK_MYPAGE))); - $registName = '投稿する'; - $this->tmpl->addVar("_widget", "regist_url", $registLink); - $this->tmpl->addVar("_widget", "regist_name", $registName); - } -} -?> diff --git a/widgets/m/chacha/include/container/m_chachaWidgetContainer.php b/widgets/m/chacha/include/container/m_chachaWidgetContainer.php deleted file mode 100644 index 7f461c91..00000000 --- a/widgets/m/chacha/include/container/m_chachaWidgetContainer.php +++ /dev/null @@ -1,145 +0,0 @@ -getCurrentWidgetContainerPath() . '/m_chachaBaseWidgetContainer.php'); - -class m_chachaWidgetContainer extends m_chachaBaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * ディスパッチ処理(メインコンテナのみ実行) - * - * HTTPリクエストの内容を見て処理をコンテナに振り分ける - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return bool このクラスの_setTemplate(), _assign()へ処理を継続するかどうかを返す。 - * true=処理を継続、false=処理を終了 - */ - function _dispatch($request, &$param) - { - $memberId = $request->trimValueOf(self::URL_PARAM_MEMBER_ID); // 会員ID - - // 実行処理を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)){ - // 会員IDを取得 - $memberId = $request->trimValueOf(self::URL_PARAM_MEMBER_ID); - $messageId = $request->trimValueOf(self::URL_PARAM_MESSAGE_ID); // メッセージID - - // 会員IDが設定されているときはマイページを表示 - if (empty($memberId)){ - if (empty($messageId)){ - $task = self::DEFAULT_TASK; - } else { - $task = self::TASK_THREAD; // スレッド表示 - } - } else { - $task = self::TASK_MYPAGE; // マイページ表示 - } - } - - // アクセス権をチェック - switch ($task){ - case self::TASK_THREAD: // スレッド処理 - case self::TASK_READ: // スレッド一覧画面 - case self::TASK_PROFILE: // プロフィール入力画面 - case self::TASK_MYPAGE: // マイページ画面 - // 携帯以外からのアクセスの場合はエラー - if (empty($this->_mobileId)) return true; - break; - } - - // ユーザ登録されていない場合はユーザ登録へ - if ($task == self::TASK_MYPAGE && empty($memberId)){ // マイページ画面 - $db = new chachaDb(); // DBオブジェクト作成 - $ret = $db->getMemberInfoByDeviceId($this->_mobileId, $row); - if (!$ret){ - $nextPage = $this->gEnv->createCurrentPageUrlForMobile('task=' . self::TASK_PROFILE); - $this->gPage->redirect($nextPage, true/*遷移時のダイアログ表示を抑止*/); - return true; - } - } - - // ##### コンテナを起動 ##### - switch ($task){ - case self::TASK_TOP: // トップ画面 - case self::TASK_THREAD: // スレッド処理 - case self::TASK_READ: // スレッド一覧画面 - case self::TASK_PROFILE: // プロフィール入力画面 - case self::TASK_MYPAGE: // マイページ画面 - $this->gLaunch->goSubWidget($task); - return false; - default: - $this->SetMsg(self::MSG_APP_ERR, "画面が見つかりません"); - return true; - } - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - - // 要求画面によってテンプレートを変更 - switch ($task){ - default: - return 'message.tmpl.html'; - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _assign($request, &$param) - { - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TASK; - - // 要求画面によってテンプレートを変更 - switch ($task){ - case self::TASK_THREAD: // スレッド処理 - case self::TASK_READ: // スレッド一覧画面 - case self::TASK_PROFILE: // プロフィール入力画面 - case self::TASK_MYPAGE: // マイページ画面 - $this->setUserErrorMsg('携帯電話以外からは実行できません'); - $this->tmpl->addVar('_widget', 'top_url', $this->gEnv->createCurrentPageUrlForMobile('')); - break; - default: - break; - } - } -} -?> diff --git a/widgets/m/chacha/include/db/chachaDb.php b/widgets/m/chacha/include/db/chachaDb.php deleted file mode 100644 index f04f116a..00000000 --- a/widgets/m/chacha/include/db/chachaDb.php +++ /dev/null @@ -1,565 +0,0 @@ -getDbPath() . '/baseDb.php'); - -class chachaDb extends BaseDb -{ - /** - * マイクロブログ定義値をすべて取得 - * - * 掲示板IDが空のデフォルト値は常に読み込む - * - * @param array $rows レコード - * @param string $boardId 掲示板ID - * @return bool 1行以上取得 = true, 取得なし= false - */ - function getAllConfig(&$rows, $boardId = '') - { - $queryStr = 'SELECT * FROM mblog_config '; - $queryStr .= 'WHERE mc_board_id = \'\' '; - $queryStr .= 'OR mc_board_id = ? '; - $queryStr .= 'ORDER BY mc_board_id, mc_index'; - $retValue = $this->selectRecords($queryStr, array($boardId), $rows); - return $retValue; - } - /** - * マイクロブログ定義値を更新 - * - * @param string $key キーとなる項目値 - * @param string $value 値 - * @param string $boardId 掲示板ID - * @return true = 正常、false=異常 - */ - function updateConfig($key, $value, $boardId = '') - { - // トランザクションスタート - $this->startTransaction(); - - $queryStr = 'SELECT mc_value FROM mblog_config '; - $queryStr .= 'WHERE mc_board_id = ? '; - $queryStr .= 'AND mc_id = ? '; - $ret = $this->selectRecord($queryStr, array($boardId, $key), $row); - if ($ret){ - $queryStr = 'UPDATE mblog_config '; - $queryStr .= 'SET mc_value = ? '; - $queryStr .= 'WHERE mc_board_id = ? '; - $queryStr .= 'AND mc_id = ? '; - $ret = $this->execStatement($queryStr, array($value, $boardId, $key)); - } else { - $queryStr = 'INSERT INTO mblog_config ('; - $queryStr .= 'mc_board_id, '; - $queryStr .= 'mc_id, '; - $queryStr .= 'mc_value '; - $queryStr .= ') VALUES ('; - $queryStr .= '?, ?, ?'; - $queryStr .= ')'; - $ret = $this->execStatement($queryStr, array($boardId, $key, $value)); - } - // トランザクション終了 - $ret = $this->endTransaction(); - return $ret; - } - /** - * 端末IDから会員情報の取得 - * - * @param string $deviceId 端末ID - * @param array $row 取得データ - * @return true=正常、false=異常 - */ - function getMemberInfoByDeviceId($deviceId, &$row) - { - // 引数エラーチェック - if (empty($deviceId)) return false; - - $queryStr = 'SELECT * FROM mblog_member '; - $queryStr .= 'WHERE mb_device_id = ? '; - $queryStr .= 'AND mb_deleted = false '; // 削除されていない - $ret = $this->selectRecord($queryStr, array($deviceId), $row); - return $ret; - } - /** - * 会員IDから会員情報の取得 - * - * @param string $id 会員ID - * @param array $row 取得データ - * @return true=正常、false=異常 - */ - function getMemberInfoById($id, &$row) - { - // 引数エラーチェック - if (empty($id)) return false; - - $queryStr = 'SELECT * FROM mblog_member '; - $queryStr .= 'WHERE mb_id = ? '; - $queryStr .= 'AND mb_deleted = false '; // 削除されていない - $ret = $this->selectRecord($queryStr, array($id), $row); - return $ret; - } - /** - * 会員IDが存在するかチェック - * - * @param string $id 会員ID - * @return true=存在する、false=存在しない - */ - function isExistsMemberId($id) - { - $queryStr = 'SELECT * FROM mblog_member '; - $queryStr .= 'WHERE mb_id = ? '; - return $this->isRecordExists($queryStr, array($id)); - } - /** - * 名前が存在するかチェック - * - * @param string $name 名前 - * @return true=存在する、false=存在しない - */ - function isExistsMemberName($name) - { - $queryStr = 'SELECT * FROM mblog_member '; - $queryStr .= 'WHERE mb_name = ? '; - $queryStr .= 'AND mb_deleted = false'; - return $this->isRecordExists($queryStr, array($name)); - } - /** - * Eメールが存在するかチェック - * - * @param string $email Eメール - * @return true=存在する、false=存在しない - */ - function isExistsMemberEmail($email) - { - $queryStr = 'SELECT * FROM mblog_member '; - $queryStr .= 'WHERE mb_email = ? '; - $queryStr .= 'AND mb_deleted = false'; - return $this->isRecordExists($queryStr, array($email)); - } - /** - * 会員情報の新規追加 - * - * @param string $deviceId 端末ID - * @param string $memberId 会員ID - * @param int $userId ユーザID - * @param string $name 投稿者名 - * @param string $email Eメールアドレス - * @param string $url URL - * @param string $avatar アバターファイル名 - * @param bool $showEmail Eメールアドレスを公開するかどうか - * @return bool true = 成功、false = 失敗 - */ - function addMember($deviceId, $memberId, $userId, $name, $email, $url, $avatar, $showEmail) - { - $now = date("Y/m/d H:i:s"); // 現在日時 -// $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ - - // トランザクション開始 - $this->startTransaction(); - - // 会員IDの存在をチェック - if ($this->isExistsMemberId($memberId)){ // 会員IDが登録されているときは異常終了 - $this->endTransaction(); - return false; - } - - // データを追加 - $queryStr = 'INSERT INTO mblog_member '; - $queryStr .= '('; - $queryStr .= 'mb_id, '; - $queryStr .= 'mb_device_id, '; - $queryStr .= 'mb_user_id, '; - $queryStr .= 'mb_name, '; - $queryStr .= 'mb_email, '; - $queryStr .= 'mb_url, '; - $queryStr .= 'mb_avatar, '; - $queryStr .= 'mb_show_email, '; - $queryStr .= 'mb_regist_dt, '; - $queryStr .= 'mb_last_access_dt, '; - $queryStr .= 'mb_create_user_id, '; - $queryStr .= 'mb_create_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($memberId, $deviceId, $userId, $name, $email, $url, $avatar, intval($showEmail), $now, $now, $userId, $now)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * 会員情報を更新 - * - * @param string $deviceId 端末ID - * @param string $name 投稿者名 - * @param string $email Eメールアドレス - * @param string $url URL - * @param string $avatar アバターファイル名 - * @param bool $showEmail Eメールアドレスを公開するかどうか - * @param int $newSerial 新規シリアル番号 - * @return true = 正常、false=異常 - */ - function updateMember($deviceId, $name, $email, $url, $avatar, $showEmail, &$newSerial) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ - - // 引数エラーチェック - if (empty($deviceId)) return false; - - // トランザクション開始 - $this->startTransaction(); - - // 指定の端末IDのレコードが削除状態でないかチェック - $queryStr = 'SELECT * FROM mblog_member '; - $queryStr .= 'WHERE mb_device_id = ? '; - $queryStr .= 'AND mb_deleted = false '; // 削除されていない - $ret = $this->selectRecord($queryStr, array($deviceId), $row); - if (!$ret){ // 登録レコードが存在しない場合は終了 - $this->endTransaction(); - return false; - } - $historyIndex = $row['mb_history_index'] + 1; - - // 古いレコードを削除 - $queryStr = 'UPDATE mblog_member '; - $queryStr .= 'SET mb_deleted = true, '; // 削除 - $queryStr .= 'mb_update_user_id = ?, '; - $queryStr .= 'mb_update_dt = ? '; - $queryStr .= 'WHERE mb_serial = ?'; - $ret = $this->execStatement($queryStr, array($userId, $now, $row['mb_serial'])); - if (!$ret){ - $this->endTransaction(); - return false; - } - - // データを追加 - // 識別ID、会員No、登録日時の変更は不可 - $queryStr = 'INSERT INTO mblog_member '; - $queryStr .= '('; - $queryStr .= 'mb_id, '; - $queryStr .= 'mb_history_index, '; - $queryStr .= 'mb_device_id, '; - $queryStr .= 'mb_user_id, '; - $queryStr .= 'mb_name, '; - $queryStr .= 'mb_email, '; - $queryStr .= 'mb_url, '; - $queryStr .= 'mb_avatar, '; - $queryStr .= 'mb_show_email, '; - $queryStr .= 'mb_regist_dt, '; - $queryStr .= 'mb_last_access_dt, '; - $queryStr .= 'mb_create_user_id, '; - $queryStr .= 'mb_create_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($row['mb_id'], $historyIndex, $deviceId, $row['mb_user_id'], $name, $email, $url, $avatar, intval($showEmail), - $row['mb_regist_dt'], $row['mb_last_access_dt'], $userId, $now)); - - // 新規のシリアル番号取得 - $queryStr = 'SELECT MAX(mb_serial) AS ns FROM mblog_member '; - $ret = $this->selectRecord($queryStr, array(), $row); - if ($ret) $newSerial = $row['ns']; - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * スレッドIDが存在するかチェック - * - * @param string $id スレッドID - * @return true=存在する、false=存在しない - */ - function isExistsThreadId($id) - { - $queryStr = 'SELECT * FROM mblog_thread '; - $queryStr .= 'WHERE mt_id = ? '; - return $this->isRecordExists($queryStr, array($id)); - } - /** - * スレッドの新規追加 - * - * @param string $boardId 掲示板ID - * @param array $threadId スレッドID - * @param string $memberId 会員ID - * @param string $subject スレッド件名 - * @param string $message 投稿メッセージ - * @return bool true = 成功、false = 失敗 - */ - function addNewThread($boardId, $threadId, $memberId, $subject, $message) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ - $accessLog = $this->gEnv->getCurrentAccessLogSerial(); - - // 引数エラーチェック - if (empty($threadId) || empty($memberId)) return false; - - // トランザクション開始 - $this->startTransaction(); - - // スレッドIDの存在をチェック - if ($this->isExistsThreadId($threadId)){ // スレッドIDが登録されているときは異常終了 - $this->endTransaction(); - return false; - } - // スレッド番号作成 - $queryStr = 'SELECT MAX(mt_no) AS mn FROM mblog_thread '; - $ret = $this->selectRecord($queryStr, array(), $row); - if ($ret){ - $threadNo = $row['mn'] + 1; - } else { - $threadNo = 1; - } - $queryStr = 'SELECT MAX(mt_update_no) AS mn FROM mblog_thread '; - $ret = $this->selectRecord($queryStr, array(), $row); - if ($ret){ - $threadUpdateNo = $row['mn'] + 1; - } else { - $threadUpdateNo = 1; - } - - // データを追加 - $queryStr = 'INSERT INTO mblog_thread '; - $queryStr .= '('; - $queryStr .= 'mt_board_id, '; - $queryStr .= 'mt_id, '; - $queryStr .= 'mt_no, '; - $queryStr .= 'mt_update_no, '; - $queryStr .= 'mt_subject, '; - $queryStr .= 'mt_message_count, '; - $queryStr .= 'mt_dt, '; - $queryStr .= 'mt_log_serial, '; - $queryStr .= 'mt_create_user_id, '; - $queryStr .= 'mt_create_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($boardId, $threadId, $threadNo, $threadUpdateNo, $subject, 1, $now, $accessLog, $userId, $now)); - - $queryStr = 'INSERT INTO mblog_thread_message '; - $queryStr .= '('; - $queryStr .= 'mm_board_id, '; - $queryStr .= 'mm_thread_id, '; - $queryStr .= 'mm_index, '; - $queryStr .= 'mm_message, '; - $queryStr .= 'mm_regist_member_id, '; - $queryStr .= 'mm_regist_dt, '; - $queryStr .= 'mm_log_serial, '; - $queryStr .= 'mm_create_user_id, '; - $queryStr .= 'mm_create_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($boardId, $threadId, 1, $message, $memberId, $now, $accessLog, $userId, $now)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * 返信メッセージの追加 - * - * @param string $boardId 掲示板ID - * @param array $threadId スレッドID - * @param string $memberId 会員ID - * @param string $message 投稿メッセージ - * @return bool true = 成功、false = 失敗 - */ - function addNewReply($boardId, $threadId, $memberId, $message) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ - $accessLog = $this->gEnv->getCurrentAccessLogSerial(); - - // 引数エラーチェック - if (empty($threadId) || empty($memberId)) return false; - - // トランザクション開始 - $this->startTransaction(); - - // スレッド情報取得 - $queryStr = 'SELECT * FROM mblog_thread '; - $queryStr .= 'WHERE mt_board_id = ? '; - $queryStr .= 'AND mt_id = ? '; - $queryStr .= 'AND mt_deleted = false '; // 削除されていない - $ret = $this->selectRecord($queryStr, array($boardId, $threadId), $row); - if (!$ret){ // スレッドが登録されていないときは異常終了 - $this->endTransaction(); - return false; - } - $serial = $row['mt_serial']; - $historyIndex = $row['mt_history_index'] + 1; - $subject = $row['mt_subject']; - $threadNo = $row['mt_no']; - $messageCount = $row['mt_message_count'] + 1; - - // スレッド更新番号作成 - $queryStr = 'SELECT MAX(mt_update_no) AS mn FROM mblog_thread '; - $ret = $this->selectRecord($queryStr, array(), $row); - if ($ret){ - $threadUpdateNo = $row['mn'] + 1; - } else { - $threadUpdateNo = 1; - } - - // 古いレコードを削除 - $queryStr = 'UPDATE mblog_thread '; - $queryStr .= 'SET mt_deleted = true, '; // 削除 - $queryStr .= 'mt_update_user_id = ?, '; - $queryStr .= 'mt_update_dt = ? '; - $queryStr .= 'WHERE mt_serial = ?'; - $this->execStatement($queryStr, array($userId, $now, $serial)); - - // データを追加 - $queryStr = 'INSERT INTO mblog_thread '; - $queryStr .= '('; - $queryStr .= 'mt_board_id, '; - $queryStr .= 'mt_id, '; - $queryStr .= 'mt_history_index, '; - $queryStr .= 'mt_no, '; - $queryStr .= 'mt_update_no, '; - $queryStr .= 'mt_subject, '; - $queryStr .= 'mt_message_count, '; - $queryStr .= 'mt_dt, '; - $queryStr .= 'mt_log_serial, '; - $queryStr .= 'mt_create_user_id, '; - $queryStr .= 'mt_create_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($boardId, $threadId, $historyIndex, $threadNo, $threadUpdateNo, $subject, $messageCount, $now, $accessLog, $userId, $now)); - - $queryStr = 'INSERT INTO mblog_thread_message '; - $queryStr .= '('; - $queryStr .= 'mm_board_id, '; - $queryStr .= 'mm_thread_id, '; - $queryStr .= 'mm_index, '; - $queryStr .= 'mm_message, '; - $queryStr .= 'mm_regist_member_id, '; - $queryStr .= 'mm_regist_dt, '; - $queryStr .= 'mm_log_serial, '; - $queryStr .= 'mm_create_user_id, '; - $queryStr .= 'mm_create_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($boardId, $threadId, $messageCount, $message, $memberId, $now, $accessLog, $userId, $now)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * 会員IDでスレッドを取得 - * - * @param string $boardId 掲示板ID - * @param string $memberId 会員ID - * @param int $limit 取得する項目数 - * @param int $page 取得するページ(1~) - * @param function $callback コールバック関数 - * @param bool $plusRecord 次のページ判断用に1レコード多く読み込むかどうか - * @return なし - */ - function getThreadByMemberId($boardId, $memberId, $limit, $page, $callback, $plusRecord = false) - { - $offset = $limit * ($page -1); - if ($offset < 0) $offset = 0; - - // 次ページがあるか判断するために1レコード追加 - if ($plusRecord) $limit++; - - $queryStr = 'SELECT * FROM mblog_thread LEFT JOIN mblog_thread_message ON mt_board_id = mm_board_id AND mt_id = mm_thread_id AND mm_deleted = false AND mm_index = 1 '; - $queryStr .= 'WHERE mt_board_id = ? '; - $queryStr .= 'AND mt_deleted = false '; // 削除されていない - $queryStr .= 'AND mm_regist_member_id = ? '; - $queryStr .= 'ORDER BY mt_dt DESC '; // 投稿順に取得 - $queryStr .= 'LIMIT ' . $limit . ' OFFSET ' . $offset; - $this->selectLoop($queryStr, array($boardId, $memberId), $callback); - } - /** - * 最新のスレッドメッセージを取得 - * - * @param string $boardId 掲示板ID - * @param int $limit 取得数 - * @param int $page 取得するページ(1~) - * @param function $callback コールバック関数 - * @param bool $plusRecord 次のページ判断用に1レコード多く読み込むかどうか - * @return なし - */ - function getThread($boardId, $limit, $page, $callback, $plusRecord = false) - { - if ($limit < 0) $limit = 0; - - $offset = $limit * ($page -1); - if ($offset < 0) $offset = 0; - - // 次ページがあるか判断するために1レコード追加 - if ($plusRecord) $limit++; - - $queryStr = 'SELECT * FROM mblog_thread LEFT JOIN mblog_thread_message ON mt_board_id = mm_board_id AND mt_id = mm_thread_id AND mm_deleted = false AND mm_index = 1 '; - $queryStr .= 'LEFT JOIN mblog_member ON mm_regist_member_id = mb_id AND mb_deleted = false '; - $queryStr .= 'WHERE mt_board_id = ? '; - $queryStr .= 'AND mt_deleted = false '; // 削除されていない - //$queryStr .= 'ORDER BY mt_dt DESC '; - $queryStr .= 'ORDER BY mt_update_no DESC '; - $queryStr .= 'LIMIT ' . $limit . ' OFFSET ' . $offset; - $this->selectLoop($queryStr, array($boardId), $callback); - } - /** - * スレッド情報の取得 - * - * @param string $boardId 掲示板ID - * @param string $threadId スレッドID - * @param array $row 取得データ - * @return true=正常、false=異常 - */ - function getThreadInfo($boardId, $threadId, &$row) - { - $queryStr = 'SELECT * FROM mblog_thread LEFT JOIN mblog_thread_message ON mt_board_id = mm_board_id AND mt_id = mm_thread_id AND mm_deleted = false AND mm_index = 1 '; - $queryStr .= 'LEFT JOIN mblog_member ON mm_regist_member_id = mb_id AND mb_deleted = false '; - $queryStr .= 'WHERE mt_board_id = ? '; - $queryStr .= 'AND mt_id = ? '; - $queryStr .= 'AND mt_deleted = false '; // 削除されていない - $ret = $this->selectRecord($queryStr, array($boardId, $threadId), $row); - return $ret; - } - /** - * 返信メッセージを取得 - * - * @param function $callback コールバック関数 - * @param string $boardId 掲示板ID - * @param array $threadId スレッドID - * @param int $limit 取得数(0のときすべて) - * @param int $page 取得するページ(1~) - * @param bool $plusRecord 次のページ判断用に1レコード多く読み込むかどうか - * @return なし - */ - function getThreadReply($callback, $boardId, $threadId, $limit, $page, $plusRecord = false) - { - if ($limit < 0) $limit = 0; - - $offset = $limit * ($page -1); - if ($offset < 0) $offset = 0; - - // 次ページがあるか判断するために1レコード追加 - if ($plusRecord) $limit++; - - $queryStr = 'SELECT * FROM mblog_thread_message LEFT JOIN mblog_member ON mm_regist_member_id = mb_id AND mb_deleted = false '; - $queryStr .= 'WHERE mm_board_id = ? '; - $queryStr .= 'AND mm_thread_id = ? '; - $queryStr .= 'AND mm_index > 1 '; // 返信のみ - if ($limit <= 0){ - $queryStr .= 'ORDER BY mm_index'; - } else { - $queryStr .= 'ORDER BY mm_index LIMIT ' . intval($limit) . ' OFFSET ' . intval($offset); - } - $this->selectLoop($queryStr, array($boardId, $threadId), $callback); - } -} -?> diff --git a/widgets/m/chacha/include/template/admin_other.tmpl.html b/widgets/m/chacha/include/template/admin_other.tmpl.html deleted file mode 100644 index d6a47dd9..00000000 --- a/widgets/m/chacha/include/template/admin_other.tmpl.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - -
-{MENU_ITEMS} - -
- - -
- -
- - - - - - - - -
トップコンテンツ
-
- -
-
-
-
diff --git a/widgets/m/chacha/include/template/message.tmpl.html b/widgets/m/chacha/include/template/message.tmpl.html deleted file mode 100644 index 6825e57e..00000000 --- a/widgets/m/chacha/include/template/message.tmpl.html +++ /dev/null @@ -1,7 +0,0 @@ - - - -
 
-
 
- -
diff --git a/widgets/m/chacha/include/template/mypage.tmpl.html b/widgets/m/chacha/include/template/mypage.tmpl.html deleted file mode 100644 index b7b042e7..00000000 --- a/widgets/m/chacha/include/template/mypage.tmpl.html +++ /dev/null @@ -1,31 +0,0 @@ - -
{TITLE}
-
{REGIST_NAME}[9]
- - -
{AVATAR_IMAGE} {NAME}
- -
- - - -
-
-
-
-
-
メッセージが投稿されていません
- -
-
{MESSAGE}
-
{DATE} {ID} {MESSAGE_COUNT}
-
-{SPACER} -
-
-
{PAGE_LINK}
-
 
- -
diff --git a/widgets/m/chacha/include/template/profile.tmpl.html b/widgets/m/chacha/include/template/profile.tmpl.html deleted file mode 100644 index d3f87b7a..00000000 --- a/widgets/m/chacha/include/template/profile.tmpl.html +++ /dev/null @@ -1,28 +0,0 @@ - -
{TITLE}
-
{MYPAGE_NAME}
- -
{AVATAR_IMG} ID: {ID}
-
- - -ニックネーム: {NAME} -*必須
- -
 
- -Eメール:
-
-公開する
{EMAIL} -
 
-
-URL:
-{URL}
-
-
-
-
 
- -
diff --git a/widgets/m/chacha/include/template/thread.tmpl.html b/widgets/m/chacha/include/template/thread.tmpl.html deleted file mode 100644 index 13e07060..00000000 --- a/widgets/m/chacha/include/template/thread.tmpl.html +++ /dev/null @@ -1,37 +0,0 @@ - -
更新[5] {REGIST_NAME}
- - -
-
{AVATAR} {NAME}
-
{THREAD_MESSAGE}
-
{DATE} {ID} {THREAD_MESSAGE_COUNT}
-
-
-
- -
-
{AVATAR} {NAME}
-
{MESSAGE}
-
{DATE} {ID}
-
-{SPACER} -
-
返信メッセージがありません
-
{PAGE_LINK}
- -
 
-
- - - - -
-
-
-
-
 
- -
diff --git a/widgets/m/chacha/include/template/thread_read.tmpl.html b/widgets/m/chacha/include/template/thread_read.tmpl.html deleted file mode 100644 index 46a148ba..00000000 --- a/widgets/m/chacha/include/template/thread_read.tmpl.html +++ /dev/null @@ -1,17 +0,0 @@ - -
更新[5] {REGIST_NAME}[3]
- - -
-
{AVATAR} {NAME}
-
{MESSAGE}
-
{DATE} {ID} {MESSAGE_COUNT}
-
-{SPACER} -
-
{PAGE_LINK}
-
 
- -
diff --git a/widgets/m/chacha/include/template/top.tmpl.html b/widgets/m/chacha/include/template/top.tmpl.html deleted file mode 100644 index d52fcc7e..00000000 --- a/widgets/m/chacha/include/template/top.tmpl.html +++ /dev/null @@ -1,5 +0,0 @@ - -{TOP_CONTENTS} - - diff --git a/widgets/m/chacha/index.php b/widgets/m/chacha/index.php deleted file mode 100644 index 99ff01c9..00000000 --- a/widgets/m/chacha/index.php +++ /dev/null @@ -1,23 +0,0 @@ -goWidget(__FILE__); -?> diff --git a/widgets/m/contactus/admin/index.php b/widgets/m/contactus/admin/index.php deleted file mode 100644 index 393e9bda..00000000 --- a/widgets/m/contactus/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 426 2008-03-24 02:50:30Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/contactus/images/icon32.gif b/widgets/m/contactus/images/icon32.gif deleted file mode 100644 index 7bc6b0b7237e6b31763c0c0bcb8b8ddf63fd1f34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1266 zcmeH`{ZpEC0Kgx_4byFky0nr8ZnMo>ORH<`C2!%&)b;{b*Jbl=qK0&K<;%`qDBhJuz;nYwSczoK9I`~{!;+JxtYu~%BZ+nsVPB$%kgB&(EqbL z4(FbJV1C^FMBl#VkeX+kkzs)w>GHI4Rwjk3%QnRWmR()iQc+~={>ovxhpvJR`iB6R zQAOeO(vMHqK~D>PO;^7a5NObJm@NA7u|b#JiUKhATt6fetXqE=6K8wf@}))D+;}_i z+_$OAjq=JFdFP^`W^U2rKsp(xPXeHo2|0pqbAKtO??gsCR^3|yz%e6PQ1$31IP)5o z6=~MU`0Cy&q`zPprrH2-0i$P<@7mVh%1L+6bh~t|mYI3`D(Dk`*HD&g(6%ci@S3Fw zeEgPWNPx)2#_kfwiX8oGXI5EYk{53P;GFFmlk%m%<@QUtce#cC+-GjD$ky$BHh_#t z;pZ41=zspZ0wk}mZzu$yV=ok5JOTLuh`=Szm-*pCE(AxX*T%4w*MkleD^;yO=r&diPxesB;UGh%WF5j zjH8t=q#2r|E>qaW1rD#*NeDf>`^Xn_!XD3`afi-A*yi^xghc3vR<;qxeqGc^a^poh z{PYOr8LX**u5WnI{5#{TF}Nzo$7wL64YrJj;G%vX5fut$J6r4RpYRlNIeZF(eoB7n z=vAGSnHS3&iqF1E!juQOyY9sAjSDB0hsHQjR`|YTBIf0S%~y7n*4h;jq)NZAUD;d= z3xB*>lzA!CDmb@$kAkA+=2OcC38cQ5p<8F3B}5+BcLtxuODd`L;hfit1l&Y=@*JC* zx=CRsBwbU%v0Mqf=gP=RMFgXz&0e3|K*RV4(NGp9(o9kQT5NA?Z8$E$@d%k5OcMSm OCC4dXe;yVDo&FcReeC)G diff --git a/widgets/m/contactus/images/icon64.gif b/widgets/m/contactus/images/icon64.gif deleted file mode 100644 index 58e801c9a821db5a76809a71b77bd7f6edd2ceb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1993 zcmeH{`#;nB1IIrbV{EkCFH@UtIL>LsQ8}EpnP}-WIj86m-Q=q}G>P-5^f+^yB|O$q zbiUDX`;rbdogr)3#TLH99L0zkjgezBw~eFT=bXRd`^)$F7rY+N$K&-3IecjUfpbKN z2pJ$~A7m{VoPRH`<@|KJ?Z8KB)4--FCfc%Nd>r8qM(Zt4JjPeV~4>E?2YOIV-x-R(F$m zI^3vfT+(SY$|mt!^%NK!6g@T=7Q3EZZG8_`k-#8U^!y}ldY~PyUn5)0HBkrn z*XNt>4I07xDo6c$^{lq^m88dTGHgPUJq?sPQF+s&^!7pH$nen6M=&(>->S?+u<&9` zkY-d?Pp@@r2J1CCk*2qBR#qczE7d6*0T`75(7OQs=6=GNlq12~JZjH0_?Vxf93Oe! zt^U}T`UwVy{?Gr;0DjHX)D8lW_dgT<`2>UnP*hkyF+>b=##MK+^`d-N2h28VNoYfb z zAWI8x;xesLnmtfMtEA>%mZ*>A;(X)B{1I6wm%u!h+mWWas24VSIZ3uP3D{o`Ui9sk z$5NS&(RIt5A35Nri>2DT7J{?{o*@2|hwcJaGU;(&k**S>UG~b(oWx&KjQ`;T%h>T8NN&(cGN_i65%WqlI^aQJM zdk=NP?RFdw!ak&&FXent}MYWp5mxUESjQEFvVh0BbgDL9e` zk#V(CMW@z<*)~|(NfGPdm%dZvXqga>4u-jx-@KV%y zhL>yZ=^yed>`(9s2sgx@Zxc61R@JYLeBV6ghw z7e-Zhzo}sTi8CTcNXK;XT`3{^qbP9azyoyjuiYPnW;6@ev|AlTnx*gGyNV5&FOiS zSWW0_|B;3Qzeq9^u#kS2FM#>5(oHb9EGL4B%?hh>ckJps^u;x^D@d`qKmFc5x(c55 zl40>J#_#!!#lkZ5j-it5&3n-2kW@L@g6_^e!CQRbFAT-9h)3M7mtRPu9{oF1U;PDE Cbu{Au diff --git a/widgets/m/contactus/include/container/admin_m_contactusWidgetContainer.php b/widgets/m/contactus/include/container/admin_m_contactusWidgetContainer.php deleted file mode 100644 index 89c249cd..00000000 --- a/widgets/m/contactus/include/container/admin_m_contactusWidgetContainer.php +++ /dev/null @@ -1,119 +0,0 @@ - - * @copyright Copyright 2006-2008 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_contactusWidgetContainer.php 867 2008-07-28 09:04:54Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/contactus_mainDb.php'); - -class admin_m_contactusWidgetContainer extends BaseWidgetContainer -{ - private $db; // DB接続オブジェクト - const DEFAULT_SEND_MESSAGE = 1; // メール送信機能を使用するかどうか(デフォルト使用) - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new contactus_mainDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'admin.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - global $gEnvManager; - global $gPageManager; - - $defaultLang = $gEnvManager->getDefaultLanguage(); - $act = $request->trimValueOf('act'); - if ($act == 'update'){ // 設定更新のとき - $sendMessage = ($request->trimValueOf('send_message') == 'on') ? 1 : 0; // メール送信機能を使用するかどうか - //$emailReceiver = $request->trimValueOf('email_receiver'); // メール受信者 - $emailReceiver = trim($request->valueOf('email_receiver')); // メール受信者(aaaa形式が可能) - $companyVisible = ($request->trimValueOf('company_visible') == 'on') ? 1 : 0; // 会社名入力フィールドの表示 - $addressVisible = ($request->trimValueOf('address_visible') == 'on') ? 1 : 0; // 住所入力フィールドの表示 - $telVisible = ($request->trimValueOf('tel_visible') == 'on') ? 1 : 0; // 電話番号入力フィールドの表示 - // 入力値のエラーチェック - if ($this->getMsgCount() == 0){ // エラーのないとき - $paramObj->sendMessage = $sendMessage; // メール送信機能を使用するかどうか - $paramObj->emailReceiver = $emailReceiver; // メール受信者 - $paramObj->companyVisible = $companyVisible; // 会社名入力フィールドの表示 - $paramObj->addressVisible = $addressVisible; // 住所入力フィールドの表示 - $paramObj->telVisible = $telVisible; // 電話番号入力フィールドの表示 - $ret = $this->updateWidgetParamObj($paramObj); - if ($ret){ - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - } else { - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } - $gPageManager->updateParentWindow();// 親ウィンドウを更新 - } - } else { // 初期表示の場合 - // デフォルト値の設定 - $sendMessage = self::DEFAULT_SEND_MESSAGE; // メール送信機能を使用するかどうか - $emailReceiver = ''; // メール受信者 - $companyVisible = 0; // 会社名入力フィールドの表示 - $addressVisible = 0; // 住所入力フィールドの表示 - $telVisible = 0; // 電話番号入力フィールドの表示 - $paramObj = $this->getWidgetParamObj(); - if (!empty($paramObj)){ - $sendMessage = $paramObj->sendMessage; // メール送信機能を使用するかどうか - $emailReceiver = $paramObj->emailReceiver; // メール受信者 - $companyVisible = $paramObj->companyVisible; // 会社名入力フィールドの表示 - $addressVisible = $paramObj->addressVisible; // 住所入力フィールドの表示 - $telVisible = $paramObj->telVisible; // 電話番号入力フィールドの表示 - } - } - // 画面に書き戻す - $checked = ''; - if ($sendMessage) $checked = 'checked'; - $this->tmpl->addVar("_widget", "send_message", $checked); - $this->tmpl->addVar("_widget", "email_receiver", $emailReceiver); // メール受信者 - $checked = ''; - if ($companyVisible) $checked = 'checked'; - $this->tmpl->addVar("_widget", "company_visible", $checked);// 会社名入力フィールドの表示 - $checked = ''; - if ($addressVisible) $checked = 'checked'; - $this->tmpl->addVar("_widget", "address_visible", $checked);// 住所入力フィールドの表示 - $checked = ''; - if ($telVisible) $checked = 'checked'; - $this->tmpl->addVar("_widget", "tel_visible", $checked);// 電話番号入力フィールドの表示 - } -} -?> diff --git a/widgets/m/contactus/include/container/m_contactusWidgetContainer.php b/widgets/m/contactus/include/container/m_contactusWidgetContainer.php deleted file mode 100644 index b92dd097..00000000 --- a/widgets/m/contactus/include/container/m_contactusWidgetContainer.php +++ /dev/null @@ -1,231 +0,0 @@ - - * @copyright Copyright 2006-2008 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_contactusWidgetContainer.php 2363 2009-09-26 14:45:44Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/contactus_mainDb.php'); - -class m_contactusWidgetContainer extends BaseWidgetContainer -{ - private $db; // DB接続オブジェクト - private $sysDb; // システムDBオブジェクト - private $langId; // 表示言語 - private $state; // 都道府県 - const CONTACTUS_FORM = 'contact_us'; // お問い合わせフォーム - const DEFAULT_SEND_MESSAGE = 1; // メール送信機能を使用するかどうか(デフォルト使用) - - /** - * コンストラクタ - */ - function __construct() - { - global $gInstanceManager; - - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new contactus_mainDb(); - $this->sysDb = $gInstanceManager->getSytemDbObject(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - global $gEnvManager; - global $gErrorManager; - - $now = date("Y/m/d H:i:s"); // 現在日時 - $this->langId = $gEnvManager->getCurrentLanguage(); // 表示言語を取得 - - // 設定値の取得 - $sendMessage = self::DEFAULT_SEND_MESSAGE; // メール送信機能を使用するかどうか - $emailReceiver = ''; // メール受信者 - $companyVisible = 0; // 会社名入力フィールドの表示 - $addressVisible = 0; // 住所入力フィールドの表示 - $telVisible = 0; // 電話番号入力フィールドの表示 - $paramObj = $this->getWidgetParamObj(); - if (!empty($paramObj)){ - $sendMessage = $paramObj->sendMessage; // メール送信機能を使用するかどうか - $emailReceiver = $paramObj->emailReceiver; // メール受信者 - $companyVisible = $paramObj->companyVisible; // 会社名入力フィールドの表示 - $addressVisible = $paramObj->addressVisible; // 住所入力フィールドの表示 - $telVisible = $paramObj->telVisible; // 電話番号入力フィールドの表示 - } - - // 入力値を取得 - $act = $request->mobileTrimValueOf('act'); - $this->state = $request->mobileTrimValueOf('item_state'); // 都道府県 - $name = $request->mobileTrimValueOf('item_name'); // 名前 - $nameKana = $request->mobileTrimValueOf('item_name_kana'); // 名前(カナ) - $email = $request->mobileTrimValueOf('item_email'); // Eメール - $email2 = $request->mobileTrimValueOf('item_email2'); // Eメール確認用 - $companyName = $request->mobileTrimValueOf('item_company_name'); // 会社名 - $zipcode = $request->mobileTrimValueOf('item_zipcode'); // 郵便番号 - $address = $request->mobileTrimValueOf('item_address'); // 住所 - $phone = $request->mobileTrimValueOf('item_phone'); // 電話番号 - $body = $request->mobileTrimValueOf('item_body'); // 問い合わせ内容 - if ($act == 'send'){ // お問い合わせメール送信 - // 入力チェック - $this->checkInput($name, 'お名前'); - $this->checkInput($nameKana, 'お名前(カナ)'); - $this->checkMailAddress($email, 'Eメール'); - $this->checkInput($body, 'お問い合わせ内容'); - if ($companyVisible){ // 会社名入力フィールドの表示 - $this->checkInput($companyName, '会社名'); - } - if ($addressVisible){ // 住所入力フィールドの表示 - $this->checkInput($zipcode, '郵便番号'); - $this->checkInput($this->state, '都道府県'); - $this->checkInput($address, '住所'); - } - if ($telVisible){ // 電話番号入力フィールドの表示 - $this->checkInput($phone, '電話番号'); - } - if ($this->getMsgCount() == 0){ // メールアドレスのチェック - if ($email != $email2){ - $this->setAppErrorMsg('Eメールアドレスに誤りがあります'); - } - } - // エラーなしの場合はメール送信 - if ($this->getMsgCount() == 0){ - $this->setGuidanceMsg('送信完了しました'); - - // メール送信設定のときはメールを送信 - if ($sendMessage){ - // メール本文の作成 - $mailBody = 'お名前     : ' . $name . "\n"; - $mailBody .= 'お名前(カナ) : ' . $nameKana . "\n"; - $mailBody .= 'Eメールアドレス: ' . $email . "\n"; - if ($companyVisible){ // 会社名入力フィールドの表示 - $mailBody .= '会社名     : ' . $companyName . "\n"; - } - if ($addressVisible){ // 住所入力フィールドの表示 - $stateName = $this->db->getStateName('JPN', $this->langId, $this->state); - $mailBody .= '郵便番号    : ' . $zipcode . "\n"; - $mailBody .= '都道府県    : ' . $stateName . "\n"; - $mailBody .= '住所      : ' . $address . "\n"; - } - if ($telVisible){ // 電話番号入力フィールドの表示 - $mailBody .= '電話番号    : ' . $phone . "\n"; - } - $mailBody .= 'お問い合わせ内容: ' . $body . "\n"; - - // 送信元、送信先 - $fromAddress = $gEnvManager->getSiteEmail(); // 送信元はサイト情報のEメールアドレス - $toAddress = $gEnvManager->getSiteEmail(); // デフォルトのサイト向けEメールアドレス - if (!empty($emailReceiver)) $toAddress = $emailReceiver; // 受信メールアドレスが設定されている場合 - - // メールを送信 - if (empty($toAddress)){ - $gErrorManager->writeError(__METHOD__, "基本情報のEメールアドレスが設定されていません。\n(メール本文)\n" . $mailBody); - } else { - $mailParam = array(); - $mailParam['BODY'] = $mailBody; - $ret = $this->gInstance->getMailManager()->sendFormMail(2/*手動送信*/, $gEnvManager->getCurrentWidgetId(), $toAddress, $fromAddress, $email, '', self::CONTACTUS_FORM, $mailParam); - } - } - - $this->tmpl->addVar("_widget", "name_disabled", 'disabled'); - $this->tmpl->addVar("_widget", "name_kana_disabled", 'disabled'); - $this->tmpl->addVar("_widget", "email_disabled", 'disabled'); - $this->tmpl->addVar("_widget", "email2_disabled", 'disabled'); - $this->tmpl->addVar("_widget", "body_disabled", 'disabled'); - - $this->tmpl->addVar("show_company_name", "company_name_disabled", 'disabled'); - $this->tmpl->addVar("show_address", "zipcode_disabled", 'disabled'); - $this->tmpl->addVar("show_address", "state_disabled", 'disabled'); - $this->tmpl->addVar("show_address", "address_disabled", 'disabled'); - $this->tmpl->addVar("show_tel", "phone_disabled", 'disabled'); - - $this->tmpl->addVar("_widget", "send_button_disabled", 'disabled');// 送信ボタン - } - $this->tmpl->addVar("_widget", "name", $name); - $this->tmpl->addVar("_widget", "name_kana", $nameKana); - $this->tmpl->addVar("_widget", "email", $email); - $this->tmpl->addVar("_widget", "email2", $email2); - $this->tmpl->addVar("_widget", "body", $body); - $this->tmpl->addVar("show_company_name", "company_name", $companyName); - $this->tmpl->addVar("show_address", "zipcode", $zipcode); - $this->tmpl->addVar("show_address", "address", $address); - $this->tmpl->addVar("show_tel", "phone", $phone); - $this->tmpl->addVar("_widget", "send_button_label", '送信する');// 送信ボタンラベル - } else { - // メール送信不可の場合はボタンを使用不可にする - if ($sendMessage){ - $this->tmpl->addVar("_widget", "send_button_label", '送信する');// 送信ボタンラベル - } else { - $this->tmpl->addVar("_widget", "send_button_label", '送信停止中');// 送信ボタンラベル - $this->tmpl->addVar("_widget", "send_button_disabled", 'disabled');// 送信ボタン - } - } - // 入力フィールドの表示制御 - if ($companyVisible) $this->tmpl->setAttribute('show_company_name', 'visibility', 'visible');// 会社名入力フィールドの表示 - if ($addressVisible){ // 住所入力フィールドの表示 - // 都道府県メニュー - $this->db->getAllState('JPN', $this->langId, array($this, 'stateLoop')); - $this->tmpl->setAttribute('show_address', 'visibility', 'visible');// 住所入力フィールドの表示 - } - if ($telVisible) $this->tmpl->setAttribute('show_tel', 'visibility', 'visible');// 住所入力フィールドの表示 - $this->tmpl->addVar("_widget", "url", $gEnvManager->createCurrentPageUrlForMobile()); - } - /** - * 取得した都道府県をテンプレートに設定する - * - * @param int $index 行番号(0~) - * @param array $fetchedRow フェッチ取得した行 - * @param object $param 未使用 - * @return bool true=処理続行の場合、false=処理終了の場合 - */ - function stateLoop($index, $fetchedRow, $param) - { - global $gEnvManager; - - $selected = ''; - if ($fetchedRow['gz_id'] == $this->state){ // 選択中の都道府県 - $selected = 'selected'; - } - - $row = array( - 'value' => $this->convertToDispString($fetchedRow['gz_id']), // ID - 'name' => $this->convertToDispString($fetchedRow['gz_name']), // 表示名 - 'selected' => $selected // 選択中かどうか - ); - $this->tmpl->addVars('state_list', $row); - $this->tmpl->parseTemplate('state_list', 'a'); - return true; - } -} -?> diff --git a/widgets/m/contactus/include/db/contactus_mainDb.php b/widgets/m/contactus/include/db/contactus_mainDb.php deleted file mode 100644 index 85cb0482..00000000 --- a/widgets/m/contactus/include/db/contactus_mainDb.php +++ /dev/null @@ -1,53 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: contactus_mainDb.php 426 2008-03-24 02:50:30Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getDbPath() . '/baseDb.php'); - -class contactus_mainDb extends BaseDb -{ - /** - * 都道府県を取得 - * - * @param string $coutryId 国ID - * @param string $lang 言語 - * @param function $callback コールバック関数 - * @return なし - */ - function getAllState($coutryId, $lang, $callback) - { - $queryStr = 'SELECT * FROM geo_zone '; - $queryStr .= 'WHERE gz_country_id = ? AND gz_type = 1 AND gz_language_id = ? '; - $queryStr .= 'ORDER BY gz_index '; - $this->selectLoop($queryStr, array($coutryId, $lang), $callback, null); - } - /** - * 都道府県名を取得 - * - * @param string $coutryId 国ID - * @param string $lang 言語 - * @param string $stateId 都道府県ID - * @return string 値 - */ - function getStateName($coutryId, $lang, $stateId) - { - $retValue = ''; - $queryStr = 'SELECT * FROM geo_zone '; - $queryStr .= 'WHERE gz_country_id = ? AND gz_type = 1 AND gz_language_id = ? AND gz_id = ?'; - $ret = $this->selectRecord($queryStr, array($coutryId, $lang, $stateId), $row); - if ($ret) $retValue = $row['gz_name']; - return $retValue; - } -} -?> diff --git a/widgets/m/contactus/include/template/admin.tmpl.html b/widgets/m/contactus/include/template/admin.tmpl.html deleted file mode 100644 index 77d30b90..00000000 --- a/widgets/m/contactus/include/template/admin.tmpl.html +++ /dev/null @@ -1,53 +0,0 @@ - - -
- -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
お問い合わせ設定
メール送信機能を使用
お問い合わせ受信者のメールアドレス
空の場合はサイト情報のE-mailアドレス
入力フィールドの表示 - 会社名
入力フィールドの表示 - 住所
入力フィールドの表示 - 電話番号
- -
- -
-
-
diff --git a/widgets/m/contactus/include/template/index.tmpl.html b/widgets/m/contactus/include/template/index.tmpl.html deleted file mode 100644 index b288b0df..00000000 --- a/widgets/m/contactus/include/template/index.tmpl.html +++ /dev/null @@ -1,40 +0,0 @@ - - -
- -お問い合わせ
-お名前*必須
-
-お名前(フリガナ)*必須
-
-Eメール*必須
-
-Eメール(確認)*必須
-
- -会社名*必須
-
-
- -郵便番号*必須
-
-都道府県
-*必須
-住所*必須
-
-
- -電話番号*必須
-
-
-内容*必須
-
-
-{MESSAGE}
-
-
diff --git a/widgets/m/contactus/index.php b/widgets/m/contactus/index.php deleted file mode 100644 index 393e9bda..00000000 --- a/widgets/m/contactus/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 426 2008-03-24 02:50:30Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/contactus_custom/admin/index.php b/widgets/m/contactus_custom/admin/index.php deleted file mode 100644 index b95e2eb0..00000000 --- a/widgets/m/contactus_custom/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 2116 2009-07-14 09:50:17Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/contactus_custom/images/icon32.gif b/widgets/m/contactus_custom/images/icon32.gif deleted file mode 100644 index 7bc6b0b7237e6b31763c0c0bcb8b8ddf63fd1f34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1266 zcmeH`{ZpEC0Kgx_4byFky0nr8ZnMo>ORH<`C2!%&)b;{b*Jbl=qK0&K<;%`qDBhJuz;nYwSczoK9I`~{!;+JxtYu~%BZ+nsVPB$%kgB&(EqbL z4(FbJV1C^FMBl#VkeX+kkzs)w>GHI4Rwjk3%QnRWmR()iQc+~={>ovxhpvJR`iB6R zQAOeO(vMHqK~D>PO;^7a5NObJm@NA7u|b#JiUKhATt6fetXqE=6K8wf@}))D+;}_i z+_$OAjq=JFdFP^`W^U2rKsp(xPXeHo2|0pqbAKtO??gsCR^3|yz%e6PQ1$31IP)5o z6=~MU`0Cy&q`zPprrH2-0i$P<@7mVh%1L+6bh~t|mYI3`D(Dk`*HD&g(6%ci@S3Fw zeEgPWNPx)2#_kfwiX8oGXI5EYk{53P;GFFmlk%m%<@QUtce#cC+-GjD$ky$BHh_#t z;pZ41=zspZ0wk}mZzu$yV=ok5JOTLuh`=Szm-*pCE(AxX*T%4w*MkleD^;yO=r&diPxesB;UGh%WF5j zjH8t=q#2r|E>qaW1rD#*NeDf>`^Xn_!XD3`afi-A*yi^xghc3vR<;qxeqGc^a^poh z{PYOr8LX**u5WnI{5#{TF}Nzo$7wL64YrJj;G%vX5fut$J6r4RpYRlNIeZF(eoB7n z=vAGSnHS3&iqF1E!juQOyY9sAjSDB0hsHQjR`|YTBIf0S%~y7n*4h;jq)NZAUD;d= z3xB*>lzA!CDmb@$kAkA+=2OcC38cQ5p<8F3B}5+BcLtxuODd`L;hfit1l&Y=@*JC* zx=CRsBwbU%v0Mqf=gP=RMFgXz&0e3|K*RV4(NGp9(o9kQT5NA?Z8$E$@d%k5OcMSm OCC4dXe;yVDo&FcReeC)G diff --git a/widgets/m/contactus_custom/images/icon64.gif b/widgets/m/contactus_custom/images/icon64.gif deleted file mode 100644 index 58e801c9a821db5a76809a71b77bd7f6edd2ceb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1993 zcmeH{`#;nB1IIrbV{EkCFH@UtIL>LsQ8}EpnP}-WIj86m-Q=q}G>P-5^f+^yB|O$q zbiUDX`;rbdogr)3#TLH99L0zkjgezBw~eFT=bXRd`^)$F7rY+N$K&-3IecjUfpbKN z2pJ$~A7m{VoPRH`<@|KJ?Z8KB)4--FCfc%Nd>r8qM(Zt4JjPeV~4>E?2YOIV-x-R(F$m zI^3vfT+(SY$|mt!^%NK!6g@T=7Q3EZZG8_`k-#8U^!y}ldY~PyUn5)0HBkrn z*XNt>4I07xDo6c$^{lq^m88dTGHgPUJq?sPQF+s&^!7pH$nen6M=&(>->S?+u<&9` zkY-d?Pp@@r2J1CCk*2qBR#qczE7d6*0T`75(7OQs=6=GNlq12~JZjH0_?Vxf93Oe! zt^U}T`UwVy{?Gr;0DjHX)D8lW_dgT<`2>UnP*hkyF+>b=##MK+^`d-N2h28VNoYfb z zAWI8x;xesLnmtfMtEA>%mZ*>A;(X)B{1I6wm%u!h+mWWas24VSIZ3uP3D{o`Ui9sk z$5NS&(RIt5A35Nri>2DT7J{?{o*@2|hwcJaGU;(&k**S>UG~b(oWx&KjQ`;T%h>T8NN&(cGN_i65%WqlI^aQJM zdk=NP?RFdw!ak&&FXent}MYWp5mxUESjQEFvVh0BbgDL9e` zk#V(CMW@z<*)~|(NfGPdm%dZvXqga>4u-jx-@KV%y zhL>yZ=^yed>`(9s2sgx@Zxc61R@JYLeBV6ghw z7e-Zhzo}sTi8CTcNXK;XT`3{^qbP9azyoyjuiYPnW;6@ev|AlTnx*gGyNV5&FOiS zSWW0_|B;3Qzeq9^u#kS2FM#>5(oHb9EGL4B%?hh>ckJps^u;x^D@d`qKmFc5x(c55 zl40>J#_#!!#lkZ5j-it5&3n-2kW@L@g6_^e!CQRbFAT-9h)3M7mtRPu9{oF1U;PDE Cbu{Au diff --git a/widgets/m/contactus_custom/include/container/admin_m_contactus_customWidgetContainer.php b/widgets/m/contactus_custom/include/container/admin_m_contactus_customWidgetContainer.php deleted file mode 100644 index 9128dccf..00000000 --- a/widgets/m/contactus_custom/include/container/admin_m_contactus_customWidgetContainer.php +++ /dev/null @@ -1,471 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_contactus_customWidgetContainer.php 2307 2009-09-13 04:03:00Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/contactus_customDb.php'); - -class admin_m_contactus_customWidgetContainer extends BaseAdminWidgetContainer -{ - private $db; // DB接続オブジェクト - private $sysDb; // DB接続オブジェクト - private $serialNo; // 選択中の項目のシリアル番号 - private $serialArray = array(); // 表示中のシリアル番号 - private $langId; - private $configId; // 定義ID - private $paramObj; // パラメータ保存用オブジェクト - private $typeArray; // 項目タイプ - private $fieldInfoArray = array(); // お問い合わせ項目情報 - const DEFAULT_NAME_HEAD = '名称未設定'; // デフォルトの設定名 - const DEFAULT_TITLE_NAME = 'お問い合わせ'; // デフォルトのタイトル名 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new contactus_customDb(); - $this->sysDb = $this->gInstance->getSytemDbObject(); - - // お問い合わせ項目タイプ - $this->typeArray = array( array( 'name' => 'テキストボックス', 'value' => 'text'), - array( 'name' => 'テキストエリア', 'value' => 'textarea'), - array( 'name' => 'セレクトメニュー', 'value' => 'select'), - array( 'name' => 'チェックボックス', 'value' => 'checkbox'), - array( 'name' => 'ラジオボタン', 'value' => 'radio')); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == 'list'){ // 一覧画面 - return 'admin_list.tmpl.html'; - } else { // 一覧画面 - return 'admin.tmpl.html'; - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == 'list'){ // 一覧画面 - return $this->createList($request); - } else { // 詳細設定画面 - return $this->createDetail($request); - } - } - /** - * 詳細画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param なし - */ - function createDetail($request) - { - // ページ定義IDとページ定義のレコードシリアル番号を取得 - $this->startPageDefParam($defSerial, $defConfigId, $this->paramObj); - - $userId = $this->gEnv->getCurrentUserId(); - $this->langId = $this->gEnv->getCurrentLanguage(); // 表示言語を取得 - $act = $request->trimValueOf('act'); - $this->serialNo = $request->trimValueOf('serial'); // 選択項目のシリアル番号 - $this->configId = $request->trimValueOf('item_id'); // 定義ID - if (empty($this->configId)) $this->configId = $defConfigId; // 呼び出しウィンドウから引き継いだ定義ID - - // 入力値を取得 - $name = $request->trimValueOf('item_name'); // 定義名 - $showTitle = ($request->trimValueOf('show_title') == 'on') ? 1 : 0; // タイトルの表示 - $titleName = $request->trimValueOf('title_name'); // タイトル名 - $titleBgColor = $request->trimValueOf('item_title_bgcolor'); // タイトルバックグランドカラー - $explanation = trim($request->valueOf('explanation')); // 説明 - $fieldCount = $request->trimValueOf('fieldcount'); // お問い合わせ項目数 - $titles = $request->trimValueOf('item_title'); // お問い合わせ項目タイトル - $descs = $request->trimValueOf('item_desc'); // お問い合わせ項目説明 - $types = $request->trimValueOf('item_type'); // お問い合わせ項目タイプ - $defs = $request->trimValueOf('item_def'); // お問い合わせ項目定義 - $values = $request->trimValueOf('required'); // お問い合わせ項目必須入力 - $requireds = array(); - if (!empty($values)) $requireds = explode(',', $values); - $emailSubject = $request->trimValueOf('email_subject'); // メールタイトル - $emailReceiver = trim($request->valueOf('email_receiver')); // メール受信者(aaaa形式が可能) - - $replaceNew = false; // データを再取得するかどうか - if ($act == 'add'){// 新規追加 - // 入力値のエラーチェック - - // 設定名の重複チェック - for ($i = 0; $i < count($this->paramObj); $i++){ - $targetObj = $this->paramObj[$i]->object; - if ($name == $targetObj->name){ // 定義名 - $this->setUserErrorMsg('名前が重複しています'); - break; - } - } - - // エラーなしの場合は、データを登録 - if ($this->getMsgCount() == 0){ - // 追加オブジェクト作成 - $newObj = new stdClass; - $newObj->name = $name;// 表示名 - $newObj->showTitle = $showTitle; // タイトルの表示 - $newObj->titleName = $titleName; // タイトル名 - $newObj->titleBgColor = $titleBgColor; // タイトルバックグランドカラー - $newObj->explanation = $explanation; // 説明 - $newObj->emailSubject = $emailSubject; // メールタイトル - $newObj->emailReceiver = $emailReceiver; // メール受信者(aaaa形式が可能) - $newObj->fieldInfo = array(); - - for ($i = 0; $i < $fieldCount; $i++){ - $newInfoObj = new stdClass; - $newInfoObj->title = $titles[$i]; - $newInfoObj->desc = $descs[$i]; - $newInfoObj->type = $types[$i]; - $newInfoObj->def = $defs[$i]; - $newInfoObj->required = $requireds[$i]; - $newObj->fieldInfo[] = $newInfoObj; - } - - $ret = $this->addPageDefParam($defSerial, $defConfigId, $this->paramObj, $newObj); - if ($ret){ - $this->setGuidanceMsg('データを追加しました'); - - $this->configId = $defConfigId; // 定義定義IDを更新 - $replaceNew = true; // データ再取得 - } else { - $this->setAppErrorMsg('データ追加に失敗しました'); - } - } - } else if ($act == 'update'){ // 設定更新のとき - // 入力値のエラーチェック - - if ($this->getMsgCount() == 0){ // エラーのないとき - // 現在の設定値を取得 - $ret = $this->getPageDefParam($defSerial, $defConfigId, $this->paramObj, $this->configId, $targetObj); - if ($ret){ - // ウィジェットオブジェクト更新 - $targetObj->showTitle = $showTitle; // タイトルの表示 - $targetObj->titleName = $titleName; // タイトル名 - $targetObj->titleBgColor = $titleBgColor; // タイトルバックグランドカラー - $targetObj->explanation = $explanation; // 説明 - $targetObj->emailSubject = $emailSubject; // メールタイトル - $targetObj->emailReceiver = $emailReceiver; // メール受信者(aaaa形式が可能) - $targetObj->fieldInfo = array(); - - for ($i = 0; $i < $fieldCount; $i++){ - $newInfoObj = new stdClass; - $newInfoObj->title = $titles[$i]; - $newInfoObj->desc = $descs[$i]; - $newInfoObj->type = $types[$i]; - $newInfoObj->def = $defs[$i]; - $newInfoObj->required = $requireds[$i]; - $targetObj->fieldInfo[] = $newInfoObj; - } - } - - // 設定値を更新 - if ($ret) $ret = $this->updatePageDefParam($defSerial, $defConfigId, $this->paramObj, $this->configId, $targetObj); - if ($ret){ - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - $replaceNew = true; // データ再取得 - } else { - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } - } - } else if ($act == 'select'){ // 定義IDを変更 - $replaceNew = true; // データ再取得 - } else { // 初期起動時、または上記以外の場合 - // デフォルト値設定 - $this->configId = $defConfigId; // 呼び出しウィンドウから引き継いだ定義ID - $replaceNew = true; // データ再取得 - } - // 設定項目選択メニュー作成 - $this->createItemMenu(); - - // 表示用データを取得 - if (empty($this->configId)){ // 新規登録の場合 - $this->tmpl->setAttribute('item_name_visible', 'visibility', 'visible');// 名前入力フィールド表示 - if ($replaceNew){ // データ再取得時 - $name = $this->createDefaultName(); // デフォルト登録項目名 - $showTitle = 0; // タイトルの表示 - $titleName = self::DEFAULT_TITLE_NAME; // タイトル名 - $titleBgColor = ''; // タイトルバックグランドカラー - $explanation = ''; // 説明 - $emailSubject = ''; // メールタイトル - $emailReceiver = ''; // メール受信者(aaaa形式が可能) - $this->fieldInfoArray = array(); // お問い合わせ項目情報 - } - $this->serialNo = 0; - } else { - if ($replaceNew){// データ再取得時 - $ret = $this->getPageDefParam($defSerial, $defConfigId, $this->paramObj, $this->configId, $targetObj); - if ($ret){ - $name = $targetObj->name;// 名前 - $showTitle = $targetObj->showTitle; // タイトルの表示 - $titleName = $targetObj->titleName; // タイトル名 - $titleBgColor = $targetObj->titleBgColor; // タイトルバックグランドカラー - $explanation = $targetObj->explanation; // 説明 - $emailSubject = $targetObj->emailSubject; // メールタイトル - $emailReceiver = $targetObj->emailReceiver; // メール受信者(aaaa形式が可能) - if (!empty($targetObj->fieldInfo)) $this->fieldInfoArray = $targetObj->fieldInfo; // お問い合わせ項目情報 - } - } - $this->serialNo = $this->configId; - - // 新規作成でないときは、メニューを変更不可にする(画面作成から呼ばれている場合のみ) - if (!empty($defConfigId) && !empty($defSerial)) $this->tmpl->addVar("_widget", "id_disabled", 'disabled'); - } - - // 追加用タイプメニュー作成 - $this->createTypeMenu1(); - - // お問い合わせ項目一覧作成 - $this->createFieldList(); - if (empty($this->fieldInfoArray)) $this->tmpl->setAttribute('field_list', 'visibility', 'hidden');// お問い合わせ項目情報一覧 - - // 画面にデータを埋め込む - if (!empty($this->configId)) $this->tmpl->addVar("_widget", "id", $this->configId); // 定義ID - $this->tmpl->addVar("item_name_visible", "name", $name); - if (!empty($showTitle)) $this->tmpl->addVar("_widget", "show_title", 'checked'); // タイトルの表示 - $this->tmpl->addVar("_widget", "title_name", $this->convertToDispString($titleName)); // タイトル名 - $this->tmpl->addVar("_widget", "title_bgcolor", $titleBgColor); // タイトルバックグランドカラー - $this->tmpl->addVar("_widget", "explanation", $explanation); // 説明 - $this->tmpl->addVar("_widget", "email_subject", $emailSubject); // メールタイトル - $this->tmpl->addVar("_widget", "email_receiver", $emailReceiver); // メール受信者(aaaa形式が可能) - $this->tmpl->addVar("_widget", "serial", $this->serialNo);// 選択中のシリアル番号、IDを設定 - - // ボタンの表示制御 - if (empty($this->serialNo)){ // 新規追加項目を選択しているとき - $this->tmpl->setAttribute('add_button', 'visibility', 'visible');// 「新規追加」ボタン - } else { - $this->tmpl->setAttribute('update_button', 'visibility', 'visible');// 「更新」ボタン - } - - // ページ定義IDとページ定義のレコードシリアル番号を更新 - $this->endPageDefParam($defSerial, $defConfigId, $this->paramObj); - } - /** - * 選択用メニューを作成 - * - * @return なし - */ - function createItemMenu() - { - for ($i = 0; $i < count($this->paramObj); $i++){ - $id = $this->paramObj[$i]->id;// 定義ID - $targetObj = $this->paramObj[$i]->object; - $name = $targetObj->name;// 定義名 - $selected = ''; - if ($this->configId == $id) $selected = 'selected'; - - $row = array( - 'name' => $name, // 名前 - 'value' => $id, // 定義ID - 'selected' => $selected // 選択中の項目かどうか - ); - $this->tmpl->addVars('title_list', $row); - $this->tmpl->parseTemplate('title_list', 'a'); - } - } - /** - * お問い合わせ項目一覧を作成 - * - * @return なし - */ - function createFieldList() - { - $fieldCount = count($this->fieldInfoArray); - for ($i = 0; $i < $fieldCount; $i++){ - $infoObj = $this->fieldInfoArray[$i]; - $title = $infoObj->title;// タイトル名 - $desc = $infoObj->desc; // 説明 - $type = $infoObj->type; // 項目タイプ - $def = $infoObj->def; // 項目定義 - $requiredCheck = ''; - if (!empty($infoObj->required)) $requiredCheck = 'checked'; - - // 行を作成 - $this->tmpl->clearTemplate('type_list2'); - - for ($j = 0; $j < count($this->typeArray); $j++){ - $value = $this->typeArray[$j]['value']; - $name = $this->typeArray[$j]['name']; - - $selected = ''; - if ($value == $type) $selected = 'selected'; - - $tableLine = array( - 'value' => $value, // タイプ値 - 'name' => $this->convertToDispString($name), // タイプ名 - 'selected' => $selected // 選択中かどうか - ); - $this->tmpl->addVars('type_list2', $tableLine); - $this->tmpl->parseTemplate('type_list2', 'a'); - } - $rootUrl = $this->convertToDispString($this->getUrl($this->gEnv->getRootUrl())); - $row = array( - 'title' => $this->convertToDispString($title), // タイトル名 - 'desc' => $this->convertToDispString($desc), // 説明 - 'def' => $this->convertToDispString($def), // 定義情報 - 'required' => $requiredCheck, // 必須入力 - 'root_url' => $rootUrl - ); - $this->tmpl->addVars('field_list', $row); - $this->tmpl->parseTemplate('field_list', 'a'); - } - } - /** - * デフォルトの名前を取得 - * - * @return string デフォルト名 - */ - function createDefaultName() - { - $name = self::DEFAULT_NAME_HEAD; - for ($j = 1; $j < 100; $j++){ - $name = self::DEFAULT_NAME_HEAD . $j; - // 設定名の重複チェック - for ($i = 0; $i < count($this->paramObj); $i++){ - $targetObj = $this->paramObj[$i]->object; - if ($name == $targetObj->name){ // 定義名 - break; - } - } - // 重複なしのときは終了 - if ($i == count($this->paramObj)) break; - } - return $name; - } - /** - * 一覧画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param なし - */ - function createList($request) - { - // ページ定義IDとページ定義のレコードシリアル番号を取得 - $this->startPageDefParam($defSerial, $defConfigId, $this->paramObj); - - $userId = $this->gEnv->getCurrentUserId(); - $langId = $this->gEnv->getCurrentLanguage(); // 表示言語を取得 - $act = $request->trimValueOf('act'); - - if ($act == 'delete'){ // メニュー項目の削除 - $listedItem = explode(',', $request->trimValueOf('seriallist')); - $delItems = array(); - for ($i = 0; $i < count($listedItem); $i++){ - // 項目がチェックされているかを取得 - $itemName = 'item' . $i . '_selected'; - $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0; - - if ($itemValue){ // チェック項目 - $delItems[] = $listedItem[$i]; - } - } - if (count($delItems) > 0){ - $ret = $this->delPageDefParam($defSerial, $defConfigId, $this->paramObj, $delItems); - if ($ret){ // データ削除成功のとき - $this->setGuidanceMsg('データを削除しました'); - } else { - $this->setAppErrorMsg('データ削除に失敗しました'); - } - } - } - // 定義一覧作成 - $this->createItemList(); - - $this->tmpl->addVar("_widget", "serial_list", implode($this->serialArray, ','));// 表示項目のシリアル番号を設定 - - // ページ定義IDとページ定義のレコードシリアル番号を更新 - $this->endPageDefParam($defSerial, $defConfigId, $this->paramObj); - } - /** - * 定義一覧作成 - * - * @return なし - */ - function createItemList() - { - for ($i = 0; $i < count($this->paramObj); $i++){ - $id = $this->paramObj[$i]->id;// 定義ID - $targetObj = $this->paramObj[$i]->object; - $name = $targetObj->name;// 定義名 - $emailReceiver = $targetObj->emailReceiver; // 受信メールアドレス - - // 使用数 - $defCount = 0; - if (!empty($id)){ - $defCount = $this->sysDb->getPageDefCount($this->gEnv->getCurrentWidgetId(), $id); - } - $operationDisagled = ''; - if ($defCount > 0) $operationDisagled = 'disabled'; - - $row = array( - 'index' => $i, - 'id' => $id, - 'ope_disabled' => $operationDisagled, // 選択可能かどうか - 'name' => $this->convertToDispString($name), // 名前 - 'email_receiver' => $this->convertToDispString($emailReceiver), // 受信メールアドレス - 'def_count' => $defCount // 使用数 - ); - $this->tmpl->addVars('itemlist', $row); - $this->tmpl->parseTemplate('itemlist', 'a'); - - // シリアル番号を保存 - $this->serialArray[] = $id; - } - } - /** - * タイプ選択メニュー作成 - * - * @return なし - */ - function createTypeMenu1() - { - for ($i = 0; $i < count($this->typeArray); $i++){ - $value = $this->typeArray[$i]['value']; - $name = $this->typeArray[$i]['name']; - - $row = array( - 'value' => $value, // タイプ値 - 'name' => $this->convertToDispString($name), // タイプ名 - 'selected' => $selected // 選択中かどうか - ); - $this->tmpl->addVars('type_list1', $row); - $this->tmpl->parseTemplate('type_list1', 'a'); - } - } -} -?> diff --git a/widgets/m/contactus_custom/include/container/m_contactus_customWidgetContainer.php b/widgets/m/contactus_custom/include/container/m_contactus_customWidgetContainer.php deleted file mode 100644 index 660b41e6..00000000 --- a/widgets/m/contactus_custom/include/container/m_contactus_customWidgetContainer.php +++ /dev/null @@ -1,347 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_contactus_customWidgetContainer.php 2363 2009-09-26 14:45:44Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/contactus_customDb.php'); - -class m_contactus_customWidgetContainer extends BaseMobileWidgetContainer -{ - private $db; // DB接続オブジェクト - private $fieldInfoArray = array(); // お問い合わせ項目情報 - private $valueArray; // 項目入力値 - const DEFAULT_CONFIG_ID = 0; - const CONTACTUS_FORM = 'contact_us'; // お問い合わせフォーム - const DEFAULT_SEND_MESSAGE = 1; // メール送信機能を使用するかどうか(デフォルト使用) - const DEFAULT_TITLE_NAME = 'お問い合わせ'; // デフォルトのタイトル名 - const DEFAULT_STR_REQUIRED = '*必須'; // 「必須」表示用テキスト - const FIELD_HEAD = 'item'; // フィールド名の先頭文字列 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new contactus_customDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - // 定義ID取得 - $configId = $this->gEnv->getCurrentWidgetConfigId(); - if (empty($configId)) $configId = self::DEFAULT_CONFIG_ID; - - // パラメータオブジェクトを取得 - $targetObj = $this->getWidgetParamObjByConfigId($configId); - if (empty($targetObj)) return; // 定義データが取得できないときは終了 - - // デフォルト値設定 - $inputEnabled = true; // 入力の許可状態 - $now = date("Y/m/d H:i:s"); // 現在日時 - $this->langId = $this->gEnv->getCurrentLanguage(); // 表示言語を取得 - $sendMessage = self::DEFAULT_SEND_MESSAGE; // メール送信機能を使用するかどうか - $showTitle = 0; // タイトルを表示するかどうか - $titleName = self::DEFAULT_TITLE_NAME; // タイトル名 - $titleBgColor = ''; // タイトルバックグランドカラー - $explanation = ''; // 説明 - - //$sendMessage = $targetObj->sendMessage; // メール送信機能を使用するかどうか - $emailReceiver = $targetObj->emailReceiver; // メール受信者 - $emailSubject = $targetObj->emailSubject; // メール件名 - $showTitle = $targetObj->showTitle; // タイトルを表示するかどうか - if (!empty($targetObj->titleName)) $titleName = $targetObj->titleName; // タイトル名 - $titleBgColor = $targetObj->titleBgColor; // タイトルバックグランドカラー - $explanation = $targetObj->explanation; // 説明 - $name = $targetObj->name;// 名前 - if (!empty($targetObj->fieldInfo)) $this->fieldInfoArray = $targetObj->fieldInfo; // お問い合わせフィールド情報 - - // 入力値を取得 - $this->valueArray = array(); - $fieldCount = count($this->fieldInfoArray); - for ($i = 0; $i < $fieldCount; $i++){ - $itemName = self::FIELD_HEAD . ($i + 1); - $itemValue = $request->mobileTrimValueOf($itemName); - $this->valueArray[] = $itemValue; - } - $act = $request->trimValueOf('act'); - - if ($act == 'send'){ // お問い合わせメール送信 - $postTicket = $request->trimValueOf('ticket'); // POST確認用 - if (!empty($postTicket) && $postTicket == $request->getSessionValue(M3_SESSION_POST_TICKET)){ // 正常なPOST値のとき - // 入力状況のチェック - for ($i = 0; $i < $fieldCount; $i++){ - $infoObj = $this->fieldInfoArray[$i]; - $title = $infoObj->title;// タイトル名 - $type = $infoObj->type; // 項目タイプ - $required = $infoObj->required; // 必須入力 - if (!empty($required) && empty($this->valueArray[$i])) $this->setUserErrorMsg('「' . $title . '」は必須入力項目です'); - } - - // エラーなしの場合はメール送信 - if ($this->getMsgCount() == 0){ - $this->setGuidanceMsg('送信完了しました'); - - // メール送信設定のときはメールを送信 - if ($sendMessage){ - // メール本文の作成 - $mailBody = ''; - for ($i = 0; $i < $fieldCount; $i++){ - $infoObj = $this->fieldInfoArray[$i]; - $title = $infoObj->title;// タイトル名 - $type = $infoObj->type; // 項目タイプ - - $mailBody .= $title . "\n"; - if (!empty($this->valueArray[$i])){ - if (is_array($this->valueArray[$i])){ // 配列データのとき - for ($j = 0; $j < count($this->valueArray[$i]); $j++){ - $mailBody .= $this->valueArray[$i][$j] . "\n"; - } - } else { - $mailBody .= $this->valueArray[$i] . "\n"; - } - } - $mailBody .= "\n"; - } - - // 送信元、送信先 - $fromAddress = $this->gEnv->getSiteEmail(); // 送信元はサイト情報のEメールアドレス - $toAddress = $this->gEnv->getSiteEmail(); // デフォルトのサイト向けEメールアドレス - if (!empty($emailReceiver)) $toAddress = $emailReceiver; // 受信メールアドレスが設定されている場合 - - // メールを送信 - if (empty($toAddress)){ - $this->gOpeLog->writeError(__METHOD__, 'メール送信に失敗しました。基本情報のEメールアドレスが設定されていません。', 1100, 'body=[' . $mailBody . ']'); - } else { - $mailParam = array(); - $mailParam['BODY'] = $mailBody; - $email = ''; // 返信先は空にする(暫定) - $ret = $this->gInstance->getMailManager()->sendFormMail(2/*手動送信*/, $this->gEnv->getCurrentWidgetId(), $toAddress, $fromAddress, $email, $emailSubject, self::CONTACTUS_FORM, $mailParam); - } - } - // 項目を入力不可に設定 - $inputEnabled = false; // 入力の許可状態 - - //$this->tmpl->addVar("_widget", "message", '送信しました');// 送信ボタンラベル - } else { - $this->tmpl->addVar("show_send_button", "send_button_label", '送信する');// 送信ボタンラベル - $this->tmpl->setAttribute('show_send_button', 'visibility', 'visible'); - } - } - } else { - // ハッシュキー作成 - $postTicket = md5(time() . $this->gAccess->getAccessLogSerialNo()); - $request->setSessionValue(M3_SESSION_POST_TICKET, $postTicket); // セッションに保存 - $this->tmpl->addVar("_widget", "ticket", $postTicket); // 画面に書き出し - - // メール送信不可の場合はボタンを使用不可にする - if ($sendMessage){ - $this->tmpl->addVar("show_send_button", "send_button_label", '送信する');// 送信ボタンラベル - } else { - $this->tmpl->addVar("show_send_button", "send_button_label", '送信停止中');// 送信ボタンラベル - //$this->tmpl->addVar("_widget", "send_button_disabled", 'disabled');// 送信ボタン - } - $this->tmpl->setAttribute('show_send_button', 'visibility', 'visible'); - } - - // HTMLサブタイトルを設定 - //$this->gPage->setHeadSubTitle(self::DEFAULT_TITLE_NAME); - $this->gPage->setHeadSubTitle($this->gEnv->getCurrentWidgetHeadTitle()); // 共通設定画面の「タイトル」値を使用する - - // パラメータ埋め込み - $this->tmpl->addVar('_widget', 'url', $this->gEnv->createCurrentPageUrlForMobile()); // Post用URL - $this->tmpl->addVar('_widget', 'act', 'send'); - - // タイトルの表示 - if ($showTitle){ - $titleClassStr = 'align="center" style="text-align:center;'; - if (!empty($titleBgColor)) $titleClassStr .= 'background-color:' . $titleBgColor . ';';// タイトルバックグランドカラー - $titleClassStr .= '"'; - $this->tmpl->addVar("show_title", "class", $titleClassStr); - $this->tmpl->setAttribute('show_title', 'visibility', 'visible'); - $this->tmpl->addVar("show_title", "title_name", $this->convertToDispString($titleName));// タイトル名 - } - // 説明の表示 - if (!empty($explanation)){ - $this->tmpl->setAttribute('show_explanation', 'visibility', 'visible'); - $this->tmpl->addVar("show_explanation", "explanation", $explanation);// 説明 - } - // お問い合わせフィールド作成 - $fieldCount = $this->createFieldList($inputEnabled); - if ($fieldCount == 0) $this->tmpl->setAttribute('field_list', 'visibility', 'hidden'); - - $this->tmpl->addVar("_widget", "field_count", $fieldCount);// お問い合わせ項目数 - } - /** - * お問い合わせフィールド作成 - * - * @param bool $enabled 項目の入力許可状態 - * @return int フィールド項目数 - */ - function createFieldList($enabled) - { - $fieldCount = count($this->fieldInfoArray); - for ($i = 0; $i < $fieldCount; $i++){ - $infoObj = $this->fieldInfoArray[$i]; - $title = $infoObj->title;// タイトル名 - $desc = $infoObj->desc; // 説明 - $type = $infoObj->type; // 項目タイプ - $def = $infoObj->def; // 項目定義 - $required = ''; - if (!empty($infoObj->required)) $required = ' ' . self::DEFAULT_STR_REQUIRED;// 必須表示 - - // 入力フィールドの作成 - $fieldName = self::FIELD_HEAD . ($i + 1); - $inputValue = $this->valueArray[$i]; // 入力値 - $inputTag = ''; - switch ($type){ - case 'text': // テキストボックス - $param = array(); - $paramStr = ''; - $size = 0; - $defArray = explode(';', $def); - for ($j = 0; $j < count($defArray); $j++){ - list($key, $value) = explode('=', $defArray[$j]); - $key = trim($key); - $value = trim($value); - if (strcasecmp($key, 'size') == 0){ - $size = intval($value); - break; - } - } - if ($size > 0) $param[] = 'size="' . $size . '"'; - if (!empty($inputValue)){ - $param[] = 'value="' . $inputValue . '"'; - } - if (!$enabled) $param[] = 'disabled'; // 使用不可 - if (count($param) > 0) $paramStr = ' ' . implode($param, ' '); - $inputTag = '
' . M3_NL; - break; - case 'textarea': // テキストエリア - $param = array(); - $paramStr = ''; - $row = 0; - $col = 0; - $defArray = explode(';', $def); - for ($j = 0; $j < count($defArray); $j++){ - list($key, $value) = explode('=', $defArray[$j]); - $key = trim($key); - $value = trim($value); - if (strcasecmp($key, 'rows') == 0){ - $row = intval($value); - } else if (strcasecmp($key, 'cols') == 0){ - $col = intval($value); - } - } - if ($row > 0) $param[] = 'rows="' . $row . '"'; - if ($col > 0) $param[] = 'cols="' . $col . '"'; - if (!$enabled) $param[] = 'disabled'; // 使用不可 - if (count($param) > 0) $paramStr = ' ' . implode($param, ' '); - $inputTag = '
' . M3_NL; - break; - case 'select': // セレクトメニュー - $param = array(); - $paramStr = ''; - if (!$enabled) $param[] = 'disabled'; // 使用不可 - if (count($param) > 0) $paramStr = ' ' . implode($param, ' '); - $inputTag = '
' . M3_NL; - break; - case 'checkbox': // チェックボックス - case 'radio': // ラジオボタン - $fieldName .= '[]'; - $defArray = explode(';', $def); - for ($j = 0; $j < count($defArray); $j++){ - $param = array(); - $paramStr = ''; - list($key, $value) = explode('=', $defArray[$j]); - $key = trim($key); - $value = trim($value); - if (empty($value)) $value = $key; - if (!empty($key) && !empty($value)){ - for ($k = 0; $k < count($inputValue); $k++){ - if (!empty($inputValue[$k]) && strcmp($inputValue[$k], $value) == 0) $param[] = 'checked'; - } - if (!$enabled) $param[] = 'disabled'; // 使用不可 - if (count($param) > 0) $paramStr = ' ' . implode($param, ' '); - $inputTag .= '' . $this->convertToDispString($key) . '
' . M3_NL; - } - } - break; - } - - // 改行の設定 - $titleBr = ''; - if (!empty($title) || !empty($required)) $titleBr = '
'; - $descBr = ''; - if (!empty($desc)) $descBr = '
'; - $inputBr = ''; - if (!empty($inputTag)) $inputBr = '
'; - - $row = array( - 'title' => $this->convertToDispString($title), // タイトル名 - 'desc' => $this->convertToDispString($desc), // 説明 - 'title_br' => $titleBr, // タイトル名改行 - 'desc_br' => $descBr, // 説明改行 - 'input_br' => $inputBr, // 入力フィールド改行 - 'required' => $required, // 必須表示 - 'input' => $inputTag // 入力フィールド - ); - $this->tmpl->addVars('field_list', $row); - $this->tmpl->parseTemplate('field_list', 'a'); - } - return $fieldCount; - } -} -?> diff --git a/widgets/m/contactus_custom/include/db/contactus_customDb.php b/widgets/m/contactus_custom/include/db/contactus_customDb.php deleted file mode 100644 index 9f71a480..00000000 --- a/widgets/m/contactus_custom/include/db/contactus_customDb.php +++ /dev/null @@ -1,22 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: contactus_customDb.php 2116 2009-07-14 09:50:17Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getDbPath() . '/baseDb.php'); - -class contactus_customDb extends BaseDb -{ - -} -?> diff --git a/widgets/m/contactus_custom/include/help/index.php b/widgets/m/contactus_custom/include/help/index.php deleted file mode 100644 index c133fc55..00000000 --- a/widgets/m/contactus_custom/include/help/index.php +++ /dev/null @@ -1,53 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 2116 2009-07-14 09:50:17Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -global $HELP; - -// ########## 設定項目一覧 ########## -$HELP['contactus_list']['title'] = '設定一覧'; -$HELP['contactus_list']['body'] = '登録されている設定の一覧です。'; -$HELP['contactus_detail']['title'] = '設定'; -$HELP['contactus_detail']['body'] = 'お問い合わせについての設定を行います。'; -$HELP['contactus_preview']['title'] = 'プレビュー'; -$HELP['contactus_preview']['body'] = 'プレビューを表示します。項目の行をマウスクリックして選択します。'; -$HELP['contactus_check']['title'] = '選択用チェックボックス'; -$HELP['contactus_check']['body'] = '削除を行う項目を選択します。'; -$HELP['contactus_name']['title'] = '名前'; -$HELP['contactus_name']['body'] = '設定名です。'; -$HELP['contactus_name_input']['title'] = '名前'; -$HELP['contactus_name_input']['body'] = '設定名です。新規に登録するか、登録済みの設定を選択します。'; -$HELP['contactus_id']['title'] = '設定ID'; -$HELP['contactus_id']['body'] = '自動的に振られる設定IDです。'; -$HELP['contactus_title']['title'] = 'トップタイトル'; -$HELP['contactus_title']['body'] = '先頭の位置に表示するタイトルを設定します。'; -$HELP['contactus_explanation']['title'] = '説明'; -$HELP['contactus_explanation']['body'] = 'トップタイトルの下に位置する説明を設定します。'; -$HELP['contactus_field']['title'] = 'お問い合わせ項目'; -$HELP['contactus_field']['body'] = 'お問い合わせ項目を定義します。「定義」の記述方法は以下の通りです。(m,nは数値、str,valは文字列を示します。)
●テキストボックス
「size=m」でフィールドサイズを設定します。
●テキストエリア
「rows=m;cols=n」で行、列数を設定します。
●セレクトメニュー,チェックボックス,ラジオボタン
「str1;str2;str3;...」
表示値、送信値が異なる場合は「str1=val1;str2=val2;str3=val3;...」'; -$HELP['contactus_email']['title'] = 'メール送信'; -$HELP['contactus_email']['body'] = 'お問い合わせメールの件名と送信先メールアドレスを設定します。メールアドレスが空の場合は基本情報のメールアドレスへ送信されます。'; -$HELP['contactus_ref']['title'] = '使用'; -$HELP['contactus_ref']['body'] = '設定を使用しているウィジェット数を示します。使用が0の設定のみ削除可能です。'; -$HELP['contactus_list_btn']['title'] = '一覧ボタン'; -$HELP['contactus_list_btn']['body'] = '設定一覧を表示します。'; -$HELP['contactus_del_btn']['title'] = '削除ボタン'; -$HELP['contactus_del_btn']['body'] = '選択されている設定を削除します。
項目を選択するには、一覧の左端のチェックボックスにチェックを入れます。'; -$HELP['contactus_ret_btn']['title'] = '戻るボタン'; -$HELP['contactus_ret_btn']['body'] = '設定詳細へ戻ります。'; -?> diff --git a/widgets/m/contactus_custom/include/template/admin.tmpl.html b/widgets/m/contactus_custom/include/template/admin.tmpl.html deleted file mode 100644 index 5469da27..00000000 --- a/widgets/m/contactus_custom/include/template/admin.tmpl.html +++ /dev/null @@ -1,205 +0,0 @@ -/** - * 表示データ作成用テンプレート(patTemplate) - * - * LICENSE: This source file is licensed under the terms of the GNU General Public License. - * - * @package Magic3 Framework - * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2016 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ - - - - - -
-
- -
- - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
名前 - - - - - ID{ID}
トップタイトル表示    ã‚¿ã‚¤ãƒˆãƒ«åï¼š    ã‚¿ã‚¤ãƒˆãƒ«èƒŒæ™¯è‰²ï¼š  
説明
お問い合わせ
項目
- - - - - - - - - - - - - - -
移動Noタイトル名説明操作
タイプ定義

-   å¿…é ˆ -

-
削除
-
-
メール送信件名:     - メールアドレス:
- - - - - - -
-
-
-
-
diff --git a/widgets/m/contactus_custom/include/template/admin_list.tmpl.html b/widgets/m/contactus_custom/include/template/admin_list.tmpl.html deleted file mode 100644 index 0e197442..00000000 --- a/widgets/m/contactus_custom/include/template/admin_list.tmpl.html +++ /dev/null @@ -1,93 +0,0 @@ - - -
-
- -
- - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - -
選択ID名前メールアドレス使用
{ID}{NAME}{EMAIL_RECEIVER}{DEF_COUNT}
- -
- -
-
-
- -
-
-
diff --git a/widgets/m/contactus_custom/include/template/index.tmpl.html b/widgets/m/contactus_custom/include/template/index.tmpl.html deleted file mode 100644 index 7be99e2f..00000000 --- a/widgets/m/contactus_custom/include/template/index.tmpl.html +++ /dev/null @@ -1,15 +0,0 @@ - -
- - - -
{TITLE_NAME}
- -
{EXPLANATION}
- -
{TITLE}{REQUIRED}{TITLE_BR}{DESC}{DESC_BR}{INPUT}{INPUT_BR}
-
-
{MESSAGE}
-
-
-
diff --git a/widgets/m/contactus_custom/index.php b/widgets/m/contactus_custom/index.php deleted file mode 100644 index b95e2eb0..00000000 --- a/widgets/m/contactus_custom/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 2116 2009-07-14 09:50:17Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/content/admin/index.php b/widgets/m/content/admin/index.php deleted file mode 100644 index 029bd59b..00000000 --- a/widgets/m/content/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 474 2008-04-04 11:34:11Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/content/images/icon32.png b/widgets/m/content/images/icon32.png deleted file mode 100644 index 4d028c32ee517d4135703a265c566bec2ff72933..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2572 zcmV+n3iI`eP)mQCv^Y-34uvOK~#90t(SRlRrM9eKfinL+mpPP?Ik238;}K} zG$@NADFu-#Zp9Uyb_PZ})jFeg=v3`g+d8(Lf-|)vEz@?Swqr}dDpfXx%AgFJvJ(h_ z1YSZy^74|reYyAD`|BT1FyK_N(=&7bx%2y-^Ev1DJ--DhCI8P4C6SExLm2kWmXckEyF z^!>pd>sHCpzBBTo9o)59PJ&;3S{3IMXr89A=>9quR=Oy>=u3P$;A*n;0n>oH8;jKk zo0}(>E_vWCZoYLfMH8k12Ek){Ilg%#@pO{*_8n~5crxVm6L357%1XG|Ltj(@n7u44yL6ob6d zI>t3kqHanHn#YH&a6Dx-ld-w%AQaa8^4YCRpL^xjt6lVTgzK_JvIZ~kkGQlB~dTo^qe22rFmvfE8#xge10i|;W$Q0 zav?O#l5yiW^3JQAzaffyd@09<&!Sr0Xa}Phl?IQLZDD+{l#z-dFf9g$Qp%M8m;De> z)6~>bgazUDo%rh-a60V(bZvVbSM^jL{lj){d+LYW`NVS6(mb|zy@uzSeD-fTOn*2^ z@W>#8Mw~@WKW2h$9;r|}s$nBv+HtDd!w3{U(>Va z@Y6F&sxE2Zu@)_VPK|aziFMVz_v#B=KYtM}r-Fa{1W*LQfgUV}8;1ZgQNlxMlm;&a z884N^8p(n*&SF6vyNW*zV;O#BuwP)KXYq3*5*T?PGj3Q@FLvxFZz`-QLn@#ri zT;Rs9SMbndi>aGA1&G0gUNFgL z2Iy&!Y0#sP8GuL%B2h>OaW&g%y|C&P&GdOSU;_f9Fr3NFGqbtF0Rd@)L~n|B z{?QEs;K^z@EbFqJFjnBk0#zXs2WdcG6ud5QX2Bi>VFOz+7-2~ELofnClV~EzNFYs7 zo&{2aAsg6qa67E63GGnQhOqvL(fV4x(1Vw|S$SsRE1y&M-9g-0kRKae?=TV3!vfO=ZIU=2bxQ?kp zaBCNbj;UB(eJog7jcU&W1WJJu!_dhST&4kCgEUq)ckG2DVCbMrNa>JOAnAlr0nuSd zTVNJ~rhy{K3`Ut$t}wCM4kH3ZvvJ_+!{jlP}-DFJS2(6Jh(hn zkSar10&EV#Nd>!2F~$O<6;(+oY8}!jM+$dNP#GPvj$CU-Msxc_#sN_q!b*UUpehKL z6G}X&LWcywxt^t93!Oj23p1gjP@ zF=Ql-C`f<`2n#H7OQWcuYLJa%GYo7_PtKKHg-ihw55k?HaZWXu2ACl7ED-SK+SBap zN;1E-?C2!`DJ7~9OHTwgJ#){Ts$1?|Fo`Ksst{QN^bnXPSR*+tXimr`!6rd*;&m&y z-9@04fZ{+ZP9!QM90+$N7a^14-@AjXTHD30!{Pm{m5yhAw)y;tu@%6SatE+O2yxx& zjb|R4e_hG#ced4+&6`<4Ntp`_71APC1*<&Q2 zJG*#y-#}#d(db)Y_^Zstxn!Ta6G|x$0FMYEd~fUy-Pcy{e(3&L6>T$S)hX9D`f>R3 za@`R#AtNDUU}myl8i-;a*fM;$Bf#42-RwLt&=D9i{+WPPQpyWg#)7MSm diff --git a/widgets/m/content/images/icon64.png b/widgets/m/content/images/icon64.png deleted file mode 100644 index 4e158f9c9b672451aa5fcbe832e157d03680e2dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 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 e4>`YI&%XnRnQ1(7VvQOA0000 - * @copyright Copyright 2006-2011 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_contentWidgetContainer.php 4249 2011-08-12 03:43:57Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/contentDb.php'); -require_once($gEnvManager->getCommonPath() . '/valueCheck.php'); - -class admin_m_contentWidgetContainer extends BaseAdminWidgetContainer -{ - private $db; // DB接続オブジェクト - private $serialNo; // 選択中の項目のシリアル番号 - private $serialArray = array(); // 表示されているコンテンツシリアル番号 - const MAIN_MENU_ID = 'mobile_menu'; // メニューID - const INC_INDEX = 1; // メニュー項目表示順の増加分 - const ADMIN_WIDGET_ID = 'admin_main'; // 管理ウィジェットのウィジェットID - const CONTENT_TYPE = 'mobile'; // コンテンツタイプ - const VIEW_CONTENT_TYPE = 'mc'; // 参照数カウント用 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new contentDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == 'detail'){ // 詳細画面 - return 'admin_main_detail.tmpl.html'; - } else { // 一覧画面 - return 'admin_main.tmpl.html'; - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == 'detail'){ // 詳細画面 - return $this->createDetail($request); - } else { // 一覧画面 - return $this->createList($request); - } - } - /** - * コンテンツ一覧画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param なし - */ - function createList($request) - { - // ユーザ情報、表示言語 - $userId = $this->gEnv->getCurrentUserId(); - $langId = $this->gEnv->getDefaultLanguage(); - - $act = $request->trimValueOf('act'); - if ($act == 'addtomenu'){ // メニューに項目を追加 - $contentId = $request->trimValueOf('contentid'); // コンテンツID - - // このウィジェットがマップされているページサブIDを取得 - $subPageId = $this->gPage->getPageSubIdByWidget($this->gEnv->getDefaultMobilePageId(), $this->gEnv->getCurrentWidgetId()); - $sub = ''; - if (!empty($subPageId)) $sub = 'sub=' . $subPageId . '&'; - - // URLの作成 - $url = M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END . '/m/index.php?' . $sub . 'contentid=' . $contentId; - - // コンテンツ名を取得 - $menutItemName = ''; - $ret = $this->db->getContentByContentId(self::CONTENT_TYPE, $contentId, $langId, $row); - if ($ret){ - // 取得値を設定 - $menutItemName = $row['cn_name']; // 名前 - } - - // メニュー項目追加 - $ret = $this->db->addMenuItem(self::MAIN_MENU_ID, $langId, $menutItemName, $url, self::INC_INDEX, $userId); - if ($ret){ - $this->setGuidanceMsg('メインメニューに項目を追加しました'); - } else { - $this->setAppErrorMsg('メインメニューの項目追加に失敗しました'); - } - } else if ($act == 'delete'){ // 項目削除の場合 - $listedItem = explode(',', $request->trimValueOf('seriallist')); - $delItems = array(); - for ($i = 0; $i < count($listedItem); $i++){ - // 項目がチェックされているかを取得 - $itemName = 'item' . $i . '_selected'; - $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0; - - if ($itemValue){ // チェック項目 - $delItems[] = $listedItem[$i]; - } - } - if (count($delItems) > 0){ - // 表示属性を削除 - for ($i = 0; $i < count($delItems); $i++){ - // コンテンツIDを取得 - $contentId = 0; - $ret = $this->db->getContentBySerial($delItems[$i], $row); - if ($ret) $contentId = $row['cn_id']; // コンテンツID - - // 表示属性を削除 - if ($ret) $ret = $this->updateWidgetParamObjByConfigId($contentId, null); - } - - $ret = $this->db->delContentItem($delItems, $userId); - if ($ret){ // データ削除成功のとき - $this->setGuidanceMsg('データを削除しました'); - } else { - $this->setAppErrorMsg('データ削除に失敗しました'); - } - } - $this->gPage->updateParentWindow();// 親ウィンドウを更新 - } - // コンテンツ項目リストをデフォルト言語で取得 - $this->db->getAllContentItems(self::CONTENT_TYPE, array($this, 'itemListLoop'), $langId); - if (empty($this->serialArray)) $this->tmpl->setAttribute('itemlist', 'visibility', 'hidden');// コンテンツ項目がないときは、一覧を表示しない - $this->tmpl->addVar("_widget", "serial_list", implode($this->serialArray, ','));// 表示項目のシリアル番号を設定 - } - /** - * コンテンツ詳細画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param なし - */ - function createDetail($request) - { - // ユーザ情報、表示言語 - $userId = $this->gEnv->getCurrentUserId(); - $langId = $this->gEnv->getDefaultLanguage(); - - // ウィンドウ表示状態 - $openby = $request->trimValueOf(M3_REQUEST_PARAM_OPEN_BY); - - $act = $request->trimValueOf('act'); - $this->serialNo = $request->trimValueOf('serial'); // 選択項目のシリアル番号 - $name = $request->trimValueOf('item_name'); - $showTitle = ($request->trimValueOf('show_title') == 'on') ? 1 : 0; // タイトルの表示 - $titleBgColor = $request->trimValueOf('item_title_bgcolor'); // タイトルバックグランドカラー - $html = $request->valueOf('item_html'); // HTMLタグを可能とする - $key = $request->valueOf('item_key'); // 外部参照用キー - $visible = ($request->trimValueOf('item_visible') == 'on') ? 1 : 0; // チェックボックス - $default = ($request->trimValueOf('item_default') == 'on') ? 1 : 0; // チェックボックス - - $reloadData = false; // データの再読み込み - if ($act == 'add'){ // 項目追加の場合 - // 入力チェック - $this->checkInput($name, '名前'); - - // エラーなしの場合は、データを登録 - if ($this->getMsgCount() == 0){ - $contentId = 0;// コンテンツID初期化 - $key = ''; - - // 絵文字画像タグをMagic3内部タグに変換 - $this->gInstance->getTextConvManager()->convToEmojiTag($html, $html); - - $ret = $this->db->updateContentItem(self::CONTENT_TYPE, $contentId, $langId, $name, $html, 1/*コンテンツ表示*/, $default, $key, $userId, $newContentId, $newSerial); - - // 表示属性はコンテンツIDを定義IDにして、ウィジェットパラメータとして保存 - if ($ret){ - $paramObj = new stdClass; - $paramObj->showTitle = $showTitle; // タイトルの表示 - $paramObj->titleBgColor = $titleBgColor; // タイトルバックグランドカラー - $ret = $this->updateWidgetParamObjByConfigId($newContentId, $paramObj); - } - if ($ret){ - $this->setGuidanceMsg('データを追加しました'); - // シリアル番号更新 - $this->serialNo = $newSerial; - $reloadData = true; // データの再読み込み - } else { - $this->setAppErrorMsg('データ追加に失敗しました'); - } - $this->gPage->updateParentWindow();// 親ウィンドウを更新 - } - } else if ($act == 'update'){ // 項目更新の場合 - // 入力チェック - $this->checkInput($name, '名前'); - - // エラーなしの場合は、データを更新 - if ($this->getMsgCount() == 0){ - // 絵文字画像タグをMagic3内部タグに変換 - $this->gInstance->getTextConvManager()->convToEmojiTag($html, $html); - - $contentId = $request->trimValueOf('contentid'); // コンテンツID - $ret = $this->db->updateContentItem(self::CONTENT_TYPE, $contentId, $langId, $name, $html, 1/*コンテンツ表示*/, $default, $key, $userId, $newContentId, $newSerial); - - // 表示属性はコンテンツIDを定義IDにして、ウィジェットパラメータとして保存 - if ($ret){ - $paramObj = $this->getWidgetParamObjByConfigId($contentId); - if (empty($paramObj)) $paramObj = new stdClass; - $paramObj->showTitle = $showTitle; // タイトルの表示 - $paramObj->titleBgColor = $titleBgColor; // タイトルバックグランドカラー - $ret = $this->updateWidgetParamObjByConfigId($contentId, $paramObj); - } - if ($ret){ - $this->setGuidanceMsg('データを更新しました'); - // シリアル番号更新 - $this->serialNo = $newSerial; - $reloadData = true; // データの再読み込み - } else { - $this->setAppErrorMsg('データ更新に失敗しました'); - } - $this->gPage->updateParentWindow();// 親ウィンドウを更新 - } - } else if ($act == 'delete'){ // 項目削除の場合 - if (empty($this->serialNo)){ - $this->setUserErrorMsg('削除項目が選択されていません'); - } - // エラーなしの場合は、データを削除 - if ($this->getMsgCount() == 0){ - // コンテンツIDを取得 - $contentId = 0; - $ret = $this->db->getContentBySerial($this->serialNo, $row); - if ($ret) $contentId = $row['cn_id']; // コンテンツID - - $ret = $this->db->delContentItem(array($this->serialNo), $userId); - - // 表示属性を削除 - if ($ret) $ret = $this->updateWidgetParamObjByConfigId($contentId, null); - - if ($ret){ // データ削除成功のとき - $this->setGuidanceMsg('データを削除しました'); - $reloadData = true; // データの再読み込み - } else { - $this->setAppErrorMsg('データ削除に失敗しました'); - } - $this->gPage->updateParentWindow();// 親ウィンドウを更新 - } - } else { - // コンテンツIDが設定されているとき(他ウィジェットからの表示)は、データを取得 - $contentId = $request->trimValueOf('contentid'); // コンテンツID - if (empty($contentId)){ - if (empty($this->serialNo)){ // 新規項目追加のとき - $visible = 1; // 初期状態は表示 - // デフォルトの設定項目がないときはデフォルトに設定 - $contentCount = $this->db->getDefaultContentCount(self::CONTENT_TYPE, $langId); - if ($contentCount == 0) $default = 1; - } else { - $reloadData = true; // データの再読み込み - } - } else { - // コンテンツを取得 - $ret = $this->db->getContentByContentId(self::CONTENT_TYPE, $contentId, $langId, $row); - if ($ret){ - $this->serialNo = $row['cn_serial']; // コンテンツシリアル番号 - $reloadData = true; // データの再読み込み - } else { - $this->serialNo = 0; - } - } - } - if ($reloadData){ // データの再読み込み - $ret = $this->db->getContentBySerial($this->serialNo, $row); - if ($ret){ - $contentId = $row['cn_id']; // コンテンツID - $name = $row['cn_name']; // コンテンツ名前 - $key = $row['cn_key']; // 外部参照用キー - $update_user = $this->convertToDispString($row['lu_name']);// 更新者 - $update_dt = $this->convertToDispDateTime($row['cn_create_dt']); - - // 項目表示、デフォルト値チェックボックス - $visible = $row['cn_visible']; - $default = $row['cn_default']; - - // コンテンツの変換 - $html = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->getUrl($this->gEnv->getRootUrl()), $row['cn_html']); // Magic3ルートURLの変換 - $this->gInstance->getTextConvManager()->convFromEmojiTag($html, $html);// Magic3内部タグから絵文字画像タグに変換 - - // 表示属性を取得 - $paramObj = $this->getWidgetParamObjByConfigId($contentId); - if (!empty($paramObj)){ - $showTitle = $paramObj->showTitle; // タイトルの表示 - $titleBgColor = $paramObj->titleBgColor; // タイトルバックグランドカラー - } - } else { - $this->serialNo = 0; - } - } - - // ### 入力値を再設定 ### - if (!empty($showTitle)) $this->tmpl->addVar("_widget", "show_title", 'checked'); // タイトルの表示 - $this->tmpl->addVar("_widget", "title_bgcolor", $titleBgColor); // タイトルバックグランドカラー - $this->tmpl->addVar("_widget", "sel_item_name", $name); // 名前 - $this->tmpl->addVar("_widget", "sel_item_html", $html); // HTML - $this->tmpl->addVar("_widget", "sel_item_key", $key); // 外部参照用キー - $this->tmpl->addVar("_widget", "update_user", $update_user); // 更新者 - $this->tmpl->addVar("_widget", "update_dt", $update_dt); // 更新日時 - - // 項目表示、項目利用可否チェックボックス - $visibleStr = ''; - if ($visible){ - $visibleStr = 'checked'; - } - $defaultStr = ''; - if ($default){ - $defaultStr = 'checked'; - } - $this->tmpl->addVar("_widget", "sel_item_visible", $visibleStr); - $this->tmpl->addVar("_widget", "sel_item_default", $defaultStr); - - // 選択中のシリアル番号を設定 - $this->tmpl->addVar("_widget", "serial", $this->serialNo); - - // パスの設定 - $this->tmpl->addVar('_widget', 'admin_url', $this->getUrl($this->gEnv->getDefaultAdminUrl()));// 管理者URL - $this->tmpl->addVar('_widget', 'custom_value_task', 'usercustom'); // ユーザ定義値参照用 - $this->tmpl->addVar('_widget', 'admin_widget_id', self::ADMIN_WIDGET_ID);// ユーザ定義値参照用(管理ウィジェットのウィジェットID) - - // ボタンの表示制御 - if (empty($this->serialNo)){ // 新規追加項目を選択しているとき - $this->tmpl->addVar("_widget", "sel_item_id", '新規'); // コンテンツID - $this->tmpl->setAttribute('add_button', 'visibility', 'visible');// 「新規追加」ボタン - } else { - $this->tmpl->addVar("_widget", "sel_item_id", $contentId); // コンテンツID - $this->tmpl->setAttribute('del_button', 'visibility', 'visible');// 「削除」ボタン - } - // 「戻る」ボタンの表示 - if ($openby == 'simple') $this->tmpl->setAttribute('cancel_button', 'visibility', 'hidden'); // 詳細画面のみの表示のときは戻るボタンを隠す - } - /** - * 取得したデータをテンプレートに設定する - * - * @param int $index 行番号(0~) - * @param array $fetchedRow フェッチ取得した行 - * @param object $param 未使用 - * @return bool true=処理続行の場合、false=処理終了の場合 - */ - function itemListLoop($index, $fetchedRow, $param) - { - $serial = $this->convertToDispString($fetchedRow['cn_serial']); - - // 表示状態 - $visible = ''; - if ($fetchedRow['cn_visible']){ - $visible = 'checked'; - } - // デフォルト時の項目かどうか - $default = ''; - if ($fetchedRow['cn_default']){ - $default = 'checked'; - } - // 総参照数 - $totalViewCount = $this->gInstance->getAnalyzeManager()->getTotalContentViewCount(self::VIEW_CONTENT_TYPE, $serial); - - $row = array( - 'index' => $index, // 項目番号 - 'serial' => $serial, // シリアル番号 - 'id' => $this->convertToDispString($fetchedRow['cn_id']), // ID - 'name' => $this->convertToDispString($fetchedRow['cn_name']), // 名前 - 'lang' => $lang, // 対応言語 - 'view_count' => $totalViewCount, // 総参照数 - 'update_user' => $this->convertToDispString($fetchedRow['lu_name']), // 更新者 - 'update_dt' => $this->convertToDispDateTime($fetchedRow['cn_create_dt']), // 更新日時 - 'visible' => $visible, // メニュー項目表示制御 - 'default' => $default // デフォルト項目 - ); - $this->tmpl->addVars('itemlist', $row); - $this->tmpl->parseTemplate('itemlist', 'a'); - - // 表示中のコンテンツIDを保存 - $this->serialArray[] = $fetchedRow['cn_serial']; - return true; - } -} -?> diff --git a/widgets/m/content/include/container/m_contentWidgetContainer.php b/widgets/m/content/include/container/m_contentWidgetContainer.php deleted file mode 100644 index 299d4dd6..00000000 --- a/widgets/m/content/include/container/m_contentWidgetContainer.php +++ /dev/null @@ -1,231 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_contentWidgetContainer.php 3749 2010-10-27 12:09:56Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/contentDb.php'); -require_once($gEnvManager->getCommonPath() . '/valueCheck.php'); - -class m_contentWidgetContainer extends BaseWidgetContainer -{ - private $db; // DB接続オブジェクト - private $_contentCreated; // コンテンツが取得できたかどうか - private $currentDay; // 現在日 - private $currentHour; // 現在時間 - private $headTitle; // HTMLヘッダタイトル - const CONTENT_TYPE = 'mobile'; // コンテンツタイプ - const VIEW_CONTENT_TYPE = 'mc'; // 参照数カウント用 - const DEFAULT_SEARCH_LIST_COUNT = 10; // 最大リスト表示数 - const MESSAGE_NO_CONTENT = 'コンテンツが見つかりません'; - const CONTENT_SIZE = 100; // 検索結果コンテンツの文字列最大長 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new contentDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $act = $request->trimValueOf('act'); - if ($act == 'search'){ - return 'search.tmpl.html'; - } else { - return 'main.tmpl.html'; - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - // 現在日時を取得 - $this->currentDay = date("Y/m/d"); // 日 - $this->currentHour = (int)date("H"); // 時間 - $this->currentPageUrl = $this->gEnv->createCurrentPageUrl();// 現在のページURL - - // ログインユーザでないときは、ユーザ制限のない項目だけ表示 - $all = false; - if ($this->gEnv->isCurrentUserLogined()) $all = true; - - $act = $request->trimValueOf('act'); - $keyword = $request->mobileTrimValueOf('keyword'); - $contentid = $request->trimValueOf('contentid'); - - if ($act == 'search'){ // 検索 - $itemCount = self::DEFAULT_SEARCH_LIST_COUNT; // 取得数 - - // キーワード検索のとき - if (empty($keyword)){ - $msg = '検索キーワードが入力されていません'; - $this->headTitle = 'コンテンツ検索'; - } else { - $this->db->searchContentByKeyword(self::CONTENT_TYPE, $itemCount, 1, $keyword, $this->gEnv->getCurrentLanguage(), $all, array($this, 'searchItemsLoop')); - $this->headTitle = 'コンテンツ検索[' . $keyword . ']'; - if (!$this->isExistsViewData) $msg = self::MESSAGE_NO_CONTENT; - } - $this->tmpl->addVar("_widget", "keyword", $keyword); - if (!empty($msg)){ - $this->tmpl->setAttribute('message', 'visibility', 'visible');// メッセージ表示 - $this->tmpl->addVar("message", "msg", $msg); - } - } else if (empty($contentid)){ // コンテンツIDがないときはデフォルトデータを取得 - $this->db->getContentItems(self::CONTENT_TYPE, array($this, 'itemsLoop'), null, $this->gEnv->getCurrentLanguage()); - if (!$this->_contentCreated){ // コンテンツが取得できなかったときはデフォルト言語で取得 - $this->db->getContentItems(self::CONTENT_TYPE, array($this, 'itemsLoop'), null, $this->gEnv->getDefaultLanguage()); - } - } else { - // データエラーチェック - $contentIdArray = explode(',', $contentid); - if (ValueCheck::isNumeric($contentIdArray)){ // すべて数値であるかチェック - $this->db->getContentItems(self::CONTENT_TYPE, array($this, 'itemsLoop'), $contentIdArray, $this->gEnv->getCurrentLanguage()); - if (!$this->_contentCreated){ // コンテンツが取得できなかったときはデフォルト言語で取得 - $this->db->getContentItems(self::CONTENT_TYPE, array($this, 'itemsLoop'), $contentIdArray, $this->gEnv->getDefaultLanguage()); - } - } else { - $this->setAppErrorMsg('IDにエラー値があります'); - } - } - // HTMLサブタイトルを設定 - if (!empty($this->headTitle)) $this->gPage->setHeadSubTitle($this->headTitle); - } - /** - * 取得したコンテンツ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function itemsLoop($index, $fetchedRow) - { - // ビューカウントを更新 - if (!$this->gEnv->isSystemManageUser()){ // システム運用者以上の場合はカウントしない - $this->gInstance->getAnalyzeManager()->updateContentViewCount(self::VIEW_CONTENT_TYPE, $fetchedRow['cn_serial'], $this->currentDay, $this->currentHour); - } - - // タイトルを設定 - $title = $fetchedRow['cn_name']; - if (empty($this->headTitle)) $this->headTitle = $title; - - // HTMLを出力 - // 出力内容は特にエラーチェックしない - $contentText = $fetchedRow['cn_html']; - $contentText = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->gEnv->getRootUrl(), $contentText);// アプリケーションルートを変換 - - // 登録したキーワードを変換 - $this->gInstance->getTextConvManager()->convByKeyValue($contentText, $contentText, true/*改行コーをbrタグに変換*/); - - // 携帯用HTMLをきれいにする - $contentText = $this->gInstance->getTextConvManager()->cleanMobileTag($contentText); - - // 表示属性を取得 - $showTitle = 0; - $titleBgColor = ''; - $contentId = $fetchedRow['cn_id']; - $paramObj = $this->getWidgetParamObjByConfigId($contentId); - if (!empty($paramObj)){ - $showTitle = $paramObj->showTitle; // タイトルの表示 - $titleBgColor = $paramObj->titleBgColor; // タイトルバックグランドカラー - } - // タイトルの表示 - $titleStr = ''; - if ($showTitle){ - $titleStr = '
' . $this->convertToDispString($title) . '
'; - } - $row = array( - 'title' => $titleStr, - 'content' => $contentText // コンテンツ - ); - $this->tmpl->addVars('contentlist', $row); - $this->tmpl->parseTemplate('contentlist', 'a'); - - // コンテンツが取得できた - $this->_contentCreated = true; - return true; - } - /** - * 取得したコンテンツ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function searchItemsLoop($index, $fetchedRow) - { - // タイトルを設定 - $title = $fetchedRow['cn_name']; - - // 記事へのリンクを生成 - $linkUrl = $this->currentPageUrl . '&contentid=' . $fetchedRow['cn_id']; - $link = '' . $title . ''; - - // テキストに変換 - //$contentText = strip_tags($fetchedRow['cn_html']); - $contentText = $this->gInstance->getTextConvManager()->htmlToText($fetchedRow['cn_html']); - - // アプリケーションルートを変換 - $contentText = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->gEnv->getRootUrl(), $contentText); - - // 登録したキーワードを変換 - $this->gInstance->getTextConvManager()->convByKeyValue($contentText, $contentText); - - // Magic3タグ削除(絵文字タグ削除) - $contentText = $this->gInstance->getTextConvManager()->deleteM3Tag($contentText); - - // 検索結果用にテキストを詰める。改行、タブ、スペース削除。 - $contentText = str_replace(array("\r", "\n", "\t", " "), '', $contentText); - - // 文字列長を修正 - if (function_exists('mb_strimwidth')){ - $contentText = mb_strimwidth($contentText, 0, self::CONTENT_SIZE, '…'); - } else { - $contentText = substr($contentText, 0, self::CONTENT_SIZE) . '...'; - } - - $row = array( - 'title' => $link, // リンク付きタイトル - 'content' => $this->convertToDispString($contentText) // コンテンツ - ); - $this->tmpl->addVars('contentlist', $row); - $this->tmpl->parseTemplate('contentlist', 'a'); - $this->isExistsViewData = true; // 表示データがあるかどうか - return true; - } -} -?> diff --git a/widgets/m/content/include/db/contentDb.php b/widgets/m/content/include/db/contentDb.php deleted file mode 100644 index 76a1f723..00000000 --- a/widgets/m/content/include/db/contentDb.php +++ /dev/null @@ -1,327 +0,0 @@ - - * @copyright Copyright 2006-2008 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: contentDb.php 1340 2008-12-11 09:41:24Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getDbPath() . '/baseDb.php'); - -class contentDb extends BaseDb -{ - /** - * コンテンツ項目を取得 - * - * @param string $contentType コンテンツタイプ - * @param function $callback コールバック関数 - * @param array $contentIdArray コンテンツID - * @param string $lang 言語 - * @return なし - */ - function getContentItems($contentType, $callback, $contentIdArray, $lang) - { - // コンテンツIDの指定がない場合は、デフォルト値を取得 - if ($contentIdArray == null){ - $queryStr = 'SELECT * FROM content '; - $queryStr .= 'WHERE cn_visible = true '; - $queryStr .= 'AND cn_default = true '; - $queryStr .= 'AND cn_deleted = false '; // 削除されていない - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_language_id = ? '; - $queryStr .= 'ORDER BY cn_serial'; - $this->selectLoop($queryStr, array($contentType, $lang), $callback, null); - } else { - $contentId = implode(',', $contentIdArray); - - // CASE文作成 - $caseStr = 'CASE cn_id '; - for ($i = 0; $i < count($contentIdArray); $i++){ - $caseStr .= 'WHEN ' . $contentIdArray[$i] . ' THEN ' . $i . ' '; - } - $caseStr .= 'END AS no'; - - $queryStr = 'SELECT *, ' . $caseStr . ' FROM content '; - $queryStr .= 'WHERE cn_visible = true '; - $queryStr .= 'AND cn_deleted = false '; // 削除されていない - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_id in (' . $contentId . ') '; - $queryStr .= 'AND cn_language_id = ? '; - $queryStr .= 'ORDER BY no'; - $this->selectLoop($queryStr, array($contentType, $lang), $callback, null); - } - } - /** - * コンテンツ項目を検索 - * - * @param string $contentType コンテンツタイプ - * @param int $limit 取得する項目数 - * @param int $page 取得するページ(1~) - * @param string $keyword 検索キーワード - * @param string $langId 言語 - * @param bool $all すべてのデータを取得するか、ユーザ制限のないデータを取得するかを指定 - * @param function $callback コールバック関数 - * @return なし - */ - function searchContentByKeyword($contentType, $limit, $page, $keyword, $langId, $all, $callback) - { - $offset = $limit * ($page -1); - if ($offset < 0) $offset = 0; - - $params = array(); - $queryStr = 'SELECT * FROM content '; - $queryStr .= 'WHERE cn_visible = true '; - $queryStr .= 'AND cn_deleted = false '; // 削除されていない - $queryStr .= 'AND cn_type = ? ';$params[] = $contentType; - $queryStr .= 'AND cn_language_id = ? ';$params[] = $langId; - if (!$all) $queryStr .= 'AND cn_user_limited = false '; // ユーザ制限のないデータ - - // タイトルと記事を検索 - if (!empty($keyword)){ - // 「'"\」文字をエスケープ - $keyword = addslashes($keyword); - $queryStr .= 'AND (cn_name LIKE \'%' . $keyword . '%\' '; - $queryStr .= 'OR cn_html LIKE \'%' . $keyword . '%\' '; - $queryStr .= 'OR cn_description LIKE \'%' . $keyword . '%\') '; - } - $queryStr .= 'ORDER BY cn_create_dt desc limit ' . $limit . ' offset ' . $offset; - $this->selectLoop($queryStr, $params, $callback, null); - } - /** - * コンテンツ項目一覧を取得(管理用) - - * @param string $contentType コンテンツタイプ - * @param function $callback コールバック関数 - * @param string $lang 言語 - * @return なし - */ - function getAllContentItems($contentType, $callback, $lang) - { - $queryStr = 'SELECT * FROM content LEFT JOIN _login_user ON cn_create_user_id = lu_id AND lu_deleted = false '; - $queryStr .= 'WHERE cn_type = ? '; - $queryStr .= 'AND cn_language_id = ? '; - $queryStr .= 'AND cn_deleted = false '; // 削除されていない - $queryStr .= 'ORDER BY cn_id'; - $this->selectLoop($queryStr, array($contentType, $lang), $callback, null); - } - /** - * コンテンツ項目をコンテンツIDで取得 - * - * @param string $contentType コンテンツタイプ - * @param string $contentId コンテンツID - * @param string $langId 言語ID - * @param array $row レコード - * @return bool 取得 = true, 取得なし= false - */ - function getContentByContentId($contentType, $contentId, $langId, &$row) - { - $queryStr = 'SELECT * FROM content '; - $queryStr .= 'WHERE cn_deleted = false '; // 削除されていない - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_id = ? '; - $queryStr .= 'AND cn_language_id = ? '; - $ret = $this->selectRecord($queryStr, array($contentType, $contentId, $langId), $row); - return $ret; - } - /** - * コンテンツ項目の更新 - * - * @param string $contentType コンテンツタイプ - * @param string $contentId コンテンツID(0のとき新規) - * @param string $lang 言語ID - * @param string $name コンテンツ名 - * @param string $html HTML - * @param bool $visible 表示状態 - * @param string $key 外部参照用キー - * @param int $userId 更新者ユーザID - * @param int $newContentId 新規コンテンツID - * @param int $newSerial 新規シリアル番号 - * @return bool true = 成功、false = 失敗 - */ - function updateContentItem($contentType, $contentId, $lang, $name, $html, $visible, $default, $key, $userId, &$newContentId, &$newSerial) - { - $historyIndex = 0; // 履歴番号 - $now = date("Y/m/d H:i:s"); // 現在日時 - - if (empty($contentId)){ // 新規コンテンツ追加のとき - // コンテンツIDを決定する - $queryStr = 'select max(cn_id) as mid from content '; - $queryStr .= 'WHERE cn_type = ? '; - $ret = $this->selectRecord($queryStr, array($contentType), $row); - if ($ret){ - $contId = $row['mid'] + 1; - } else { - $contId = 1; - } - $desc = ''; - } else { - // 前レコードの削除状態チェック - $queryStr = 'SELECT * FROM content '; - $queryStr .= 'WHERE cn_type = ? '; - $queryStr .= 'AND cn_id = ? '; - $queryStr .= 'AND cn_language_id = ? '; - $queryStr .= 'ORDER BY cn_history_index DESC '; - $ret = $this->selectRecord($queryStr, array($contentType, $contentId, $lang), $row); - if ($ret){ - if ($row['cn_deleted']){ // レコードが削除されていれば終了 - return false; - } - } else { - return false; - } - $historyIndex = $row['cn_history_index'] + 1; - $contId = $row['cn_id']; - $desc = $row['cn_description']; - - // 古いレコードを削除 - $queryStr = 'UPDATE content '; - $queryStr .= 'SET cn_deleted = true, '; // 削除 - $queryStr .= 'cn_update_user_id = ?, '; - $queryStr .= 'cn_update_dt = ? '; - $queryStr .= 'WHERE cn_serial = ?'; - $this->execStatement($queryStr, array($userId, $now, $row['cn_serial'])); - } - - // 新規レコード追加 - $queryStr = 'INSERT INTO content '; - $queryStr .= '(cn_type, cn_id, cn_language_id, cn_history_index, cn_name, cn_description, cn_html, cn_visible, cn_default, cn_key, cn_create_user_id, cn_create_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($contentType, $contId, $lang, $historyIndex, $name, $desc, $html, $visible, $default, $key, $userId, $now)); - - // 新規のシリアル番号取得 - $queryStr = 'SELECT max(cn_serial) as ns FROM content '; - $queryStr .= 'WHERE cn_type = ? '; - $ret = $this->selectRecord($queryStr, array($contentType), $row); - if ($ret) $newSerial = $row['ns']; - - $newContentId = $contId; // 新規コンテンツID - return $ret; - } - /** - * コンテンツ項目の削除 - * - * @param array $serial シリアルNo - * @param int $userId ユーザID(データ更新者) - * @return true=成功、false=失敗 - */ - function delContentItem($serial, $userId) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - - // 引数エラーチェック - if (!is_array($serial) || count($serial) <= 0) return true; - - // トランザクション開始 - $this->startTransaction(); - - // 指定のシリアルNoのレコードが削除状態でないかチェック - for ($i = 0; $i < count($serial); $i++){ - $queryStr = 'SELECT * FROM content '; - $queryStr .= 'WHERE cn_deleted = false '; // 未削除 - $queryStr .= 'AND cn_serial = ? '; - $ret = $this->isRecordExists($queryStr, array($serial[$i])); - // 存在しない場合は、既に削除されたとして終了 - if (!$ret){ - $this->endTransaction(); - return false; - } - } - - // レコードを削除 - $queryStr = 'UPDATE content '; - $queryStr .= 'SET cn_deleted = true, '; // 削除 - $queryStr .= 'cn_update_user_id = ?, '; - $queryStr .= 'cn_update_dt = ? '; - $queryStr .= 'WHERE cn_serial in (' . implode($serial, ',') . ') '; - $this->execStatement($queryStr, array($userId, $now)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * コンテンツ項目をシリアル番号で取得 - * - * @param string $serial シリアル番号 - * @param array $row レコード - * @return bool 取得 = true, 取得なし= false - */ - function getContentBySerial($serial, &$row) - { - $queryStr = 'select * from content LEFT JOIN _login_user ON cn_create_user_id = lu_id AND lu_deleted = false '; - $queryStr .= 'WHERE cn_serial = ? '; - $ret = $this->selectRecord($queryStr, array($serial), $row); - return $ret; - } - /** - * デフォルトのコンテンツ項目総数取得 - * - * @param string $contentType コンテンツタイプ - * @param string $lang 言語 - * @return int 総数 - */ - function getDefaultContentCount($contentType, $lang) - { - $queryStr = 'SELECT * FROM content '; - $queryStr .= 'WHERE cn_visible = true '; - $queryStr .= 'AND cn_default = true '; - $queryStr .= 'AND cn_deleted = false '; // 削除されていない - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_language_id = ? '; - return $this->selectRecordCount($queryStr, array($contentType, $lang)); - } - /** - * メニュー項目の追加 - * - * @param string $menuId メニューID - * @param string $lang 言語ID - * @param string $name メニュー名 - * @param string $url URL - * @param int $incIndex 表示順増加分 - * @param int $userId 更新者ユーザID - * @return bool true = 成功、false = 失敗 - */ - function addMenuItem($menuId, $lang, $name, $url, $incIndex, $userId) - { - // トランザクション開始 - $this->startTransaction(); - - // メニュー項目IDを作成 - $queryStr = 'select max(mi_id) as mid from menu_item '; - $ret = $this->selectRecord($queryStr, array(), $row); - if ($ret){ - $menuItemId = $row['mid'] + 1; - } else { - $menuItemId = 1; - } - // インデックス番号を作成 - $queryStr = 'SELECT max(mi_index) as m FROM menu_item '; - $queryStr .= 'WHERE mi_menu_id = ? '; - $queryStr .= 'AND mi_language_id = ? '; - $ret = $this->selectRecord($queryStr, array($menuId, $lang), $row); - if ($ret){ - $index = $row['m'] + $incIndex; - } else { - $index = 1; - } - - $queryStr = 'INSERT INTO menu_item '; - $queryStr .= '(mi_menu_id, mi_id, mi_language_id, mi_name, mi_index, mi_link_type, mi_link_url, mi_visible, mi_enable, mi_update_user_id, mi_update_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, now())'; - $this->execStatement($queryStr, array($menuId, $menuItemId, $lang, $name, $index, 0, $url, true, true, $userId)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } -} -?> diff --git a/widgets/m/content/include/template/admin_main.tmpl.html b/widgets/m/content/include/template/admin_main.tmpl.html deleted file mode 100644 index 60a1ed6c..00000000 --- a/widgets/m/content/include/template/admin_main.tmpl.html +++ /dev/null @@ -1,119 +0,0 @@ - - -
-
- -
- - - - - - - - - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
選択ID名前公開デフォルト更新者更新日時参照数
{ID}{NAME}{UPDATE_USER}{UPDATE_DT}{VIEW_COUNT}
-
-
-
-
diff --git a/widgets/m/content/include/template/admin_main_detail.tmpl.html b/widgets/m/content/include/template/admin_main_detail.tmpl.html deleted file mode 100644 index 639a98f6..00000000 --- a/widgets/m/content/include/template/admin_main_detail.tmpl.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -
-
- -
- - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ID{SEL_ITEM_ID}名前公開デフォルト項目
タイトル表示    ã‚¿ã‚¤ãƒˆãƒ«èƒŒæ™¯è‰²ï¼š  
HTML
- -
更新者{UPDATE_USER}更新日時{UPDATE_DT}
- - - - - - - -
-
-
-
-
diff --git a/widgets/m/content/include/template/main.tmpl.html b/widgets/m/content/include/template/main.tmpl.html deleted file mode 100644 index 8e589605..00000000 --- a/widgets/m/content/include/template/main.tmpl.html +++ /dev/null @@ -1,4 +0,0 @@ - - -{TITLE}{CONTENT}
-
diff --git a/widgets/m/content/include/template/search.tmpl.html b/widgets/m/content/include/template/search.tmpl.html deleted file mode 100644 index 3672495f..00000000 --- a/widgets/m/content/include/template/search.tmpl.html +++ /dev/null @@ -1,10 +0,0 @@ - - -コンテンツ検索結果
-検索語:{KEYWORD}
-{MSG}
- -{TITLE}
-{CONTENT}
-
-
diff --git a/widgets/m/content/index.php b/widgets/m/content/index.php deleted file mode 100644 index 029bd59b..00000000 --- a/widgets/m/content/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 474 2008-04-04 11:34:11Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/content_search_box/images/icon32.png b/widgets/m/content_search_box/images/icon32.png deleted file mode 100644 index 84553c15fd094d37de15f9a9915a4a9909db815f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22676 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%0D*N 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 Q&iJ#ZTu)XW54rch0CoVc%>V!Z diff --git a/widgets/m/content_search_box/include/container/m_content_search_boxWidgetContainer.php b/widgets/m/content_search_box/include/container/m_content_search_boxWidgetContainer.php deleted file mode 100644 index d708e54f..00000000 --- a/widgets/m/content_search_box/include/container/m_content_search_boxWidgetContainer.php +++ /dev/null @@ -1,68 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_content_search_boxWidgetContainer.php 4048 2011-03-27 05:11:31Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); - -class m_content_search_boxWidgetContainer extends BaseWidgetContainer -{ - const TARGET_WIDGET = 'm/content'; // 呼び出しウィジェットID - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - if ($act == 'content_search'){ // コンテンツ検索のとき - // キーワード取得 - $keyword = $request->mobileTrimValueOf('keyword'); - - // ブログメインに検索結果を表示させる - $url = $this->gPage->createWidgetCmdUrl(self::TARGET_WIDGET, $this->gEnv->getCurrentWidgetId(), 'act=search&keyword=' . urlencode($keyword)); - $this->gPage->redirect($url, true/*遷移時のダイアログ表示を抑止*/); - } - // パラメータを埋め込む - $this->tmpl->addVar("_widget", "url", $this->gEnv->createCurrentPageUrlForMobile()); - } -} -?> diff --git a/widgets/m/content_search_box/include/template/index.tmpl.html b/widgets/m/content_search_box/include/template/index.tmpl.html deleted file mode 100644 index e77987b0..00000000 --- a/widgets/m/content_search_box/include/template/index.tmpl.html +++ /dev/null @@ -1,6 +0,0 @@ - -
- -
-
-
diff --git a/widgets/m/content_search_box/index.php b/widgets/m/content_search_box/index.php deleted file mode 100644 index e5ed4399..00000000 --- a/widgets/m/content_search_box/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 1331 2008-12-09 06:45:21Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/custom_footer/admin/index.php b/widgets/m/custom_footer/admin/index.php deleted file mode 100644 index e125fbcf..00000000 --- a/widgets/m/custom_footer/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 439 2008-03-28 14:54:43Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/custom_footer/images/icon32.png b/widgets/m/custom_footer/images/icon32.png deleted file mode 100644 index e49bca6a04cfad625d02f47174e0f555f9a5f388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21811 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 X)_M{h^&1Mm$ARn5i$j2pUcC1&s$U7n diff --git a/widgets/m/custom_footer/images/icon64.png b/widgets/m/custom_footer/images/icon64.png deleted file mode 100644 index 07138f49227ce188de2b7f7cdecad54087e168d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22316 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

;#kx_ADLmrnk@oi0isNO_*WWCRqfddVjO6g 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 ScG=${c=WLQq0$5AZv7X5YzCYF diff --git a/widgets/m/custom_footer/include/container/admin_m_custom_footerWidgetContainer.php b/widgets/m/custom_footer/include/container/admin_m_custom_footerWidgetContainer.php deleted file mode 100644 index 5aec253c..00000000 --- a/widgets/m/custom_footer/include/container/admin_m_custom_footerWidgetContainer.php +++ /dev/null @@ -1,84 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_custom_footerWidgetContainer.php 2271 2009-08-31 07:00:18Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php'); - -class admin_m_custom_footerWidgetContainer extends BaseAdminWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'admin.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - if ($act == 'update'){ // 設定更新のとき - // 入力値を取得 - $footContent = $request->valueOf('item_content'); // フッタコンテンツ - - if ($this->getMsgCount() == 0){ // エラーのないとき - $paramObj->footContent = $footContent; // フッタコンテンツ - $ret = $this->updateWidgetParamObj($paramObj); - if ($ret){ - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - } else { - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } - } - $this->gPage->updateParentWindow();// 親ウィンドウを更新 - } else { // 初期表示の場合 - // デフォルト値設定 - $footContent = ''; // フッタコンテンツ - $footContent .= '


' . M3_NL; - $footContent .= '
(C) ' . date("Y") . ' Magic3.org
' . M3_NL; - $footContent .= '
Magic3 ' . M3_SYSTEM_VERSION . ' is licensed under the terms of the GNU General Public License.
' . M3_NL; - $paramObj = $this->getWidgetParamObj(); - if (!empty($paramObj)){ - $footContent = $paramObj->footContent; // フッタコンテンツ - } - } - - // 画面にデータを埋め込む - $this->tmpl->addVar("_widget", "content", $footContent); - } -} -?> diff --git a/widgets/m/custom_footer/include/container/m_custom_footerWidgetContainer.php b/widgets/m/custom_footer/include/container/m_custom_footerWidgetContainer.php deleted file mode 100644 index bce6a041..00000000 --- a/widgets/m/custom_footer/include/container/m_custom_footerWidgetContainer.php +++ /dev/null @@ -1,72 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_custom_footerWidgetContainer.php 2271 2009-08-31 07:00:18Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); - -class m_custom_footerWidgetContainer extends BaseWidgetContainer -{ - var $db; // DB接続オブジェクト - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $footContent = ''; // フッタコンテンツ - - $showFooter = $request->trimValueOf(M3_REQUEST_PARAM_SHOW_FOOTER); - - if ($showFooter != M3_REQUEST_VALUE_OFF){ // フッタを表示するとき - $footContent .= '
' . M3_NL; - $footContent .= '
(C) ' . date("Y") . ' Magic3.org
' . M3_NL; - $footContent .= '
Magic3 ' . M3_SYSTEM_VERSION . ' is licensed under the terms of the GNU General Public License.
' . M3_NL; - $paramObj = $this->getWidgetParamObj(); - if (!empty($paramObj)){ - $footContent = $paramObj->footContent; // フッタコンテンツ - } - } - - $this->tmpl->addVar("_widget", "content", $footContent); - } -} -?> diff --git a/widgets/m/custom_footer/include/template/admin.tmpl.html b/widgets/m/custom_footer/include/template/admin.tmpl.html deleted file mode 100644 index f508a619..00000000 --- a/widgets/m/custom_footer/include/template/admin.tmpl.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - -
-
- -
- - - - - - -
- - - - - - - - - -
内容
-
- -
- -
-
-
diff --git a/widgets/m/custom_footer/include/template/index.tmpl.html b/widgets/m/custom_footer/include/template/index.tmpl.html deleted file mode 100644 index 0a69e438..00000000 --- a/widgets/m/custom_footer/include/template/index.tmpl.html +++ /dev/null @@ -1,3 +0,0 @@ - -{CONTENT} - diff --git a/widgets/m/custom_footer/index.php b/widgets/m/custom_footer/index.php deleted file mode 100644 index e125fbcf..00000000 --- a/widgets/m/custom_footer/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 439 2008-03-28 14:54:43Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/custom_header/admin/index.php b/widgets/m/custom_header/admin/index.php deleted file mode 100644 index 9a9f9caa..00000000 --- a/widgets/m/custom_header/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 1887 2009-05-12 19:09:58Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/custom_header/images/icon32.gif b/widgets/m/custom_header/images/icon32.gif deleted file mode 100644 index e8be3f008516f92bd6339ca242b7c98c244dbec8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223 zcmZ?wbhEHbRA5kGIKsg2f2Q&O&(Hs_jrxCo-~U6c|Cf0Fe{%9a5PW>{e|y3IGc*6s zwfes$^Z(1s|BrP3U*PzEMd1J4W&aqN7>EOkKUr8s7=##fK*~XOGO)%xQ0z;|oR_g` zUC!%$1v=+Ta_?8Hd$0E3|A7Ss9y(I}CzceQ%rRqcVq_?aFyOOeWt?y$iTT9gtK}LD q8`zHgj9HO%nEmC$i3j*L^qx3)F~WMfO=DAYOKV$uN2j$SgEat109-u) diff --git a/widgets/m/custom_header/images/icon64.gif b/widgets/m/custom_header/images/icon64.gif deleted file mode 100644 index bcbffbefbbdabafaf348c1e26a02a43e5d4152e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmV;I0cie5Nk%w1VL$*t0K@sdy|Hh5~>D2$CMgOs4|NHp=y?p=i z|KY>`sZ;-*I{)w9|F&)a=+Xb(y#KFY|Mcnq!G!6I3L*^|1pp&g0T~q$0{{#e6B!l&8ix-e4rU?}93lw-1OOHyRS*Ca85CA} zRSOas0fre64v8565u}==A_xwddl?N9Rj8@}7pzqxsv-&okr@mLx@8q21bG>s0Kt^S zsZ|2XvdtL^4YCc_w`U>;k~9dh6lS`^u_Ku&AVZ2ANwTELlPFUZs$9vkrOTHvW6GRKv!>0PI9r4O06U?3 Bx`6-y diff --git a/widgets/m/custom_header/include/container/admin_m_custom_headerWidgetContainer.php b/widgets/m/custom_header/include/container/admin_m_custom_headerWidgetContainer.php deleted file mode 100644 index 9e9ebbff..00000000 --- a/widgets/m/custom_header/include/container/admin_m_custom_headerWidgetContainer.php +++ /dev/null @@ -1,81 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_custom_headerWidgetContainer.php 1889 2009-05-13 02:43:00Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); - -class admin_m_custom_headerWidgetContainer extends BaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'admin.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - if ($act == 'update'){ // 設定更新のとき - // 入力値を取得 - $content = $request->valueOf('item_content'); // ヘッダコンテンツ - - if ($this->getMsgCount() == 0){ // エラーのないとき - $paramObj->content = $content; // ヘッダコンテンツ - $ret = $this->updateWidgetParamObj($paramObj); - if ($ret){ - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - } else { - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } - } - $this->gPage->updateParentWindow();// 親ウィンドウを更新 - } else { // 初期表示の場合 - // デフォルト値設定 - $content = '

サイト名

' . M3_NL;// ヘッダコンテンツ - $paramObj = $this->getWidgetParamObj(); - if (!empty($paramObj)){ - $content = $paramObj->content; // ヘッダコンテンツ - } - } - - // 画面にデータを埋め込む - $this->tmpl->addVar("_widget", "content", $content); - } -} -?> diff --git a/widgets/m/custom_header/include/container/m_custom_headerWidgetContainer.php b/widgets/m/custom_header/include/container/m_custom_headerWidgetContainer.php deleted file mode 100644 index fb106854..00000000 --- a/widgets/m/custom_header/include/container/m_custom_headerWidgetContainer.php +++ /dev/null @@ -1,62 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_custom_headerWidgetContainer.php 1889 2009-05-13 02:43:00Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); - -class m_custom_headerWidgetContainer extends BaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $content = '

サイト名

' . M3_NL;// ヘッダコンテンツ - $paramObj = $this->getWidgetParamObj(); - if (!empty($paramObj)){ - $content = $paramObj->content; // ヘッダコンテンツ - } - - $this->tmpl->addVar("_widget", "content", $content); - } -} -?> diff --git a/widgets/m/custom_header/include/template/admin.tmpl.html b/widgets/m/custom_header/include/template/admin.tmpl.html deleted file mode 100644 index a2d2e6f2..00000000 --- a/widgets/m/custom_header/include/template/admin.tmpl.html +++ /dev/null @@ -1,32 +0,0 @@ - - -
-
- -
- - - - - - - - - - -
内容
-
-
-
diff --git a/widgets/m/custom_header/include/template/index.tmpl.html b/widgets/m/custom_header/include/template/index.tmpl.html deleted file mode 100644 index 0a69e438..00000000 --- a/widgets/m/custom_header/include/template/index.tmpl.html +++ /dev/null @@ -1,3 +0,0 @@ - -{CONTENT} - diff --git a/widgets/m/custom_header/index.php b/widgets/m/custom_header/index.php deleted file mode 100644 index 9a9f9caa..00000000 --- a/widgets/m/custom_header/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 1887 2009-05-12 19:09:58Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/default_login/images/icon32.png b/widgets/m/default_login/images/icon32.png deleted file mode 100644 index 3a53701bfca578ff8e2fd3b2e9d822727fb37166..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24251 zcmd42b#NZBuP7R3W`>5Fh8t#1!<;nC*f29g!_3Ug%*@Qp%*^?|o1XK|@6G-5&YgMl zJiFF<*On#Ql5A=Aue_`{A{-tZ2nYz`F9{LFFG%w5hJpIZ9o*d?z5s-S&@W|}ujC11 z6#7+$wUzko00IJ!_U{Ir+w}hUdWq#Is_rOkZ>;ZVZevZNY;I)?!pOn!?_zh}!;t!_ zLHe(Tl8uR@i@v=vh>X6Wy^WQzk-0vJn7O^Ni;cad1IbT%#xqJPClC-&D_eV2HP?*G zC2iF{Mij^$7~BRy?oV8$c`HXbo_a#IeK4NQaBg|3QeGjqn^M8)R^2(8T;$~7f}5w? zH|waQmr^mS+K5w}VI_&0jtw^cc;2>{Z?7Kg#uyLhyz_DOwhiLG zCbjI+qVpb2->z#avN&3M;d#|x3*3}h@}X(_NN+PbO@3t)<~xU~NNdwaQhT?FC-rfE zZ~~az`;bbUcw%==$C-a-4xWohJLK}pOs>7QjSHW-L)?a6ZdYZ=84=1{beW>-Vl;F{ zn~vUm;KS9E6&!M=31Mw zkuQ35Y1-)qZHw@b8*?tACXxtSp7Z-nPa7U(XQ# zd&U3r5={Y1E(i!tqm`wy(${2a%lsk#r8l;83s26KOc~=aGqE9X# zn>TJRD!XVp7AW^_4|iUVynK>YS^yoiFhAeVyd5}6 z@7Jl-O(FWpCWbyfR~*u!k2QH3Pzm=3XZ}q!WNgXA<0p;4>K4A-N`qEFd&IzW!>XB< z^q9;`W9=4ax>>k}+_@!kV-edzl)hyJp-i)LQ?3cFMO1E4QKp6VW$F{o*;M0hgUagV zuGO;3$<_Jg?EnE*@!{B#tAWh;`uhGT3LM8qX3~1PqhfoQf5N)c8ZEo4U3M5^OZ4is z+<3amnvGLQNz!SYMfj65*9X+(Z2|K1nLwd=&n;57Pw`}V^DCiSZR1uzz~vE@t&Gi@ zb$DGXyxCEkt$_8u^M+k znjp0;7qm47SVk2DlFbf?EHY?S!f{WlzM;j+o?uOZ|BedW7(ESjIL!$!=}E9Nn3p>k zB`7bP*Co$94OZuK$6_1cQhl^kj|5SO->d{-6Zz_@mhdLJB!7WPkVlQs^2OrIdt?MN zb@mO-MW}tRxY*_*;HQvkF#_r^L6W1SP@HY1_LO?CNAY`N=2gKcEDOdcp_CwWX9vtg z^MVRMyFakVpB!gA3PA?n2$M3YKs#6Kpef>a)=>L?c&%~x-g5YQxQUba(vj^2fd8ub zjj}SaK#q~v1)tb~35`_>CrS%S9Y8+TLke2;7jl#kbQCJoQ^aqQjGNh$RIimr&kZEZ z{>s0AaVG`Ch#-fui*c)8N_$9Oq9`TS5weU|Ak!U397)?|-A(E|~ z8OT5xzcRaCsNEZX1nx*;+jdZU7aGHCMynVU98o_|&J}9@o)D0hS$sQ;mimLJoK62E zT=`iGd0ga7O*T^JMk>@?#aKh7y%qUpt{VO1!J)mC6ES`m0)jeHE-@a*3(|NI=%4hs zT=34GL8XaZPvlt1 zKQPmpx?({7CTE`5IEaiCIup_US9B>K47^Rps#=s(M9fY=$+yx+^1!}PvW<6+M-c`j zrITOUISxko2ZLgi#SdMiEkUg#$#JUQcPc|B81@5*N^LZT^~UMK#7ZvDexmKp*0N&8 z_&@muM=nIsC=0z+5%_q569D@dqdct}OuWSo`sEDMd}Gxj$Jm^m}fnI8@NUjdStn7HpDncX9}-_S@! z`Wo_o@LF-scm=0R#P==SpZw??774=ml6gN!*kVt`eFP$Jb*YX0x?!& z!rolU0_A~8;xD`PpH*>hV1$a7&&hONQ6Z7?b(lij6e{!|#KX-{{oNf-#0p3c#XqM;a9`nbfmKPMnFh;^d(QL2;8^#4w= zp70|oo-Zu$H2tha;NW#1R80a_tAeR$L^Yx| zMV$Om;m^PoCk8w?{J>cv4w;xYQ^YJv+7dg@5=RUZX6y3F0d{I`e8(r&7`xFQKM?e} z&>w`qEGn#ekR60MT->ot1sLW>=Z;S|ca4u@1Gf%&pw6G%aTG`b+rs89a`X;l?`LkE z^)xCdAoypq-2Hvw2)Ls`29$Agsmdz|n$muBVJe0miRYUJ9l+b2OhuxwONie^Xp-K# zNd+tU&!EtBqM+xd?tQSyt0j-n5)^B#r6xltfKt&wkBcK+ESbhfk#I*d!4uH^Qh`v_ z)=(e0`@t`1PhS`IP$dM-J<}`094C!N6G*Q~)~RrqwWvz*Fw$^aS`9C>nv9QDyL9!3 zfGoDJPA6Gy1aW{~PY>P7FQhzJU4GYJB-((J1lioK$h zkss@&Md;Mx9OIEvpUN<&oVhw~&F)U<5lVNG=Z2E!`Q{NTEI_!;ID#N~H|X#7oC8D> zUefeH&ek8NW7aTQ(v@-FS`|a<5x&Wq3_3>3@yKH+3&x}1KwJHS&`E>ys@=eQmivb>g&+ z!FOt{WndpcS4f~{i}R%jF>FeuAc!h8?H6hsVo$DU;Hg)3L>>{7q*q1$NcE`&{Gp~4 zA~@zq+7Z^KJ!m0*CMU?3?=UO|m2H@&?rah(ZK)r5CUA5?OJ?4J#o}7S(U^_m?d7Rg zU$A3Fa^~Nr6J9te|F39TieWi7TR|+ytmE!RDJ@ zl!<2-VLvNYyeM{PpqNS82vO^}9aTPymMLp@5ZY?IsUwluQ!%!#b@*NWknr~=`FvT^ zcSp(c!Sfowd5cNw8QvC^ZSPlelD#yC;df%wCWB{D6NL84YF<#d*lI}?%XgBaDJb5S zCdl>1Bbe-A-BE)F7ANJ?I?0a8AbzBjE0`3GnKV8g&=9I<0jHbMVz$!Afi&7hP7kK3 zU(mWPfL+a|#y`?Zbk;jqR`RalrW!?Mzo6qdfh2TrF$3p_aK0I=9)7H+Ak0U^Igp_8 z=^CIFmwu)p8c)i({8MR;H;ighsv=Uhjb6x5d4_l8!tMR40}h{$9;lC}8pXoDX9;su zX@f1N9WQ@Zb;?eYWj?@8rm{CA%Svv!EMEpK6vmqsT)aa6oaAq4wCNpEAlioK$g0BZ ze`OC7U1y0T^>q`gH`UR|Ty!;eQjJH->HPqAlmbyM$~a5SG$&jgAC|M~yd{!>mh=G# zw$cf#VqD|$_HJ8&2AxH8jDN zz8%VPgui>y>A7{B!Pp`&TRXrVj>1M2GvNDgQjpR%GK5$vXBmIWtgDKyGeUa{rH(mR zsZH$hhgoMU7;I|M87pvIY&q{bGR>c#GO0iI87 z`KVKx^SsfhI#oreLAK(scw}tc#eKoDsr`Eda$EhmiJIb@3&c0|c`}|U^IYU3tzZQ+ zMiVRr&4n+J&=y4U6X*P}bNQ&Bo-RL~SPhgkQIH(n4pI}I|@lw@^I zlJJZ*4BX4M_U{a?AFMN>ZVrn6HRJ-eKSF}rBw+5`q;*PFa!10v5iS4|$DF6sf<5r? z`6Mbk$Vho`FUfe2qt$HXQz>j=-Q<72Ki(^9ll^TJg}?i=q_|R!t0w2ryLM#pNKs)i zx@h5}2`+%(s8|7kpjTi$m1lMEVtoaPcuLmLZj`i>E4XHb`vN<6rBh}4^gyyU{XS_@ zv>8C^oq&@giaAd^mlyDqjk?OoRFi;%QPHvG#JP{~EbBi(ZQ;6U4Ne`Bp@jN%(`s2ZJdaBB|d&x&(gnA+X+oHcps9yf=*iv(ARE4<=rOKI^uMCPbdZMtv$%Ou*NH<|9pB#(VB5a zH%(RDYRqV+UCm#vrjIo7>|HeP{+V}pUXQw8YzkI$L)FQ3$(Z)__m43kLQEUoStO}W zvW|ngv+H4_yV#!lzIUO!Na>5bbd;;ILNDw=+%y|!3m=Vmk`4^BtpH)w;GK^P6S)G>)8dg0gg$0P2k z7TU9WI_q6u-I?lBnH+{Da9O4aSr}eZf3q-Kcd2gtG2Y0qa~PU*7@lOduom>V<)juJ znppmudXLLuI+4M2Z)so>RA@wd!fc{iqxr8nm9Yu0;Sr+=pC1nW?-rdY{;Y^S zLvN1d3FRwu+xR>eC$&|gk}>7*scIzj-cfHkMZ4e}*klpd@YiQ?FCsInT3{S&rMot} z*2j3;6gc6Hu%1n|RIie2T3@Z}dBSyW@4oyk;BuDbJfXRfI+@=&)iU3HWTTTO+n>+ht5BReQ>_(U;t=~u_s;na z`Yxn7@7?*#z&*a!Oy4{CqV_U0V1~=CTbv;{kBvY?=kd0)GHNLjkn`R_sMjuEY|` zGo{kU6=Ax!D>e?}m!bGiMNzs8mrqSSAWVJ}gTnhwkZiDgbM80s(CM}*4|xv0l~ zb$;ygIn4&aWO2g?>^Gqy9%Gg{S5n8=@(<#JLgb=67I1^Y1oBSOev(xt%fGE+-WIy> zQFJ}*%E2Y^y_hqYXPrF*iXVBOlrqZS@`-s)sf>=FeLrO{XM;og8<0C|GoC=bJu@PG z{HDCNge~yDIs6g#^&UT`$-+GzGb7dqTPGWTrdHgE6@h(|a~Z@?k52RFGmzlR6Cq0m zeQ=m%M|0!k+dDMtKRZEsM{k0jewWuY1VZd5Ue^FkbZf3diKL4NrK0$s8!0v16UH3K z>aaway~4)Ye?HN=edE0-t+Mo#z{OAdg{Pxm(0noym@|b4#=Amy5^kD+*_Y*p$_(g2 zP3csKOxKaU-sW-b0i+PtcL(qRne}xU`cMz*;p@a3I~k;WTj8yg#e2^k0ZbEtVw@tL!kIsI)XpiMm zJ{RGDzN7wiI7H(KuNQb|wTa83`vja00`0e7Z9mepi|3ltr>+ft9nvD+CAQ5ZJ=1VA z&)kJ6R84erWGP&Yp9VCqZGYAiQ#@%$O$b?}J0D{saCgUy-@*U(CLL!mdJVEn)m2Y9 z#7Y3%KyBc62mCRsztxWAjoB7&qO9vapYb6g`K}+{nmZ z^>by3u!&RC()XG4?&}%`gn6ZZ;)p$N2X#_~gnt4fE+Q!`V6$Q4SoY29uF29mjTex~ zgghYDIfwrs<`ebAzMVftF%&~vf4tg!3{J1yz9jPl_>qsUS6EmGZdbkW5}Zo#V;41_ z2to+%CzTNH?B%`FKk3`2i9|>`sGoDS*BxzuaK#1c_{&J==>+H1SVUN!_3k`fub z#>n;ErrGrj4K_5qFLX@fo|2aJQJ2qZ8{+ZLHreioUJzB&J46B1Aa@=SeakalTe+?G z46DzEyPbP{?ldO-kEl?e(|-ws{@R~FW*d(tV(Ky+*!((3+$b9I!Mt*iwuE$>OzV`S zq3dq_40pQxfFG*hPv-6Q9_i8plDrPzUOZEKaP)tYMs7`=@D|;t&~kL++9Ue}-_a4k z4|MT0PTQVtv}1U6gZyUn7*sRq^tFnV*aI%uV&i)-^{(1Df{*Pm( zr5x53xIfqD=fo2SUsR$8l`L1^u`6wy%N%;lIHk37xrv@+A53kDv|glB z+vs;(wo<-nV_YlkRTMv;ou|KiVsJ(yL3T&RJy`jk-?ELZe^~jd6a46=Fblbgs;%_F zRKr0&R=l@;64M*%*VQHRzVD_Q0cKL;qU-wqEnc_E*)w5<^Qf#T+so+Ufp!jnk=ghdtlQY4`_LRpx+^8o!$uH14uqE17p`u2`! zP#D{WF^s9|jlV`f){Vmb{w;Zkar*VuUEbfB#WGEG&xIj}HhJs2O{A@>eCO01tDmRN zmrz%%YaZ&#uCr!J$QJ~PmUx$Jk_y*<_8}i-L!`@u9sM_;bUO=o@sS%0M-pMPlHLObJC%g1vd6Q3pp$O@cIlD{M<4ism18Rq zrVg|dA%93lAn8nRT0)>yt^eE-)qx~x= z@)f|)mK8+uXGA$T;P&iGqCQc86Y5t*)Pt}IGw)k1NS*`?6}vsa68#ZH-`6oQH8Evr zlm1aj%NetSRY!`TVqz+-%%{l~5mMQ;kkYwL7I*9tjs|(^D0{yOFjO zz^XP8+=MFa1X2H#uwlXeE~}0J{c*GEJ`TL@uk9kYU*b;G%arL%L_-)h^N?X%bf8!M z&VuK!Yfu%CyU>V$Onc}$7bjFv$-I=Vq_s5hylj%bVb_Mve$~G3A$~$8zFMBJwxZm@ zM$azpERBrIiC!8ZQn+k5VrQ4%_-YDtaYjHi~dv zHu^J2RvkZZh$)O4w(#SN2xzX*gxk~B70pt-3Jg_RQmH59E!Gh4WR1={mz|TDBwPB{ zgar2~^iADrbRuxF6W30pj!XQ!*66<3De66{!fnEB?h`wLm8O-p2`8Rat})p_5^0Ax zc#Ds!O(h|jS-~smym&ksihfF{UpQ-}37zRgFiLC5 zOnFi+(Wh(&E2vwk_fsotA+e<%=migG@RKN5aSCqVmK)BU#ZTl5c^eyfvStZC$m3d_ zY%=2$yj(o5dlE>-&E3VW;7G5;0yv@rTu*KY+Ingb93+^dvtsu30`=4h#^lw!yuMRX z9nuGFNcxCPmTK9r|E8aWJAb*|yzSg?w81~DH7#uyuJ*#N{f$@;%)xW-wBQvjo-!2P zD#=Kkt(gmAN}|mjKRJ?IF4QV%RJLJlG~|GaKDpr(7uNYV5IWU_k{b3fF%~i?eQ-x@ z{yUjrg^f^`TjKpF2Fy#lfw5ZS8Ie*NFP{B)OmlqGFfKfyd7eCxSr~qb7Bs4_UsM=w zBL^bObCX=P?57BwJE)Q4m|%~jQo-j_|KuzI5qDaIUemWSgGb)C|G2PTM>*od*v6M) zjpMjN|C=B{T<}!zZ&hHM@dm>B4c7#0C7K;G1(uw8eq*qI{&VB}=Y@lFHMLGsaC#ew zkWfvKc&ZoN2!Tk*wJd;7Vs_E1?kSAEh;8g^MxqoHYc&EULeN%_jkPX03!n<${RQ;L zHlJ9-A?D+$&k5N{af}-qkcj4uIbB!-*oN|F10q4|a-w1dcoWt<-mhM^?8MFX#LQ!y zkdzTZMy6@gM4FcA>A0w?B6A2isQaa1DO+X;&<`^sukM~5nysfl2Y;B6B;?6pI?jV6 zqllmX8_%qa>%ES>K1fsE4~oAb<~3H(!Aa51T0*|EJu~LK&B-AEahf$}dwX=H$Ij)Y zaMTPY*=B5G405uG0CMD{i{ayL-Kl`0XB19H&nZWIn#HXIwBhp^FqRu(KJxRiOR08) zj=E%w4?0C6C{R~&xLAioc%G>EUzX<}EU=qs1+10-h@fWaa=VHIrLx44$rsaScJw0= zfX>nj#BB(GC>MUSdp}5wsFBd)5l9#As5wnwf0;cd1OY`XBmH=KQ1NM z6idn9TWcNHySTet2olQO9V!nObCJK>`%anGG%y)ZavmwFF5%UH9dct3x z6!KUBek5zoYxkT%gD<4B(ghXCR_Yshe+h~25E42*R2q!j07Ang>0;s)^{HD~E5(ek zy<+>ywG=aM!xH5XP6Mn0#RLBGS`SMwf z3l8}^gvl>XP0==89Qs}@hxj9N4s@KyzEppV2?cC{ynpa;0`>{E0abqrhLk#KtEpXd zSqy~{d2o0b`3>>oik{rnsW9lNHkxW!syzmfstEan{cs&siljl4&PrA+rPhVP&4jrF z!f~9ET`J&Fqp|u=9%6~;$2J!Xa&LcC3Vifbu#=d1$15VyH1_rw#Ll3XN@~De_E2DZ zE1G>Xo){vngqy*^;MhC=r=gpV4xpcVk|3%0= zVsLnV-|+3WRR2YVL1l`#+UFWcqw6jcFV*HSOa*rC{8QyVTQST8I-{JT!2^Q02XcW@ z@JaA6;zZ6CNeNA#Fr};eYjSGRxQmcCf1TUXw8l-;^X_t>l`SZymRH+|Drx z)O|e=UK|qOOmMi!`^gcHvi>n<*Z@J;C0TZrF2K^kyDzkGcbri6^G`@$k} zGU^!jrhbt3cfqU_Vw4j9&_7)p3Y6ufw43u#r=a=fZ`BTS7)@hESMwX`UAE`l0W7@m z7NhrZTV><|aYB?DtJ~)3_2qH82pD4DoFK%>FZ!ptKQ8kv2biFENf?xcT^Pd0_|ech z$TA}kOd^!Je6nJPgLKK``SBi&ZPCos>xQX;zvEEt*96Z8{uq^ryIxPldafsxw4J+XWzDK zN!$->#44hP?I-lXrfL0-iTh}@4-j>w3s=6`VO*|==(I`6pE~8^Rcxo3h608Z=nGKE z=uvX@uVoXgZ6H~|#Pn;d749YxLId2scQ*>3S2GT2_u^ZDi*)TRm=^_weKynZqOMJX zBqJ!GZP>{7m2N!~S|OzoaW6Y^H++-)vp#&j{iIw^JkhXp-c&0ufMA$NPe#+oC!Pz8 zReV_&MBH~Jf>{k19!{;F-#V^(-FURX`q9@k8q+`gp4|@VB4qDoi|9xff3;WYVFvWe z5Goxn^^r5TVWbkIdo#R(v-D#;T9X{xZ1Iw%I5tB4fjyf&y$uWsY`Zu;7yWUH%;Pui zSCS|@e#IChD<@atqVWTesCe9iS6sjl(ZZ;Q<~(K$cP1@2PwE$OvpNG_CQ0`A&#H92 zek&7ooQd3QT%_j|hsNn#(*G;`OeJl`E3>Uj!@CH1C7^KA6?#-L5{zpGdUU6Kit8CU z*xwK#F9}4v<}a?HBhjbj{q_;12@2`B6KB|&fDz*<#5vdpl%$~+DeJUL?&iRff7rEG zg{|@`KYO4FHY3FN6}bCy`|k5{4oX1YywpOB_|ffu<)k&s?j!GIFeO*S*nCx;U{RX5 z#E781WEKyutcd9F(>E!w?_}0(Uz|>!@^gQ>yD|Q5`Dsm-2&3KKzUc7>#ab>N+Ad0| zVX=fF&ANBd!|4|1sUS;|o?h?tg@@^pYR-K!1ZJ*O`))MW`|vq1wo~!_+?O>NC~8$gVl*C%8_3P{Ky-<$OLZAXTX!oUR6L;D^hwkY5* z&`QqzB|hk&;izmuQCz*!c4q=k@3KURk&yk*u2D{5cyK;3VHMIyYa@#P1H0{K91Tbd{Go~+7C|ZP`j6q zbo^TNcqgxg;TZ>k!ER{I+rP?)b%E0?p4kS4Q5TAS!?%s+kK~My8%;Pp>*CHmU?>|f zjxDZUr{DZJAmDTqmR-50Q1y`rPDfxq?V)1P6DkQyD@ z>$MAws0{69i7+;@D$~#hTIMXy^6qsVQ6qRf*s;Hb`Y~u5(NPiM9lvOZ5nuac#;HXR zef)W-Rg=)1Y!w_PTX-sqkgE)N&C6dI&+%CneOh5k?i@VXcvZp{Wsn6o?x$B5efu&w zA&-I<5$M~nyA&+e2IGtn`8>AOs&z0FyLdk#t`c7(>Bnwt%I{UPd`|P^UxIg+*-i-l z?GC8nY3La*_4HsT7B+UuE*|$*XIw4mf2sr4@Hu#5y1HjY8433(CJOtJwF5<4a%B9| z_R{f*iTT|wB_g5dDI<1qkvS8J{V5Lo+jgmW$9+p@uJ;_?GwIiu91-*zI($y@E)zVn zNO3@~PhMW0i5+yG57DcqCGH{eQH+Rolh!S_qu|{)g3+Xd>;mf0zq)fj`{o8%VMuE; zGh~!9d4c#jbACVVBM4w$d~*=*A`?S$jM-6qzV8i1N!xQ6HAS~R29$;iJcQ^8+ygck z_RNw=i}-SK^T6}J^gGkDr%-Uj5jSxJu>&^>kqD0WIwm=`7K2&d8NrVjpR;ce-V!h~ zq9@DVs7|Oyg)EfXX?fAtK$LoaSUs4~#mnJBadohF1#1-koa@rC4NBUoxuZIOn)U!7 znf}ePd&D>!oDYWwrmJ)2-_F-7%SxPkO}9goF1O%V2ANjH9%4+*fwAF*qoxIr8@|zf zmPh<9TBs^@EY<@MBAEXo(2(TLO2?V0Ai%fEyP9i&3`uvQt13K_7#s_-Ej$5>09yiesW zCQmeLes6$oj`k#^38aw@#JE9K#xd%#T}X+i9be&07+O*|PypLppTWA(2&@C;2k6`F zvyT)5;Rldc%;8>3uJh_x7PW&U1*};4wT4B&DNav65*%TW`V6{MQMs5}mTzeth1y$plD35ZD!q!{#Hc)6qG+WyeREtrn zmNP}aw0}mfN;yi~$#q>Ht!q&fx{W79%#|dpG$k40)e`9XX-RTrao=zT>D^r+DldRB zAS*@M(=tDEB-gifo_CPal~LK-oHJOfUxBdF^KU;RSIsH{lUphx2rthgijst$90qM= zIGw$o2~4IR8%=d{#{rZptV=L*>V0ky^8+F3$pYajC$=C9K!P5nWa$&tAhf;$pI;FL z{?l*do{-uJ6%CSNHW0%1ed=^BU2*1wc$2s`8n9|Mw6=*^d3g7I1&CH+-a;O z?Qb+kdwGuTMbQ|S>f>LWl%36SDNy+=bKq;;-=7JEUS9z0$oGCJ`b7<%YOVFVyT4E- zODA@q+m_*^bO8n7C?$ZDfCA-aZb2^rx?a2+B{~!8^l2YpIL&c{xvu{>Q*Nd6Pp_L= ztBrLjMu*9F>kgn2_GJpo$zNt8+W}o{s>u#KDQ%)x@+7i*Pr#>5cYx+!1XR-o>Hauc zZZ_m5LBXDm0D4o805k?*QTRj$B`LW|0z}Q=S4)|@hXR5mvB+2lT(P&8XI-UP1NrWI z#GwF`qrFSTT-_myZ_->b9hTPsvyi0gk~vkudwi zgQJlzb4Q6NR|DQR4$!?Hx3?Z@N2FElMpCd3okUj9tkc>S(ZSz*d!*oIZu0yeZ51hx zFgeWNb5?MdR)^)X&S%4 zrn8`H)Wr7*r|9<$aUNQex=EF&W5JM_IUXRZJ4=jR9LhP2>>%yiX-I-4{v z3tDyKr;w3Jw<`Y~li1Dh)i0Ih;rBPTI8K?K6ns&04;wh{((H;*V)|YER4_h8fj zQ84Rk^U59!Tc2)(&#&|7?Kw)aYOR?4&e4(JQ}Mu(eTm=v>mY+^e+Rgxo~W%W8wxRn zJor7gxa*bu^}TgQ_I7(MnzG&k_S^qUI@Y?gxa8f$D@gruA>zS#%Cc<7JeJXxO1%Ji zQC3dBFu2~{F@3Y2Evz4_k8!#sT@K2~tJ8lNC(18Zlil2a>-ywD7`yA}i$>D8F2SV! z28GvRq9#TcWNGGjcufDiA<8cRcEMrd>R3rmb+BAD`cFY;hqN@%#>T&*;+zZlxOWe0 zUv|9fZj{fDPOwvNi;u|fip{U9CYh4O%YC+$;ryuguz`5M8I{yT@G=*?F!M!{jq!j;Jeysn1^Q6M*|YFL(0MG$EDZ}H1+droX+ zY}k(iwhjTU;ajvgyNtTYtFOl7^bf<`K+0oSNk|?KmC;VyU-wVL&Wuo1E9o;Cm)_zS z!3C7VP1%evd94TDE2r`7feCKz3JDHXSf)Yj8;b5r=q=b!9DdH?TN0Tk3){mKU1=yXbaeBPolLQ zQF_h>rM=xhZjB3~`GFhubh!xxJ#*&JUC~F@91e^ph$}srrL=-gg;0N~s@sJKUyP27 zdp>{GLT*cL-PTI!(gxyROE)rf9zE@kOZ@Z9{HdTDD3C)aQf-%Ku=_@H>V{K@U`TMJ zb(`enMXDGj2=j5jb38W$V--jWKdA?e>Bj*s7b9dv1M`ys)j$8u_0!`9ZXRz=E)qv6nh}Z{ZTNPDE()!6eN8^ z$&&(o31klB`C%YPMIjJpL4?RU8K`Rt3k%gz4V8sZwmyLD6M*p8YuhPEjI$n7D=MlUb=OLpf@cvTVet*fPg={#JnlEGvRCuRmfOILT;PKPN$#ytuu%ng1 z@MxknC5s84-h-K$n-b;K{}!2#G)90HsOZ$GkH^YvlZ4Cni&>$B@^{accy ztcrgK81c17M#l#GuyuNmWHe(tJuy|gTJhkI8HCmnOlx;DBVAp*vhb>NP-E3wt(8KU ztgGGdt4eR98wXebYXS3oQ1rt%fg$QlbWXt&RQ=Xb;))+4(sg+|$b|7`fdjlwn- z_!?ek_h7`?boGj%=}g@7j%>IL`secm<%xhN>Ji^Xf5caQrIP3gxTa)SZo9Tl&R)lE+F4Ei%sQ&Hbkd1e4WE|{cJRbL1r`1>z1!rt;x?vX2|o%%o+2sSVjFX{bqG0{X@M){mD(|@?AVcjLc>82+43m$MVl>?Cmv=-U2uIF!w?i zA2W~G+q>&ur@RPA0~8{QM624Gu@&7>pyX!Pef%_6gq_D_vWLC?=6oDbdjhz2zwBYf znxk>eD-Y!K+6M`t1D(D5ae_#H5_yaBb0W02pE&NK{DPRkB49RyoHYcumZ<{B1^T!d zJsz9a^{lW@w-Hra$FtNen>sZ5BIl;|=Wm0dV+|;3zI12;pogS3LRl0(KbqO*j;SBT zMD=+-1P7IZbI8pnBlq9(>$>*tROWT`%d4K?r^%8(ccf4|ca)>qK3i}Sh7S4_B{5Lb z>%Ps$D@y#Ba%JyXO$6?Bth9yx@R*tZxNb0Q?Z+rG@RC(ePO)v~1=J?2`l%&oEQ)zX zzr1hTtM7UH%9N0(w%0c(MNLN|YNxT@>G7PK+XdR#h;4f?!jzDlnD_Jn>3ZHlO-JuH%qy6cY0H|;2uKsQ8~t4| z<^_LvSU55|Dx|+_elfBgoY~GF^U9*$X~H_kGAFO>sJcoRf<&acU+qb&xYo&k^-VL1 zmYO5*^Zl8WfdP4IT<2h%Q#RuTk8Zg-|7KmNfi>EL;0*#nw8MjEznZt9K`UPUaDQrZ z{l=Z4jH#@;`y_h#bmfKFP4K^M` zX~=GnWq@io>f{&S~ma9arjya-n((J6}vAdB)Yw4)W7rEXSOTK~9|T!Tlq0x(qnHU9H;<@V3Stppdl= zlRmsXlUnrmIzm&+fmakS^PZ!@OO&rb9DAhnRQc*92Y#(?jBr_*xXhF;`_^k2@HT;2 z@!_LtvIIQ!$?Wi(0G!#BD5<(!5V)&)&C>4$FwF3kc>D3F+B>%i@Qso3KVzz7e!j*` zk8k4wubHr01_38LZ)A^G2ZeydPcOo~o~9LEfS4x97mMD(6%Pt);X?PhvZ?ep&GfXF zv8_7BK1K`2ogdORw3=FjbWg>EmhIOEh(=FpJ|WkWZ`59!pV4P*S9Y79og1PPZQ(jpx#;hl?Ko*khGKej1=EU*%l!tBbB%LJDc74@4Tq_@ICc?_oVk@ zfPqV8ti<~H--Y0f{PreyrU2j=Q5yQYT1K+N(paY|!K(G^!sGXB)m7pv^;fb(3|`=b z*vQ7GPZ{`hd7Mu&t!6G>`Ht9w_n;f3M7fr9viE-xJS8_5k{@A){J@&E+1MS0oAsm& zUHsIId1kYNm*7(Esbqp(^}f+NpPk@Co4s^OQ{Ozrjf>rIF(C$eh*jUf&E<;te!em~ z{JclQ5GtoM1@BgOuJRWDk9y{L1D{y#` zfNY!kK%g*~y?Z|*ZV1pwF8j#5(;6z9ID3og7{FH|uPD%MLjd-AXy$8Rd=H47B? zgYVGkP|dBvaQKNQX4<+I->cQdPaxH~S|esHTW6M?^-8u!7PS3|)A2W#7M?j}%ZDlY zRH6s19Q%UAF6%>lxt;gxMLv~_=oEBs!w@oM{`_0os`D(jr)!T6h1b3x(LZ!D?ZgNf z)Cb?4Iojx#N=?ysmsz|nM_Ts47apCgHvTsKaiuPqv@y7yB< zK*INYvTkSN5B}W~=hi7%U9}-#W_=W9*<-i;)^BOw^EDgpD3sTl>?x*t(>hLDRh>lf zMsL1UP2I2hEwXaWO3#G2*_bT_Ff4UA zK$a4sOTe9ZK+iP{+}o<_)}ggPqjoXy{1)5#@rOeKk0I5oe-#zrL>UW z%_`*QQKy)^+PtUsT`Pt?^o+@w$0R-QT@950)E${9V`jOtBvc%lrx2m_1C) z8?@Aq$Lurjfdj> zew{j6?wQgpej`aJ*CIT22(G66nuO^Z#YA79dfk|V%&9AyJyTn{huHb4`e`=|0Dbfs z+oy4!qdqR#&l!vLn!f1P6hDNxeI;}$$;iGMZUZA+f7th++Y7LH=p@)sA~ae~)E&?I zU#)z1P*d&pF4)jdKfwx0Q&ABS5D=6aKok`L6%~-G2&gn^fdrD+04atJA`nniR3IVr zmPAE~6p2a+AwcM%q(BG>sr&NXd(QdYfA8Egv;NpKd-m*^wf6h0_u23BEOrn1X{U76 zV7gD$?Edwm#nH!UJ<-C%hWsqkO?{i1%ZS7Pa%Fv%v()MJq+CQdWAs7V$b2*V$gLM^ zj+idY-MImD!`r25?V`egC2mu9v?m2P{jVagwv;R=d6I?$)hNu1sZr^8ZNIY1p5;5) zJp)hJvZ2;qY4j?VnT6f8*EOI*nK>{6gWWq|X3pQsg*<6E5V|+*up>)fnO^(c!j$&z z3hU+HuyB|SyKsoYYPaH7_Ii#q9Xy|^BvSGs4{ z)h5SZMfzb#yQa-A)@1i>O|jEC<6F(oe_B~ye$n&grnES`+5i_q84U^r244)85#zAI z^`Qmz>oh0A?l3BuZ+cU@Sm8xJeh9|ApFbAZlQwJo*Gah#LD0eh0lDwh18 znA6w+Mnmaw)(zMTR^>JHk>!2bxJJTR^sWjqf$B})(lAsEzvv;k$|J+Efe7&?$VZZf zcLVSsR1R(nxiKyO8SV8+i1IN4N>L9}o8_kWiUONhiJ^5M)3+-9U1&+iS>pD(CRQ}1 zLk@u!7k4dKf_m-2q-j&@dg(IkoN2?49`EuH746vH(kP(Kf`M5k%nyf`)D-Z;erDmj zYdkG2fv&s1VM^M#RWWILf86EP_?3yVm6JT6MPDraXN$^;50W$_`#oylq6NqR(|9zw zd8t0R2<78K=ASU^a+(B{<1%DD^Y9xzOhi{6uaa5tpYBzqflk0?k&ECy!_IdPyj^Q@ zv+6e;bJX_e_pQ2;G{dlNSdRQ83ZV)96tx(A_$D^9B4mHoZ}2$hSao=H^H-n|ZG>bS ze8fF>HgjoA=>!5(y-D`JN!iPlXKeK3M!po?6U?3?^_QsUX{MOWM}rXdW`AN#IWfwM z%^S^g8F5zi@>JiNZzLRgPhy$irf>{0(Y{Bn#di(Ftf;w2XSL{`XKdtDayVh=HWuJ1 zDpj;dn=_E(2Bq2b`WfGZ`SJKo&ry}-oNJO}4TE!SUE`x$Zc1r>oxEGuRbDSVJ2fIw zXWvHLeN*XYAUB#R(GFR1h&|%WLvOPJe$OReUINStj&E z`%g#m*p251(If%QoroiwJ>|z^0iPhyzftqwP3|8)vB)3a5&N4W;%0n-?*b}#xEkUg z+Wj3qp_h4(XO>Z+AKPg6J;IV0_RDcFU^83hkG$wKs>2x^W%ARG&s_S*zz}@D;x%}b zIm?C^$d(L6rAf-ir$0%pfLrdan3E zC<@dvq+A_{811qZuF`1O*E~dUYl1`)E!StsZQIV!K$pNiQoHt&R~pWlRxq5Xubs@y zfeIj^NDRp z6}OsjBY)~6n|(EZMG~&bB$o>8;?|$rU(xsjv zsh+6-Ar%YA#w$*MPE+=_bQ6O+Ao_LbkKOrXX^QX=NT`%G-dmikY1v z=}*}p>b7M>)a~KBO%aX8Eb*oZmNK2b7WxcI2T&n(5=67N%|fQU5al`t$V2rfB;BqZ zG^ot1CO;kjUW!JGf`Gi22*lL&4;NKINvo%Rm?c7GdiEowpIz05m6q~+!|swFQBp7A6@PUKZr1P>j6Cg^v}zxr1$W6miNX<2qv^%m+3bub^X|bPW zhm>1$o7DCm>2OpMJx6U*oC=)NC?cf`4}*F<1?wH?p>I#rq2GyZ$d>d5$UJi>v z$@l7{MR7k&K1KuUqwe9x@WCJ?EY>simoEGV>=)RZ4_q=^h@ppe2VCMUaNRsJM{5=k zR`ql1bs6Pa`QxEsh_h>duChQdnxz#{hxU@AsUwz|>g@oI;aoC6B%ZLK8rzz} z{Z3V+3rFWRag(T9n!h(Ifu-%)1k%EkQ(U)19#mLb zQ+@!*86ksD#>EXHe<=?lEQn)E$vR^^)^wy1@?WfG%d*=Y9p96)#NK)eH7z>C~>WlpNfTFgTttnbMll`gQ` zSk~b8t=jUIkX+%z{-k2oCbPqEg62Ibe0xSYiMrh zMV6x~*Ef9)T&%boB=ALiIoj~RUb~=hIuvopk0UhKo$N&U6nvTYI%Wv%=8$-^QGXSG zc^^d8Hf|Bpz_qLb^ZW#|LK`OWZ+zfsPe3oI*H_uyN8&WZ6Z{H+;mCB(t7qlxtr>Qm zv;`z~(<|~fXk_}1MlUdJ%0LSNGII%T4_`4V603$z`SR3jilrB!43H52GA+Z2#fQf5 zQ)8Qs4iXQF;{BSSy3&v07DVV+>-87;v-aW89^<~K}fDABWwg058 zZ^%TD)q+IP=CTqCnB54DF?7EDL%NqxOMRv2aXkZiQT5@J9U(`&6*Fnikf|6b?1}vu zOX;Bb{a|kuy|T+eWat~r5vi3JQW&Nz|9(`kzhYjNB|(?aFCBqZpnooK3ej-XZN|SV zR`tp~s+Lfoy?A=n85~y8#%9b6RPrD_@$|n`aiGyB8HhBPQvK`c!u_rSdNlKUeZ~;D z8$_F~qJ3QC+b#l+(*(DuS&KShdbuE4&5{LS-h4+_H@rTzAW=g?qs&wSl$jRG`d-TU zKp>TRC``Hvt&$C|BwU>h-D1-IE&Tn7)#t3rvXGx{?q({?vd|e*SuKQ>e4~yJxlCv9 zbc*;`Y>zUQhAD9V!z>#Swpd}l)=kq^itVS^ChD^+@jwZoqcIC%DQ{XF^2Km&5B)E1 zcfk8NVj(!P$~TzNcGhw#>@DCdt$lGhYgK``*}NJ=-)SE5Cha#S6)4*#cJ#g4^vrRIBlM~o(qh~^)v#?b3QC&?+TiW-0siZ-?iogw~C z%YW)i@O)oW{W@m5mvBBPk<(g|BmawdY!}&IfCWt9>c#K7dMTw|vOy*H<-do}jrN;h zYCbBWT!5fw9~P< zI5Ta5GilC_D?Swm8uVwX*8;!z^~XWPaAY3e1x_*`g?@LG=2D6~*U-ROY66hqcagWt z=`ZOV)A_D=QR|Ic)~6%;9a@bQ z0yp~=`{@`E3)n&2kG0?5Ingnj}qh$*l=EpU?^m1iwuxT&E z&y2fzrVI8SJ_n4%#Wz%Iw`GjRJ4#IurDG$XVL7oj?I?}NO_;ftX$p?;HDAlB=rw?tjC2%X<%Cm}4Fr}Vd6)&xqcmoHavOy#F+J*$m}A5{1k<#Pfq zzg*Y=Ez-ki58~Wok@+;$=J3Ulvs?$X8#(Mfe0&JmKqsu#%BvSQ12G&S803kmQ)hlybXLKYf5ORJnseT*SUi&EyWPm&K)J?C zW0FQR=0rAi(f0SWs%G2C|51tW>pziy*bbEd8+z5n6 zo_?A~8UCRovL-;aqse7pUz?vhZ%g+`1%=jSx|~0mRQF=Zzx|c4@fwrOccmIso@fzv zzr;SQ6eHo6Z?|SL-*$QMuc0u%Co@-q`=t8sh$#9ltOXBQ`XAs&yE zX5mwXtzf`}|J_pfx75yRpEKceO+AsoH!-n;9G8j_hcH)#JT<@#g^4;Y6$F*3K+QU0 zb#REzK?ObJv~sk(|vwP zeOmA;+Ioh{K^cH+nXN9JzI`rXLGQ^J@+5`&<&}it-i#S0!WK`=E&U7-%$`=F^Ow() z=S3gZ!*mV0UQR9#)tK|^!SeQ#8=>%a?|)Y2|9AY^D3#S2@gMWWbNbhu!q)#oncLI< zONcY@JL%~ag^gFXVs~uCDkx(W{<#Qidi*$vazqf>X0muCpdC~0MB4R#z3&lX{0uUJ z#?OO3n8OtSfk=@%c}0b|RQP@_>@v~~mz)2p^4380iL`}^+e&a)LSw^}Yi6jyWpoat z_@mgKB!YXF*)qXcwOeG!<3B7M*WMn*4NjL#q+44yUD6V z5WPE}l8+l~@%hZyul$gyutxowg|tq&h5w?J25wR6`y#QsUw7+XaQd~9?63UwC+x@17+a5(W;J-uVnbWTNg1oaSY5Qf=~8pd zJ=3#m=Viu3QS|87&1bcM=N?#Fylb2;QTc~|gv{m*GM!Nt(q(o^cJdw$#XR2boEYtN zc<+~Gb6t;BvxNnRp}ONk55DcT_uaL9 zl_{>d@e9qf_nwvX&v0_eQ=J^Kt*y_D{S}CYK32z4E}ZHd;`~KzNWJ~mR_W=P@YP0H zg*2Tl#>u4$k~*sc+2=4LQ>?EJw`#p+^;-1}6Su`%1@3+{u>ar&8}ppx^)|Nx-};S5 z->Pl#MB<|}lRC6GO(*=F$N2~2zeQQZ5xTzSbfpGS*KNLDckRf|B%jpRln1Ztj@~un zu2ZixLi+AnJ8atB)%QvjE=mM(dY#qHqq(vr&$@DLw|%tv(D4!1-J^C_+G(yycl^cV zDJbRU-TaV!Tm=%5>xCiG6{Sg5>0Z#);T~DFiV9iPw^de;l5NfRhK#hYeC?b68xLuG zawOOkXZ(Bo<|WyFRnobCiu`-X zhlY4QIn;M)&nu?xF3{kz&4vjL>Z4;rs~1X9cfTYkywJa(WxXvqUjM*`p$(DyRhzFp zxt`sXQ)WQlcM^8LCFHs5sY{`_uZxQh2|F)o$tGpXDwihh4o}~@|EbmHDjhkayBZ5d z`&agd5p6C#w%RsoWPblI{#e$dfu}&D9XC+Mf-4WPQeE6CUZpaF;%-DFv=e zR@Lx5oORJ4-<)Ctt)k29zqr{?tJ%5;@1Q&@W9f6{Q2W$W$Q|s#&n0!%Iy$4Jw<>oe zoom8XJt_^V*UWm>ruG7=T4{t{n1HAul_y9D;Z}MN>?;N#FoUm*>-|8_+^ZW(MY0YQ zIo9NMoQ!5DF&z`XfA_oA!E6lKFzwpcd84OLkj@Q%m6YUpZ{+OWWRo6*&}F{PAP>K) zcQ#3Bc{#6<`~95hh;gxG(s0dyW|!T0?r1yFBxX!T=HvBbrh9Z%=#0_YL#Oer@E1Y4 zZS(Vg;g_0Xmb`6C53cF4vICF2FMDqSWjI(lmsj$mHhsYMDfxa3C$?{7 zq;gi4NchR&n+aSTJTo&oUtFt{eV^h|QfkAX;1WANYE7KgcPtWij71t9G_zIUzAQ3X zbWMX1oHnWV--|Q}o3IK^O7bWVxsjt&9SB?!^B};vrG1)Rd(0d-LBtk2bvy*j_DkW+f-`>wug&y2t zkBy*jH)v9soa*@?)rL#12aHKHCF>Gc zq=JvzcC_;ON4|p|E&ytWjO;}J&)GeXf!KAx`s7Nz1!(7C<9|BA#dD6fXd9m={|jCl Bqrm_G diff --git a/widgets/m/default_login/images/icon64.png b/widgets/m/default_login/images/icon64.png deleted file mode 100644 index ffc7d12dc96a0f05ef4af81990430b2d137c86a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27735 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 diff --git a/widgets/m/default_login/include/container/m_default_loginWidgetContainer.php b/widgets/m/default_login/include/container/m_default_loginWidgetContainer.php deleted file mode 100644 index f1cfe2e3..00000000 --- a/widgets/m/default_login/include/container/m_default_loginWidgetContainer.php +++ /dev/null @@ -1,118 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_default_loginWidgetContainer.php 2007 2009-06-26 16:00:54Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); - -class m_default_loginWidgetContainer extends BaseMobileWidgetContainer -{ - private $db; // DB接続オブジェクト - private $sysDb; // システムDBオブジェクト - const DEFAULT_TITLE = 'ログイン'; // デフォルトのウィジェットタイトル - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DB接続オブジェクト作成 - $this->sysDb = $this->gInstance->getSytemDbObject(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - if ($act == 'login'){ // ログインのとき - // アカウント、パスワード取得 - $account = $request->trimValueOf('account'); - $password = $request->trimValueOf('password'); - if (!empty($password)) $password = md5($password); // パスワードはプレーンで送られてくる - - // ユーザ認証 - if ($this->gAccess->userLoginByAccount($account, $password)){ - // 画面を全体を再表示する - $this->gPage->redirect($this->gEnv->createCurrentPageUrlForMobile(), true/*遷移時のダイアログ表示を抑止*/); // セッションを維持 - return; - } else { // ログイン失敗の場合 - // ログイン状態を削除 - $this->gAccess->userLogout(); - - $this->tmpl->addVar('login_status', 'message', 'ログインに失敗しました'); // メッセージ - $this->tmpl->setAttribute('login_status', 'visibility', 'visible'); // ログイン状況 - } - } else if ($act == 'logout'){ // ログアウトのとき - $this->gAccess->userLogout(); - - // 画面を全体を再表示する - $this->gPage->redirect($this->gEnv->createCurrentPageUrl(), true/*遷移時のダイアログ表示を抑止*/); // セッションを終了する - return; - } - - // ログイン状態を取得 - $userName = $this->gEnv->getCurrentUserName(); - if (empty($userName)){ // ユーザがログインしていないとき - // ログイン入力部、ログインボタン表示 - $this->tmpl->setAttribute('login_field', 'visibility', 'visible'); - $this->tmpl->setAttribute('login_button', 'visibility', 'visible'); - $this->tmpl->addVar("_widget", "act", 'login'); // ログイン処理 - } else { // ユーザがログイン中のとき - $this->tmpl->addVar("login_status", "user_name", 'ログイン:' . $userName . '様'); - - // 会員情報、ログアウトボタン表示 - $this->tmpl->setAttribute('login_status', 'visibility', 'visible'); // ログイン状況 - $this->tmpl->setAttribute('logout_button', 'visibility', 'visible'); - $this->tmpl->addVar("_widget", "act", 'logout'); // ログアウト処理 - } - - // パラメータ埋め込み - $this->tmpl->addVar('_widget', 'url', $this->gEnv->createCurrentPageUrlForMobile()); - } - /** - * ウィジェットのタイトルを設定 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string ウィジェットのタイトル名 - */ - function _setTitle($request, &$param) - { - return self::DEFAULT_TITLE; - } -} -?> diff --git a/widgets/m/default_login/include/template/index.tmpl.html b/widgets/m/default_login/include/template/index.tmpl.html deleted file mode 100644 index 553de666..00000000 --- a/widgets/m/default_login/include/template/index.tmpl.html +++ /dev/null @@ -1,18 +0,0 @@ - -
- - -
{MESSAGE}{USER_NAME}
-
- -
アカウント:  
-
パスワード:
-
- -
-
- -
-
-
-
diff --git a/widgets/m/default_login/index.php b/widgets/m/default_login/index.php deleted file mode 100644 index 8e0bf02d..00000000 --- a/widgets/m/default_login/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 2003 2009-06-26 00:42:58Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/g_analytics/admin/index.php b/widgets/m/g_analytics/admin/index.php deleted file mode 100644 index 39d279cd..00000000 --- a/widgets/m/g_analytics/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3717 2010-10-19 07:28:14Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/g_analytics/ga.php b/widgets/m/g_analytics/ga.php deleted file mode 100644 index 31341655..00000000 --- a/widgets/m/g_analytics/ga.php +++ /dev/null @@ -1,186 +0,0 @@ - array( - "method" => "GET", - "user_agent" => $_SERVER["HTTP_USER_AGENT"], - "header" => ("Accepts-Language: " . $_SERVER["HTTP_ACCEPT_LANGUAGE"])) - ); - if (!empty($_GET["utmdebug"])) { - $data = file_get_contents( - $utmUrl, false, stream_context_create($options)); - } else { - $data = @file_get_contents( - $utmUrl, false, stream_context_create($options)); - } - } - - // Track a page view, updates all the cookies and campaign tracker, - // makes a server side request to Google Analytics and writes the transparent - // gif byte data to the response. - function trackPageView() { - $timeStamp = time(); - $domainName = $_SERVER["SERVER_NAME"]; - if (empty($domainName)) { - $domainName = ""; - } - - // Get the referrer from the utmr parameter, this is the referrer to the - // page that contains the tracking pixel, not the referrer for tracking - // pixel. - $documentReferer = $_GET["utmr"]; - if (empty($documentReferer) && $documentReferer !== "0") { - $documentReferer = "-"; - } else { - $documentReferer = urldecode($documentReferer); - } - $documentPath = $_GET["utmp"]; - if (empty($documentPath)) { - $documentPath = ""; - } else { - $documentPath = urldecode($documentPath); - } - - $account = $_GET["utmac"]; - $userAgent = $_SERVER["HTTP_USER_AGENT"]; - if (empty($userAgent)) { - $userAgent = ""; - } - - // Try and get visitor cookie from the request. - $cookie = $_COOKIE[COOKIE_NAME]; - - $guidHeader = $_SERVER["HTTP_X_DCMGUID"]; - if (empty($guidHeader)) { - $guidHeader = $_SERVER["HTTP_X_UP_SUBNO"]; - } - if (empty($guidHeader)) { - $guidHeader = $_SERVER["HTTP_X_JPHONE_UID"]; - } - if (empty($guidHeader)) { - $guidHeader = $_SERVER["HTTP_X_EM_UID"]; - } - - $visitorId = getVisitorId($guidHeader, $account, $userAgent, $cookie); - - // Always try and add the cookie to the response. - setrawcookie( - COOKIE_NAME, - $visitorId, - $timeStamp + COOKIE_USER_PERSISTENCE, - COOKIE_PATH); - - $utmGifLocation = "http://www.google-analytics.com/__utm.gif"; - - // Construct the gif hit url. - $utmUrl = $utmGifLocation . "?" . - "utmwv=" . VERSION . - "&utmn=" . getRandomNumber() . - "&utmhn=" . urlencode($domainName) . - "&utmr=" . urlencode($documentReferer) . - "&utmp=" . urlencode($documentPath) . - "&utmac=" . $account . - "&utmcc=__utma%3D999.999.999.999.999.1%3B" . - "&utmvid=" . $visitorId . - "&utmip=" . getIP($_SERVER["REMOTE_ADDR"]); - - sendRequestToGoogleAnalytics($utmUrl); - - // If the debug parameter is on, add a header to the response that contains - // the url that was used to contact Google Analytics. - if (!empty($_GET["utmdebug"])) { - header("X-GA-MOBILE-URL:" . $utmUrl); - } - // Finally write the gif data to the response. - writeGifData(); - } -?> diff --git a/widgets/m/g_analytics/images/icon32.png b/widgets/m/g_analytics/images/icon32.png deleted file mode 100644 index 206f857ccad9c15a4274bd7efbd2d6192e896f1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1502 zcmV<41tI#0P)w(EZ*psMAT%y8>Lw?3 z000FsNkl1AD;r8cW+nl($4Cg+@-zY}~y* z!XvkZ$fb^R_(;!12M4gqR`S_AqB1wrhH>_uWz~RfpZ9Rj+90)cwE#GsR$h7XdUWlq zQK|13>G%ocObYLY+mYQ~&?m{9I*6Jd!s%(i=35WIvEdxUKdI=N#4qUX1XxNq5E$^S57l< z=qZvZCxUZ5C%ZP08EI!nM}fr9Am!2-UV8U?%qXbkG8T)2Gdn&Zk(oqrIB9?CG0c+4 zf|?pcrKFNLEi+wGXF{j5D#K$csVRf8&pyVeT0phmPw1g1(De!icE7?;qftWPYpGh$ zK%ntKVx4dB;jTC?mxEic3$f5=C6zgYB+H0Ok+FTd(F=J>j!GI|Yr|%C zyk6dFKQ#j|UC8mlo+K~6cLZB$5~7D@zA1q^a^ifPVw|!vdA5)&mE;vaH(hRL+ZUsJ z(LKq=6=ec79u!SOw9dnvK80ywjL@2OG&MJ4HkkmBUU>ew=ayY&=GiSrN#_I>`W?6` z?erXd6g*fK~9tuuDELxxrr2~PV8i!%T4siL0rKH*s!Jrzstg- zuOH*)YXUScp3jy8@8Gu1r}e5^IQrry^r<{0Ma8yo5uzj^{PG%(jwX43XABI1x_}S6 zS);zjK{yg-VtkyDZ};I`P($_dRoKmDG#v(`dl4z(@GND1O$|G~PGTx&nK(Vk+q-hS z`S?=Y&Mf)jG%La@N%ZxSIJl4Ml~+=?VkM#=fH6m!VHoP%(+#Uj1Ey{ulnn#0}QjQsc`EzQk%eLgxmIcJJ9u zC=??X zFQ%)ji;0Oe7K?>}{sCgK7*$nO^!N7@kH?9{q6C9Ms;jFxJ~+r%Uww(qX2s|C6OBdb zIod<1SVYsbS@C88B$G+~=eelL^YIipgX`(^L$@pk-+b z+qZA0v8f54*NfNdMGyq?`2w}Ibu=_I;Pd%ev1~af6A4B~N6(#tlkqs~)~;nqI81GA zEwNY(x7&@b>$p80^m3W;Oa_a!0*Bp!0R#g)E?^FS0Dt z*cf3VlfmtFVYl070sQ4IC=?3VY_^&G_nn=j(rGqs+z3FaRHCAy0su|Z5Cj29l2BC@ zQ52A**=6^)+i+}b47bNah1q;j{{O!@a0%cNz`w1Z0n*o@*nu!(TmS$707*qoM6N<$ Eg5@5=-2eap diff --git a/widgets/m/g_analytics/images/icon64.png b/widgets/m/g_analytics/images/icon64.png deleted file mode 100644 index 279f0ae24a4518fe733999bcc01d9e291c61a2ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4087 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 - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_g_analyticsWidgetContainer.php 3717 2010-10-19 07:28:14Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php'); - -class admin_m_g_analyticsWidgetContainer extends BaseAdminWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'admin.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $act = $request->trimValueOf('act'); - if ($act == 'update'){ // 設定更新のとき - // 入力値を取得 - $account = $request->valueOf('account_no'); // Google Analyticsアカウント番号 - - if ($this->getMsgCount() == 0){ // エラーのないとき - $paramObj->account = $account; - $ret = $this->updateWidgetParamObj($paramObj); - if ($ret){ - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - } else { - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } - $this->gPage->updateParentWindow();// 親ウィンドウを更新 - } - } else { // 初期表示の場合 - // デフォルト値設定 - $account = ''; // Google Analyticsアカウント番号 - $paramObj = $this->getWidgetParamObj(); - if (!empty($paramObj)){ - $account = $paramObj->account; - } - } - - // 画面にデータを埋め込む - $this->tmpl->addVar("_widget", "account_no", $account); - } -} -?> diff --git a/widgets/m/g_analytics/include/container/m_g_analyticsWidgetContainer.php b/widgets/m/g_analytics/include/container/m_g_analyticsWidgetContainer.php deleted file mode 100644 index 6ff2cff4..00000000 --- a/widgets/m/g_analytics/include/container/m_g_analyticsWidgetContainer.php +++ /dev/null @@ -1,94 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_g_analyticsWidgetContainer.php 3719 2010-10-19 08:39:44Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); - -class m_g_analyticsWidgetContainer extends BaseWidgetContainer -{ - private $account; // Google AnalyticsのプロファイルのID - const ACCOUNT_HEAD = 'MO-'; // 携帯用アカウントヘッダ - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'main.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $this->account = ''; // Google AnalyticsのプロファイルのID - $paramObj = $this->getWidgetParamObj(); - if (!empty($paramObj)){ - $this->account = $paramObj->account; - } - - // アカウント番号が空のときは出力しない - if (empty($this->account)){ - $this->cancelParse(); - } else { - $imageUrl = $this->googleAnalyticsGetImageUrl(); - $this->tmpl->addVar("_widget", "image", $imageUrl); - } - } - function googleAnalyticsGetImageUrl() - { - //global $GA_ACCOUNT, $GA_PIXEL; - $GA_ACCOUNT = self::ACCOUNT_HEAD . $this->account; - $GA_PIXEL = $this->gEnv->getCurrentWidgetRootUrl() . '/ga.php'; - - $url = ""; - $url .= $GA_PIXEL . "?"; - $url .= "utmac=" . $GA_ACCOUNT; - $url .= "&utmn=" . rand(0, 0x7fffffff); - $referer = $_SERVER["HTTP_REFERER"]; - $query = $_SERVER["QUERY_STRING"]; - $path = $_SERVER["REQUEST_URI"]; - if (empty($referer)) { - $referer = "-"; - } - $url .= "&utmr=" . urlencode($referer); - if (!empty($path)) { - $url .= "&utmp=" . urlencode($path); - } - $url .= "&guid=ON"; - return str_replace("&", "&", $url); - } -} -?> diff --git a/widgets/m/g_analytics/include/help/index.php b/widgets/m/g_analytics/include/help/index.php deleted file mode 100644 index 0b1076e0..00000000 --- a/widgets/m/g_analytics/include/help/index.php +++ /dev/null @@ -1,25 +0,0 @@ - - * @copyright Copyright 2006-2008 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3717 2010-10-19 07:28:14Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -global $HELP; - -// ########## ユーザ一覧 ########## -$HELP['account_no']['title'] = 'アカウント番号'; -$HELP['account_no']['body'] = 'Google Analyticsから取得した「xxxx-x」形式のアカウント番号を設定します。アカウント番号はトラッキングコードに埋め込まれます。この値が空の場合はトラッキングコードを出力しません。'; -?> diff --git a/widgets/m/g_analytics/include/template/admin.tmpl.html b/widgets/m/g_analytics/include/template/admin.tmpl.html deleted file mode 100644 index 81535360..00000000 --- a/widgets/m/g_analytics/include/template/admin.tmpl.html +++ /dev/null @@ -1,30 +0,0 @@ - - -
-
- -
- - - - - - - - - - - -
Google Analytics 設定
アカウント番号UA- 
-
-
-
diff --git a/widgets/m/g_analytics/include/template/main.tmpl.html b/widgets/m/g_analytics/include/template/main.tmpl.html deleted file mode 100644 index 388cbb12..00000000 --- a/widgets/m/g_analytics/include/template/main.tmpl.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/widgets/m/g_analytics/index.php b/widgets/m/g_analytics/index.php deleted file mode 100644 index 39d279cd..00000000 --- a/widgets/m/g_analytics/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3717 2010-10-19 07:28:14Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/googlemaps/admin/index.php b/widgets/m/googlemaps/admin/index.php deleted file mode 100644 index bfc3d4da..00000000 --- a/widgets/m/googlemaps/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3731 2010-10-25 06:29:17Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/googlemaps/images/icon32.gif b/widgets/m/googlemaps/images/icon32.gif deleted file mode 100644 index b6fce39eee79ae9db5776185871b71720e471996..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmV!Tcm6fEl)m?td z&%~bZv8n9dr_R2-w@pm=*V50|>AkXzFj1)Lwy~vga7dj=+1S_d_Wz%&$bX2ZzMw4q zhk8_QtEORE*1Ndg$a?tv|JcI1&#{)@6621Lz_jq$?79gyVGS_l%TvrY|5)+ zT=T@dxTt4vjLF~K-TUa~#Kpy(wdeZu+U#{{y{D)1zOw4qh`oAp#V;m$kGzJ1gKUh_ zzgkfjN44EjKf2KT=Ezs)?ftQzVveEB=cb+Y@7l?Y>t#b;g1+4jNC!}a<4POMSx z*?yahi~afVHCe3x{PtaMrk}a<_WJDR=IEQO)Blfx?a+1goTEOh>41ejE#vhj*(qgS3z$Lkquy8hdE{_V`&r)k$N~chBA3> zgJorUAy`;~0Uk<5f?ZQN4JRmiC0IjWdQ%i*g+EI|baVj%Zd(^wMF~%2XgGWf9~dCS zXL87TDdhx6dSh)d3y@SmJwtjVHaIg-Fn)G|RXQ4iBAyhGQbQ03Ei52~v9e)KmlfIe zFtJcb!+;_w^gL0J1OS^7CK}v{V+0N>HBr*&LEr^Ln-XjY)iKjV4G$uEKGdLLLr;Sd z9DW(l;DStp37j&R*ki~QBLfNo1jwVJlp+IUx^!vs%W9$oO;iZ+N|vmRo@Ebx5fdST z7-DHm35nUUX3Y*faR)(ov8FgD1@uR@umO(d6?S&ihYiP zf!?_p%zAJDW&lxfxtn$X%w}fS($G*~fxp1U_UGefW@gNp0O7T-no2@uGc&iewk}t$ zq@<{ghIIe`|KsE2;mUTiisl}ANIpXj5Hm$65QN6w|9Pki3ud2Z0z-T(7s|Npm( zn~U=H{+T5pR765AV${vOe{DcK_V)G|Mxq8LbpP4XlC9)?gM|N-h|J8)Y>RDXgT9sJ znB{a~ri?ZDiG9GUVgJ3ggAWPd>;KHZz^$>mo?lu|Y_Q(k*0O10b)WE!-;VF`@;Oh5 zUSf7lGB6XN8TjX=7d?>nu%*u_5yrZ*=fgu{irlH6ki(!NsISF_j*q?4`QDL*lo<@= z@9}nCB4=`zy1TjJQAgU)x6kO-|D~Au=8o>1juuYBfGZ`{=Kt}@Dt?>Utt=n@`0r47 z$$XEz+1=~A41ejE#|MMW;2hE8W^bu^J) zSq=_KF(?M3q#kE^QYNa7E?FBTWJX3M8w48@wH`hVIlGK5C?Z#VG`kc@HXO+$%#Tb3 zT26*Ld`jC5EsjNN5`Boyf)rI%H-~XkX)K4L9xiQd9=N3&G=$zE15~;=QUl=&1S@6S z4N8MWhL8nVB=*DcCQB9+4!8tFCn(Mj1`Mo(pb*BKpl?SS1%WdmOqde`;Cv9YV#@?N zbgo#~;;z>mB@>GAp`eVUhaXE+6fu(1$u4LG$S}HLMM0QB3=S;uz`}ypK_D#H@nE3F z6+s672s}~MgyfJHF+Eg)lVQi8A~E*lRixtpA3}PpfcdZj&*4EV7CcbGgoI2~{94;BaK;AQS|~7;@p|pBEQF4rm(`rwow^D;~@)>E;2MEPId%%3@U{;ro+P7+Y=Gj9^V0(-T!=eFXAOZK zg=q9Kux4&y473Om0vmLsVF3^Uda!^PD$vkF0X+mDM-FBP;@%en0H_Fb1iWEL8~xEh z0UQThKoA%TxDdw{cvL9J6nLB!hXy6YAc7u))O8pIRvZ9993=r+$Q*kRAjfNhxM1G@ z6HFQL!U13Cp+*P_TowTkc!0pd6kBv~nIKNYK)@V=&>%nqCe-1<1z;RtMG7f=F<&7^ zJYmBg8#vHI4@r!{$9yUvfx!|CXwcvwDs%vZ5Hc9Lix&tWkOUR?xj=&kIq;x?AQK?r zhaX7n0FQSO9Kiu;JM_`Voc#c0(`t06K*yX+{4zlV9MrIfNFG$L UAg5lg`R1H=?)m4SHya25J6PdoU;qFB diff --git a/widgets/m/googlemaps/include/container/admin_m_googlemapsWidgetContainer.php b/widgets/m/googlemaps/include/container/admin_m_googlemapsWidgetContainer.php deleted file mode 100644 index ea32855d..00000000 --- a/widgets/m/googlemaps/include/container/admin_m_googlemapsWidgetContainer.php +++ /dev/null @@ -1,452 +0,0 @@ - - * @copyright Copyright 2006-2012 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_googlemapsWidgetContainer.php 4770 2012-03-19 12:15:19Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php'); - -class admin_m_googlemapsWidgetContainer extends BaseAdminWidgetContainer -{ - private $serialNo; // 選択中の項目のシリアル番号 - private $serialArray = array(); // 表示中のシリアル番号 - private $langId; - private $configId; // 定義ID - private $paramObj; // パラメータ保存用オブジェクト - const DEFAULT_NAME_HEAD = '名称未設定'; // デフォルトの設定名 - const DEFAULT_WIDTH = 240; // デフォルトの幅 - const DEFAULT_HEIGHT = 320; // デフォルトの高さ - const CODING_URL = 'http://www.geocoding.jp/'; // 緯度経度取得用URL - const DEFAULT_POS_LAT = '35.594757'; // デフォルト緯度 - const DEFAULT_POS_LNG = '139.620739'; // デフォルト経度 - const DEFAULT_ZOOM = 13; // デフォルトのズームレベル - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == 'list'){ // 一覧画面 - return 'admin_list.tmpl.html'; - } else { // 一覧画面 - return 'admin.tmpl.html'; - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _assign($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == 'list'){ // 一覧画面 - return $this->createList($request); - } else { // 詳細設定画面 - return $this->createDetail($request); - } - } - /** - * 詳細画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @return なし - */ - function createDetail($request) - { - // ページ定義IDとページ定義のレコードシリアル番号を取得 - $this->startPageDefParam($defSerial, $defConfigId, $this->paramObj); - - $userId = $this->gEnv->getCurrentUserId(); - $this->langId = $this->gEnv->getCurrentLanguage(); // 表示言語を取得 - $act = $request->trimValueOf('act'); - $this->serialNo = $request->trimValueOf('serial'); // 選択項目のシリアル番号 - - // 入力値を取得 - $name = $request->trimValueOf('item_name'); // ヘッダタイトル - $width = $request->trimValueOf('item_width'); // 画像の幅 - $height = $request->trimValueOf('item_height'); // 画像の高さ - $lat = $request->trimValueOf('item_lat'); // 緯度 - $lng = $request->trimValueOf('item_lng'); // 経度 - $markerLat = $request->trimValueOf('item_marker_lat'); // マーカー緯度 - $markerLng = $request->trimValueOf('item_marker_lng'); // マーカー経度 - $zoom = $request->trimValueOf('item_zoom'); // ズームレベル - $showMarker = ($request->trimValueOf('item_show_marker') == 'on') ? 1 : 0; // マーカーを表示するかどうか - $alt = $request->trimValueOf('item_alt'); // 代替テキスト - - $this->configId = $request->trimValueOf('item_id'); // 定義ID - if (empty($this->configId)) $this->configId = $defConfigId; // 呼び出しウィンドウから引き継いだ定義ID - - $replaceNew = false; // データを再取得するかどうか - if (empty($act)){// 初期起動時 - // デフォルト値設定 - $this->configId = $defConfigId; // 呼び出しウィンドウから引き継いだ定義ID - $replaceNew = true; // データ再取得 - } else if ($act == 'add'){// 新規追加 - // 入力チェック - $this->checkInput($name, '名前'); - $this->checkNumeric($width, '幅'); - $this->checkNumeric($height, '高さ'); - $this->checkNumber($lat, '緯度'); - $this->checkNumber($lng, '経度'); - $this->checkNumber($zoom, 'ズームレベル'); - if ($showMarker){ // マーカーを表示するかどうか - $this->checkNumber($markerLat, 'マーカー緯度'); - $this->checkNumber($markerLng, 'マーカー経度'); - } else { - $this->checkNumber($markerLat, 'マーカー緯度', true); - $this->checkNumber($markerLng, 'マーカー経度', true); - } - - // 設定名の重複チェック - for ($i = 0; $i < count($this->paramObj); $i++){ - $targetObj = $this->paramObj[$i]->object; - if ($name == $targetObj->name){ // 定義名 - $this->setUserErrorMsg('名前が重複しています'); - break; - } - } - - // エラーなしの場合は、データを登録 - if ($this->getMsgCount() == 0){ - // 追加オブジェクト作成 - $newObj = new stdClass; - $newObj->name = $name; // 表示名 - $newObj->width = $width; // 幅 - $newObj->height = $height; // 高さ - $newObj->lat = $lat; // 緯度 - $newObj->lng = $lng; // 経度 - $newObj->markerLat = $markerLat; // マーカー緯度 - $newObj->markerLng = $markerLng; // マーカー経度 - - $newObj->zoom = $zoom; // ズームレベル - $newObj->showMarker = $showMarker; // マーカーを表示するかどうか - $newObj->alt = $alt; // 代替テキスト - - $ret = $this->addPageDefParam($defSerial, $defConfigId, $this->paramObj, $newObj); - - if ($ret){ - $this->setGuidanceMsg('データを追加しました'); - - $this->configId = $defConfigId; // 定義定義IDを更新 - $replaceNew = true; // データ再取得 - } else { - $this->setAppErrorMsg('データ追加に失敗しました'); - } - } - } else if ($act == 'update'){ // 設定更新のとき - // 入力値のエラーチェック - $this->checkNumeric($width, '幅'); - $this->checkNumeric($height, '高さ'); - $this->checkNumber($lat, '緯度'); - $this->checkNumber($lng, '経度'); - $this->checkNumber($zoom, 'ズームレベル'); - if ($showMarker){ // マーカーを表示するかどうか - $this->checkNumber($markerLat, 'マーカー緯度'); - $this->checkNumber($markerLng, 'マーカー経度'); - } else { - $this->checkNumber($markerLat, 'マーカー緯度', true); - $this->checkNumber($markerLng, 'マーカー経度', true); - } - - if ($this->getMsgCount() == 0){ // エラーのないとき - // 現在の設定値を取得 - $ret = $this->getPageDefParam($defSerial, $defConfigId, $this->paramObj, $this->configId, $targetObj); - if ($ret){ - // ウィジェットオブジェクト更新 - $targetObj->width = $width; // ヘッダの幅 - $targetObj->height = $height; // ヘッダの高さ - $targetObj->lat = $lat; // 緯度 - $targetObj->lng = $lng; // 経度 - $targetObj->markerLat = $markerLat; // マーカー緯度 - $targetObj->markerLng = $markerLng; // マーカー経度 - $targetObj->zoom = $zoom; // ズームレベル - $targetObj->showMarker = $showMarker; // マーカーを表示するかどうか - $targetObj->alt = $alt; // 代替テキスト - } - - // 設定値を更新 - if ($ret) $ret = $this->updatePageDefParam($defSerial, $defConfigId, $this->paramObj, $this->configId, $targetObj); - - if ($ret){ - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - - $replaceNew = true; // データ再取得 - } else { - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } - } - } else if ($act == 'select'){ // 定義IDを変更 - $replaceNew = true; // データ再取得 - } - - // 設定項目選択メニュー作成 - $this->createItemMenu(); - - // 表示用データを取得 - if (empty($this->configId)){ // 新規登録の場合 - $this->tmpl->setAttribute('item_name_visible', 'visibility', 'visible');// 名前入力フィールド表示 - if ($replaceNew){ // データ再取得時 - $name = $this->createDefaultName(); // デフォルト登録項目名 - $width = self::DEFAULT_WIDTH; // 幅 - $height = self::DEFAULT_HEIGHT; // 高さ - $lat = self::DEFAULT_POS_LAT; // 緯度 - $lng = self::DEFAULT_POS_LNG; // 経度 - $markerLat = self::DEFAULT_POS_LAT; // マーカー緯度 - $markerLng = self::DEFAULT_POS_LNG; // マーカー経度 - $zoom = self::DEFAULT_ZOOM; // ズームレベル - $showMarker = 0; // マーカーを表示するかどうか - $alt = ''; // 代替テキスト - } - $this->serialNo = 0; - } else { - if ($replaceNew){ - $ret = $this->getPageDefParam($defSerial, $defConfigId, $this->paramObj, $this->configId, $targetObj); - if ($ret){ - $name = $targetObj->name;// 名前 - $width = $targetObj->width; // 幅 - $height = $targetObj->height; // 高さ - $lat = $targetObj->lat; // 緯度 - $lng = $targetObj->lng; // 経度 - $markerLat = $targetObj->markerLat; // マーカー緯度 - $markerLng = $targetObj->markerLng; // マーカー経度 - $zoom = $targetObj->zoom; // ズームレベル - $showMarker = $targetObj->showMarker; // マーカーを表示するかどうか - $alt = $targetObj->alt; // 代替テキスト - } - } - $this->serialNo = $this->configId; - - // 新規作成でないときは、メニューを変更不可にする(画面作成から呼ばれている場合のみ) - if (!empty($defConfigId) && !empty($defSerial)) $this->tmpl->addVar("_widget", "id_disabled", 'disabled'); - } - - // プレビュー表示 - if (is_numeric($lat) && is_numeric($lng) && is_numeric($zoom)) $this->tmpl->setAttribute('show_script', 'visibility', 'visible');// 緯度経度が入力されている場合 - - // 画面にデータを埋め込む - $this->tmpl->addVar("item_name_visible", "name", $name); // 名前 - $this->tmpl->addVar("_widget", "width", $width); - $this->tmpl->addVar("_widget", "height", $height); - $this->tmpl->addVar("_widget", "lat", $lat); // 緯度 - $this->tmpl->addVar("_widget", "lng", $lng); // 経度 - $this->tmpl->addVar("_widget", "zoom", $zoom); // ズームレベル - $this->tmpl->addVar("_widget", "marker_lat", $markerLat); // マーカー緯度 - $this->tmpl->addVar("_widget", "marker_lng", $markerLng); // マーカー経度 - $this->tmpl->addVar("_widget", "alt", $alt); // 代替テキスト - $this->tmpl->addVar("show_script", "lat", $lat); // 緯度 - $this->tmpl->addVar("show_script", "lng", $lng); // 経度 - $this->tmpl->addVar("show_script", "zoom", $zoom); // ズームレベル - $this->tmpl->addVar("show_marker", "marker_lat", $markerLat); // マーカー緯度 - $this->tmpl->addVar("show_marker", "marker_lng", $markerLng); // マーカー経度 - - $checked = ''; - if ($showMarker){ // マーカーを表示するかどうか - $checked = 'checked'; - - // 緯度経度が入力されている場合はスクリプトを表示 - if (is_numeric($markerLat) && is_numeric($markerLng)) $this->tmpl->setAttribute('show_marker', 'visibility', 'visible');// マーカーを表示 - } - $this->tmpl->addVar("_widget", "show_marker_checked", $checked); // マーカーを表示するかどうか - - $this->tmpl->addVar("_widget", "coding_url", self::CODING_URL); // 緯度経度取得用URL - - $this->tmpl->addVar("_widget", "serial", $this->serialNo);// 選択中のシリアル番号、IDを設定 - - // ボタンの表示制御 - if (empty($this->serialNo)){ // 新規追加項目を選択しているとき - $this->tmpl->setAttribute('add_button', 'visibility', 'visible');// 「新規追加」ボタン - } else { - $this->tmpl->setAttribute('update_button', 'visibility', 'visible');// 「更新」ボタン - } - // ページ定義IDとページ定義のレコードシリアル番号を更新 - $this->endPageDefParam($defSerial, $defConfigId, $this->paramObj); - } - /** - * 選択用メニューを作成 - * - * @return なし - */ - function createItemMenu() - { - for ($i = 0; $i < count($this->paramObj); $i++){ - $id = $this->paramObj[$i]->id;// 定義ID - $targetObj = $this->paramObj[$i]->object; - $name = $targetObj->name;// 定義名 - $selected = ''; - - if (empty($id)) continue;// 定義ID=0は一覧表示しない - - if ($this->configId == $id) $selected = 'selected'; - $row = array( - 'name' => $name, // 名前 - 'value' => $id, // 定義ID - 'selected' => $selected // 選択中の項目かどうか - ); - $this->tmpl->addVars('title_list', $row); - $this->tmpl->parseTemplate('title_list', 'a'); - } - } - /** - * デフォルトの名前を取得 - * - * @return string デフォルト名 - */ - function createDefaultName() - { - $name = self::DEFAULT_NAME_HEAD; - for ($j = 1; $j < 100; $j++){ - $name = self::DEFAULT_NAME_HEAD . $j; - // 設定名の重複チェック - for ($i = 0; $i < count($this->paramObj); $i++){ - $targetObj = $this->paramObj[$i]->object; - if ($name == $targetObj->name){ // 定義名 - break; - } - } - // 重複なしのときは終了 - if ($i == count($this->paramObj)) break; - } - return $name; - } - /** - * 一覧画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @return なし - */ - function createList($request) - { - // ページ定義IDとページ定義のレコードシリアル番号を取得 - $this->startPageDefParam($defSerial, $defConfigId, $this->paramObj); - - $userId = $this->gEnv->getCurrentUserId(); - $langId = $this->gEnv->getCurrentLanguage(); // 表示言語を取得 - $act = $request->trimValueOf('act'); - - if ($act == 'delete'){ // メニュー項目の削除 - $listedItem = explode(',', $request->trimValueOf('seriallist')); - $delItems = array(); - for ($i = 0; $i < count($listedItem); $i++){ - // 項目がチェックされているかを取得 - $itemName = 'item' . $i . '_selected'; - $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0; - - if ($itemValue){ // チェック項目 - $delItems[] = $listedItem[$i]; - } - } - if (count($delItems) > 0){ - $ret = $this->delPageDefParam($defSerial, $defConfigId, $this->paramObj, $delItems); - if ($ret){ // データ削除成功のとき - $this->setGuidanceMsg('データを削除しました'); - } else { - $this->setAppErrorMsg('データ削除に失敗しました'); - } - } - } - - // 定義一覧作成 - $this->createItemList(); - - $this->tmpl->addVar("_widget", "serial_list", implode($this->serialArray, ','));// 表示項目のシリアル番号を設定 - - // ページ定義IDとページ定義のレコードシリアル番号を更新 - $this->endPageDefParam($defSerial, $defConfigId, $this->paramObj); - } - /** - * 定義一覧作成 - * - * @return なし - */ - function createItemList() - { - $index = 0; - for ($i = 0; $i < count($this->paramObj); $i++){ - $id = $this->paramObj[$i]->id;// 定義ID - $targetObj = $this->paramObj[$i]->object; - $name = $targetObj->name;// 定義名 - - if (empty($id)) continue;// 定義ID=0は一覧表示しない - - $defCount = 0; - if (!empty($id)){ - $defCount = $this->_db->getPageDefCount($this->gEnv->getCurrentWidgetId(), $id); - } - $operationDisagled = ''; - if ($defCount > 0) $operationDisagled = 'disabled'; - - // 値が設定されていないときはデフォルト値を設定 - $markerLat = $targetObj->markerLat; - if ($markerLat == '') $markerLat = 0; // マーカー緯度 - $markerLng = $targetObj->markerLng; - if ($markerLng == '') $markerLng = 0; // マーカー経度 - - $row = array( - 'index' => $index, - 'ope_disabled' => $operationDisagled, // 選択可能かどうか - 'name' => $this->convertToDispString($name), // 名前 - 'width' => $targetObj->width, // 動画幅 - 'height' => $targetObj->height, // 動画高さ - 'lat' => $targetObj->lat, // 緯度 - 'lng' => $targetObj->lng, // 経度 - 'marker_lat' => $markerLat, // マーカー緯度 - 'marker_lng' => $markerLng, // マーカー経度 - 'zoom' => $targetObj->zoom, // ズームレベル - 'marker' => $targetObj->showMarker, // マーカーを表示するかどうか - 'def_count' => $defCount // 使用数 - ); - $this->tmpl->addVars('itemlist', $row); - $this->tmpl->parseTemplate('itemlist', 'a'); - - // シリアル番号を保存 - $this->serialArray[] = $id; - $index++; // 項目番号更新 - } - } - /** - * JavascriptファイルをHTMLヘッダ部に設定 - * - * JavascriptファイルをHTMLのheadタグ内に追加出力する。 - * _assign()よりも後に実行される。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。 - * @return string Javascriptファイル。出力しない場合は空文字列を設定。 - */ - function _addScriptFileToHead($request, &$param) - { - $scriptUrl = $this->getUrl('http://maps.google.com/maps/api/js?sensor=false'); - return $scriptUrl; - } -} -?> diff --git a/widgets/m/googlemaps/include/container/m_googlemapsWidgetContainer.php b/widgets/m/googlemaps/include/container/m_googlemapsWidgetContainer.php deleted file mode 100644 index 98da46b4..00000000 --- a/widgets/m/googlemaps/include/container/m_googlemapsWidgetContainer.php +++ /dev/null @@ -1,189 +0,0 @@ - - * @copyright Copyright 2006-2012 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_googlemapsWidgetContainer.php 4770 2012-03-19 12:15:19Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); - -class m_googlemapsWidgetContainer extends BaseWidgetContainer -{ - private $langId; // 現在の言語 - const DEFAULT_CONFIG_ID = 0; - const DEFAULT_TITLE = 'Googleマップ'; // デフォルトのウィジェットタイトル - const MIN_ZOOM_LEVEL = 1; // ズーム値最小 - const MAX_ZOOM_LEVEL = 21; // ズーム値最大 - const MOVE_RATIO = 0.4; // 地図を移動する場合の移動比率 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _assign($request, &$param) - { - $this->langId = $this->gEnv->getCurrentLanguage(); - - // 定義ID取得 - $configId = $this->gEnv->getCurrentWidgetConfigId(); - if (empty($configId)) $configId = self::DEFAULT_CONFIG_ID; - - // パラメータオブジェクトを取得 - $targetObj = $this->getWidgetParamObjByConfigId($configId); - if (empty($targetObj)){ // 定義データが取得できないとき - $this->cancelParse();// 出力しない - return; - } - - // 初期値取得 - $name = $targetObj->name;// 定義名 - $width = $targetObj->width; // 幅 - $height = $targetObj->height; // 高さ - $lat = $targetObj->lat; // 緯度 - $lng = $targetObj->lng; // 経度 - $markerLat = $targetObj->markerLat; // マーカー緯度 - $markerLng = $targetObj->markerLng; // マーカー経度 - $zoom = intval($targetObj->zoom); // ズームレベル - $showMarker = $targetObj->showMarker; // マーカーを表示するかどうか - $alt = $targetObj->alt; // 代替テキスト - $pixelX = 0; // 経度移動ピクセル値 - $pixelY = 0; // 緯度移動ピクセル値 - - // URLからパラメータを取得 - $value = $request->trimValueOf('center'); // 中心点 - if (!empty($value)){ - list($lat, $lng) = explode(',', $value, 2); - $lat = floatval(trim($lat)); - $lng = floatval(trim($lng)); - } - $value = $request->trimValueOf('zoom'); // ズームレベル - if (!empty($value)) $zoom = intval($value); - $value = $request->trimValueOf('move'); // 地図移動方向 - if (!empty($value)){ - switch ($value){ - case 'left': - $pixelX = $width * self::MOVE_RATIO * (-1); - break; - case 'right': - $pixelX = $width * self::MOVE_RATIO; - break; - case 'up': - $pixelY = $height * self::MOVE_RATIO * (-1); - break; - case 'down': - $pixelY = $height * self::MOVE_RATIO; - break; - } - } - - // 値の修正 - if ($zoom < self::MIN_ZOOM_LEVEL) $zoom = self::MIN_ZOOM_LEVEL; - if ($zoom > self::MAX_ZOOM_LEVEL) $zoom = self::MAX_ZOOM_LEVEL; - - // 中心点の移動 - if ($pixelX != 0 || $pixelY != 0) list($lng, $lat) = $this->moveByPixel($lng, $lat, $pixelX, $pixelY, $zoom); - - // 画像URL作成 -// $url = 'http://maps.google.com/maps/api/staticmap?center=' . $lat . ',' . $lng . '&zoom=' . $zoom . '&size=' . $width . 'x' . $height . '&format=gif&mobile=true&sensor=true'; // docomo携帯では「format」が必須 - $url = 'http://maps.googleapis.com/maps/api/staticmap?center=' . $lat . ',' . $lng . '&zoom=' . $zoom . '&size=' . $width . 'x' . $height . '&format=gif&mobile=true'; // docomo携帯では「format」が必須 // 2016/9/19更新 - if ($showMarker){// マーカー表示 - $url .= '&markers=' . $markerLat . ',' . $markerLng; - } - $option = 'width="' . $width . '" height="' . $height . '" '; - if (!empty($alt)) $option .= 'alt="' . $this->convertToDispString($alt) . '" '; - - // 地図操作用URL作成 - $paramBase = 'center=' . $lat . ',' . $lng; - $zoomSmall = $zoom -1; - if ($zoomSmall < self::MIN_ZOOM_LEVEL) $zoomSmall = self::MIN_ZOOM_LEVEL; - $param = $paramBase . '&zoom=' . $zoomSmall; - $smallUrlLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile($param))); - $zoomLarge = $zoom +1; - if ($zoomLarge > self::MAX_ZOOM_LEVEL) $zoomLarge = self::MAX_ZOOM_LEVEL; - $param = $paramBase . '&zoom=' . $zoomLarge; - $largeUrlLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile($param))); - $param = $paramBase . '&zoom=' . $zoom . '&move=left'; - $leftUrlLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile($param))); - $param = $paramBase . '&zoom=' . $zoom . '&move=right'; - $rightUrlLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile($param))); - $param = $paramBase . '&zoom=' . $zoom . '&move=up'; - $upUrlLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile($param))); - $param = $paramBase . '&zoom=' . $zoom . '&move=down'; - $downUrlLink = $this->convertUrlToHtmlEntity($this->getUrl($this->gEnv->createCurrentPageUrlForMobile($param))); - - // 表示データ埋め込み - $this->tmpl->addVar("_widget", "url", $this->getUrl($url)); - $this->tmpl->addVar("_widget", "option", $option); - $this->tmpl->addVar("_widget", "url_small", $smallUrlLink); - $this->tmpl->addVar("_widget", "url_large", $largeUrlLink); - $this->tmpl->addVar("_widget", "url_left", $leftUrlLink); - $this->tmpl->addVar("_widget", "url_right", $rightUrlLink); - $this->tmpl->addVar("_widget", "url_up", $upUrlLink); - $this->tmpl->addVar("_widget", "url_down", $downUrlLink); - } - /** - * ウィジェットのタイトルを設定 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string ウィジェットのタイトル名 - */ - function _setTitle($request, &$param) - { - return self::DEFAULT_TITLE; - } - /** - * Googleマップの中心点をピクセル値で移動 - * - * @param float $x 中心点経度 - * @param float $y 中心点緯度 - * @param int $pixelX 移動ピクセル値経度 - * @param int $pixelY 移動ピクセル値緯度 - * @param int $zoom ズームレベル - * @return array x,yの配列で新規の中心点の緯度経度が返る - */ - function moveByPixel($x, $y, $pixelX, $pixelY, $zoom) - { - $offset = 268435456; - $radius = $offset / pi(); - $newX = ((round(round($offset + $radius * $x * pi() / 180) + ($pixelX << (21 - $zoom))) - $offset) / $radius) * 180 / pi(); - $newY = (pi() / 2 - 2 * atan(exp((round(round($offset - $radius * log((1 + sin($y * pi() / 180)) / (1 - sin($y * pi() / 180))) / 2) + ($pixelY << (21 - $zoom))) - $offset) / $radius))) * 180 / pi(); - return array($newX, $newY); - } -} -?> diff --git a/widgets/m/googlemaps/include/help/index.php b/widgets/m/googlemaps/include/help/index.php deleted file mode 100644 index b5f01094..00000000 --- a/widgets/m/googlemaps/include/help/index.php +++ /dev/null @@ -1,55 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3734 2010-10-26 02:47:54Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -global $HELP; - -// ########## 設定項目一覧 ########## -$HELP['item_list']['title'] = '設定一覧'; -$HELP['item_list']['body'] = '登録されている設定の一覧です。'; -$HELP['item_detail']['title'] = '設定詳細'; -$HELP['item_detail']['body'] = '詳細設定を行います。'; -$HELP['item_check']['title'] = '選択用チェックボックス'; -$HELP['item_check']['body'] = '削除を行う項目を選択します。'; -$HELP['item_name']['title'] = '名前'; -$HELP['item_name']['body'] = '設定名です。'; -$HELP['item_name_input']['title'] = '名前'; -$HELP['item_name_input']['body'] = '設定名です。新規に登録するか、登録済みの設定を選択します。'; -$HELP['item_map_key']['title'] = 'Googleマップ利用キー'; -$HELP['item_map_key']['body'] = 'Googleマップを利用するにはドメイン登録してキーを入手する必要があります。'; -$HELP['item_map_pos']['title'] = 'マップ表示位置(中心)'; -$HELP['item_map_pos']['body'] = '地図の中心の位置の緯度、経度を指定します。'; -$HELP['item_map_size']['title'] = '表示サイズ'; -$HELP['item_map_size']['body'] = '地図の幅、高さをpxで指定します。ズームレベルは1~21まで設定可能です。'; -$HELP['item_marker']['title'] = 'マーカー'; -$HELP['item_marker']['body'] = '緯度、経度指定でマーカーが表示できます。'; -$HELP['item_alt']['title'] = '代替テキスト'; -$HELP['item_alt']['body'] = 'マップが表示できないときの代替テキストです。'; -$HELP['item_map_preview']['title'] = 'Googleマッププレビュー'; -$HELP['item_map_preview']['body'] = '実際に表示されるGoogleマップです。'; -$HELP['item_id']['title'] = '設定ID'; -$HELP['item_id']['body'] = '自動的に振られる設定IDです。'; -$HELP['item_ref']['title'] = '使用'; -$HELP['item_ref']['body'] = '設定を使用しているウィジェット数を示します。使用が0の設定のみ削除可能です。'; -$HELP['item_list_btn']['title'] = '一覧ボタン'; -$HELP['item_list_btn']['body'] = '設定一覧を表示します。'; -$HELP['item_del_btn']['title'] = '削除ボタン'; -$HELP['item_del_btn']['body'] = '選択されている設定を削除します。
項目を選択するには、一覧の左端のチェックボックスにチェックを入れます。'; -$HELP['item_ret_btn']['title'] = '戻るボタン'; -$HELP['item_ret_btn']['body'] = '設定詳細へ戻ります。'; -?> diff --git a/widgets/m/googlemaps/include/template/admin.tmpl.html b/widgets/m/googlemaps/include/template/admin.tmpl.html deleted file mode 100644 index 8a93700d..00000000 --- a/widgets/m/googlemaps/include/template/admin.tmpl.html +++ /dev/null @@ -1,128 +0,0 @@ -/** - * 表示データ作成用テンプレート(patTemplate) - * - * LICENSE: This source file is licensed under the terms of the GNU General Public License. - * - * @package Magic3 Framework - * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2012 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin.tmpl.html 4770 2012-03-19 12:15:19Z fishbone $ - * @link http://www.magic3.org - */ - - -
-
- -
- - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
名前 - - - - -
マップ表示位置(中心)緯度:  çµŒåº¦ï¼šç·¯åº¦çµŒåº¦ã‚’取得
表示サイズ幅: -   é«˜ã•ï¼š -   ã‚ºãƒ¼ãƒ ãƒ¬ãƒ™ãƒ«ï¼š -
マーカー表示  ç·¯åº¦ï¼š  çµŒåº¦ï¼š
代替テキスト
- - - - - - - - - -
-
-
-
-
-
-
- -
-
-
diff --git a/widgets/m/googlemaps/include/template/admin_list.tmpl.html b/widgets/m/googlemaps/include/template/admin_list.tmpl.html deleted file mode 100644 index beb5d4cc..00000000 --- a/widgets/m/googlemaps/include/template/admin_list.tmpl.html +++ /dev/null @@ -1,108 +0,0 @@ -/** - * 表示データ作成用テンプレート(patTemplate) - * - * LICENSE: This source file is licensed under the terms of the GNU General Public License. - * - * @package Magic3 Framework - * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2012 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_list.tmpl.html 4770 2012-03-19 12:15:19Z fishbone $ - * @link http://www.magic3.org - */ - - -
-
- -
- - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - -
選択名前使用
{NAME}{DEF_COUNT}
-
-
-
-
-
-
- -
-
-
diff --git a/widgets/m/googlemaps/include/template/index.tmpl.html b/widgets/m/googlemaps/include/template/index.tmpl.html deleted file mode 100644 index 68c64f19..00000000 --- a/widgets/m/googlemaps/include/template/index.tmpl.html +++ /dev/null @@ -1,17 +0,0 @@ -/** - * 表示データ作成用テンプレート(patTemplate) - * - * LICENSE: This source file is licensed under the terms of the GNU General Public License. - * - * @package Magic3 Framework - * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2012 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.tmpl.html 4771 2012-03-19 12:20:05Z fishbone $ - * @link http://www.magic3.org - */ - -
- -
移動←[#M3_EMOJI:128#] â†’[#M3_EMOJI:130#] â†‘[#M3_EMOJI:126#] â†“[#M3_EMOJI:132#]
-
diff --git a/widgets/m/googlemaps/index.php b/widgets/m/googlemaps/index.php deleted file mode 100644 index bfc3d4da..00000000 --- a/widgets/m/googlemaps/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3731 2010-10-25 06:29:17Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/menu/admin/index.php b/widgets/m/menu/admin/index.php deleted file mode 100644 index 7329894c..00000000 --- a/widgets/m/menu/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 1345 2008-12-12 10:02:42Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/menu/images/icon32.png b/widgets/m/menu/images/icon32.png deleted file mode 100644 index 58c1d16fd44436783e8da1aa8aa4279b4f07b29c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24910 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 diff --git a/widgets/m/menu/images/icon64.png b/widgets/m/menu/images/icon64.png deleted file mode 100644 index ce70280423b133a2e8f8780e94bdf177e272670d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29932 zcmd42V{~Ot5HC8hZCjIxCbl&(CblM=*f?=Av27a@+cqY)trO#%oBzG*-nZWSdcVA0 ztGo8@wX1hE>bI+_djC;Yltw`$MEvsQ3yQ3agz6_1`7gu6ewGzhj$5Au+F49i9sV=< zz?+4C-Xl23Xgh!Tf`s{BhM3>SS+cZf0dnE@kCp?r!g7<4n%M%z8#k=lbOf)U1P( zhNef>rM6wd0v~#k`D&u%IQdYVLu{9tpL4d}5y{Tat9}&!92JwSDafXuIf&TSx+xc} z8?P7XDj@LdHr~^!FNl_B|Jh9_x5;J6MJU%HOQ|$5MKMFMbRPpjQ(qE3n!`S^j3EWa_k{u#aI!+{$4kck|tG1tTu zOVHs{dWrAYA=WJgKet=$l0PkypK#uXJORS5HCm@l59wOE)qCM?-sg0SY5PR5N|@_z zUzcU}!3n_2F)!8jiI9+P32-A(M=D^IgqHkONeyS59`AaxiV=FEvDm^ zD;>;Vri6)vu5S`^ZH%aeh+b4=Zu$W;W09GL$Uhs9j)+0(pvWOvF5|l(0hj}oV)v1D zFy(*z9c``QR8*R0lGxM=8!G`zY8G*5kf186(WUMbvu>sN|9fHC<8BptX1*VvhwHk3 zrg35Kkc8>Q@amfURd)Zdh^XBR?t6W!-7hW%Z`KR-Ox{Ok1Jd8*bY6|oLKNQEs;P|g zWgT0EXp=!Ihud|K&qje`3|M`@VgX6G2UmhKU1GAwB(#@)D+|EQVIQ5F38b;-58U6W ztA_)A18=8$IJ&F3YpkeQvUb85WcXcQ)`P<7@mvtJ*T@1PZaAB-f4$J%PTCAAHGp)! ziQN5rem85{-q1Pg!7l1EW_Xm@cX00E1K%{S)l9P(5}(~zM{&Mq^qYJ*5AThrOW!M* zj|&&prGsam0)Nh!ry?m?z0yy72z^<8n8E$n7PUgfIM13za|}d}xL)3#6Q{Ht25dO^ zNMmysJjZ!I$QW)1vh7|E6qmg*@7<%eNV)UEo&&-Aw@+jkV5ucreEwF7{OLyi5>Lz; zq_UjgPQp-BOh45Nw%K|Q_YUN!ceFnrgDb~E4WT)hNK}mO4clKq4|##Wc=&u~YUcAt zx>(spM+ax_m7yMkWxvg!#m#R2@Q#J{a$F{EIL+fQph|Y+?8HH0kOP5~-cD9rZA_T< zyQmSlIa$qCm=N*e6aL}p!*%M&d93f3qUO@+KutZ2#K%hTuB)%K;yMRkD+Npm&s!#U z^ihv`ukohjAn9aBpS!LHbw^|F_=Vf~3&q+qSZw<5z9zjTdWxm)_`*ne)Mo#c?hDzn zf>QdX&~8%Hd@Dv}o|s4jH2x4^+EwVpVDVwA<18utwKP*+2-rSZ*SDbGnS4>w+^E9 z%dL`8C>e6-z2iZWU?~~$fI*1pLGvMV-U~-<3Jvd-L&y&AH6$@Al~xG5tn0|9?x#ITGtW2C2OrgI+bFvB%@?y@0&K8tDm?=9t8mpQHVKSpj}%uY zhXo%Fl@xfC#2`r73Q z&R6It@&6lM>)l#g4ZZtGFC6Nm=3S$`mfl?AYIIGLgwhnx)yUtpDYWI|89lpBIPvUf z_o?zODhtQD!&PsMTc!Hi<^fTn=5OHJ?bMPN8R8{AWi7PCZ_&$ouJ+bC+pFN@kM-a? ztdj+#Cl zhGM?z+egUBgX$z}U0#whcK2|k<>}Ie&Y_xDqUjR~hjR&;mrD85Wh*5J{6Rw47k4S? zN6a|XeHNld>^~FJ%a8@iuz`+7@fFI`bYINVBnWt@dpYaL+vvzwzr@GxurHB9(FdQ@3Y4TilWwoUx&bhm696&)916B3p1K-$#nQqAot} z0`>ScOq5CCk-w%&prwY2sQ&qt8DO|IcNkG=A-<0|r0??QEsF2?MZP2TN6oRx8(;Qe z;*(>5V?M)gk@{+b-~vFzpozo4%;~@)2^gVn4}a!vCyvE|{Jt9vUT&wC2R%spJ?y&# zl<56QAY>a(J~_0BRwo&J802R7H@W2%f~IlXis;nILPLbNi0MaYhNE_Z z$|%bpsDt~bs5ahOA0${}RZnEq@|+Ly4n|W=j=o|e42R7K_U+;bnTVOj4qNsT> zm^PS)iRUW2qxnlxaNSCp6LAO)jb6B7(iZz^APf0~s#F0Br2pIN1yFJZ+Y*rkvEqxFJcGcaB{3rkRgghZiS zfE-MT=pMBzQPDYwf_2F;)aqww%Rdj(q-)a4(wwc)OS6g7D+GNK{sUo+>KU*Xxt}p8 zbc}JaKM}{PN5s+>-JZZI;)u+|O-%E}oe!DZkjb5|PVHNNv-s~INv9`Y<_Z~9KCnIXDd+HW-`E1f06@clz&u&yK3r7meO)Tvvvg;?!JO6fB{ z>%kJQ)F9=#9;n$Yn-=EhkLL0NUd47CgoWjQjsc^<5vZCZ%vLQ^`S|KOukOyAyj-8{ zAl^?u4~bWbq3|v*)FrnwHG7V)~L+ipoZw3j*rDLraF%^7uyT@D5%>6J1CP1NEl_&dL4y>E?V2>m>K+mp3vr z)8mF(n66lH)sA;X&RFh+s_4u%cja42N0 z=Oa;@b#(YffpHGMXfrDFK~pXhMes?OQX=?&$w(f z6**!if>U%Yh10xWb++gvX{Zx0{(4NlRx)D`TjcyC>O#{kO-ps2T zIUJ!lUDjGe*4+QR)rgZ_eXx`xp!ZD{Qgw{VQG9#~xp?E4C7t~{r-o?AW;s-65q-DV z+V1pN6yl^9t8_dVLXB6ADkMXHiZiKyAPCZ(3{4%<KI`YZ19LWD~?Me zW%Z9aDHkI{*ekoV?L8IU+Y9MO6-nLNzvitSB~dA?!?b;+O{KIySU z^hSO(4J+7M5Azn?95STjsc+qqAj#dQ3@jD+ z{G(prEJeSVsWSRE`QBV8PvkJ%kLV|&k{(%&MOY$qS1p7EoTR;{+^F`}Ux8>@W(9mrCiq4LRxbuJo_v<$ z%WxT7LzGaR2N&*Bs5yMbjj;tBy5&tP#@<~Hpmxk7<5Rkw30Mm(E7a- z660%`WL~{hn{?mZ!e!`SE$xXEBhVzNt$h&(QOsE0_9O=JTz(^RYaQwu!};RGbgB>Qcjupdi*13hu8 z?2Chg<}1up2lVBX2n5)haiV!bRXjS4n~nxv4ib8K9a|X>L9{-6jIrr!k~VL6z(Vd2 zB^?P3yod1^q8bcnhqb~VP_7d9epYvuWL5Yqmr$lE%(BRtpvB*)IBv`o(si_VW<{a5 zE>PX=|C7m6hs4$fK0IGB;-^1E)Z&!3OBAu;rEn>QZ?K!D6OM;vn%gnTd$5&z&+N>@ z1M3>b(<;&`-=h{wkZUgO$Htn!k=Y}gn#Mm+`T@KCQcwHR7+=ahd<+D`Ai!%qr8C|Pf zGjvVS3hxj89;3k)l!G1U=kK^rH*R*Oxl1Qn*dJMe@XhBLl5IXP5`(<-oh&_jHiW<| z&u!j?BH19UXMHSt-FwR$4#YMmf+A1ZRi3QUUCrE(9N$!f03oUym80Fpph29-wOW6U z1trA>0e7w9XS|;6Lu?_}v;O!y=E=9)rnRCWc=3c)zyrzkzi!4%iLQ<6iW--utz{zG z?8xAM{|xq*L}j0{JYzLRyD_`ji0N8SkS&%Rx6hl6Q9LasP zqJB)9)F=o0{&rq0mU5MU8UQ~tzX)mR25T61AYVeQNXzvLej}QP1bt6R&I>)44w(Md zXHQ~%Gm5%$bYHGZj$kMgYS_j(bWOtc{nqJUZNN|A5a5}aJ{6*YQgHGmB(pR*3xM&0 zVDuyF^$mJ_Lun%j=>CjJRla>8yaU{4!4rB3dR$G7%*w%H1$v8G;2x`;NLCYB==m15 zu8p?x?Vm+e9>-K(!`ECXw}Tyr$GIbtkq8)nRb|!RZTxl0o@e?+z_?AXVe!A~>iLThrrP7OAAh%)PUAH_YBN15CTF*i8lK{g$OIB_|JulM1a3GsL}l>L8u+08 zh-U*Tm>ii5PZF^IntTsU(>7*UMQo2s$GJ#ha~__QP1l}D^TcH*>&}fxZ@_UO(EP=C z^1Wud)eF?drz`57sLiV@np*EPJPw=~|76S@{jZElX4l9O)|l3q-E^_|EX^mg*nsbB z&dq_$`$x7g`omKM+%sg{pH2PdWB;$gPg!3S*qjykDFode16d}%z0&oLH+T-(7fR-4 zOFyZi&DL0YJ|jb9-Vt3F)5LbFRPt;d!&cM7T>@un+G>^8G1e;B3KiZfaZ4}ML5PjE z0Utzf3~!o`f{!y7(sf{M6G2@ZFRqW*A?ch3<`Q>7GL!Tzn&pmKt72%K)Lf|Q4!Xu^ z5|$UL8JK+c);r{a5nIyBgnh-$u*uG$>{Wra%qad38_*HW8Hdj+7OCqI=4)~$hAZ>m z9&=&S?O(YzHfyy{VDn$vZ^JOH1YpGNG#;+~qs%0%(N^C5qeutm`7|)B6VMQ}o7;`( z0IUduTPjuNsnhL&K zVnyBbyT&qy5kd)WKEd}%L{O)J3vfzfMAt%yfWWsjbA@5b#E=V%`FfS z5xlF(TYD*SMQZ5#=+KUP(hVlQ!+f2_A_!Ej)`d6?Ll^C)_FU5Qq69}Q@i|U9m)Y>@ zIabUz)BE;;rp3D?b0p||=S25>dMA>`9#!a6YLyE^Z^#NWB9sjM5OUOE^uCEjv+q*% z9tZ10#E&uZ2syJ#D!h`wW$WG_aK2xjw~Pc+f9 z6`+S>mMl9yq6v*vHeC0w&Zq>9a?^RQRa~!mDCs@!+-M~NG?k(UD=-njKP#3t)r>HF zG5}GSp;B3Nuk}%Hi;`%R9#^c;(H%cHHZ;rDnhHev->?DD=%HeZiB}=ytmjsKr(`xC z!ShPB;Vhqeaa)}GQRHwskn1K1RPT8b&c6PeyQBAy%olu0PQl-UcHzDk#U(*p;(HK# z*obzEwPX8^HC_)-f==o#fG!dJ8A66a4FwO9?|NtDXmTQIZdMC}TLG zk~*OJ%Hc#HCY%aI6<>Lap;?Ghxg_{VXN#8e6yH1yLKtS;wg68F{o2MAOq1tN(F0uB zC^X*FCm&0h0kOxB>Azmjt<>&C-q)3S<=j%3+gj3Ex%`RWDqzG4WDA?!j$bwClo6 zM9*P~M3+}D2YF2afbGjT`wOdd75W?1je6gzOOGkJu4~LE$y7fjqi4CUU#c2Jyj3Y3 z6jg3S9Ir@^*X2AH-AmNbA2R!Z%r_cAtV6LGoRZ@)FSC>TaK`{rZ3uveM2^EwT@9YI zs{u%VJfHTd1Rnwp`aOu_~0GTcJ0Ffnwn8PUAKF3uP?ewhJE>= zZ#e;%L_%OKIYh5%VX!qx|788T!vy39JPr(YPb6#0*ez_m2ksu=A!_?kOt6@}gna99 zpaLQxEo=nNlWhfh@4LrE6La}#nxP#$#aI8ixaMozfjMeWb6|h%Cw?CuEtlR9@VCoZ z!fS796KR0DwZN}U)YLNuO!-ZAPk(L@>}86vNIwfRRgDDykjE z7g;5AJ?S{gwk z0@W<}+ZfKTILSAp*eH_eDRxd}dGNbKyaNI#zqs?8BYTQ%VX?=VR^eTGpj|yu)ayK# zdf0h;Xg{*Pc|Q`o>Ai){2W?|COwu)Sov(NThIBJJ0dR{pCsYo;uuu3tFv_#0Nq(r8 z=Oh{Y;6Ps%+%3kfc_cQXnpoBofan4G*CcTkm~V15RnISCpcn~*F+1yb&0V39Mvb`T zD&ESZ`Mb>Jo&)G-rG-8TM}bi z61R^Ii<$KH#+{cPw6FTuV70xf(x;hWgOTe}`ezsVce|t_d#H`57L~0dd#J%ZqZcMo zei!#ByP(Qe=FBjpa!(#_D%Sno^S*&)uyS^7KS%Sm5_PPV(8lS zuNO~}6vLJ|9ZlWQDvq&UmUxz3lCWRgkmm(>as_P3qUa&HBI0}p7Q+4pBlK)){YZj-SBif<_elybg7lSv+I6e-h40nI?&9B3W2t1VBhjQ zTr~9xyS->>+OIF=V1dG7*?59L)*?)xgxJdYvdg^Ph|w7j_$ocUfC+48nh zh1prnwK;9Ot1_`Mpb%}ZL;KJ>P0>_hoqVJc!ur2(P_9x30$+EXhKBR`#sb)FtY_+$=K~ja%_TyJfx)p<&<)m(y5E$r$=7G4Mz*=rrbZ3$A?%aIIVj5!HTN0f==h9! zd`2kr6(>*wS8+bNv& z*+e*n^1xJOC>_XzMdnoO!|@ba&9wK0R)vwwO2KCN)IZ*J6>-?M~}fMk7Ys_tqrtZe%P4 zacWM6He<-ULN`1nZCG=^DQY3Zz2B^QO@OZl>bt3(miUv6vK6|LF_A|sy%o6rIWwz& zWhV?YG^q*7Uu;4~V?6YjPY|oB{=Sr{rnfZtv}}>N;nXT|EdE+~Qdj1?zm53dUACaC&7eEWX?utLPpRX$l=TLB*4Dx$)dh`b4={u&GHPXO85ZI-$+g zK07hV*WKs3H;H`0%1i1Bk>W}!h$lA4}6ePTamxu#pz=xU#0N?^jy7 zL*|f;9{{PTay_SYZRRP&^XJ>m+phg4d!oboU*#R*wZ3@u+9(a+JVLK7YeC7^c6vq6ClcOKY#d>8;>h_#XraZ8*CpWy(;s*Z>gh4II4;?4?IBNy;e#E2p zz@6-f;wIS3E$IPtlkZEr!SQ+%SravhS`a!5B-2V0&VLoG1g&r^wr&ybIb3UkD+gtF*-=GfF!lR?yIDHkKhJ%-akB~R$QEAs(n+lF0=LMOqPh%ZzO@lnF$VU&0VV~s1XALD+zla&A1<;E&E~_%9#rtCRoquewGy6I$LQRgERWI>^Ir7Qg6=qFbXl z(J#dUcA#&mx(oWfXK+x9nVd`^C5qL?W`3Va;y;XvMFg7xuQZ6%A;1^aS(o#Hew$R*aJ*PBRUT!&K3)) z(rK@rn)3<+K6y@_KOb+R_Cut||M$}C>-@v47FvjBF$#$n!A1#H|IRaqf3T!j0O8~L zqm}>)MmvlxAVE{rAyXO-sF_Fho;?pSA>dSQJkEv=xkx=QbU2Cdh|q{(JPl7lpR(25 zA-ODt&WbiPGJ^Js@_xlk?crJ+@>m~BHzL;&2TE6kdBnTFjwwggVaVj9DwWgh#^z_k z+4;hAoR(WI;$5e+`ky|;lQNHQE}G=u%2tcK_f~O}TlyucqB1n~^_s-bVwL~ULA>mx z!ShqKq%@x#rl>}o#mDB^JO2-%Tlh6l5^PUgv!QVxF4@8^l7&keaRJ&Zb0azItXG$u*w?)jWtf8RD_zHXHG)ec5imOZ!_D;clvBkUNq>4v>o0@EYF-YwT z>*%SNV}hH8Awlh;IXRRVHR0j^ur?g5$V=-u@2y3{KpAM)0e=|FV8>Lajryk8`{oQ8 zS$vD#_ptqQ^a5p4k{-9m{_*AcVWtEe=G2lT#w#poTRV`D{h9|(QoSSz$-yfQ6JmXD zY#U;q6$vF5OJ6=&al}Wx6!3X}i^a2UVe9k6(IMLOZ0m9Rq5tO_h@v>n0Vi{jU|cww zc<@lo`0V#c0L={599|V38FO6-Sr2%s%wNXI>cLM{H5?(z&56)3K>(1e+IhLMjcL2@ z(7hxbfIDgz)yu^Jcd+@ZVaLL2EEWL9Sm`EEZgHMaDj_{>Rtuz0dw-GIX6LLxp|7z8oa zroN;it6*-}EBBXgJ(1XEuZyDWdyvAf291oQH!N%&*Su^zSmS<1Wyj(MM&5EeVBE!=JRMM6m=dq{%DpYY z0a;?@6XgIUD|=QtQKnbZD@23*TCkaU@i-fa5E%qtCt-?e1?NBoIS-cnFu+mJ!mdyFmwjLS}fX;%_&*C-BNuZ;l(F>}xWuRKnVFRhwj8 zp1j10tiNQL2&Jxy;>_Wn65M|>=eaM}7WZxB930=J`gZQm86(D> zcb*7*-Frj&+P6~KRK?qJ>^c6(UVNpR7tx4Vw^*1A^i8|T$BB!u?UsaTTltPqh@T*| z1#UjG<}p~m5}A1N!c(LXbcvIfMwc|cUn2i^V#EcKXW;8Wg$>CvE)FZB2}F=tRX3RVdjA z{Qjdot`kUnoq4Z@htbFTbXr95vteka7Q8_eslZNsU0UfppuWVW)F4opZq3sO_AOjC z55nSdE>VYA4TAsXh7i<8PsChEAd|=<;!VLV zD$M73v)(8S9s_I*Ilu8ki}-5wNCXl{G>`>gPowLGcG{GzOPI$EOsYu4;C{f&J>GuQ zrgjXk5;@^{i7UAd+Ak5R`q zhq`X)$N&EEF7o%QGeFG8fvY1u5>!uE|1Pqg`JGWp8in^llg#+W#^!>xjTbVX5X?}U zoI4uyi_Pdv9p^}~H*%^oum)S_tkD|DfNL#@VNc$!^84(O}omuTkk8~aM2Mh@V#K>0azcbV&i z_&@7_9*KdO_0q@)VRCU}r{dyaZ*|tghM7YPv_`}u5ZB!^C&@~(PcvCOfTkZT*_x*i zn6Z~hL`Ej;c_|YO%S;=!OMu3kR2oQg5ZJy;FF4^}K6}0A{FcqU#^!=-+}H^?DY#7X z$)Ui9xITG)ej;-=d^*Icosj`T7owYy?xw8UY{wvZZG>XVhd2iP#rk}m*BPZJXoV%C z-O`j*&f*!GWA+?40}usq|9f?o?xvDLb&1eGDp(6uA#G5&?oX zSoSPaDN2O$@(Z8}Kk=RI$ww?S>WH5#ip-fGom2wfZykpkPmjg2;EecN9N>%++D`_4 zR`O)o55pDXsF5O}S%EK;96YNiVYa5Pu`Vi8 zImEyrh%I;P`H@^e_`pnw!tr4fwEk?%-sK;Xq)rMkCj`5!e=1oB;F`!`dzW|{gMttB zZZ;px-@<+%!#w>d7z-FP1Lz5pnyh1tW5=*EA4j3$*$B*(NU#W=l`+fjCNs!R^luQa zw@&~$7Ls?cpp-LEPpRwbSP`R>JPoo`{p4wLLG~R`5c!vL6{+;rZ^_S_;BaIc99W># zCGNTm<6I?5jpOv2jhSFb*bjQ%4loU{}Q`vfr-3E)TNapI>Kz(U*`1IYs7VO=!I;v6Cd7 z2;oyoY9AQ=q^iarQuff|zhFEn-e?T)>hBJtUQ1s2hwW*85ohLKBAK>@+H^dOhI!k8bTH zMHkU(;W>!eD}!58fiRcP%(s0{@9&6c8@3T+LO&S*e0~l&veE2e2e*e^FHK6chjEnv;-t*e^G`C)z4lm^m$s`VAq}>WeI9D9=j#)R*vm7B8x0tcW?a(fquJK5yDN)6 zRX(``*S?G>X9y~aL@xuS1r@2c@QeD2F!d4Ms4-d4XU+h?kqpOCR)&ESZ28r09KJX8 zb{p$*tj<$!zdONdc$aDHCx5=1ISd-&(M@#{%ITB7P^VA(o#_WOoFZ(`s7r&yDuV6k&2FYCXjl4elk>>Gg0mV zqLf5*EykO4`?#iH#j!HqJYpBCM=#JUIkvdyJ8os%>9kTCalIP&>19Q+O3v#CO|iAO zWYxdLJ^=`Z369!iVJd#ER|+z~jT+rI#eMXy;>NkKUOrqTX*o~?Kc?bB2f2jyM#Jxq z42?xU&mSeDUk&=*IK%b5-`;v_9#PbEn8_jBcahq`an9&l$A(h+_sSv8-V_8rIH=Md z;qX`@8DPpMKN-1wz8^Y7hVUeKQo&6bZVCPI*KVUDbZ(5uZY3pZr$!EH8$lsx4{S;1D1>eJE`b#_e~gIzvd)h4c25BiWZdo!YRy`K}vKE%6d9NZj>&b z**~VJ|4&tVP#t-9jbEw6N|zI>B~RWobC(G@R8u>~7j{Ql+w^V)@JDWZ-UdSO-a;{g zBq4uaTUGaBI{Kwj`zc(_zk(;Y0=jQt1DxnZr1jPZ#t82IO60I!}A z{mafb!;Nw$xO2L^2RY^br8fboNCvr=W#*@4X0NQ4Aw}OXipHBcl4~__u zp);}&y`c!IKIfdu%w@nnvBb$i(tJ%QZ58>(HPNJA4TlF+{J$jV(djt>iS4{e%`9_X z2i|_7;B1s3r23_2zf8+x1=M$Wo`W7kwrP@SOC?1m`*3&+`JKZ~6C=XI<>b-ajt#(N z0VAXk&r*kIfWH|c#ee&7bfbkT))+(_MZ^llpqKUV5E`^*4IP^bx+r43z%60LZJ)`l ztPQ6z(AFWSEpm$yf0xxTb@j!Zn)!aD2TXg6@B>D``{!7fgDmiI#EliUW+ihr>(Wme zJG6*)q&b%rzM$>EZ{;+RJ2=VH_{|hg5XbqdHnC!EvkxhAd+9&l3`D_G+-?@m#$GoY zy*o{8_D=Q~snef^CUIhk7XID_-ae2q-;A)f7SK7hgX;v-u;avCNrN;G1AIitb#fkJ9?l|n|{39(Fma&MN@g!E? z1-z+&gat*ByKGo5z{;1ZAZ+yPQ$9xfu2jU2TUL$+Ov! zdG7~DJa!=2MnH|-dOP| zdwN=kXccMY0kiFCaNrvta>%4!>l^O>56C;X7yKm}z0U<-pvmIP7c{f~?XriapS}6N zb=UvL|LL;NK6X}LCKv{e9N3S_e;*6;k-epMq@6Y+MjIYBGQp>UDp|e%S`l~hlLH|x zI2gSw$V(gsLALCv`OI8%zT)mc;QHzxJtSOu*Y~R9F7}?)_3Lb4miLw5wdb_<&N17E zm?z`S-Jx7#b8|s{K7@jTf}f;<0?Nkkmb2?1P(wpQLW+jL4IYoHtE;htgYv_Z3OFSN zS9T#iogm=6>ZQ$^l!fAjg+xxf48>v5s_ zotKxlR4_H&ke{FbCxGbw*Nd?Eyt|h*VL43tit{c{fht)+*lW&3j%oMyV zP>$>xm$k*@CDN!Z9N)bWeM~oxTkZk4R8;$EHH&WSW0GKet*63kpU*KDzzemi|aj ziH?p=s8KwI7c;%yDVp<2oO@Uc>d*&c13NxmTWDcYxj>e-U^u z5KCAa&&yhbW%VqD( zFyDZm2?HJ7|02uQ6ZEpB`r*6W)7@<_-`Y}(c1&5b{~Ybi6ay|d0##O5|NO9<%{^_!-`u9t;wlF{o)~IqgwD^a zCZ(pnq2S=)j807@KlORX#el~3-oqYj0ELBx;yvI`rtQV0&Ys?}U57Fd*9rK?`!c`w zxgWeuhAx-u*q^aKl0(kC+B3H%roB}_tZ49BWzQf$A)}pcW0a9m?1vxhxb;^yqxr|f z3%N=8nY3-~KNvG<_rJRHPzfYG=_|fvPQb-8IMP?w#F?&0v2vcyMUUu4#YB&_8E`D- z6*rK4h(pci9JEb0Ua<4BF}S{muu7RXaa+AFlYUe`vou{gxcu;8Dda&5s|nq4l5ZXK z-)|t>KN^scC>82&8$A#ABxdnqe{|-hwf(*M$Q}^xncxqM=Z;Ir3^+%lM7Mb4b=%MC zeZOlZM`|IJ+U-yab6|O(!2CSs;*+#0%pxAsk?3J)GG|JgI~kUdnv_J&!J)qPQPwjI zxSY#%Y-9u4qQoLoRZ<%^@;O~beV%2ffaTt!bhv-jE)t%KfA8a>NIQNI^-35-xF(uv zyRy)uX5Q=wd7f0aMcInINGSC%J0f6-lJWCjXsM;V2ie&Q)ay>CTXPuJ{|cHDB7tLu zqxyQ7Z+m^_)`=-svgPUNsa0$j-Q zu#d(c>!hC~T4dEor89g9@R%zrMAjB;^Na4<4iK)?ei|}PtPa7@*U%3PL}C9S+vf6& z@C@~gocVwOzSCtm<*jted1U8wla?>n|F-Y@+tc2zb5{P1taZ{!?i}2GI`ijNcvvlz zdW)a(Qe?l-^l14H8<03A!@P!wYld(+8rj>VZpn?=*#Q5xifTZ7Aji&v*)M z)HZ#YAo);bHSD-<&fZ?ZM4H*IvIa7!Dm*YfE}?dagI+FWe$kK^Fq0JUbfR5GFw498D z!@%PqOJ^64R||RX*TczakF`jtNwyaYZzTW=;@2FCBiYX9i3LPwbf>q7!4J=v$vvN} zR##Dz!4L5ur<@QwVO#0Fr<~I4xdpEBOX2Qw`zG*g$4slWtxiE>pDp4VqaC~9g+VOK zqivj9cV=wC?Alz+R)F7}tK6ucPu*{V1gC{r?iCh0$v?EU9F1H9oM-(t&eHLQ8o@^~ z8qfs3J)h7BH4uae1v(7t8Lk!jV7JaBs@om>%?^f0xqK$n7eqY`>-SDayKX2egQp7& zoSj`Ee`&6+R(NO;1vG^PjFqn=^*JE`$K`CLeku zeiUPEr}W=ghC=r{>X{C{%p?9qCw9ZwCf>BVOV(YxM%CkEu#@rm?J4kv{_gi6JwNU6 z_?zDEZ7A${dFdY}_*cj6`8(JatleONGC#lY4{Tou(jeXxf-TWU;0-kErRq#U8+_y@4!`G-Af%h6Dgq~nOH4Qzkm#}q{Txv=N zeucZGaY3SbpJP5Nq%C(gcryDp#N12d-pxTR`Ha6Ot{}h`ovEJ>oTK&!xchwOkJb3~ zXFJ0ufz4i~Hr97;Gd7GQZpH{6jGb1O#m)KX3zP7UeWaT7F*qvb* zQ0KFK25!;>yaEJWe{(~MD;d9~4?Npy`ag@DULL%UcM%P>JaoN)z(*^JKCQdXMR-C@&X6&TYaAr9+5EPKE=P4pG^7y?+2mGWDUN+cuj%fqXl)s#{H*8^d|h}O!T++) zz=E9Y=l=@6n9JQ(S#stO-kLsab2Qu%_W%%rTciOK;QCqj-JGnnOv5U=fi-s!PqlF4 zrQNVkHh^VwbMy7XJ_w`%He4#V$vBJGi3{PEt)B-pwAW8BfTnp=q#0H3*j2O*sT?U{ zAhg%#!%H4DTprvC>$@b6x+urce5p<)c}G1T)nD=M_-fDB-)KFEn;v7Hsz7L&_qoC# zs)aP6*b}jPirs2e*ZP7!y_%7($|j{Rs)4y%^k0J1GHF!o* zLC)|-t%W6WnU4DXdj+92h6@n#Y^tIA_}vjYOkYgg2J3Gm&~ac9Z*`fyf!@#r>SAF^ zs8ir-<-vKBfg!FQvWKr#@|}9WM6vI@bLu(v9#Dm(6;^d&tE~YJ6MO}}*^jQbB-(x4 zTbbh={+YR+O-8pBzP$Ch@%$x!1KNk4OTK)3W6p`|&a}(ETycG*Z})DeK~qrj7=D&v z98J*@HMeWJr?Kc!GMK2CV8T5jNKsqNy8gm^{*-(D>iqYeY|yy79RBU|7wYx%dRMOz zeU~whIK^AbMQ+Z5%_I!H-_~{*|D(3|j%w=bwuZq53JQt{N*5H7CZHfShy{@*A|TR~ zVx$X5heRwOilIq|L_~UtfbY;gu{r=9!3Cd`jglu9(>=piih?Q5_9H7(4`B@Y&yYtDCcQiJqnD+dL}%V{q_}rHB3h}A_DawxDM~Q%&6XJ79b-R-vBufphwJNpr^(<`J1&KSFN`B0m7Hc}+pxxfyF0kE zX^C;wr_n#m%|i^X6EAl>i2Epj+_epODW6K>P0%|OU-hU%&49$Md&Hptst;p3GbNhM zTl4(M{+E=C*lqvBaPbWGyW*@Ngr6$m`wsfql)r-PUY#@S8sy~e63cX0_FGl%y;`yB zySFPmy}a-Ff?+$-u_h1!MAs~j?B-aM;$;c1wsJ$tCbEWo4)*)g%=*yi_(hldMqcix zHz$GNs4BPKgoN~OEIyH4AQStk`?XeMT*045PPp`gC~c7Mj??dyl~)-~0k2ATaL=I6 zp4ZUKj>2!C)`F#ux)h_>6&#n1XphFq^o!dh{ zqvPL+ca6Y@cEJ;Q0NGylpTg--=ytQLYr#dr^Rr5KX1{Lu;)Le*bFD?bjk7n# zU@X2)58=FO+RotNzs+7=c^KzhnJ`iUMN*6@n6dAZ!U6+SFSC^@dpN|{Miyu9{=aQs z>lP7eoZfHe+fFBQaGXN_TW`yyfBR4A?JtRn&a@8T()?`;X;dJes2YEqd8pfl?T2wY@Hyn;rV~UdY+L`783S-VZ~euHx0l#QkqPQ&l};=*JQzKtxuJ!aLa)Riu33iCW}TA!Mq-1b z8`yOe-@-8QmAA9+P~0mN^K2q5o^;)_0mqQ~X;&g=nDJ}sM86rPOsjM?AZ$=Qb=6>` zxZho=fMa>zwOIq_ij}^@n&sepi=|c1QUVG+ueWvf5 z{$?k3lB8rKl@ITB#<(^P`m0jAoshR_F>F#*5ko7jcxSay>|bW0b(4}d1MVmL{?V;} zFMm^U`+8&t2Kv`!sXhM*%GEC_+}Vn?HYo@j_e+oeTRc#)QorC$k}B=2Ed^d3C?QK& z*@x9J?5MvCZ!L}M3OE+Z`v-0@!fVz|te3_ZtmAmAe1II=TCaRKc{_SQjwXH-ACmAP zBKxrIYT0m9r(hFM+#S4w%eL`F3tVXKE0T^U%G=T!niG!8PBx z3txlb5tc86D(KUHMqppT^04t$x$3$B?ejvv2z~cBm(ErH($)$&NnfAnMp72!ls}qV z4)BClty|HO|G9hB*#Wo1J#yA=YO=up5DCwDQ zrBGrl5P%V5;l(EsZ@lplw_UDKpd78Ral_EM(vxG zZCbbmp(T#TJ8%`jJL?+v;6RuAa9S@Ef1c>xl0*3vPE6bByH%hDUEMJPZ{LhYzN{t( zlY3nIh6B;Tyqqs#?0PO@0xka|;=ti2Vd45S&)Qc(2n`T4AqH=pYk<8fHN| z7OKg*@SN)RRvBZvVxelfP)QMXirtR7(+0g^imm2g#dPW=5=f#uC2Y@G2R3{e?7&7> z{r9cXZG_IQidkq!S;SopmM87M zdqVjM*sU06hbenzO{4V|buv+G-7f=)k!G;|r6%F1fe%zD=Xr+SQs9zJXt`@yPgwddnO}-4O(q?zyxAbw2a-?WxLF z)xRN5jxi4+bDJ8$O7#|~pU(s=9LnXt5{SPTT(2|y*mGwH)kxVORlP>ZAr z{%jj6uRldD-Kmksed5vi)5DgQk5tB41>ZCnc=XZ<)k9hwifB?(lj8GE^|#ls(v0(7 z!(IvR7|MB-lhGRFHobHxcyQH@UPcRnub(n3BGvTK5D=^b8(RqgYVRuGeXzqVho^jl zZ#FtqR1c$5Sa1~98BAe!5pe(-(%gErS(jS>bkb>ippz{|&yz+3xiJ9qD?tqdW==Mp z?3`+dV974Rf7aII&H9wDHiV!06E>hy4Xo09W$l<^SOe0_uyZ>2f4!M`oh3!=JWNpS zU%s#z{2RYAMY5<*s%y2wiIZB<6TgoKxq;2?&w4uEe6H0;26S#SvaIzK(sv~+MNN2XDE*|jF^*@Y6c=RGIlyvoY;yl) z*2p)zRBt18Yp+TA7bOI;{yB$LtKm0O&RrG{DGGr>|$_MgZ;WM`9qrWVBIC5GxfBNb{B5@VM5l(<_ z`AzA1pV1ACFy1Eb2X&OXF=8?H%yj>*PdV2)YhXwTT}al!gVnWq+KkFDoqi-oTX&{z zi5wz2wJz|AuI;O@N6Y%!mA-oHvHd87DKCDzGWnS9RZ>QGX+%20aPxtfdHwC4rNcH3 z)KtL`h>B8m2C3#7pQh7Y*kEPx!pRnyz|{@5uLUab48~(^+HJl=yyG=ebuE=F>Uw9mtnzIu>--h zn7WK)tz)Cd8Viv~AiBIZ*^*_Ri{lFDBg}fl�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

XMa#S_%t6lTT zw4m?FvX_wDD-U*?YaXIC?tSW52pl{AmOR-0iT~pKtNliqJHx9xJ!dWo;uph|&OF++ zJD-9TI&$>116VyVe(&rC48Yg)b zdxZ{)qJ*nV&3id2#0En`jtQZCR*VCj$SEp9FRy_xnZQ zuPB{%ll4LA2Q%t+@rLQ3#BaE}sFvS*yBLij>{#!5%wF|+iqMrctxOaW2b&(?3u1m{ z4Tzt$UA8li%z5&ohPXw0;389f4K?0xXAR}AOzkvp-Py#y^!=iu^E2ACG$sRTe46)2 z=*Gr7QO(G=E_sF56q66M&v_VBG7IImIf0q3CB7hH{bh$<$)j3!JfYx7jo5K@0~Uwg z7}CJ!bldd|lS^riBHZ&1wVeJ9x4CbrXD!jOO!06~6VUekeN&Y6Y8AIsdPY{h>xvFj z796|0otO#3!9Zl)0aNoN<#WPoVslO~Fr<6&x>F><$Y+I!mp?#C6cJ;k-qQ?Gb9`%wkC&mnQy-wIojU9~z=Yedpfz^&q|ZHGO(6etIs3(j>Ti%YMn;{gACzR+YMHI#pmZK06X`u zMW5a-OxZ;*B@P#N6D;CiIPr(b*G6wY0Q6;N|(8 rjTKI5(yE`n4^B@r*tZ|mYyuoM!k>n$#ghM7_%OO_cBjJN+1vjEU?-!+ diff --git a/widgets/m/menu/include/container/admin_m_menuWidgetContainer.php b/widgets/m/menu/include/container/admin_m_menuWidgetContainer.php deleted file mode 100644 index 0d9ab1c3..00000000 --- a/widgets/m/menu/include/container/admin_m_menuWidgetContainer.php +++ /dev/null @@ -1,429 +0,0 @@ - - * @copyright Copyright 2006-2014 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/menuDb.php'); - -class admin_m_menuWidgetContainer extends BaseAdminWidgetContainer -{ - private $db; // DB接続オブジェクト - private $serialNo; // 選択中の項目のシリアル番号 - private $serialArray = array(); // 表示中のシリアル番号 - private $langId; - private $configId; // 定義ID - private $paramObj; // パラメータ保存用オブジェクト - private $menuId; // メニューID - const DEFAULT_NAME_HEAD = '名称未設定'; // デフォルトの設定名 - const DEFAULT_MENU_ID = 'm_main_menu'; // デフォルトメニューID - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new menuDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == 'list'){ // 一覧画面 - return 'admin_list.tmpl.html'; - } else { // 一覧画面 - return 'admin.tmpl.html'; - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == 'list'){ // 一覧画面 - $this->createList($request); - } else { // 詳細設定画面 - $this->createDetail($request); - } - } - /** - * 詳細画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param なし - */ - function createDetail($request) - { - // ページ定義IDとページ定義のレコードシリアル番号を取得 - $this->startPageDefParam($defSerial, $defConfigId, $this->paramObj); - - $userId = $this->gEnv->getCurrentUserId(); - $this->langId = $this->gEnv->getCurrentLanguage(); // 表示言語を取得 - $anchor = $request->trimValueOf('anchor'); - $act = $request->trimValueOf('act'); - $this->serialNo = $request->trimValueOf('serial'); // 選択項目のシリアル番号 - - $this->configId = $request->trimValueOf('item_id'); // 定義ID - if (empty($this->configId)) $this->configId = $defConfigId; // 呼び出しウィンドウから引き継いだ定義ID - $this->menuId = $request->trimValueOf('menuid'); - if (empty($this->menuId)) $this->menuId = self::DEFAULT_MENU_ID; - $name = $request->trimValueOf('item_name'); // ヘッダタイトル - $limitUser = ($request->trimValueOf('item_limituser') == 'on') ? 1 : 0; // ユーザを制限するかどうか - - $replaceNew = false; // データを再取得するかどうか - if (empty($act)){// 初期起動時 - // デフォルト値設定 - $this->configId = $defConfigId; // 呼び出しウィンドウから引き継いだ定義ID - $replaceNew = true; // データ再取得 - } else if ($act == 'add'){// 新規追加 - // 入力チェック - $this->checkInput($name, '名前'); - - // エラーなしの場合は、データを登録 - if ($this->getMsgCount() == 0){ - // 追加オブジェクト作成 - $newObj = new stdClass; - $newObj->menuId = $this->menuId; // メニューID - $newObj->name = $name;// 表示名 - $newObj->limitUser = $limitUser; // ユーザを制限するかどうか - - $ret = $this->addPageDefParam($defSerial, $defConfigId, $this->paramObj, $newObj, $this->menuId); - if ($ret){ - $this->setGuidanceMsg('データを追加しました'); - - $this->configId = $defConfigId; // 定義定義IDを更新 - $replaceNew = true; // データ再取得 - } else { - $this->setAppErrorMsg('データ追加に失敗しました'); - } - } - } else if ($act == 'update'){ // 設定更新のとき - // 入力値のエラーチェック - - if ($this->getMsgCount() == 0){ // エラーのないとき - // 現在の設定値を取得 - $ret = $this->getPageDefParam($defSerial, $defConfigId, $this->paramObj, $this->configId, $targetObj); - if ($ret){ - // ウィジェットオブジェクト更新。更新値のみ再設定。 - if (!empty($defConfigId) && !empty($defSerial)){ // 設定再選択不可の場合 - // 取得値で更新 - $this->menuId = $targetObj->menuId; // メニューID - } else { // 新規で既存設定の更新 - $targetObj->menuId = $this->menuId; // メニューID - } - $targetObj->limitUser = $limitUser; // ユーザを制限するかどうか - } - - // 設定値を更新 - if ($ret) $ret = $this->updatePageDefParam($defSerial, $defConfigId, $this->paramObj, $this->configId, $targetObj, $this->menuId); - if ($ret){ - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - - $replaceNew = true; // データ再取得 - } else { - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } - } - } else if ($act == 'select'){ // 定義IDを変更 - $replaceNew = true; // データ再取得 - } - - // 表示用データを取得 - if (empty($this->configId)){ // 新規登録の場合 - $this->tmpl->setAttribute('item_name_visible', 'visibility', 'visible');// 名前入力フィールド表示 - - if ($replaceNew){ // データ再取得時 - $this->menuId = self::DEFAULT_MENU_ID; - $name = $this->createDefaultName(); // デフォルト登録項目名 - $limitUser = 0; // ユーザを制限するかどうか - } - $this->serialNo = 0; - } else { - if ($replaceNew){ - $ret = $this->getPageDefParam($defSerial, $defConfigId, $this->paramObj, $this->configId, $targetObj); - if ($ret){ - $this->menuId = $targetObj->menuId; // メニューID - $name = $targetObj->name;// 名前 - $limitUser = $targetObj->limitUser; // ユーザを制限するかどうか - } - } - $this->serialNo = $this->configId; - - // 新規作成でないときは、メニューを変更不可にする(画面作成から呼ばれている場合のみ) - if (!empty($defConfigId) && !empty($defSerial)) $this->tmpl->addVar("_widget", "id_disabled", 'disabled'); - } - // 設定項目選択メニュー作成 - $this->createItemMenu(); - - // メニューID選択メニュー作成 - $this->db->getMenuIdList(1/*携帯用*/, array($this, 'menuIdListLoop')); - - // 一度設定を保存している場合は、メニュー定義を前面にする(初期起動時のみ) - $activeIndex = 0; - if (empty($act) && !empty($this->configId)) $activeIndex = 1; - // 一覧画面からの戻り画面が指定されてる場合は優先する - if ($anchor == 'widget_config') $activeIndex = 0; - - // ナビゲーションタブ作成 - $tabItemIndex = 0; - $tabDef = array(); - $tabItem = new stdClass; - $tabItem->name = 'ウィジェット設定'; - $tabItem->task = ''; - $tabItem->url = '#widget_config'; - $tabItem->parent = 0; -// $tabItem->active = ($tabItemIndex == $activeIndex) ? true : false; - $tabItem->active = false; - $tabDef[] = $tabItem; $tabItemIndex++; - $tabItem = new stdClass; - $tabItem->name = 'メニュー定義'; - $tabItem->task = ''; - $tabItem->url = '#menu_define'; - $tabItem->parent = 0; -// $tabItem->active = ($tabItemIndex == $activeIndex) ? true : false; - $tabItem->active = false; - $tabDef[] = $tabItem; $tabItemIndex++; - $tabHtml = $this->gDesign->createConfigNavTab($tabDef); - $this->tmpl->addVar("_widget", "nav_tab", $tabHtml); - if (empty($activeIndex)){ // タブの選択 - $this->tmpl->addVar("_widget", "active_tab", 'widget_config'); - } else { - $this->tmpl->addVar("_widget", "active_tab", 'menu_define'); - } - - // 画面にデータを埋め込む - $this->tmpl->addVar("item_name_visible", "name", $name); // 名前 - if (!empty($this->configId)) $this->tmpl->addVar("_widget", "id", $this->configId); // 定義ID - - $this->tmpl->addVar("_widget", "limit_user", $this->convertToCheckedString($limitUser)); // ユーザを制限するかどうか - - $this->tmpl->addVar("_widget", "serial", $this->serialNo);// 選択中のシリアル番号、IDを設定 - - // ボタンの表示制御 - if (empty($this->serialNo)){ // 新規追加項目を選択しているとき - $this->tmpl->setAttribute('add_button', 'visibility', 'visible');// 「新規追加」ボタン - } else { - $this->tmpl->setAttribute('update_button', 'visibility', 'visible');// 「更新」ボタン - } - - // ページ定義IDとページ定義のレコードシリアル番号を更新 - $this->endPageDefParam($defSerial, $defConfigId, $this->paramObj); - } - /** - * 選択用メニューを作成 - * - * @return なし - */ - function createItemMenu() - { - for ($i = 0; $i < count($this->paramObj); $i++){ - $id = $this->paramObj[$i]->id;// 定義ID - $targetObj = $this->paramObj[$i]->object; - $name = $targetObj->name;// 定義名 - $selected = ''; - if ($this->configId == $id) $selected = 'selected'; - - $row = array( - 'name' => $name, // 名前 - 'value' => $id, // 定義ID - 'selected' => $selected // 選択中の項目かどうか - ); - $this->tmpl->addVars('title_list', $row); - $this->tmpl->parseTemplate('title_list', 'a'); - } - } - /** - * デフォルトの名前を取得 - * - * @return string デフォルト名 - */ - function createDefaultName() - { - $name = self::DEFAULT_NAME_HEAD; - for ($j = 1; $j < 100; $j++){ - $name = self::DEFAULT_NAME_HEAD . $j; - // 設定名の重複チェック - for ($i = 0; $i < count($this->paramObj); $i++){ - $targetObj = $this->paramObj[$i]->object; - if ($name == $targetObj->name){ // 定義名 - break; - } - } - // 重複なしのときは終了 - if ($i == count($this->paramObj)) break; - } - return $name; - } - /** - * 取得したデータをテンプレートに設定する - * - * @param int $index 行番号(0~) - * @param array $fetchedRow フェッチ取得した行 - * @param object $param 未使用 - * @return bool true=処理続行の場合、false=処理終了の場合 - */ - function menuIdListLoop($index, $fetchedRow, $param) - { - $value = $fetchedRow['mn_id']; - $name = $fetchedRow['mn_name'] . '(' . $value . ')'; - - $selected = ''; - if ($value == $this->menuId) $selected = 'selected'; - - $row = array( - 'value' => $value, // ページID - 'name' => $name, // ページ名 - 'selected' => $selected // 選択中かどうか - ); - $this->tmpl->addVars('menu_id_list', $row); - $this->tmpl->parseTemplate('menu_id_list', 'a'); - return true; - } - /** - * 一覧画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param なし - */ - function createList($request) - { - // ページ定義IDとページ定義のレコードシリアル番号を取得 - $this->startPageDefParam($defSerial, $defConfigId, $this->paramObj); - - $userId = $this->gEnv->getCurrentUserId(); - $langId = $this->gEnv->getCurrentLanguage(); // 表示言語を取得 - $act = $request->trimValueOf('act'); - - // 詳細画面からの引継ぎデータ - $menuId = $request->trimValueOf('menuid'); - - if ($act == 'delete'){ // メニュー項目の削除 - $listedItem = explode(',', $request->trimValueOf('seriallist')); - $delItems = array(); - for ($i = 0; $i < count($listedItem); $i++){ - // 項目がチェックされているかを取得 - $itemName = 'item' . $i . '_selected'; - $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0; - - if ($itemValue){ // チェック項目 - $delItems[] = $listedItem[$i]; - } - } - if (count($delItems) > 0){ - $ret = $this->delPageDefParam($defSerial, $defConfigId, $this->paramObj, $delItems); - if ($ret){ // データ削除成功のとき - $this->setGuidanceMsg('データを削除しました'); - } else { - $this->setAppErrorMsg('データ削除に失敗しました'); - } - } - } - // 定義一覧作成 - $this->createItemList(); - if (count($this->serialArray) <= 0) $this->tmpl->setAttribute('itemlist', 'visibility', 'hidden');// 一覧非表示 - - // 選択状態はメニュー設定に固定 - $activeIndex = 0; - - // ナビゲーションタブ作成 - $tabItemIndex = 0; - $tabDef = array(); - $tabItem = new stdClass; - $tabItem->name = 'ウィジェット設定'; - $tabItem->task = ''; - $tabItem->url = '#widget_config'; - $tabItem->parent = 0; - $tabItem->active = false; - $tabDef[] = $tabItem; $tabItemIndex++; - $tabItem = new stdClass; - $tabItem->name = 'メニュー定義'; - $tabItem->task = ''; - $tabItem->url = '#menu_define'; - $tabItem->parent = 0; - $tabItem->active = false; - $tabDef[] = $tabItem; $tabItemIndex++; - $tabHtml = $this->gDesign->createConfigNavTab($tabDef); - $this->tmpl->addVar("_widget", "nav_tab", $tabHtml); - - // メニュー定義画面のURLを作成 - $taskValue = 'smenudef'; - $menuDefUrl = $this->gEnv->getDefaultAdminUrl() . '?' . 'task=' . $taskValue . '&openby=tabs&menuid=' . $menuId; - $this->tmpl->addVar("_widget", "url", $this->getUrl($menuDefUrl)); - $this->tmpl->addVar("_widget", "menu_id", $menuId); - - $this->tmpl->addVar("_widget", "serial_list", implode($this->serialArray, ','));// 表示項目のシリアル番号を設定 - - // ページ定義IDとページ定義のレコードシリアル番号を更新 - $this->endPageDefParam($defSerial, $defConfigId, $this->paramObj); - } - /** - * 定義一覧作成 - * - * @return なし - */ - function createItemList() - { - for ($i = 0; $i < count($this->paramObj); $i++){ - $id = $this->paramObj[$i]->id;// 定義ID - $targetObj = $this->paramObj[$i]->object; - $name = $targetObj->name;// 定義名 - - // メニュー定義名を取得 - $menuName = ''; - if ($this->db->getMenu($targetObj->menuId, $row)){ - $menuName = $row['mn_name'] . '(' . $row['mn_id'] . ')'; - } - - $defCount = 0; - if (!empty($id)){ - $defCount = $this->_db->getPageDefCount($this->gEnv->getCurrentWidgetId(), $id); - } - $operationDisagled = ''; - if ($defCount > 0) $operationDisagled = 'disabled'; - $row = array( - 'index' => $i, - 'id' => $id, - 'ope_disabled' => $operationDisagled, // 選択可能かどうか - 'name' => $this->convertToDispString($name), // 名前 - 'menu_name' => $this->convertToDispString($menuName), // メニュー定義名 - 'def_count' => $defCount // 使用数 - ); - $this->tmpl->addVars('itemlist', $row); - $this->tmpl->parseTemplate('itemlist', 'a'); - - // シリアル番号を保存 - $this->serialArray[] = $id; - } - } -} -?> diff --git a/widgets/m/menu/include/container/m_menuWidgetContainer.php b/widgets/m/menu/include/container/m_menuWidgetContainer.php deleted file mode 100644 index 30625732..00000000 --- a/widgets/m/menu/include/container/m_menuWidgetContainer.php +++ /dev/null @@ -1,232 +0,0 @@ - - * @copyright Copyright 2006-2013 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/menuDb.php'); - -class m_menuWidgetContainer extends BaseWidgetContainer -{ - private $db; // DB接続オブジェクト - private $langId; // 現在の言語 - private $paramObj; // 定義取得用 - private $templateType; // テンプレートのタイプ - private $currentUserLogined; // 現在のユーザはログイン中かどうか - const DEFAULT_CONFIG_ID = 0; - const MAX_MENU_TREE_LEVEL = 5; // メニュー階層最大数 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new menuDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $this->langId = $this->gEnv->getCurrentLanguage(); - $this->currentUserLogined = $this->gEnv->isCurrentUserLogined(); // 現在のユーザはログイン中かどうか - - // 定義ID取得 - $configId = $this->gEnv->getCurrentWidgetConfigId(); - if (empty($configId)) $configId = self::DEFAULT_CONFIG_ID; - - // パラメータオブジェクトを取得 - $targetObj = $this->getWidgetParamObjByConfigId($configId); - if (empty($targetObj)){ // 定義データが取得できないとき - // 出力抑止 - $this->cancelParse(); - } else { - $menuId = $targetObj->menuId; // メニューID - $name = $targetObj->name;// 定義名 - $limitUser = $targetObj->limitUser;// ユーザを制限するかどうか - - // ユーザ制限があるときはログイン時のみ表示 - if (!$limitUser || $this->currentUserLogined){ - // メニュー作成 - $parentTree = array(); // 選択されている項目までの階層パス - $menuHtml = $this->createMenu($menuId, 0, 0, $tmp, $parentTree); - - if (!empty($menuHtml)) $this->tmpl->addVar("_widget", "menu_html", $menuHtml); - } else { - // 出力抑止 - $this->cancelParse(); - } - } - } - /** - * メニューツリー作成 - * - * @param string $menuId メニューID - * @param int $parantId 親メニュー項目ID - * @param int $level 階層数 - * @param bool $hasSelectedChild 現在選択状態の子項目があるかどうか - * @param array $parentTree 現在の階層パス - * @return string ツリーメニュータグ - */ - function createMenu($menuId, $parantId, $level, &$hasSelectedChild, &$parentTree) - { - static $index = 0; // インデックス番号 - $hasSelectedChild = false; - - // メニューの階層を制限 - if ($level >= self::MAX_MENU_TREE_LEVEL) return ''; - - $treeHtml = ''; - if ($this->db->getChildMenuItems($menuId, $parantId, $this->langId, $rows)){ - $itemCount = count($rows); - for ($i = 0; $i < $itemCount; $i++){ - $row = $rows[$i]; - - // 非表示のときは処理を飛ばす - if (!$row['md_visible']) continue; - - // ユーザ制限がある場合はログイン状態をチェック - if ($row['md_user_limited'] && !$this->currentUserLogined) continue; - - // リンク先のコンテンツの表示状況に合わせる - if ($row['md_content_type'] == M3_VIEW_TYPE_CONTENT){ // 汎用コンテンツの場合 - // ログインユーザに表示制限されている場合はメニューを追加しない - if (!empty($row['cn_user_limited']) && !$this->currentUserLogined) continue; - } - - // リンク先の作成 - $linkUrl = $row['md_link_url']; - $linkUrl = $this->getUrl($linkUrl, true/*リンク用*/); - if (empty($linkUrl)) $linkUrl = '#'; - - // 選択状態の設定 - if ($this->checkMenuItemUrl($linkUrl)){ - $hasSelectedChild = true; - } - - // メニュー項目を作成 - $name = $this->getCurrentLangString($row['md_name']); - $title = $this->getCurrentLangString($row['md_title']); // タイトル(HTML可) - if (empty($title)) $title = $name; - if (empty($title)) continue; - - // メニュータイトルの処理。タグが含まれていない場合は文字をエスケープする。 - $stripName = strip_tags($title); - if (strlen($stripName) == strlen($title)) $title = $this->convertToDispString($title); // 文字列長が同じとき - - $index++; // インデックス番号更新 - - switch ($row['md_type']){ - case 0: // リンク項目のとき - default: // フォルダ等 - $treeHtml .= '' . $title . '
' . M3_NL; - break; - case 2: // テキストのとき - $treeHtml .= $title . '
' . M3_NL; - break; - case 3: // セパレータのとき - // ##### タグ作成 ##### - $treeHtml .= '
' . M3_NL; - break; - } - } - } - return $treeHtml; - } - /** - * メニュー項目の選択条件をチェック - * - * @param string $url チェック対象のURL - * @return bool true=アクティブ、false=非アクティブ - */ - function checkMenuItemUrl($url) - { - $currentUrl = $this->gEnv->getCurrentRequestUri(); - - // 同じURLのとき - if ($url == $currentUrl) return true; - - // URLを解析 - $queryArray = array(); - $parsedUrl = parse_url($url); - if (!empty($parsedUrl['query'])) parse_str($parsedUrl['query'], $queryArray); // クエリーの解析 - - // ルートかどうかチェック(クエリー文字列なし) - if ($this->isRootUrl($url)){ - // ページサブIDで比較 - if ($this->gEnv->getCurrentPageSubId() == $this->gEnv->getDefaultPageSubId()) return true; - } - - // パラメータがサブページIDだけの場合はページサブIDで比較 - if (count($queryArray) == 1 && isset($queryArray[M3_REQUEST_PARAM_PAGE_SUB_ID])){ - if ($this->gEnv->getCurrentPageSubId() == $queryArray[M3_REQUEST_PARAM_PAGE_SUB_ID]) return true; - } - return false; - } - /** - * URLがルートを指しているかどうか取得 - * - * @param string $url チェック対象のURL - * @return bool true=ルート、false=ルート以外 - */ - function isRootUrl($url) - { - $url = str_replace('https://', 'http://', $url); // 一旦httpに統一 - $systemUrl = str_replace('https://', 'http://', $this->gEnv->getRootUrl()); // 一旦httpに統一 - $systemSslUrl = str_replace('https://', 'http://', $this->gEnv->getSslRootUrl()); // 一旦httpに統一 - - $parsedUrl = parse_url($url); - if (empty($parsedUrl['query'])){ // クエリ文字列がないことが条件。「#」はあっても良い。 - // パスを解析 - $relativePath = str_replace($systemUrl, '', $url); // ルートURLからの相対パスを取得 - if (empty($relativePath)){ // Magic3のルートURLの場合 - return true; - } else if (strStartsWith($relativePath, '/') || strStartsWith($relativePath, '/' . M3_FILENAME_INDEX)){ // ルートURL配下のとき - return true; - } else { // ルートURL以外のURLのとき(SSL用のURL以下かどうかチェック) - $relativePath = str_replace($systemSslUrl, '', $url); // ルートURLからの相対パスを取得 - if (empty($relativePath)){ // Magic3のルートURLの場合 - return true; - } else if (strStartsWith($relativePath, '/') || strStartsWith($relativePath, '/' . M3_FILENAME_INDEX)){ // ルートURL配下のとき - return true; - } - } - } - return false; - } -} -?> diff --git a/widgets/m/menu/include/db/menuDb.php b/widgets/m/menu/include/db/menuDb.php deleted file mode 100644 index 970a5cfd..00000000 --- a/widgets/m/menu/include/db/menuDb.php +++ /dev/null @@ -1,99 +0,0 @@ - - * @copyright Copyright 2006-2013 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getDbPath() . '/baseDb.php'); - -class menuDb extends BaseDb -{ - /** - * メニューIDのリストを取得 - * - * @param int $deviceType 端末タイプ(0=PC、1=携帯、2=スマートフォン) - * @param function $callback コールバック関数 - * @return なし - */ - function getMenuIdList($deviceType, $callback) - { - $queryStr = 'SELECT * FROM _menu_id '; - $queryStr .= 'WHERE mn_widget_id = \'\' '; // ウィジェット制限されていないメニュー - $queryStr .= 'AND mn_device_type = ? '; - $queryStr .= 'ORDER BY mn_sort_order'; - $this->selectLoop($queryStr, array($deviceType), $callback); - } - /** - * メニュー項目を取得 - * - * @param string $menuId メニュー識別ID - * @param string $parentId 親項目ID - * @param string $langId 言語ID - * @param array $rows 取得レコード - * @return true=取得、false=取得せず - */ - function getChildMenuItems($menuId, $parentId, $langId, &$rows) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - $initDt = $this->gEnv->getInitValueOfTimestamp(); - $params = array(); - - //$queryStr = 'SELECT md_id, md_name, md_type, md_link_type, md_link_url, md_visible, md_content_type, cn_user_limited FROM _menu_def '; - $queryStr = 'SELECT * FROM _menu_def '; - if ($this->getDbType() == M3_DB_TYPE_PGSQL){ // PostgreSQLの場合 - $queryStr .= 'LEFT JOIN content ON md_content_type = ? AND md_content_id = cn_id::text AND cn_type = ? AND cn_language_id = ? AND cn_deleted = false '; - } else { // MySQLの場合 - $queryStr .= 'LEFT JOIN content ON md_content_type = ? AND md_content_id = cn_id AND cn_type = ? AND cn_language_id = ? AND cn_deleted = false '; - } - $params[] = M3_VIEW_TYPE_CONTENT; // 汎用コンテンツ - $params[] = ''; // PC用コンテンツ - $params[] = $langId; - - // 共通の取得条件 - $queryStr .= 'WHERE md_menu_id = ? '; - $queryStr .= 'AND md_parent_id = ? '; - $params[] = $menuId; - $params[] = $parentId; - - // 汎用コンテンツの表示条件 - $queryStr .= 'AND (md_content_type != ? OR (md_content_type = ? '; - $queryStr .= 'AND cn_visible = true '; - $queryStr .= 'AND (cn_active_start_dt = ? OR (cn_active_start_dt != ? AND cn_active_start_dt <= ?)) '; - $queryStr .= 'AND (cn_active_end_dt = ? OR (cn_active_end_dt != ? AND cn_active_end_dt > ?)))) '; - $params[] = M3_VIEW_TYPE_CONTENT; // 汎用コンテンツ - $params[] = M3_VIEW_TYPE_CONTENT; // 汎用コンテンツ - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - $params[] = $initDt; - $params[] = $initDt; - $params[] = $now; - - $queryStr .= 'ORDER BY md_index'; - $retValue = $this->selectRecords($queryStr, $params, $rows); - return $retValue; - } - /** - * メニュー情報の取得 - * - * @param string $id メニューID - * @return true=正常、false=異常 - */ - function getMenu($id, &$row) - { - $queryStr = 'SELECT * FROM _menu_id '; - $queryStr .= 'WHERE mn_id = ? '; - $ret = $this->selectRecord($queryStr, array($id), $row); - return $ret; - } -} -?> diff --git a/widgets/m/menu/include/help/index.php b/widgets/m/menu/include/help/index.php deleted file mode 100644 index 0d476322..00000000 --- a/widgets/m/menu/include/help/index.php +++ /dev/null @@ -1,49 +0,0 @@ - - * @copyright Copyright 2006-2013 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -global $HELP; - -// ########## メインメニュー項目一覧 ########## -$HELP['menu_list']['title'] = 'メニュー設定一覧'; -$HELP['menu_list']['body'] = '登録されているメニュー設定の一覧です。'; -$HELP['menu_detail']['title'] = 'メニュー設定'; -$HELP['menu_detail']['body'] = 'メニューについての設定を行います。'; -$HELP['menu_check']['title'] = '選択用チェックボックス'; -$HELP['menu_check']['body'] = '削除を行う項目を選択します。'; -$HELP['menu_name']['title'] = '名前'; -$HELP['menu_name']['body'] = 'メニュー設定名です。メニューのタイトルにも使用されます。'; -$HELP['menu_name_input']['title'] = '名前'; -$HELP['menu_name_input']['body'] = 'メニュー設定名です。新規に登録するか、登録済みの設定を選択します。'; -$HELP['menu_id']['title'] = 'メニュー設定ID'; -$HELP['menu_id']['body'] = '自動的に振られるメニュー設定IDです。'; -$HELP['menu_limit_user']['title'] = 'ユーザ制限'; -$HELP['menu_limit_user']['body'] = 'メニューの表示をログインしたユーザに限定するかどうかを設定します。'; -$HELP['menu_def']['title'] = 'メニュー定義'; -$HELP['menu_def']['body'] = 'メニュー項目で使用するメニュー定義を選択します。定義データはシステムで共通です。
単階層でメニューを定義します。
メニューIDは管理機能の「システムマスター管理/メンテナンス/マスター管理/メニューID」で管理します。'; -$HELP['menu_ref']['title'] = '使用'; -$HELP['menu_ref']['body'] = 'メニュー設定を使用しているウィジェット数を示します。使用が0のメニュー設定のみ削除可能です。'; -$HELP['menu_list_btn']['title'] = '一覧ボタン'; -$HELP['menu_list_btn']['body'] = 'メニュー設定一覧を表示します。'; -$HELP['menu_del_btn']['title'] = '削除ボタン'; -$HELP['menu_del_btn']['body'] = '選択されているメニュー設定を削除します。
項目を選択するには、一覧の左端のチェックボックスにチェックを入れます。'; -$HELP['menu_ret_btn']['title'] = '戻るボタン'; -$HELP['menu_ret_btn']['body'] = 'メニュー設定へ戻ります。'; -$HELP['menu_edit_def_btn']['title'] = 'メニュー定義を編集ボタン'; -$HELP['menu_edit_def_btn']['body'] = '選択されているメニュー定義を編集します。'; -?> diff --git a/widgets/m/menu/include/template/admin.tmpl.html b/widgets/m/menu/include/template/admin.tmpl.html deleted file mode 100644 index 68f56d4b..00000000 --- a/widgets/m/menu/include/template/admin.tmpl.html +++ /dev/null @@ -1,134 +0,0 @@ -/** - * 表示データ作成用テンプレート(patTemplate) - * - * LICENSE: This source file is licensed under the terms of the GNU General Public License. - * - * @package Magic3 Framework - * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2014 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ - - -{NAV_TAB} -
-
- -
- - - - - - - - -
メニュー設定 -
- - - - - - - - - - - - - - - - - - - - -
名前 - - - - - ID{ID} -
メニュー定義 - - -
ユーザ制限 -
- - - - - - -
- -
-
-
- -
-
diff --git a/widgets/m/menu/include/template/admin_list.tmpl.html b/widgets/m/menu/include/template/admin_list.tmpl.html deleted file mode 100644 index 6d5eea14..00000000 --- a/widgets/m/menu/include/template/admin_list.tmpl.html +++ /dev/null @@ -1,116 +0,0 @@ -/** - * 表示データ作成用テンプレート(patTemplate) - * - * LICENSE: This source file is licensed under the terms of the GNU General Public License. - * - * @package Magic3 Framework - * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2014 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ - - -{NAV_TAB} -
-
- -
- - - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - -
選択ID名前メニュー定義使用
{ID}{NAME}{MENU_NAME}{DEF_COUNT}
-
-
-
- -
-
diff --git a/widgets/m/menu/include/template/index.tmpl.html b/widgets/m/menu/include/template/index.tmpl.html deleted file mode 100644 index ef14a8b0..00000000 --- a/widgets/m/menu/include/template/index.tmpl.html +++ /dev/null @@ -1,15 +0,0 @@ -/** - * 表示データ作成用テンプレート(patTemplate) - * - * LICENSE: This source file is licensed under the terms of the GNU General Public License. - * - * @package Magic3 Framework - * @author 平田直毅(Naoki Hirata) - * @copyright Copyright 2006-2013 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ - -{MENU_HTML} - diff --git a/widgets/m/menu/index.php b/widgets/m/menu/index.php deleted file mode 100644 index ea816fa9..00000000 --- a/widgets/m/menu/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2013 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id$ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/pc_content/admin/index.php b/widgets/m/pc_content/admin/index.php deleted file mode 100644 index 6cfdcd60..00000000 --- a/widgets/m/pc_content/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 876 2008-08-04 08:37:17Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/pc_content/images/icon32.png b/widgets/m/pc_content/images/icon32.png deleted file mode 100644 index 4d028c32ee517d4135703a265c566bec2ff72933..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2572 zcmV+n3iI`eP)mQCv^Y-34uvOK~#90t(SRlRrM9eKfinL+mpPP?Ik238;}K} zG$@NADFu-#Zp9Uyb_PZ})jFeg=v3`g+d8(Lf-|)vEz@?Swqr}dDpfXx%AgFJvJ(h_ z1YSZy^74|reYyAD`|BT1FyK_N(=&7bx%2y-^Ev1DJ--DhCI8P4C6SExLm2kWmXckEyF z^!>pd>sHCpzBBTo9o)59PJ&;3S{3IMXr89A=>9quR=Oy>=u3P$;A*n;0n>oH8;jKk zo0}(>E_vWCZoYLfMH8k12Ek){Ilg%#@pO{*_8n~5crxVm6L357%1XG|Ltj(@n7u44yL6ob6d zI>t3kqHanHn#YH&a6Dx-ld-w%AQaa8^4YCRpL^xjt6lVTgzK_JvIZ~kkGQlB~dTo^qe22rFmvfE8#xge10i|;W$Q0 zav?O#l5yiW^3JQAzaffyd@09<&!Sr0Xa}Phl?IQLZDD+{l#z-dFf9g$Qp%M8m;De> z)6~>bgazUDo%rh-a60V(bZvVbSM^jL{lj){d+LYW`NVS6(mb|zy@uzSeD-fTOn*2^ z@W>#8Mw~@WKW2h$9;r|}s$nBv+HtDd!w3{U(>Va z@Y6F&sxE2Zu@)_VPK|aziFMVz_v#B=KYtM}r-Fa{1W*LQfgUV}8;1ZgQNlxMlm;&a z884N^8p(n*&SF6vyNW*zV;O#BuwP)KXYq3*5*T?PGj3Q@FLvxFZz`-QLn@#ri zT;Rs9SMbndi>aGA1&G0gUNFgL z2Iy&!Y0#sP8GuL%B2h>OaW&g%y|C&P&GdOSU;_f9Fr3NFGqbtF0Rd@)L~n|B z{?QEs;K^z@EbFqJFjnBk0#zXs2WdcG6ud5QX2Bi>VFOz+7-2~ELofnClV~EzNFYs7 zo&{2aAsg6qa67E63GGnQhOqvL(fV4x(1Vw|S$SsRE1y&M-9g-0kRKae?=TV3!vfO=ZIU=2bxQ?kp zaBCNbj;UB(eJog7jcU&W1WJJu!_dhST&4kCgEUq)ckG2DVCbMrNa>JOAnAlr0nuSd zTVNJ~rhy{K3`Ut$t}wCM4kH3ZvvJ_+!{jlP}-DFJS2(6Jh(hn zkSar10&EV#Nd>!2F~$O<6;(+oY8}!jM+$dNP#GPvj$CU-Msxc_#sN_q!b*UUpehKL z6G}X&LWcywxt^t93!Oj23p1gjP@ zF=Ql-C`f<`2n#H7OQWcuYLJa%GYo7_PtKKHg-ihw55k?HaZWXu2ACl7ED-SK+SBap zN;1E-?C2!`DJ7~9OHTwgJ#){Ts$1?|Fo`Ksst{QN^bnXPSR*+tXimr`!6rd*;&m&y z-9@04fZ{+ZP9!QM90+$N7a^14-@AjXTHD30!{Pm{m5yhAw)y;tu@%6SatE+O2yxx& zjb|R4e_hG#ced4+&6`<4Ntp`_71APC1*<&Q2 zJG*#y-#}#d(db)Y_^Zstxn!Ta6G|x$0FMYEd~fUy-Pcy{e(3&L6>T$S)hX9D`f>R3 za@`R#AtNDUU}myl8i-;a*fM;$Bf#42-RwLt&=D9i{+WPPQpyWg#)7MSm diff --git a/widgets/m/pc_content/images/icon64.png b/widgets/m/pc_content/images/icon64.png deleted file mode 100644 index 4e158f9c9b672451aa5fcbe832e157d03680e2dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 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 e4>`YI&%XnRnQ1(7VvQOA0000 - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_pc_contentWidgetContainer.php 2568 2009-11-18 13:05:26Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/pc_contentDb.php'); - -class admin_m_pc_contentWidgetContainer extends BaseAdminWidgetContainer -{ - private $db; // DB接続オブジェクト - private $serialNo; // 選択中の項目のシリアル番号 - private $serialArray = array(); // 表示されているコンテンツシリアル番号 - private $_menuId = 'mobile_menu'; // メインメニューID - private $isExistsContent; // コンテンツ項目が存在するかどうか - const INC_INDEX = 1; // メニュー項目表示順の増加分 - const ADMIN_WIDGET_ID = 'admin_main'; // 管理ウィジェットのウィジェットID - const CONTENT_TYPE = 'ct'; // 参照数カウント用 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new pc_contentDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == 'detail'){ // 詳細画面 - return 'admin_main_detail.tmpl.html'; - } else { // 一覧画面 - return 'admin_main.tmpl.html'; - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $task = $request->trimValueOf('task'); - if ($task == 'detail'){ // 詳細画面 - return $this->createDetail($request); - } else { // 一覧画面 - return $this->createList($request); - } - } - /** - * コンテンツ一覧画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param なし - */ - function createList($request) - { - // ユーザ情報、表示言語 - $userId = $this->gEnv->getCurrentUserId(); - $langId = $this->gEnv->getDefaultLanguage(); - - $act = $request->trimValueOf('act'); - if ($act == 'addtomenu'){ // メニューに項目を追加 - $contentId = $request->trimValueOf('contentid'); // コンテンツID - - /* - // このウィジェットがマップされているページサブIDを取得 - $subPageId = $this->gPage->getPageSubIdByWidget($this->gEnv->getDefaultPageId(), $this->gEnv->getCurrentWidgetId()); - $sub = ''; - if (!empty($subPageId)) $sub = 'sub=' . $subPageId . '&'; - - // URLの作成 - $url = M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END . '/index.php?' . $sub . 'contentid=' . $contentId;*/ - // このウィジェットがマップされているページサブIDを取得 - $subPageId = $this->gPage->getPageSubIdByWidget($this->gEnv->getDefaultMobilePageId(), $this->gEnv->getCurrentWidgetId()); - $sub = ''; - if (!empty($subPageId)) $sub = 'sub=' . $subPageId . '&'; - - // URLの作成 - $url = M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END . '/m/index.php?' . $sub . 'contentid=' . $contentId; - - // コンテンツ名を取得 - $menutItemName = ''; - $ret = $this->db->getContentByContentId($contentId, $langId, $row); - if ($ret){ - // 取得値を設定 - $menutItemName = $row['cn_name']; // 名前 - } - - // メニュー項目追加 - $ret = $this->db->addMenuItem($this->_menuId, $langId, $menutItemName, $url, self::INC_INDEX, $userId); - if ($ret){ - $this->setGuidanceMsg('メインメニューに項目を追加しました'); - } else { - $this->setAppErrorMsg('メインメニューの項目追加に失敗しました'); - } - } else if ($act == 'delete'){ // 項目削除の場合 - $listedItem = explode(',', $request->trimValueOf('seriallist')); - $delItems = array(); - for ($i = 0; $i < count($listedItem); $i++){ - // 項目がチェックされているかを取得 - $itemName = 'item' . $i . '_selected'; - $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0; - - if ($itemValue){ // チェック項目 - $delItems[] = $listedItem[$i]; - } - } - if (count($delItems) > 0){ - $ret = $this->db->delContentItem($delItems); - if ($ret){ // データ削除成功のとき - $this->setGuidanceMsg('データを削除しました'); - } else { - $this->setAppErrorMsg('データ削除に失敗しました'); - } - } - } - - // コンテンツ項目リストをデフォルト言語で取得 - $this->db->getAllContentItems(array($this, 'itemListLoop'), $langId); - $this->tmpl->addVar("_widget", "serial_list", implode($this->serialArray, ','));// 表示項目のシリアル番号を設定 - // コンテンツ項目がないときは、一覧を表示しない - if (!$this->isExistsContent) $this->tmpl->setAttribute('itemlist', 'visibility', 'hidden'); - } - /** - * コンテンツ詳細画面作成 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param なし - */ - function createDetail($request) - { - // ユーザ情報、表示言語 - $langId = $this->gEnv->getDefaultLanguage(); - - // ウィンドウ表示状態 - $openby = $request->trimValueOf(M3_REQUEST_PARAM_OPEN_BY); - - $act = $request->trimValueOf('act'); - $this->serialNo = $request->trimValueOf('serial'); // 選択項目のシリアル番号 - $name = $request->trimValueOf('item_name'); - $showTitle = ($request->trimValueOf('show_title') == 'on') ? 1 : 0; // タイトルの表示 - $titleBgColor = $request->trimValueOf('item_title_bgcolor'); // タイトルバックグランドカラー - $html = $request->valueOf('item_html'); // HTMLタグを可能とする - $key = $request->valueOf('item_key'); // 外部参照用キー - $visible = ($request->trimValueOf('item_visible') == 'on') ? 1 : 0; // チェックボックス - $limited = ($request->trimValueOf('item_limited') == 'on') ? 1 : 0; // チェックボックス - $default = ($request->trimValueOf('item_default') == 'on') ? 1 : 0; // チェックボックス - - $reloadData = false; // データの再読み込み - if ($act == 'add'){ // 項目追加の場合 - // 入力チェック - $this->checkInput($name, '名前'); - - // エラーなしの場合は、データを登録 - if ($this->getMsgCount() == 0){ - $ret = $this->db->addContentItem(0, $langId, $name, ''/*説明*/, $html, $visible, $default, $limited, $key, $newSerial); - - // 表示属性はコンテンツIDを定義IDにして、ウィジェットパラメータとして保存 - /*if ($ret){ - $paramObj = new stdClass; - $paramObj->showTitle = $showTitle; // タイトルの表示 - $paramObj->titleBgColor = $titleBgColor; // タイトルバックグランドカラー - $ret = $this->updateWidgetParamObjByConfigId($newContentId, $paramObj); - }*/ - if ($ret){ - $this->setGuidanceMsg('データを追加しました'); - // シリアル番号更新 - $this->serialNo = $newSerial; - $reloadData = true; // データの再読み込み - } else { - $this->setAppErrorMsg('データ追加に失敗しました'); - } - } - } else if ($act == 'update'){ // 項目更新の場合 - // 入力チェック - $this->checkInput($name, '名前'); - - // エラーなしの場合は、データを更新 - if ($this->getMsgCount() == 0){ - $ret = $this->db->updateContentItem($this->serialNo, $name, $html, $visible, $default, $limited, $key, $newSerial); - if ($ret){ - $this->setGuidanceMsg('データを更新しました'); - // シリアル番号更新 - $this->serialNo = $newSerial; - $reloadData = true; // データの再読み込み - } else { - $this->setAppErrorMsg('データ更新に失敗しました'); - } - } - } else if ($act == 'delete'){ // 項目削除の場合 - if (empty($this->serialNo)){ - $this->setUserErrorMsg('削除項目が選択されていません'); - } - // エラーなしの場合は、データを削除 - if ($this->getMsgCount() == 0){ - $ret = $this->db->delContentItem(array($this->serialNo)); - if ($ret){ // データ削除成功のとき - $this->setGuidanceMsg('データを削除しました'); - $reloadData = true; // データの再読み込み - } else { - $this->setAppErrorMsg('データ削除に失敗しました'); - } - } - } else { - // コンテンツIDが設定されているとき(他ウィジェットからの表示)は、データを取得 - $contentId = $request->trimValueOf('contentid'); // コンテンツID - if (empty($contentId)){ - if (empty($this->serialNo)){ // 新規項目追加のとき - $visible = 1; // 初期状態は表示 - } else { - $reloadData = true; // データの再読み込み - } - } else { - // コンテンツを取得 - $ret = $this->db->getContentByContentId($contentId, $langId, $row); - if ($ret){ - $this->serialNo = $row['cn_serial']; // コンテンツシリアル番号 - $reloadData = true; // データの再読み込み - } else { - $this->serialNo = 0; - } - } - } - if ($reloadData){ // データの再読み込み - $ret = $this->db->getContentBySerial($this->serialNo, $row); - if ($ret){ - $contentId = $row['cn_id']; // コンテンツID - $name = $row['cn_name']; // コンテンツ名前 - $html = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->gEnv->getRootUrl(), $row['cn_html']); // HTML - $key = $row['cn_key']; // 外部参照用キー - $update_user = $this->convertToDispString($row['lu_name']);// 更新者 - $update_dt = $this->convertToDispDateTime($row['cn_create_dt']); - - // 項目表示、デフォルト値チェックボックス - $visible = $row['cn_visible']; - $default = $row['cn_default']; - $limited = $row['cn_user_limited']; // ユーザ制限 - } else { - $this->serialNo = 0; - } - } - - // ### 入力値を再設定 ### - $this->tmpl->addVar("_widget", "sel_item_name", $name); // 名前 - $this->tmpl->addVar("_widget", "sel_item_html", $html); // HTML - $this->tmpl->addVar("_widget", "sel_item_key", $key); // 外部参照用キー - $this->tmpl->addVar("_widget", "update_user", $update_user); // 更新者 - $this->tmpl->addVar("_widget", "update_dt", $update_dt); // 更新日時 - - // 項目表示、項目利用可否チェックボックス - $visibleStr = ''; - if ($visible) $visibleStr = 'checked'; - $this->tmpl->addVar("_widget", "sel_item_visible", $visibleStr); - $defaultStr = ''; - if ($default) $defaultStr = 'checked'; - $this->tmpl->addVar("_widget", "sel_item_default", $defaultStr); - $limitedStr = ''; - if ($limited) $limitedStr = 'checked'; - $this->tmpl->addVar("_widget", "sel_item_limited", $limitedStr); - - // 選択中のシリアル番号を設定 - $this->tmpl->addVar("_widget", "serial", $this->serialNo); - - // パスの設定 - $this->tmpl->addVar('_widget', 'admin_url', $this->getUrl($this->gEnv->getDefaultAdminUrl()));// 管理者URL - $this->tmpl->addVar('_widget', 'custom_value_task', 'usercustom'); // ユーザ定義値参照用 - $this->tmpl->addVar('_widget', 'admin_widget_id', self::ADMIN_WIDGET_ID);// ユーザ定義値参照用(管理ウィジェットのウィジェットID) - - // ボタンの表示制御 - if (empty($this->serialNo)){ // 新規追加項目を選択しているとき - $this->tmpl->addVar("_widget", "sel_item_id", '新規'); // コンテンツID - $this->tmpl->setAttribute('add_button', 'visibility', 'visible');// 「新規追加」ボタン - } else { - $this->tmpl->addVar("_widget", "sel_item_id", $contentId); // コンテンツID - $this->tmpl->setAttribute('del_button', 'visibility', 'visible');// 「削除」ボタン - } - // 「戻る」ボタンの表示 - if ($openby == 'simple') $this->tmpl->setAttribute('cancel_button', 'visibility', 'hidden'); // 詳細画面のみの表示のときは戻るボタンを隠す - } - /** - * 取得したデータをテンプレートに設定する - * - * @param int $index 行番号(0~) - * @param array $fetchedRow フェッチ取得した行 - * @param object $param 未使用 - * @return bool true=処理続行の場合、false=処理終了の場合 - */ - function itemListLoop($index, $fetchedRow, $param) - { - $serial = $this->convertToDispString($fetchedRow['cn_serial']); - - // 表示状態 - $visible = ''; - if ($fetchedRow['cn_visible']) $visible = 'checked'; - - // ユーザ制限 - $limited = ''; - if ($fetchedRow['cn_user_limited']) $limited = 'checked'; - - // デフォルト時の項目かどうか - $default = ''; - if ($fetchedRow['cn_default']) $default = 'checked'; - - // 対応言語を取得 - $lang = ''; - $ret = $this->db->getLangByContentId($fetchedRow['cn_id'], $rows); - if ($ret){ - $count = count($rows); - for ($i = 0; $i < $count; $i++){ - if ($this->gEnv->getCurrentLanguage() == 'ja'){ // 日本語の場合 - $lang .= $rows[$i]['ln_name']; - if ($i != $count -1) $lang .= ','; - } else { - $lang .= $rows[$i]['ln_name_en']; - if ($i != $count -1) $lang .= ','; - } - } - } - // 総参照数 - $totalViewCount = $this->gInstance->getAnalyzeManager()->getTotalContentViewCount(self::CONTENT_TYPE, $serial); - - $row = array( - 'index' => $index, // 項目番号 - 'serial' => $serial, // シリアル番号 - 'id' => $this->convertToDispString($fetchedRow['cn_id']), // ID - 'name' => $this->convertToDispString($fetchedRow['cn_name']), // 名前 - 'lang' => $lang, // 対応言語 - 'view_count' => $totalViewCount, // 総参照数 - 'update_user' => $this->convertToDispString($fetchedRow['lu_name']), // 更新者 - 'update_dt' => $this->convertToDispDateTime($fetchedRow['cn_create_dt']), // 更新日時 - 'visible' => $visible, // メニュー項目表示制御 - 'limited' => $limited, // ユーザ制限 - 'default' => $default // デフォルト項目 - ); - $this->tmpl->addVars('itemlist', $row); - $this->tmpl->parseTemplate('itemlist', 'a'); - - // 表示中のコンテンツIDを保存 - $this->serialArray[] = $fetchedRow['cn_serial']; - - $this->isExistsContent = true; // コンテンツ項目が存在するかどうか - return true; - } -} -?> diff --git a/widgets/m/pc_content/include/container/m_pc_contentWidgetContainer.php b/widgets/m/pc_content/include/container/m_pc_contentWidgetContainer.php deleted file mode 100644 index 03d42848..00000000 --- a/widgets/m/pc_content/include/container/m_pc_contentWidgetContainer.php +++ /dev/null @@ -1,141 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_pc_contentWidgetContainer.php 3728 2010-10-24 09:16:35Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/pc_contentDb.php'); -require_once($gEnvManager->getCommonPath() . '/valueCheck.php'); - -class m_pc_contentWidgetContainer extends BaseWidgetContainer -{ - private $db; // DB接続オブジェクト - private $_contentCreated; // コンテンツが取得できたかどうか - private $currentDay; // 現在日 - private $currentHour; // 現在時間 - private $headTitle; // HTMLヘッダタイトル - private $currentRootUrl; // 現在のページのルートURL - const CONTENT_TYPE = 'ct'; // 参照数カウント用 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new pc_contentDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'main.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - // 現在日時を取得 - $this->currentDay = date("Y/m/d"); // 日 - $this->currentHour = (int)date("H"); // 時間 - - // 現在のページのルートURL - $this->currentRootUrl = $this->gEnv->getRootUrlByCurrentPage(); - - // ログインユーザでないときは、ユーザ制限のない項目だけ表示 - $all = false; - if ($this->gEnv->isCurrentUserLogined()) $all = true; - - $contentid = $request->trimValueOf('contentid'); - if (empty($contentid)){ // コンテンツIDがないときはデフォルトデータを取得 - $this->db->getContentItems(array($this, 'itemsLoop'), null, $this->gEnv->getCurrentLanguage(), $all); - if (!$this->_contentCreated){ // コンテンツが取得できなかったときはデフォルト言語で取得 - $this->db->getContentItems(array($this, 'itemsLoop'), null, $this->gEnv->getDefaultLanguage(), $all); - } - } else { - // データエラーチェック - $contentIdArray = explode(',', $contentid); - if (ValueCheck::isNumeric($contentIdArray)){ // すべて数値であるかチェック - $this->db->getContentItems(array($this, 'itemsLoop'), $contentIdArray, $this->gEnv->getCurrentLanguage(), $all); - if (!$this->_contentCreated){ // コンテンツが取得できなかったときはデフォルト言語で取得 - $this->db->getContentItems(array($this, 'itemsLoop'), $contentIdArray, $this->gEnv->getDefaultLanguage(), $all); - } - } else { - $this->setAppErrorMsg('IDにエラー値があります'); - } - } - // HTMLサブタイトルを設定 - if (!empty($this->headTitle)) $this->gPage->setHeadSubTitle($this->headTitle); - } - /** - * 取得したコンテンツ項目をテンプレートに設定する - * - * @param int $index 行番号 - * @param array $fetchedRow 取得行 - * @param object $param 任意使用パラメータ - * @return bool trueを返すとループ続行。falseを返すとその時点で終了。 - */ - function itemsLoop($index, $fetchedRow) - { - // ビューカウントを更新 - if (!$this->gEnv->isSystemManageUser()){ // システム運用者以上の場合はカウントしない - $this->gInstance->getAnalyzeManager()->updateContentViewCount(self::CONTENT_TYPE, $fetchedRow['cn_serial'], $this->currentDay, $this->currentHour); - } - - // タイトルを設定 - $title = $fetchedRow['cn_name']; - if (empty($this->headTitle)) $this->headTitle = $title; - - // HTMLを出力 - // 出力内容は特にエラーチェックしない - $contentText = $fetchedRow['cn_html']; - $contentText = str_replace(M3_TAG_START . M3_TAG_MACRO_ROOT_URL . M3_TAG_END, $this->gEnv->getRootUrl(), $contentText);// アプリケーションルートを変換 - - // 登録したキーワードを変換 - $this->gInstance->getTextConvManager()->convByKeyValue($contentText, $contentText, true/*改行コーをbrタグに変換*/); - - // 携帯用コンテンツに変換 - $contentText = $this->gInstance->getTextConvManager()->autoConvPcContentToMobile($contentText, $this->currentRootUrl/*現在のページのルートURL*/, - M3_VIEW_TYPE_CONTENT/*汎用コンテンツ*/, $fetchedRow['cn_create_dt']/*コンテンツ作成日時*/); - - $row = array( - 'title' => $title, - 'content' => $contentText // コンテンツ - ); - $this->tmpl->addVars('contentlist', $row); - $this->tmpl->parseTemplate('contentlist', 'a'); - - // コンテンツが取得できた - $this->_contentCreated = true; - return true; - } -} -?> diff --git a/widgets/m/pc_content/include/db/pc_contentDb.php b/widgets/m/pc_content/include/db/pc_contentDb.php deleted file mode 100644 index cee33d87..00000000 --- a/widgets/m/pc_content/include/db/pc_contentDb.php +++ /dev/null @@ -1,478 +0,0 @@ - - * @copyright Copyright 2006-2008 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: pc_contentDb.php 1253 2008-11-19 05:43:26Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getDbPath() . '/baseDb.php'); - -class pc_contentDb extends BaseDb -{ - /** - * コンテンツ項目を取得 - * - * @param function $callback コールバック関数 - * @param array $contentIdArray コンテンツID - * @param string $lang 言語 - * @param bool $all すべてのデータを取得するか、ユーザ制限のないデータを取得するかを指定 - * @return なし - */ - function getContentItems($callback, $contentIdArray, $lang, $all=true) - { - $contentType = ''; - - // コンテンツIDの指定がない場合は、デフォルト値を取得 - if ($contentIdArray == null){ - $queryStr = 'SELECT * FROM content '; - $queryStr .= 'WHERE cn_visible = true '; - $queryStr .= 'AND cn_default = true '; - $queryStr .= 'AND cn_deleted = false '; // 削除されていない - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_language_id = ? '; - if (!$all) $queryStr .= 'AND cn_user_limited = false '; // ユーザ制限のないデータ - $queryStr .= 'ORDER BY cn_serial'; - $this->selectLoop($queryStr, array($contentType, $lang), $callback, null); - } else { - $contentId = implode(',', $contentIdArray); - - // CASE文作成 - $caseStr = 'CASE cn_id '; - for ($i = 0; $i < count($contentIdArray); $i++){ - $caseStr .= 'WHEN ' . $contentIdArray[$i] . ' THEN ' . $i . ' '; - } - $caseStr .= 'END AS no'; - - $queryStr = 'SELECT *, ' . $caseStr . ' FROM content '; - $queryStr .= 'WHERE cn_visible = true '; - $queryStr .= 'AND cn_deleted = false '; // 削除されていない - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_id in (' . $contentId . ') '; - $queryStr .= 'AND cn_language_id = ? '; - if (!$all) $queryStr .= 'AND cn_user_limited = false '; // ユーザ制限のないデータ - $queryStr .= 'ORDER BY no'; - $this->selectLoop($queryStr, array($contentType, $lang), $callback, null); - } - } - /** - * コンテンツ項目一覧を取得(管理用) - * - * @param function $callback コールバック関数 - * @param string $lang 言語 - * @return なし - */ - function getAllContentItems($callback, $lang) - { - $contentType = ''; - $queryStr = 'SELECT * FROM content LEFT JOIN _login_user ON cn_create_user_id = lu_id AND lu_deleted = false '; - $queryStr .= 'WHERE cn_type = ? '; - $queryStr .= 'AND cn_language_id = ? '; - $queryStr .= 'AND cn_deleted = false '; // 削除されていない - $queryStr .= 'ORDER BY cn_id'; - $this->selectLoop($queryStr, array($contentType, $lang), $callback, null); - } - /** - * コンテンツの対応言語を取得(管理用) - * - * @param string $contentId コンテンツID - * @return true=取得、false=取得せず - */ - function getLangByContentId($contentId, &$rows) - { - $contentType = ''; - $queryStr = 'SELECT ln_id, ln_name, ln_name_en FROM content LEFT JOIN _language ON cn_language_id = ln_id '; - $queryStr .= 'WHERE cn_deleted = false '; // 削除されていない - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_id = ? '; - $queryStr .= 'ORDER BY cn_id, ln_priority'; - $retValue = $this->selectRecords($queryStr, array($contentType, $contentId), $rows); - return $retValue; - } - /** - * コンテンツの対応言語を取得(管理用) - * - * @param function $callback コールバック関数 - * @param string $contentId コンテンツID - * @return なし - */ - function getLangLoopByContentId($callback, $contentId) - { - // コンテンツIDがないときは終了 - if (empty($contentId)) return; - - $contentType = ''; - $queryStr = 'SELECT ln_id, ln_name, ln_name_en FROM content LEFT JOIN _language ON cn_language_id = ln_id '; - $queryStr .= 'WHERE cn_deleted = false '; // 削除されていない - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_id = ? '; - $queryStr .= 'ORDER BY cn_id, ln_priority'; - $this->selectLoop($queryStr, array($contentType, $contentId), $callback, null); - } - /** - * コンテンツ項目をコンテンツIDで取得 - * - * @param string $contentId コンテンツID - * @param string $langId 言語ID - * @param array $row レコード - * @return bool 取得 = true, 取得なし= false - */ - function getContentByContentId($contentId, $langId, &$row) - { - $contentType = ''; - $queryStr = 'SELECT * FROM content LEFT JOIN _login_user ON cn_create_user_id = lu_id AND lu_deleted = false '; - $queryStr .= 'WHERE cn_deleted = false '; // 削除されていない - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_id = ? '; - $queryStr .= 'AND cn_language_id = ? '; - $ret = $this->selectRecord($queryStr, array($contentType, $contentId, $langId), $row); - return $ret; - } - /** - * コンテンツ項目をシリアル番号で取得 - * - * @param string $serial シリアル番号 - * @param array $row レコード - * @return bool 取得 = true, 取得なし= false - */ - function getContentBySerial($serial, &$row) - { - $queryStr = 'select * from content LEFT JOIN _login_user ON cn_create_user_id = lu_id AND lu_deleted = false '; - $queryStr .= 'WHERE cn_serial = ? '; - $ret = $this->selectRecord($queryStr, array($serial), $row); - return $ret; - } - - /** - * コンテンツ項目の新規追加 - * - * @param string $contentid コンテンツID - * @param string $lang 言語ID - * @param string $name コンテンツ名 - * @param string $desc 説明 - * @param string $html HTML - * @param bool $visible 表示状態 - * @param bool $default デフォルトで使用するかどうか - * @param bool $limited ユーザ制限するかどうか - * @param string $key 外部参照用キー - * @param int $newSerial 新規シリアル番号 - * @return bool true = 成功、false = 失敗 - */ - function addContentItem($contentid, $lang, $name, $desc, $html, $visible, $default, $limited, $key, &$newSerial) - { - global $gEnvManager; - $now = date("Y/m/d H:i:s"); // 現在日時 - $user = $gEnvManager->getCurrentUserId(); // 現在のユーザ - $contentType = ''; - - // トランザクション開始 - $this->startTransaction(); - - if ($contentid == 0){ // コンテンツIDが0のときは、コンテンツIDを新規取得 - // コンテンツIDを決定する - $queryStr = 'select max(cn_id) as mid from content '; - $queryStr .= 'WHERE cn_type = ? '; - $ret = $this->selectRecord($queryStr, array($contentType), $row); - if ($ret){ - $contId = $row['mid'] + 1; - } else { - $contId = 1; - } - } else { - $contId = $contentid; - } - - // 前レコードの削除状態チェック - $historyIndex = 0; - $queryStr = 'SELECT * FROM content '; - $queryStr .= 'WHERE cn_type = ? '; - $queryStr .= 'AND cn_id = ? '; - $queryStr .= 'AND cn_language_id = ? '; - $queryStr .= 'ORDER BY cn_history_index DESC '; - $ret = $this->selectRecord($queryStr, array($contentType, $contId, $lang), $row); - if ($ret){ - if (!$row['cn_deleted']){ // レコード存在していれば終了 - $this->endTransaction(); - return false; - } - $historyIndex = $row['cn_history_index'] + 1; - } - // デフォルトを設定のときは他のデフォルトを解除 - if ($default){ - $queryStr = 'UPDATE content '; - $queryStr .= 'SET cn_default = false, '; // デフォルトをクリア - $queryStr .= 'cn_update_user_id = ?, '; - $queryStr .= 'cn_update_dt = ? '; - $queryStr .= 'WHERE cn_deleted = false '; - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_language_id = ? '; - $this->execStatement($queryStr, array($user, $now, $contentType, $lang)); - } - // データを追加 - $queryStr = 'INSERT INTO content '; - $queryStr .= '(cn_type, cn_id, cn_language_id, cn_history_index, cn_name, cn_description, cn_html, cn_visible, cn_default, cn_user_limited, cn_key, cn_create_user_id, cn_create_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($contentType, $contId, $lang, $historyIndex, $name, $desc, $html, intval($visible), intval($default), intval($limited), $key, $user, $now)); - - // 新規のシリアル番号取得 - $queryStr = 'select max(cn_serial) as ns from content '; - $ret = $this->selectRecord($queryStr, array(), $row); - if ($ret) $newSerial = $row['ns']; - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - - /** - * コンテンツ項目の更新 - * - * @param int $serial シリアル番号 - * @param string $name コンテンツ名 - * @param string $html HTML - * @param bool $visible 表示状態 - * @param bool $default デフォルトで使用するかどうか - * @param bool $limited ユーザ制限するかどうか - * @param string $key 外部参照用キー - * @param int $newSerial 新規シリアル番号 - * @return bool true = 成功、false = 失敗 - */ - function updateContentItem($serial, $name, $html, $visible, $default, $limited, $key, &$newSerial) - { - global $gEnvManager; - $now = date("Y/m/d H:i:s"); // 現在日時 - $user = $gEnvManager->getCurrentUserId(); // 現在のユーザ - $contentType = ''; - - // トランザクション開始 - $this->startTransaction(); - - // 指定のシリアルNoのレコードが削除状態でないかチェック - $historyIndex = 0; // 履歴番号 - $queryStr = 'select * from content '; - $queryStr .= 'where cn_serial = ? '; - $ret = $this->selectRecord($queryStr, array($serial), $row); - if ($ret){ // 既に登録レコードがあるとき - if ($row['cn_deleted']){ // レコードが削除されていれば終了 - $this->endTransaction(); - return false; - } - $historyIndex = $row['cn_history_index'] + 1; - } else { // 存在しない場合は終了 - $this->endTransaction(); - return false; - } - // デフォルトを設定のときは他のデフォルトを解除 - if ($default){ - $queryStr = 'UPDATE content '; - $queryStr .= 'SET cn_default = false, '; // デフォルトをクリア - $queryStr .= 'cn_update_user_id = ?, '; - $queryStr .= 'cn_update_dt = ? '; - $queryStr .= 'WHERE cn_deleted = false '; - $queryStr .= 'AND cn_type = ? '; - $queryStr .= 'AND cn_language_id = ? '; - $this->execStatement($queryStr, array($user, $now, $contentType, $row['cn_language_id'])); - } - - // 古いレコードを削除 - $queryStr = 'UPDATE content '; - $queryStr .= 'SET cn_deleted = true, '; // 削除 - $queryStr .= 'cn_update_user_id = ?, '; - $queryStr .= 'cn_update_dt = ? '; - $queryStr .= 'WHERE cn_serial = ?'; - $this->execStatement($queryStr, array($user, $now, $serial)); - - // 新規レコード追加 - $queryStr = 'INSERT INTO content '; - $queryStr .= '(cn_type, cn_id, cn_language_id, cn_history_index, cn_name, cn_description, cn_html, cn_visible, cn_default, cn_user_limited, cn_key, cn_create_user_id, cn_create_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $this->execStatement($queryStr, array($row['cn_type'], $row['cn_id'], $row['cn_language_id'], $historyIndex, $name, $row['cn_description'], $html, intval($visible), intval($default), intval($limited), $key, $user, $now)); - - // 新規のシリアル番号取得 - $queryStr = 'select max(cn_serial) as ns from content '; - $ret = $this->selectRecord($queryStr, array(), $row); - if ($ret) $newSerial = $row['ns']; - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - - /** - * コンテンツ項目の削除 - * - * @param array $serial シリアルNo - * @return true=成功、false=失敗 - */ - function delContentItem($serial) - { - global $gEnvManager; - $now = date("Y/m/d H:i:s"); // 現在日時 - $user = $gEnvManager->getCurrentUserId(); // 現在のユーザ - - if (!is_array($serial) || count($serial) <= 0) return true; - - // トランザクション開始 - $this->startTransaction(); - - // 指定のシリアルNoのレコードが削除状態でないかチェック - for ($i = 0; $i < count($serial); $i++){ - $queryStr = 'SELECT * FROM content '; - $queryStr .= 'WHERE cn_deleted = false '; // 未削除 - $queryStr .= 'AND cn_serial = ? '; - $ret = $this->isRecordExists($queryStr, array($serial[$i])); - // 存在しない場合は、既に削除されたとして終了 - if (!$ret){ - $this->endTransaction(); - return false; - } - } - - // レコードを削除 - $queryStr = 'UPDATE content '; - $queryStr .= 'SET cn_deleted = true, '; // 削除 - $queryStr .= 'cn_update_user_id = ?, '; - $queryStr .= 'cn_update_dt = now() '; - $queryStr .= 'WHERE cn_serial in (' . implode($serial, ',') . ') '; - $this->execStatement($queryStr, array($user)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * コンテンツIDでコンテンツ項目を削除 - * - * @param int $serial シリアルNo - * @param int $userId ユーザID(データ更新者) - * @return true=成功、false=失敗 - */ - function delContentItemById($serial, $userId) - { - $contentType = ''; - - // トランザクション開始 - $this->startTransaction(); - - // コンテンツIDを取得 - $queryStr = 'select * from content '; - $queryStr .= 'where cn_deleted = false '; // 未削除 - $queryStr .= 'and cn_serial = ? '; - $ret = $this->selectRecord($queryStr, array($serial), $row); - if ($ret){ // 既に登録レコードがあるとき - if ($row['cn_deleted']){ // レコードが削除されていれば終了 - $this->endTransaction(); - return false; - } - } else { // 存在しない場合は終了 - $this->endTransaction(); - return false; - } - $contId = $row['cn_id']; - - // レコードを削除 - $queryStr = 'UPDATE content '; - $queryStr .= 'SET cn_deleted = true, '; // 削除 - $queryStr .= 'cn_update_user_id = ?, '; - $queryStr .= 'cn_update_dt = now() '; - $queryStr .= 'WHERE cn_type = ? '; - $queryStr .= 'AND cn_id = ? '; - $this->execStatement($queryStr, array($userId, $contentType, $contId)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * コンテンツ項目をすべて削除 - * - * @param int $userId ユーザID(データ更新者) - * @return true=成功、false=失敗 - */ - function delAllContentItems($userId) - { - $contentType = ''; - - // トランザクション開始 - $this->startTransaction(); - - // レコードを削除 - $queryStr = 'UPDATE content '; - $queryStr .= 'SET cn_deleted = true, '; // 削除 - $queryStr .= 'cn_update_user_id = ?, '; - $queryStr .= 'cn_update_dt = now() '; - $queryStr .= 'WHERE cn_type = ? AND cn_deleted = false'; - $this->execStatement($queryStr, array($userId, $contentType)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } - /** - * すべての言語を取得 - * - * @param function $callback コールバック関数 - * @return true=取得、false=取得せず - */ - function getAllLang($callback) - { - $queryStr = 'SELECT * FROM _language ORDER BY ln_priority'; - $this->selectLoop($queryStr, array(), $callback, null); - } - - /** - * メニュー項目の追加 - * - * @param string $menuId メニューID - * @param string $lang 言語ID - * @param string $name メニュー名 - * @param string $url URL - * @param int $incIndex 表示順増加分 - * @param int $userId 更新者ユーザID - * @return bool true = 成功、false = 失敗 - */ - function addMenuItem($menuId, $lang, $name, $url, $incIndex, $userId) - { - // トランザクション開始 - $this->startTransaction(); - - // メニュー項目IDを作成 - $queryStr = 'select max(mi_id) as mid from menu_item '; - $ret = $this->selectRecord($queryStr, array(), $row); - if ($ret){ - $menuItemId = $row['mid'] + 1; - } else { - $menuItemId = 1; - } - // インデックス番号を作成 - $queryStr = 'SELECT max(mi_index) as m FROM menu_item '; - $queryStr .= 'WHERE mi_menu_id = ? '; - $queryStr .= 'AND mi_language_id = ? '; - $ret = $this->selectRecord($queryStr, array($menuId, $lang), $row); - if ($ret){ - $index = $row['m'] + $incIndex; - } else { - $index = 1; - } - - $queryStr = 'INSERT INTO menu_item '; - $queryStr .= '(mi_menu_id, mi_id, mi_language_id, mi_name, mi_index, mi_link_type, mi_link_url, mi_visible, mi_enable, mi_update_user_id, mi_update_dt) '; - $queryStr .= 'VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, now())'; - $this->execStatement($queryStr, array($menuId, $menuItemId, $lang, $name, $index, 0, $url, true, true, $userId)); - - // トランザクション確定 - $ret = $this->endTransaction(); - return $ret; - } -} -?> diff --git a/widgets/m/pc_content/include/help/index.php b/widgets/m/pc_content/include/help/index.php deleted file mode 100644 index 37eb660b..00000000 --- a/widgets/m/pc_content/include/help/index.php +++ /dev/null @@ -1,60 +0,0 @@ - - * @copyright Copyright 2006-2008 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 1253 2008-11-19 05:43:26Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -global $HELP; - -// ########## コンテンツ一覧 ########## -$HELP['content']['title'] = 'コンテンツ一覧'; -$HELP['content']['body'] = 'コンテンツの一覧です。'; -$HELP['content_check']['title'] = '選択用チェックボックス'; -$HELP['content_check']['body'] = '編集や削除を行う項目を選択します。'; -$HELP['content_id']['title'] = 'コンテンツID'; -$HELP['content_id']['body'] = 'コンテンツを識別するためのIDです。新規追加時に自動的に設定されます。'; -$HELP['content_name']['title'] = '名前'; -$HELP['content_name']['body'] = 'コンテンツの名前です。コンテンツのタイトルとして表示されます。'; -$HELP['content_visible']['title'] = '公開'; -$HELP['content_visible']['body'] = 'コンテンツをユーザに公開するかどうかを制御します。非公開に設定の場合はユーザから参照することはできません。'; -$HELP['content_limited']['title'] = 'ユーザ制限'; -$HELP['content_limited']['body'] = 'コンテンツの参照をログインしたユーザに限定するかどうかを設定します。チェックが入っているコンテンツはログインユーザだけが参照可能です。'; -$HELP['content_default']['title'] = 'デフォルト項目'; -$HELP['content_default']['body'] = 'URLのパラメータでコンテンツIDが指定されていない場合に表示されるコンテンツを指定します。1つだけ設定可能です。'; -$HELP['content_update_user']['title'] = '更新者'; -$HELP['content_update_user']['body'] = 'コンテンツを更新したユーザです。'; -$HELP['content_update_dt']['title'] = '更新日時'; -$HELP['content_update_dt']['body'] = 'コンテンツを更新した日時です。'; -$HELP['content_view_count']['title'] = '参照数'; -$HELP['content_view_count']['body'] = 'コンテンツがユーザに参照された回数です。管理者の参照はカウントされません。'; -$HELP['content_act']['title'] = '操作'; -$HELP['content_act']['body'] = '各種操作を行います。
●メニューに追加
「メインメニュー」ウィジェットにコンテンツを表示するメニュー項目を追加します。'; -$HELP['content_html']['title'] = 'HTML'; -$HELP['content_html']['body'] = 'コンテンツの内容となるHTMLです。'; -$HELP['content_ref_custom']['title'] = '置換文字列を参照'; -$HELP['content_ref_custom']['body'] = 'コンテンツに埋め込んだ置換文字列はコンテンツ表示時に設定文字列に変換します。置換文字列の設定値を参照します。'; -$HELP['content_key']['title'] = '外部参照用キー'; -$HELP['content_key']['body'] = '外部ウィジェットからの取得用キーです。'; - -$HELP['content_new_btn']['title'] = '新規ボタン'; -$HELP['content_new_btn']['body'] = '新規コンテンツを追加します。'; -$HELP['content_edit_btn']['title'] = '編集ボタン'; -$HELP['content_edit_btn']['body'] = '選択されているコンテンツを編集します。
コンテンツを選択するには、一覧の左端のチェックボックスにチェックを入れます。'; -$HELP['content_del_btn']['title'] = '削除ボタン'; -$HELP['content_del_btn']['body'] = '選択されているコンテンツを削除します。
コンテンツを選択するには、一覧の左端のチェックボックスにチェックを入れます。'; -$HELP['content_ret_btn']['title'] = '戻るボタン'; -$HELP['content_ret_btn']['body'] = 'コンテンツ一覧へ戻ります。'; -?> diff --git a/widgets/m/pc_content/include/template/admin_main.tmpl.html b/widgets/m/pc_content/include/template/admin_main.tmpl.html deleted file mode 100644 index 121d51e1..00000000 --- a/widgets/m/pc_content/include/template/admin_main.tmpl.html +++ /dev/null @@ -1,121 +0,0 @@ - - -
-
- -
- - - - - - - - - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
選択ID名前公開ユーザ制限デフォルト更新者更新日時参照数操作
{ID}{NAME}{UPDATE_USER}{UPDATE_DT}{VIEW_COUNT}
-
-
-
-
diff --git a/widgets/m/pc_content/include/template/admin_main_detail.tmpl.html b/widgets/m/pc_content/include/template/admin_main_detail.tmpl.html deleted file mode 100644 index aa357dca..00000000 --- a/widgets/m/pc_content/include/template/admin_main_detail.tmpl.html +++ /dev/null @@ -1,98 +0,0 @@ - - -
-
- -
- - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ID{SEL_ITEM_ID}名前デフォルト項目
公開ユーザ制限
HTML
-
- -
外部参照用キー
更新者{UPDATE_USER}更新日時{UPDATE_DT} - - - - - - - -
-
-
-
-
diff --git a/widgets/m/pc_content/include/template/main.tmpl.html b/widgets/m/pc_content/include/template/main.tmpl.html deleted file mode 100644 index b3bd04be..00000000 --- a/widgets/m/pc_content/include/template/main.tmpl.html +++ /dev/null @@ -1,7 +0,0 @@ - - - -{TITLE}
-{CONTENT}
-
-
diff --git a/widgets/m/pc_content/index.php b/widgets/m/pc_content/index.php deleted file mode 100644 index 6cfdcd60..00000000 --- a/widgets/m/pc_content/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 876 2008-08-04 08:37:17Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/quizk/admin/index.php b/widgets/m/quizk/admin/index.php deleted file mode 100644 index 45af5967..00000000 --- a/widgets/m/quizk/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 1920 2009-05-23 04:01:26Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/quizk/include/container/admin_m_quizkBaseWidgetContainer.php b/widgets/m/quizk/include/container/admin_m_quizkBaseWidgetContainer.php deleted file mode 100644 index 4e80cd99..00000000 --- a/widgets/m/quizk/include/container/admin_m_quizkBaseWidgetContainer.php +++ /dev/null @@ -1,111 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_quizkBaseWidgetContainer.php 2458 2009-10-24 07:26:44Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseAdminWidgetContainer.php'); - -class admin_m_quizkBaseWidgetContainer extends BaseAdminWidgetContainer -{ - const DEFAULT_TASK = 'operation'; // デフォルトの画面 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _postAssign($request, &$param) - { - // ウィンドウオープンタイプ取得 - $openBy = $request->trimValueOf(M3_REQUEST_PARAM_OPEN_BY); // ウィンドウオープンタイプ - if (!empty($openBy)) $this->addOptionUrlParam(M3_REQUEST_PARAM_OPEN_BY, $openBy); - - // 表示画面を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TASK; // デフォルト画面を設定 - - // パンくずリストを作成 - $createList = true; // パンくずリストを作成するかどうか - switch ($task){ - case 'operation': // 運用管理 - $linkList = ' >> 運用管理';// パンくずリスト - break; - case 'csv': // アンケートデータアップロード - $linkList = ' >> CSVデータ';// パンくずリスト - break; - case 'total': // 集計画面 - $linkList = ' >> 集計';// パンくずリスト - break; - default: - break; - } - - if ($createList){ // パンくずリストを作成するとき - // ####### 上段メニューの作成 ####### - $menuText = '
' . M3_NL; - $menuText .= '
    ' . M3_NL; - - $current = ''; - $baseUrl = $this->getAdminUrlWithOptionParam(true);// 画面定義ID付き - - // 運用管理 - $current = ''; - $link = $baseUrl . '&task=operation'; - if ($task == 'operation'){ - $current = 'id="current"'; - } - $menuText .= '
  • 運用管理
  • ' . M3_NL; - - // CSVデータ管理 - $current = ''; - $link = $baseUrl . '&task=csv'; - if ($task == 'csv'){ - $current = 'id="current"'; - } - $menuText .= '
  • CSVデータ
  • ' . M3_NL; - - // 集計 - /*$current = ''; - $link = $baseUrl . '&task=total'; - if ($task == 'total'){ - $current = 'id="current"'; - } - $menuText .= '
  • 集計
  • ' . M3_NL; - */ - - // 上段メニュー終了 - $menuText .= '
' . M3_NL; - $menuText .= '
' . M3_NL; - - // 作成データの埋め込み - $linkList = '
'; - $outputText .= '
' . $linkList . $menuText . '
' . M3_NL; - $this->tmpl->addVar("_widget", "menu_items", $outputText); - } else { - $this->tmpl->addVar("_widget", "menu_items", ''); - } - } -} -?> diff --git a/widgets/m/quizk/include/container/admin_m_quizkCsvWidgetContainer.php b/widgets/m/quizk/include/container/admin_m_quizkCsvWidgetContainer.php deleted file mode 100644 index 8a45e077..00000000 --- a/widgets/m/quizk/include/container/admin_m_quizkCsvWidgetContainer.php +++ /dev/null @@ -1,265 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_quizkCsvWidgetContainer.php 1931 2009-05-28 08:43:03Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_m_quizkBaseWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/quizkDb.php'); - -class admin_m_quizkCsvWidgetContainer extends admin_m_quizkBaseWidgetContainer -{ - private $db; // DB接続オブジェクト - private $csvData; // CSV作成用 - private $setId; // 現在選択中のセットID - private $defaultSetId; // 現在運用中のセットID - const CFG_DEFAULT_SET_ID_KEY = 'current_set_id'; // 現在の選択中のセットID取得用キー - const CSV_QUIZ_DEF_HEAD = 'quiz_def_'; // CSVファイル名 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new quizkDb(); - - // デフォルト値取得 - $this->defaultSetId = $this->db->getConfig(self::CFG_DEFAULT_SET_ID_KEY); // 定義セットID - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'admin_csv.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $dataReplace = ($request->trimValueOf('item_replace') == 'on') ? 1 : 0; // データの入れ替えを行うかどうか - $this->setId = $request->trimValueOf('setid'); // 定義セットID - $act = $request->trimValueOf('act'); - if ($act == 'upload'){ // CSVアップロード - // ファイル名からアップロードするデータの種別を判断 - $uploadFilename = $_FILES['upfile']['name']; // アップロードされたファイルのファイル名取得 - - $skipField = '項目ID'; // ヘッダ部認識用文字列 - $badField = ''; // 不正なヘッダ文字列 - - if (is_uploaded_file($_FILES['upfile']['tmp_name'])) { - // ファイルを保存するサーバディレクトリを指定 - $tmpFile = tempnam($this->gEnv->getWorkDirPath(), M3_SYSTEM_WORK_UPLOAD_FILENAME_HEAD); - - // アップされたテンポラリファイルを保存ディレクトリにコピー - $ret = move_uploaded_file($_FILES['upfile']['tmp_name'], $tmpFile); - if ($ret){ - $addCount = 0; // 追加項目数 - $updateCount = 0; // 更新項目数 - $colCount = 0; // カラム数 - $lineCount = 0; // 行数 - $message = ''; // 追加メッセージ - - // トランザクションスタート - $this->db->startTransaction(); - - if ($dataReplace){ // データ入れ替えの場合は既存データを削除 - $this->db->deleteAllItems($this->setId); - } - // ファイルオープン - $fp = fopen($tmpFile, "r"); - - // データ読み込み - $delimType = 0; // カンマ区切り - if ($this->gEnv->getDefaultCsvDelimCode() == "\t") $delimType = 1; // タブ区切り - while (($data = fgetByCsv($fp, $delimType)) !== false){ - if ($colCount == 0) $colCount = count($data); // カラム数取得 - $lineCount++; // 行番号更新 - - // ヘッダ読み飛ばし - if (trim($data[0]) == $skipField){ - continue; - } else if (trim($data[0]) == $badField){ - $this->setAppErrorMsg('不正なヘッダを検出しました'); - } - $newColCount = count($data); - if ($newColCount == 0 || ($newColCount == 1 && $data[0] == "")) continue; // 空行は読み飛ばす - if ($colCount != $newColCount){ - $message .= $lineCount . '行目のカラム数が異常です。この行は読み飛ばしました。
'; - continue; // カラム数が合わない行も読み飛ばす - } - - // データをDBに格納する - $id = trim($data[0]); // 項目ID - $type = trim($data[1]); // 項目タイプ - $index = trim($data[2]); // 項目順 - $selAnswer = trim($data[3]); // 選択用回答 - $answer = trim($data[4]); // 回答値 - $title = trim($data[5]); // タイトル - $content = trim($data[6]); // 内容 - $visible = trim($data[7]); // 表示制御 - - // データのエラーチェック - // エラーなしの場合は、データを登録 - if ($this->getMsgCount() == 0){ - // フィールドIDを見て、新規登録か更新かを判断 - $updateRecord = false; - if ($this->db->isExistsItem($this->setId, $id)) $updateRecord = true; - - // データを更新 - $ret = $this->db->updateItem($this->setId, $id, $type, $index, $selAnswer, $answer, $title, $content, $visible, $serial); - if ($updateRecord){ // 既存項目の更新のとき - if ($ret) $updateCount++; // 更新項目数 - } else { // 新規項目の追加のとき - if ($ret) $addCount++; - } - } - } - // ファイルを閉じる - fclose($fp); - - // トランザクション終了 - $ret = $this->db->endTransaction(); - if ($ret && $this->getMsgCount() == 0){ - $this->setGuidanceMsg('データを' . $addCount . '件追加しました'); - $this->setGuidanceMsg('データを' . $updateCount . '件更新しました'); - $this->setGuidanceMsg($message); - } else { - $this->setAppErrorMsg('データ追加に失敗しました'); - } - } - // テンポラリファイル削除 - unlink($tmpFile); - } else { - $msg = 'アップロードファイルが見つかりません(要因:アップロード可能なファイルのMaxサイズを超えている可能性があります - ' . $gSystemManager->getMaxFileSizeForUpload() . 'バイト)'; - $this->setAppErrorMsg($msg); - } - } else if ($act == 'download'){ // CSVダウンロード - // ダウンロード時のデフォルトファイル名 - $down_file = self::CSV_QUIZ_DEF_HEAD . date("YmdHi") . $this->gEnv->getDefaultCsvFileSuffix(); - - // ヘッダ部を作成 - $buf = array(); - $buf[] = '項目ID'; - $buf[] = '項目タイプ'; - $buf[] = '項目順'; - $buf[] = '選択用回答ID'; - $buf[] = '正解回答ID'; - $buf[] = 'タイトル'; - $buf[] = '内容'; - $buf[] = '表示制御'; - - $delim = $this->gEnv->getDefaultCsvDelimCode(); // CSV区切りコードを取得 - $this->csvData[] = implode($delim, $buf) . $this->gEnv->getDefaultCsvNLCode(); - - // クイズ定義データを取得 - $this->db->getAllItems($this->setId, array($this, 'fieldCsvLoop')); - - // CSVの出力 - ob_end_clean(); - header("Content-Type: application/force-download"); - header("Content-Disposition: attachment; filename=" . $down_file); - header("Content-Description: File Transfer"); - header("Content-Length: " . strlen(join("", $this->csvData))); - - $encoding = $this->gEnv->getCsvDownloadEncoding(); // デフォルトのダウンロードエンコーディング取得 - foreach ($this->csvData as $mval){ - echo mb_convert_encoding($mval, $encoding); - flush(); - ob_flush(); - usleep(10000); - } - ob_end_flush(); - exit(); // スクリプト終了 - } - // 定義セットIDの選択メニュー作成 - $this->db->getAllSetId(array($this, 'setIdListLoop')); - } - /** - * 取得したデータをCSV形式で出力する - * - * @param int $index 行番号(0~) - * @param array $fetchedRow フェッチ取得した行 - * @param object $param 未使用 - * @return bool true=処理続行の場合、false=処理終了の場合 - */ - function fieldCsvLoop($index, $fetchedRow, $param) - { - $buf = array(); - $delim = $this->gEnv->getDefaultCsvDelimCode(); // CSV区切りコードを取得 - if ($delim == "\t"){ // タブ区切りのCSVフォーマットのとき - $buf[] = $fetchedRow['qd_id']; // 項目ID - $buf[] = $fetchedRow['qd_type']; // 項目タイプ - $buf[] = $fetchedRow['qd_index']; // 項目順 - $buf[] = $fetchedRow['qd_select_answer_id']; // 選択用回答 - $buf[] = $fetchedRow['qd_answer_id']; // 回答ID - $buf[] = $fetchedRow['qd_title']; // タイトル - $buf[] = $fetchedRow['qd_content']; // 内容 - $buf[] = $fetchedRow['qd_visible']; // 表示制御 - } else { - $buf[] = $this->convertToEscapedCsv($fetchedRow['qd_id']); // 項目ID - $buf[] = $this->convertToEscapedCsv($fetchedRow['qd_type']); // 項目タイプ - $buf[] = $this->convertToEscapedCsv($fetchedRow['qd_index']); // 項目順 - $buf[] = $this->convertToEscapedCsv($fetchedRow['qd_select_answer_id']); // 選択用回答 - $buf[] = $this->convertToEscapedCsv($fetchedRow['qd_answer_id']); // 回答ID - $buf[] = $this->convertToEscapedCsv($fetchedRow['qd_title']); // タイトル - $buf[] = $this->convertToEscapedCsv($fetchedRow['qd_content']); // 内容 - $buf[] = $this->convertToEscapedCsv($fetchedRow['qd_visible']); // 表示制御 - } - $this->csvData[] = implode($delim, $buf) . $this->gEnv->getDefaultCsvNLCode(); - return true; - } - /** - * セットIDリスト、取得したデータをテンプレートに設定する - * - * @param int $index 行番号(0~) - * @param array $fetchedRow フェッチ取得した行 - * @param object $param 未使用 - * @return bool true=処理続行の場合、false=処理終了の場合 - */ - function setIdListLoop($index, $fetchedRow, $param) - { - $id = $fetchedRow['qs_id']; - $name = $fetchedRow['qs_name']; - - $selected = ''; - if ($id == $this->setId) $selected = 'selected'; // 現在操作対象のセットID - if ($id == $this->defaultSetId) $name .= '(現在運用中)'; - $row = array( - 'value' => $this->convertToDispString($id), // セットID - 'name' => $this->convertToDispString($name), // セットID名 - 'selected' => $selected // 選択中かどうか - ); - $this->tmpl->addVars('set_id_list', $row); - $this->tmpl->parseTemplate('set_id_list', 'a'); - return true; - } -} -?> diff --git a/widgets/m/quizk/include/container/admin_m_quizkOperationWidgetContainer.php b/widgets/m/quizk/include/container/admin_m_quizkOperationWidgetContainer.php deleted file mode 100644 index f62c50c6..00000000 --- a/widgets/m/quizk/include/container/admin_m_quizkOperationWidgetContainer.php +++ /dev/null @@ -1,117 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_quizkOperationWidgetContainer.php 1923 2009-05-25 11:43:17Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_m_quizkBaseWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/quizkDb.php'); - -class admin_m_quizkOperationWidgetContainer extends admin_m_quizkBaseWidgetContainer -{ - private $db; // DB接続オブジェクト - private $defaultSetId; // 現在選択中のセットID - const CFG_DEFAULT_SET_ID_KEY = 'current_set_id'; // 現在の選択中のセットID取得用キー - const CFG_FIELD_PATH_KEY = 'field_path'; // 上位のフィールド階層固定の場合のパス - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new quizkDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'admin_operation.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $this->defaultSetId = $request->trimValueOf('item_setid'); // 定義セットID - $path = $request->trimValueOf('item_path'); // 上位のフィールド階層固定の場合のパス - $act = $request->trimValueOf('act'); - if ($act == 'update'){ // 設定更新のとき - $isErr = false; - if (!$isErr){ - if (!$this->db->updateConfig(self::CFG_DEFAULT_SET_ID_KEY, $this->defaultSetId)) $isErr = true; - } - if (!$isErr){ - if (!$this->db->updateConfig(self::CFG_FIELD_PATH_KEY, $path)) $isErr = true; - } - - if ($isErr){ - $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); - } else { - $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました'); - } - // 値を再取得 - $this->defaultSetId = $this->db->getConfig(self::CFG_DEFAULT_SET_ID_KEY); // 定義セットID - $path = $this->db->getConfig(self::CFG_FIELD_PATH_KEY); // 上位のフィールド階層固定の場合のパス - } else { - // 値を取得 - $this->defaultSetId = $this->db->getConfig(self::CFG_DEFAULT_SET_ID_KEY); // 定義セットID - $path = $this->db->getConfig(self::CFG_FIELD_PATH_KEY); // 上位のフィールド階層固定の場合のパス - } - // パターンセットメニュー作成 - $this->db->getAllSetId(array($this, 'setIdListLoop')); - - $this->tmpl->addVar("_widget", "path", $path); - } - /** - * パターンセットIDリスト、取得したデータをテンプレートに設定する - * - * @param int $index 行番号(0~) - * @param array $fetchedRow フェッチ取得した行 - * @param object $param 未使用 - * @return bool true=処理続行の場合、false=処理終了の場合 - */ - function setIdListLoop($index, $fetchedRow, $param) - { - $id = $fetchedRow['qs_id']; - $name = $fetchedRow['qs_name']; - - $selected = ''; - if ($id == $this->defaultSetId) $selected = 'selected'; - $row = array( - 'value' => $this->convertToDispString($id), // セットID - 'name' => $this->convertToDispString($name), // セットID名 - 'selected' => $selected // 選択中かどうか - ); - $this->tmpl->addVars('set_id_list', $row); - $this->tmpl->parseTemplate('set_id_list', 'a'); - return true; - } -} -?> diff --git a/widgets/m/quizk/include/container/admin_m_quizkWidgetContainer.php b/widgets/m/quizk/include/container/admin_m_quizkWidgetContainer.php deleted file mode 100644 index 0d51c32b..00000000 --- a/widgets/m/quizk/include/container/admin_m_quizkWidgetContainer.php +++ /dev/null @@ -1,90 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: admin_m_quizkWidgetContainer.php 2936 2010-03-17 14:20:08Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_m_quizkBaseWidgetContainer.php'); - -class admin_m_quizkWidgetContainer extends admin_m_quizkBaseWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * ディスパッチ処理(メインコンテナのみ実行) - * - * HTTPリクエストの内容を見て処理をコンテナに振り分ける - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return bool このクラスの_setTemplate(), _assign()へ処理を継続するかどうかを返す。 - * true=処理を継続、false=処理を終了 - */ - function _dispatch($request, &$param) - { - // 表示画面を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TASK; // デフォルトの画面 - - // コンテナを起動 - $goWidget = false; // サブウィジェットを実行するかどうか - switch ($task){ - case 'csv': // CSVデータアップロードダウンロード - case 'operation': // 運用管理 - case 'total': // 集計 - $goWidget = true; // サブウィジェットを実行するかどうか - break; - default: - break; - } - if ($goWidget){ // サブウィジェットを実行するかどうか - $this->gLaunch->goSubWidget($task, true); // 管理者機能で呼び出し - return false; - } else { - $this->SetMsg(self::MSG_APP_ERR, "画面が見つかりません"); - return true; - } - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'message.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _assign($request, &$param) - { - } -} -?> diff --git a/widgets/m/quizk/include/container/m_quizkBaseWidgetContainer.php b/widgets/m/quizk/include/container/m_quizkBaseWidgetContainer.php deleted file mode 100644 index f83c7010..00000000 --- a/widgets/m/quizk/include/container/m_quizkBaseWidgetContainer.php +++ /dev/null @@ -1,46 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_quizkBaseWidgetContainer.php 1930 2009-05-27 16:44:57Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); - -class m_quizkBaseWidgetContainer extends BaseMobileWidgetContainer -{ - protected $mobileId; // 携帯ID - const ERR_MESSAGE_FORMAT = '%s'; // エラーメッセージのフォーマット - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - $this->mobileId = $this->gEnv->getMobileId();// 端末IDを取得 - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _postAssign($request, &$param) - { - } -} -?> diff --git a/widgets/m/quizk/include/container/m_quizkCompleteWidgetContainer.php b/widgets/m/quizk/include/container/m_quizkCompleteWidgetContainer.php deleted file mode 100644 index ab4c6266..00000000 --- a/widgets/m/quizk/include/container/m_quizkCompleteWidgetContainer.php +++ /dev/null @@ -1,78 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_quizkCompleteWidgetContainer.php 1933 2009-05-28 10:54:45Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_quizkBaseWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/quizkDb.php'); - -class m_quizkCompleteWidgetContainer extends m_quizkBaseWidgetContainer -{ - private $db; // DB接続オブジェクト - private $setId; // 定義セットID - const CFG_DEFAULT_SET_ID_KEY = 'current_set_id'; // 現在の選択中のセットID取得用キー - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new quizkDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'complete.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $this->setId = $this->db->getConfig(self::CFG_DEFAULT_SET_ID_KEY); // パターンセットID - $ret = $this->db->getAnswerResult($this->setId, $this->mobileId, $rows); - if ($ret){ - $totalCount = count($rows); - $rightCount = 0; - for ($i = 0; $i < $totalCount; $i++){ - if ($rows[$i]['qp_result']) $rightCount++; - } - $resutlStr = $totalCount . '問中 ' . $rightCount . '問正解'; - $resutlRatioStr = '正解率 0%'; - if ($totalCount > 0) $resutlRatioStr = '正解率 ' . sprintf("%01.1f", round($rightCount / $totalCount * 100, 1)) . '%'; - $this->tmpl->addVar('_widget', 'result', $resutlStr); - $this->tmpl->addVar('_widget', 'result_ratio', $resutlRatioStr); - } - $this->tmpl->addVar('_widget', 'top_url', $this->gEnv->createCurrentPageUrlForMobile('')); - } -} -?> diff --git a/widgets/m/quizk/include/container/m_quizkProgressWidgetContainer.php b/widgets/m/quizk/include/container/m_quizkProgressWidgetContainer.php deleted file mode 100644 index d20cd634..00000000 --- a/widgets/m/quizk/include/container/m_quizkProgressWidgetContainer.php +++ /dev/null @@ -1,182 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_quizkProgressWidgetContainer.php 1933 2009-05-28 10:54:45Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_quizkBaseWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/quizkDb.php'); - -class m_quizkProgressWidgetContainer extends m_quizkBaseWidgetContainer -{ - private $db; // DB接続オブジェクト - private $setId; // 定義セットID - const CFG_DEFAULT_SET_ID_KEY = 'current_set_id'; // 現在の選択中のセットID取得用キー - const CURRENT_TASK = 'progress'; // 現在の画面 - const NEXT_TASK = 'complete'; // 次の画面 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new quizkDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'progress.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $this->setId = $this->db->getConfig(self::CFG_DEFAULT_SET_ID_KEY); // パターンセットID - $act = $request->trimValueOf('act'); - - if ($act == 'answer'){ // 回答したとき - $postSetId = $request->trimValueOf('sid'); - $questionId = $request->trimValueOf('qid'); - $answer = $request->trimValueOf('answer'); - - // 回答状況をチェック - $isErr = false; // エラー発生状況 - $isRight = false; // 正解かどうか - $ret = $this->db->getItem($postSetId, $questionId, $row); - if ($ret){ - if ($row['qd_type'] != 0) $isErr = true; // エラー発生状況 - $answerId = $row['qd_answer_id']; - } else { - $isErr = true; // エラー発生状況 - } - if (!$isErr){ - if (strcmp($answerId, $answer) == 0) $isRight = true; // 正解かどうか - - $logSerial = $this->gEnv->getCurrentAccessLogSerial(); - $ret = $this->db->addPostData($this->mobileId, $postSetId, $questionId, $answer, $isRight, $logSerial); - if (!$ret) $isErr = true; - } - // 回答を表示 - if (!$isErr){ - $ret = $this->db->getItem($postSetId, $answerId, $row); - if ($ret){ - // 選択結果を表示 - if ($isRight){ - $result = '正解'; - } else { - $result = '不正解'; - $this->tmpl->setAttribute('result_msg', 'visibility', 'visible'); - } - $this->tmpl->setAttribute('result_area', 'visibility', 'visible'); - $this->tmpl->addVar("result_area", "result", $result); - $this->tmpl->addVar("result_area", "title", $row['qd_title']); - $this->tmpl->addVar("result_area", "content", $row['qd_content']); - } else { - $isErr = true; - } - } - // 次の問題へのリンクを作成 - if (!$isErr){ - $ret = $this->db->getNextQuestion($this->setId, $this->mobileId, $row); - if ($ret){ // 問題が残っているとき - $this->tmpl->addVar("result_area", "next_name", '次へ'); - $this->tmpl->addVar('result_area', 'next_url', $this->gEnv->createCurrentPageUrlForMobile('task=' . self::CURRENT_TASK)); - } else { - $this->tmpl->addVar("result_area", "next_name", '終了'); - $this->tmpl->addVar('result_area', 'next_url', $this->gEnv->createCurrentPageUrlForMobile('task=' . self::NEXT_TASK)); - } - } - - if ($isErr){ - $message = sprintf(self::ERR_MESSAGE_FORMAT, 'エラーが発生しました'); - $this->tmpl->addVar("_widget", "message", $message); - } - } else { - // 問題を取得 - $ret = $this->db->getNextQuestion($this->setId, $this->mobileId, $row); - if ($ret){ // 問題が残っているとき - $this->tmpl->setAttribute('question_area', 'visibility', 'visible'); - - // クイズ問題を作成 - $this->createQuestion($row); - } else { // 次の問題がないとき - $count = $this->db->getQuestionCount($this->setId); - if ($count == 0){ - $message = '問題が登録されていません'; - } else { - $message = '全問回答しました'; - } - $this->tmpl->addVar("_widget", "message", $message); - $this->tmpl->setAttribute('view_status_area', 'visibility', 'visible'); - } - } - $this->tmpl->addVar('question_area', 'act', 'answer'); - $this->tmpl->addVar('question_area', 'url', $this->gEnv->createCurrentPageUrlForMobile('task=' . self::CURRENT_TASK)); - $this->tmpl->addVar('_widget', 'top_url', $this->gEnv->createCurrentPageUrlForMobile('')); - $this->tmpl->addVar('_widget', 'start_url', $this->gEnv->createCurrentPageUrlForMobile('task=' . self::NEXT_TASK)); - } - /** - * クイズ問題、回答を作成 - * - * @param array $row クイズ問題項目レコード - * @return なし - */ - function createQuestion($row) - { - $answer = $row['qd_select_answer_id']; // 回答ID - $answerArray = array(); - if (!empty($answer)) $answerArray = explode(';', $answer); - - // 問題を作成 - $title = $this->convertToDispString($row['qd_title']); - $content = $this->convertToDispString($row['qd_content']); - $this->tmpl->addVar('question_area', 'title', $title); - $this->tmpl->addVar('question_area', 'content', $content); - $this->tmpl->addVar('question_area', 'sid', $this->setId); - $this->tmpl->addVar('question_area', 'qid', $this->convertToDispString($row['qd_id'])); - - if (count($answerArray) == 0) return; - - // 回答を作成 - $ret = $this->db->getAnswers($this->setId, $answerArray, $rows); - if ($ret){ - $inputTag = ''; - for ($i = 0; $i < count($rows); $i++){ - $title = $this->convertToDispString($rows[$i]['qd_title']); - $value = $this->convertToDispString($rows[$i]['qd_id']); - $inputTag .= '' . $title . '
' . M3_NL; - } - $this->tmpl->addVar('question_area', 'answer', $inputTag); - } - } -} -?> diff --git a/widgets/m/quizk/include/container/m_quizkTopWidgetContainer.php b/widgets/m/quizk/include/container/m_quizkTopWidgetContainer.php deleted file mode 100644 index a6d135b8..00000000 --- a/widgets/m/quizk/include/container/m_quizkTopWidgetContainer.php +++ /dev/null @@ -1,58 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_quizkTopWidgetContainer.php 1928 2009-05-26 09:24:18Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_quizkBaseWidgetContainer.php'); - -class m_quizkTopWidgetContainer extends m_quizkBaseWidgetContainer -{ - const NEXT_TASK = 'progress'; // 次の画面 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'top.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $this->tmpl->addVar('_widget', 'start_url', $this->gEnv->createCurrentPageUrlForMobile('task=' . self::NEXT_TASK)); - } -} -?> diff --git a/widgets/m/quizk/include/container/m_quizkWidgetContainer.php b/widgets/m/quizk/include/container/m_quizkWidgetContainer.php deleted file mode 100644 index a4f0ce64..00000000 --- a/widgets/m/quizk/include/container/m_quizkWidgetContainer.php +++ /dev/null @@ -1,134 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_quizkWidgetContainer.php 2936 2010-03-17 14:20:08Z fishbone $ - * @link http://www.magic3.org - */ -//require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetContainerPath() . '/m_quizkBaseWidgetContainer.php'); - -class m_quizkWidgetContainer extends m_quizkBaseWidgetContainer -{ - const DEFAULT_TASK = 'top'; // デフォルトの画面 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * ディスパッチ処理(メインコンテナのみ実行) - * - * HTTPリクエストの内容を見て処理をコンテナに振り分ける - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return bool このクラスの_setTemplate(), _assign()へ処理を継続するかどうかを返す。 - * true=処理を継続、false=処理を終了 - */ - function _dispatch($request, &$param) - { - // 実行処理を決定 - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - if (empty($task)) $task = self::DEFAULT_TASK; - - // ログインが必要な処理の場合は、ログイン状況をチェックする - switch ($task){ - case 'member': // 会員情報変更 - // ログイン状態を取得 - if (!$this->gEnv->isCurrentUserLogined()){ // ログインされていない場合 - $this->SetMsg(self::MSG_APP_ERR, "ログインが必要です"); - return true; - } - break; - default: - break; - } - // アクセス権をチェック - switch ($task){ - case 'progress': // クイズ質問回答画面 - case 'complete': // 受付完了画面 - // 携帯以外からのアクセスの場合はエラー - if (empty($this->mobileId)) return true; - break; - } - - // ##### コンテナを起動 ##### - switch ($task){ - case 'top': // トップ画面 - case 'profile': // プロフィール入力画面 - case 'progress': // クイズ質問回答画面 - case 'complete': // 受付完了画面 - $this->gLaunch->goSubWidget($task); - return false; - default: - $this->SetMsg(self::MSG_APP_ERR, "画面が見つかりません"); - return true; - } - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - - // 要求画面によってテンプレートを変更 - switch ($task){ - case 'member': // 会員情報変更 - // ログインが必要であるメッセージを表示 - return 'message_login.tmpl.html'; - default: - return 'message.tmpl.html'; - } - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @return なし - */ - function _assign($request, &$param) - { - $task = $request->trimValueOf(M3_REQUEST_PARAM_OPERATION_TASK); - - // 要求画面によってテンプレートを変更 - switch ($task){ - case 'member': // 会員情報変更 - // ログインが必要であるメッセージを表示 - $this->tmpl->addVar("_widget", "login_url", $this->gEnv->createCurrentPageUrl() . '&task=login'); // ログイン用URL - break; - case 'progress': // クイズ質問回答画面 - case 'complete': // 受付完了画面 - $message = sprintf(self::ERR_MESSAGE_FORMAT, '携帯電話以外からは実行できません'); - $this->tmpl->addVar("_widget", "message", $message); - $this->tmpl->addVar('_widget', 'top_url', $this->gEnv->createCurrentPageUrlForMobile('')); - break; - default: - break; - } - } -} -?> diff --git a/widgets/m/quizk/include/db/quizkDb.php b/widgets/m/quizk/include/db/quizkDb.php deleted file mode 100644 index 144ec758..00000000 --- a/widgets/m/quizk/include/db/quizkDb.php +++ /dev/null @@ -1,414 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: quizkDb.php 1934 2009-05-28 11:09:45Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getDbPath() . '/baseDb.php'); - -class quizkDb extends BaseDb -{ - /** - * 設定値を取得 - * - * @param string $key キーとなる項目値 - * @return string $value 値 - */ - function getConfig($key) - { - $retValue = ''; - $queryStr = 'SELECT qc_value FROM quiz_config '; - $queryStr .= 'WHERE qc_id = ?'; - $ret = $this->selectRecord($queryStr, array($key), $row); - if ($ret) $retValue = $row['qc_value']; - return $retValue; - } - /** - * 設定値を更新 - * - * @param string $key キーとなる項目値 - * @param string $value 値 - * @return true = 正常、false=異常 - */ - function updateConfig($key, $value) - { - // トランザクションスタート - $this->startTransaction(); - - // データの確認 - $queryStr = 'SELECT qc_value FROM quiz_config '; - $queryStr .= 'WHERE qc_id = ?'; - $ret = $this->isRecordExists($queryStr, array($key)); - if ($ret){ - $queryStr = "UPDATE quiz_config SET qc_value = ? WHERE qc_id = ?"; - $this->execStatement($queryStr, array($value, $key)); - } else { - $queryStr = "INSERT INTO quiz_config (qc_id, qc_value) VALUES (?, ?)"; - $this->execStatement($queryStr, array($key, $value)); - } - - // トランザクション終了 - $ret = $this->endTransaction(); - return $ret; - } - /** - * 定義セットIDリスト取得 - * - * @param function $callback コールバック関数 - * @return なし - */ - function getAllSetId($callback) - { - $queryStr = 'SELECT * FROM quiz_set_id '; - $queryStr .= 'WHERE qs_deleted = false '; // 未削除 - $queryStr .= 'ORDER BY qs_index'; - $this->selectLoop($queryStr, array(), $callback); - } - /** - * 定義セットID情報取得 - * - * @param string $id 定義セットID - * @param array $row 取得レコード - * @return true=取得、false=取得せず - */ - function getSetId($id, &$row) - { - $queryStr = 'SELECT * FROM quiz_set_id '; - $queryStr .= 'WHERE qs_deleted = false '; // 未削除 - $queryStr .= 'AND qs_id = ? '; - $ret = $this->selectRecord($queryStr, array($id), $row); - return $ret; - } - /** - * 定義セットIDを更新 - * - * @param string $id 定義セットID - * @param date $totalDate 集計日付 - * @return true = 正常、false=異常 - */ - function updateSetId($id, $totalDate) - { - // トランザクションスタート - $this->startTransaction(); - - // データの確認 - $queryStr = 'SELECT * FROM quiz_set_id '; - $queryStr .= 'WHERE qs_id = ? '; - $ret = $this->selectRecord($queryStr, array($id), $row); - if ($ret){ - $queryStr = 'UPDATE quiz_set_id '; - $queryStr .= 'SET qs_total_date = ? '; - $queryStr .= 'WHERE qs_id = ?'; - $ret = $this->execStatement($queryStr, array($totalDate, $id)); - } else { - $queryStr = 'INSERT INTO quiz_set_id ('; - $queryStr .= 'qs_id, '; - $queryStr .= 'qs_total_date '; - $queryStr .= ') VALUES ('; - $queryStr .= '?, ?'; - $queryStr .= ')'; - $ret = $this->execStatement($queryStr, array($id, $totalDate)); - } - // トランザクション終了 - $ret = $this->endTransaction(); - return $ret; - } - /** - * すべてのクイズ定義を取得 - * - * @param string $setId パターンセットID - * @param function $callback コールバック関数 - * @return なし - */ - function getAllItems($setId, $callback) - { - $queryStr = 'SELECT * FROM quiz_item_def '; - $queryStr .= 'WHERE qd_deleted = false '; // 未削除 - $queryStr .= 'AND qd_set_id = ? '; - $queryStr .= 'ORDER BY qd_id'; - $this->selectLoop($queryStr, array($setId), $callback); - } - /** - * クイズ定義を取得 - * - * @param string $setId パターンセットID - * @param string $id クイズ項目ID - * @param array $row 取得レコード - * @return bool true=取得、false=取得せず - */ - function getItem($setId, $id, &$row) - { - $queryStr = 'SELECT * FROM quiz_item_def '; - $queryStr .= 'WHERE qd_deleted = false '; // 未削除 - $queryStr .= 'AND qd_set_id = ? '; - $queryStr .= 'AND qd_id = ? '; - $ret = $this->selectRecord($queryStr, array($setId, $id), $row); - return $ret; - } - /** - * すべてのクイズ定義を削除 - * - * @param string $setId パターンセットID - * @return true=成功、false=失敗 - */ - function deleteAllItems($setId) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ - - // トランザクションスタート - $startTran = false; // この関数でトランザクションを開始したかどうか - if (!$this->isInTransaction()){ - $this->startTransaction(); - $startTran = true; - } - - // レコードを削除 - $queryStr = 'UPDATE quiz_item_def '; - $queryStr .= 'SET qd_deleted = true, '; // 削除 - $queryStr .= 'qd_update_user_id = ?, '; - $queryStr .= 'qd_update_dt = ? '; - $queryStr .= 'WHERE qd_set_id = ? AND qd_deleted = false'; - $ret = $this->execStatement($queryStr, array($userId, $now, $setId)); - - // トランザクション確定 - if ($startTran) $ret = $this->endTransaction(); - return $ret; - } - /** - * クイズ定義項目が存在しているかチェック - * - * @param string $setId 定義セットID - * @param string $id ID - * @return bool true=存在する、false=存在しない - */ - function isExistsItem($setId, $id) - { - $queryStr = 'SELECT * FROM quiz_item_def '; - $queryStr .= 'WHERE qd_deleted = false '; // 未削除 - $queryStr .= 'AND qd_set_id = ? '; - $queryStr .= 'AND qd_id = ? '; - return $this->isRecordExists($queryStr, array($setId, $id)); - } - /** - * 次の問題を取得 - * - * @param string $setId 定義セットID - * @param string $mobileId 携帯ID - * @param array $row 取得レコード - * @return bool true=取得、false=取得せず - */ - function getNextQuestion($setId, $mobileId, &$row) - { - $queryStr = 'SELECT * FROM quiz_item_def LEFT JOIN quiz_user_post ON qd_set_id = qp_set_id AND qd_id = qp_question_id AND qd_type = 0 AND qp_mobile_id = ? '; - $queryStr .= 'WHERE qd_deleted = false '; // 未削除 - $queryStr .= 'AND qd_set_id = ? '; - $queryStr .= 'AND qd_type = 0 '; // 問題 - $queryStr .= 'AND qd_visible = true '; // 表示 - $queryStr .= 'AND qp_mobile_id IS NULL '; - $queryStr .= 'ORDER BY qd_index'; - $ret = $this->selectRecord($queryStr, array($mobileId, $setId), $row); - return $ret; - } - /** - * 問題数を取得 - * - * @param string $setId 定義セットID - * @param bool $visibleOnly 表示項目のみかどうか - * @return int 問題数 - */ - function getQuestionCount($setId, $visibleOnly = true) - { - $queryStr = 'SELECT * FROM quiz_item_def '; - $queryStr .= 'WHERE qd_deleted = false '; // 未削除 - $queryStr .= 'AND qd_set_id = ? '; - $queryStr .= 'AND qd_visible = true '; - return $this->selectRecordCount($queryStr, array($setId)); - } - /** - * クイズ回答を取得 - * - * @param string $setId 定義セットID - * @param array $answerIdArray 回答の配列 - * @param array $rows 取得レコード - * @return bool true=取得、false=取得せず - */ - function getAnswers($setId, $answerIdArray, &$rows) - { - if (count($answerIdArray) == 0) return false; - - $answerStr = ''; - for ($i = 0; $i < count($answerIdArray); $i++){ - $answerStr .= '\'' . addslashes($answerIdArray[$i]) . '\','; - } - $answerStr = trim($answerStr, ','); - - // CASE文作成 - $caseStr = 'CASE qd_id '; - for ($i = 0; $i < count($answerIdArray); $i++){ - $caseStr .= 'WHEN \'' . addslashes($answerIdArray[$i]) . '\' THEN ' . $i . ' '; - } - $caseStr .= 'END AS no'; - - $queryStr = 'SELECT *, ' . $caseStr . ' FROM quiz_item_def '; - $queryStr .= 'WHERE qd_visible = true '; - $queryStr .= 'AND qd_deleted = false '; // 削除されていない - $queryStr .= 'AND qd_type = 1 '; // 回答 - $queryStr .= 'AND qd_id in (' . $answerStr . ') '; - $queryStr .= 'AND qd_set_id = ? '; - $queryStr .= 'ORDER BY no'; - $retValue = $this->selectRecords($queryStr, array($setId), $rows); - return $retValue; - } - /** - * クイズ定義項目の更新 - * - * @param string $setId 定義セットID - * @param string $id 項目ID - * @param int $type 項目タイプ - * @param int $index 項目順 - * @param string $selAnswer 選択用回答 - * @param string $answer 回答値 - * @param string $title タイトル - * @param string $content 内容 - * @param bool $visible 表示制御 - * @param int $newSerial 新規シリアル番号 - * @return bool true = 成功、false = 失敗 - */ - function updateItem($setId, $id, $type, $index, $selAnswer, $answer, $title, $content, $visible, &$newSerial) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - $userId = $this->gEnv->getCurrentUserId(); // 現在のユーザ - - // トランザクション開始 - //$this->startTransaction(); - - // 指定のレコードの履歴インデックス取得 - $historyIndex = 0; // 履歴番号 - $queryStr = 'SELECT * FROM quiz_item_def '; - $queryStr .= 'WHERE qd_set_id = ? '; - $queryStr .= 'AND qd_id = ? '; - $queryStr .= 'ORDER BY qd_history_index DESC '; - $ret = $this->selectRecord($queryStr, array($setId, $id), $row); - if ($ret){ - $historyIndex = $row['qd_history_index'] + 1; - - // レコードが削除されていない場合は削除 - if (!$row['qd_deleted']){ - // 古いレコードを削除 - $queryStr = 'UPDATE quiz_item_def '; - $queryStr .= 'SET qd_deleted = true, '; // 削除 - $queryStr .= 'qd_update_user_id = ?, '; - $queryStr .= 'qd_update_dt = ? '; - $queryStr .= 'WHERE qd_serial = ?'; - $ret = $this->execStatement($queryStr, array($userId, $now, $row['qd_serial'])); - if (!$ret) return false; - } - } - - // 新規レコード追加 - $queryStr = 'INSERT INTO quiz_item_def ('; - $queryStr .= 'qd_set_id, '; - $queryStr .= 'qd_id, '; - $queryStr .= 'qd_history_index, '; - $queryStr .= 'qd_type, '; - $queryStr .= 'qd_select_answer_id, '; - $queryStr .= 'qd_answer_id, '; - $queryStr .= 'qd_title, '; - $queryStr .= 'qd_content, '; - $queryStr .= 'qd_index, '; - $queryStr .= 'qd_visible, '; - $queryStr .= 'qd_create_user_id, '; - $queryStr .= 'qd_create_dt '; - $queryStr .= ') VALUES '; - $queryStr .= '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'; - $ret =$this->execStatement($queryStr, array($setId, $id, $historyIndex, $type, $selAnswer, $answer, $title, $content, $index, intval($visible), $userId, $now)); - if (!$ret) return false; - - // 新規のシリアル番号取得 - $queryStr = 'SELECT MAX(qd_serial) AS ns FROM quiz_item_def '; - $ret = $this->selectRecord($queryStr, array(), $row); - if ($ret) $newSerial = $row['ns']; - - // トランザクション確定 - //$ret = $this->endTransaction(); - return $ret; - } - /** - * 回答データを追加 - * - * @param string $mobileId 携帯ID - * @param string $setId パターンセットID - * @param string $id 回答ID - * @param string $value 入力値 - * @param bool $result 回答結果 - * @param int $logSerial アクセスログシリアル番号 - * @return true = 正常、false=異常 - */ - function addPostData($mobileId, $setId, $id, $value, $result, $logSerial) - { - $now = date("Y/m/d H:i:s"); // 現在日時 - - // トランザクションスタート - $this->startTransaction(); - - // 既に登録されている場合はエラー - $queryStr = 'SELECT * FROM quiz_user_post '; - $queryStr .= 'WHERE qp_mobile_id = ? '; - $queryStr .= 'AND qp_set_id = ? '; - $queryStr .= 'AND qp_question_id = ? '; - $ret = $this->isRecordExists($queryStr, array($mobileId, $setId, $id)); - if ($ret){ - // トランザクション終了 - $ret = $this->endTransaction(); - return false; - } - - $queryStr = 'INSERT INTO quiz_user_post ('; - $queryStr .= 'qp_mobile_id, '; - $queryStr .= 'qp_set_id, '; - $queryStr .= 'qp_question_id, '; - $queryStr .= 'qp_answer_id, '; - $queryStr .= 'qp_result, '; - $queryStr .= 'qp_access_log_serial, '; - $queryStr .= 'qp_dt '; - $queryStr .= ') VALUES ('; - $queryStr .= '?, ?, ?, ?, ?, ?, ?'; - $queryStr .= ')'; - $ret = $this->execStatement($queryStr, array($mobileId, $setId, $id, $value, intval($result), $logSerial, $now)); - - // トランザクション終了 - $ret = $this->endTransaction(); - return $ret; - } - /** - * 回答状況を取得 - * - * @param string $setId 定義セットID - * @param string $mobileId 携帯ID - * @param array $rows 取得レコード - * @return bool true=取得、false=取得せず - */ - function getAnswerResult($setId, $mobileId, &$rows) - { - $queryStr = 'SELECT * FROM quiz_item_def LEFT JOIN quiz_user_post ON qd_set_id = qp_set_id AND qd_id = qp_question_id AND qd_type = 0 AND qp_mobile_id = ? '; - $queryStr .= 'WHERE qd_deleted = false '; // 未削除 - $queryStr .= 'AND qd_set_id = ? '; - $queryStr .= 'AND qd_type = 0 '; // 問題 - $queryStr .= 'AND qd_visible = true '; // 表示 - $queryStr .= 'AND qp_mobile_id IS NOT NULL '; - $queryStr .= 'ORDER BY qd_index'; - $retValue = $this->selectRecords($queryStr, array($mobileId, $setId), $rows); - return $retValue; - } -} -?> diff --git a/widgets/m/quizk/include/template/admin_csv.tmpl.html b/widgets/m/quizk/include/template/admin_csv.tmpl.html deleted file mode 100644 index e2e0b759..00000000 --- a/widgets/m/quizk/include/template/admin_csv.tmpl.html +++ /dev/null @@ -1,88 +0,0 @@ - - -
-{MENU_ITEMS} -
- -
- -
-
- - - - - -
- -

-
- - - - - - - - - - - - - -
CSVアップロード
既存データをすべて削除
-
-
- - - - - - - - - - -
CSVダウンロード
クイズ定義データ - -
-
-
-
-
diff --git a/widgets/m/quizk/include/template/admin_operation.tmpl.html b/widgets/m/quizk/include/template/admin_operation.tmpl.html deleted file mode 100644 index 7464afc0..00000000 --- a/widgets/m/quizk/include/template/admin_operation.tmpl.html +++ /dev/null @@ -1,40 +0,0 @@ - - -
-{MENU_ITEMS} -
- -
- - - - - - - - - - - - -
クイズサイト運用設定
運用中のクイズパターンセット - -
- -
-
-
-
diff --git a/widgets/m/quizk/include/template/complete.tmpl.html b/widgets/m/quizk/include/template/complete.tmpl.html deleted file mode 100644 index 8475bb97..00000000 --- a/widgets/m/quizk/include/template/complete.tmpl.html +++ /dev/null @@ -1,8 +0,0 @@ - -
 
-
{RESULT}
-
 
-
{RESULT_RATIO}
-
 
- -
diff --git a/widgets/m/quizk/include/template/main.tmpl.html b/widgets/m/quizk/include/template/main.tmpl.html deleted file mode 100644 index b3bd04be..00000000 --- a/widgets/m/quizk/include/template/main.tmpl.html +++ /dev/null @@ -1,7 +0,0 @@ - - - -{TITLE}
-{CONTENT}
-
-
diff --git a/widgets/m/quizk/include/template/message.tmpl.html b/widgets/m/quizk/include/template/message.tmpl.html deleted file mode 100644 index fad58729..00000000 --- a/widgets/m/quizk/include/template/message.tmpl.html +++ /dev/null @@ -1,6 +0,0 @@ - -
{MESSAGE}
-
 
-
 
- -
diff --git a/widgets/m/quizk/include/template/progress.tmpl.html b/widgets/m/quizk/include/template/progress.tmpl.html deleted file mode 100644 index 6c194e71..00000000 --- a/widgets/m/quizk/include/template/progress.tmpl.html +++ /dev/null @@ -1,33 +0,0 @@ - -
{MESSAGE}
- -
- - - - -
{TITLE}
-
 
-
{CONTENT}
-
 
-
{ANSWER}
-
 
-
-
-
- -
{RESULT}
-
 
-
正解は
-
{TITLE}
-
 
-
{CONTENT}
-
 
- -
- -
 
-
-
 
- -
diff --git a/widgets/m/quizk/include/template/top.tmpl.html b/widgets/m/quizk/include/template/top.tmpl.html deleted file mode 100644 index 13f363f1..00000000 --- a/widgets/m/quizk/include/template/top.tmpl.html +++ /dev/null @@ -1,5 +0,0 @@ - -
 
-
 
- -
diff --git a/widgets/m/quizk/index.php b/widgets/m/quizk/index.php deleted file mode 100644 index 45af5967..00000000 --- a/widgets/m/quizk/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 1920 2009-05-23 04:01:26Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/sample/index.php b/widgets/m/sample/index.php deleted file mode 100644 index 3a70eb53..00000000 --- a/widgets/m/sample/index.php +++ /dev/null @@ -1,85 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 2040 2009-07-03 07:50:09Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -echo '
'; -echo '

表示テスト(h1)

'; -echo date("Y/m/d H:i:s") . '
'; -echo '
'; -echo '
'; -echo 'メニュー(xx-small)
'; -echo '

'; -echo '
'; -echo '
'; -echo 'メニュー(small)
'; -echo '

'; -echo '
'; -echo '
'; -echo 'メニュー(medium)
'; -echo '

'; -echo '
'; -echo '複数選択
'; -echo ''; -echo '

'; -?> diff --git a/widgets/m/sample2/include/container/m_sample2WidgetContainer.php b/widgets/m/sample2/include/container/m_sample2WidgetContainer.php deleted file mode 100644 index a2f212e6..00000000 --- a/widgets/m/sample2/include/container/m_sample2WidgetContainer.php +++ /dev/null @@ -1,55 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_sample2WidgetContainer.php 2039 2009-07-03 07:41:12Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); - -class m_sample2WidgetContainer extends BaseMobileWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - } -} -?> diff --git a/widgets/m/sample2/include/template/index.tmpl.html b/widgets/m/sample2/include/template/index.tmpl.html deleted file mode 100644 index eb4a5ed0..00000000 --- a/widgets/m/sample2/include/template/index.tmpl.html +++ /dev/null @@ -1,57 +0,0 @@ - -
-●スペーサ画像による行間の作成
-()内数値は次行とのピクセル間隔
-■■■行間(なし)■■
-■■■行間(1)■■■
-
-■■■行間(2)■■■
-
-■■■行間(3)■■■
-
-■■■行間(5)■■■
-
-■■■行間(7)■■■
-
-■■■行間(10)■■■
-
-■■■行間(15)■■■
-
-■■■行間(20)■■■
-
-■メニュー
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-■■■終了■■■
-●スペーサ画像によるラインの作成
-■サイズ(1)上下(1)■
-
-■サイズ(2)上下(2)■
-
-■サイズ(3)上下(3)■
-
-●マーキー
-DoCoMo未対応 -
DoCoMo対応
-●センターリング
-
divタグ
-■■■■■■
-

pタグ

-■■■終了■■■
-
-
diff --git a/widgets/m/sample2/index.php b/widgets/m/sample2/index.php deleted file mode 100644 index b659383a..00000000 --- a/widgets/m/sample2/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 2039 2009-07-03 07:41:12Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/sample_input/include/container/m_sample_inputWidgetContainer.php b/widgets/m/sample_input/include/container/m_sample_inputWidgetContainer.php deleted file mode 100644 index 2100e54e..00000000 --- a/widgets/m/sample_input/include/container/m_sample_inputWidgetContainer.php +++ /dev/null @@ -1,71 +0,0 @@ - - * @copyright Copyright 2006-2009 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_sample_inputWidgetContainer.php 1857 2009-05-06 09:23:04Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); - -class m_sample_inputWidgetContainer extends BaseMobileWidgetContainer -{ - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'index.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $msg = ''; - $input = $request->mobileTrimValueOf('msg'); - if (!empty($input)){ - $msg = '送信文字は[' . $input . ']です

'; - } - - // 入力値を戻す - $this->tmpl->addVar("_widget", "msg", $msg); - $this->tmpl->addVar("_widget", "home_url", $this->gEnv->getDefaultMobileUrl(true)); - $url = $this->gEnv->createCurrentPageUrlForMobile(); - $this->tmpl->addVar("_widget", "url", $url); - - // 携帯キャリア、機種 - $this->tmpl->addVar("_widget", "carrier", $this->agent->getCarrierLongName()); - $this->tmpl->addVar("_widget", "type", $this->agent->getModel()); - $this->tmpl->addVar("_widget", "serial", $this->gEnv->getMobileId()); - } -} -?> diff --git a/widgets/m/sample_input/include/template/index.tmpl.html b/widgets/m/sample_input/include/template/index.tmpl.html deleted file mode 100644 index cc9d6a26..00000000 --- a/widgets/m/sample_input/include/template/index.tmpl.html +++ /dev/null @@ -1,17 +0,0 @@ - -
-{MSG} -携帯キャリア:{CARRIER}
-携帯機種:{TYPE}
-端末ID:{SERIAL}

-メッセージ送信
-
-
-

-ファイルアップロード
-
-
- -

-ホーム -
diff --git a/widgets/m/sample_input/index.php b/widgets/m/sample_input/index.php deleted file mode 100644 index 11aaf330..00000000 --- a/widgets/m/sample_input/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 328 2008-02-22 10:41:33Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/qrcode/include/container/admin_qrcodeWidgetContainer.php b/widgets/qrcode/include/container/admin_qrcodeWidgetContainer.php index e948e564..f388ea7c 100644 --- a/widgets/qrcode/include/container/admin_qrcodeWidgetContainer.php +++ b/widgets/qrcode/include/container/admin_qrcodeWidgetContainer.php @@ -70,7 +70,7 @@ class admin_qrcodeWidgetContainer extends BaseAdminWidgetContainer } } else { // 初期表示の場合 // デフォルト値の設定 - $qrData = $this->gEnv->getDefaultMobileUrl(); // QRコード化するデータ、デフォルト値は携帯サイトURL + $qrData = 'http://example.com'; // QRコード化するデータデフォルト $desc = ''; // 説明 $paramObj = $this->getWidgetParamObj(); if (!empty($paramObj)){ -- 2.11.0
XMa#S_%t6lTT zw4m?FvX_wDD-U*?YaXIC?tSW52pl{AmOR-0iT~pKtNliqJHx9xJ!dWo;uph|&OF++ zJD-9TI&$>116VyVe(&rC48Yg)b zdxZ{)qJ*nV&3id2#0En`jtQZCR*VCj$SEp9FRy_xnZQ zuPB{%ll4LA2Q%t+@rLQ3#BaE}sFvS*yBLij>{#!5%wF|+iqMrctxOaW2b&(?3u1m{ z4Tzt$UA8li%z5&ohPXw0;389f4K?0xXAR}AOzkvp-Py#y^!=iu^E2ACG$sRTe46)2 z=*Gr7QO(G=E_sF56q66M&v_VBG7IImIf0q3CB7hH{bh$<$)j3!JfYx7jo5K@0~Uwg z7}CJ!bldd|lS^riBHZ&1wVeJ9x4CbrXD!jOO!06~6VUekeN&Y6Y8AIsdPY{h>xvFj z796|0otO#3!9Zl)0aNoN<#WPoVslO~Fr<6&x>F><$Y+I!mp?#C6cJ;k-qQ?Gb9`%wkC&mnQy-wIojU9~z=Yedpfz^&q|ZHGO(6etIs3(j>Ti%YMn;{gACzR+YMHI#pmZK06X`u zMW5a-OxZ;*B@P#N6D;CiIPr(b*G6wY0Q6;N|(8 rjTKI5(yE`n4^B@r*tZ|mYyuoM!k>n$#ghM7_%OO_cBjJN+1vjEU?-!+ diff --git a/widgets/m/blog_category/include/container/m_blog_categoryWidgetContainer.php b/widgets/m/blog_category/include/container/m_blog_categoryWidgetContainer.php deleted file mode 100644 index b46a589d..00000000 --- a/widgets/m/blog_category/include/container/m_blog_categoryWidgetContainer.php +++ /dev/null @@ -1,100 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: m_blog_categoryWidgetContainer.php 3834 2010-11-17 04:17:07Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getContainerPath() . '/baseMobileWidgetContainer.php'); -require_once($gEnvManager->getCurrentWidgetDbPath() . '/blog_categoryDb.php'); - -class m_blog_categoryWidgetContainer extends BaseMobileWidgetContainer -{ - private $db; // DB接続オブジェクト - private $langId; // 言語 - const TARGET_WIDGET = 'm/blog'; // 呼び出しウィジェットID - const DEFAULT_TITLE = 'ブログカテゴリー'; // デフォルトのウィジェットタイトル名 - - /** - * コンストラクタ - */ - function __construct() - { - // 親クラスを呼び出す - parent::__construct(); - - // DBオブジェクト作成 - $this->db = new blog_categoryDb(); - } - /** - * テンプレートファイルを設定 - * - * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。 - * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。 - */ - function _setTemplate($request, &$param) - { - return 'menu.tmpl.html'; - } - /** - * テンプレートにデータ埋め込む - * - * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。_setTemplate()と共有。 - * @param なし - */ - function _assign($request, &$param) - { - $this->langId = $this->gEnv->getCurrentLanguage(); // 表示言語を取得 - - // #### カテゴリーリストを作成 #### - $this->db->getAllCategory(array($this, 'categoryListLoop'), $this->langId);// デフォルト言語で取得 - } - /** - * ウィジェットのタイトルを設定 - * - * @param RequestManager $request HTTPリクエスト処理クラス - * @param object $param 任意使用パラメータ。そのまま_assign()に渡る - * @return string ウィジェットのタイトル名 - */ - function _setTitle($request, &$param) - { - return self::DEFAULT_TITLE; - } - /** - * 取得したデータをテンプレートに設定する - * - * @param int $index 行番号(0~) - * @param array $fetchedRow フェッチ取得した行 - * @param object $param 未使用 - * @return bool true=処理続行の場合、false=処理終了の場合 - */ - function categoryListLoop($index, $fetchedRow, $param) - { - // リンク先の作成 - $name = $fetchedRow['bc_name']; - $linkUrl = $this->createCmdUrlToWidget(self::TARGET_WIDGET, 'act=view&' . M3_REQUEST_PARAM_CATEGORY_ID . '=' . $fetchedRow['bc_id']); - $row = array( - 'link_url' => $this->convertUrlToHtmlEntity($this->getUrl($linkUrl, true/*リンク用*/)), // リンク - 'name' => $this->convertToDispString($name) // タイトル - ); - $this->tmpl->addVars('itemlist', $row); - $this->tmpl->parseTemplate('itemlist', 'a'); - return true; - } -} -?> diff --git a/widgets/m/blog_category/include/db/blog_categoryDb.php b/widgets/m/blog_category/include/db/blog_categoryDb.php deleted file mode 100644 index 86832aad..00000000 --- a/widgets/m/blog_category/include/db/blog_categoryDb.php +++ /dev/null @@ -1,37 +0,0 @@ - - * @copyright Copyright 2006-2010 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: blog_categoryDb.php 3833 2010-11-17 01:45:54Z fishbone $ - * @link http://www.magic3.org - */ -require_once($gEnvManager->getDbPath() . '/baseDb.php'); - -class blog_categoryDb extends BaseDb -{ - /** - * ブログカテゴリー一覧を取得 - * - * @param function $callback コールバック関数 - * @param string $lang 言語 - * @return なし - */ - function getAllCategory($callback, $lang) - { - $queryStr = 'SELECT * FROM blog_category '; - $queryStr .= 'WHERE bc_language_id = ? '; - $queryStr .= 'AND bc_deleted = false '; // 削除されていない - $queryStr .= 'AND bc_visible = true '; // 表示状態 - $queryStr .= 'ORDER BY bc_sort_order'; - $this->selectLoop($queryStr, array($lang), $callback, null); - } -} -?> diff --git a/widgets/m/blog_category/include/template/menu.tmpl.html b/widgets/m/blog_category/include/template/menu.tmpl.html deleted file mode 100644 index fdbfb07b..00000000 --- a/widgets/m/blog_category/include/template/menu.tmpl.html +++ /dev/null @@ -1,3 +0,0 @@ - -{NAME}
- diff --git a/widgets/m/blog_category/index.php b/widgets/m/blog_category/index.php deleted file mode 100644 index 8da1ffb2..00000000 --- a/widgets/m/blog_category/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3833 2010-11-17 01:45:54Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/blog_list/admin/index.php b/widgets/m/blog_list/admin/index.php deleted file mode 100644 index 70b85d95..00000000 --- a/widgets/m/blog_list/admin/index.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @copyright Copyright 2006-2007 Magic3 Project. - * @license http://www.gnu.org/copyleft/gpl.html GPL License - * @version SVN: $Id: index.php 3740 2010-10-27 01:22:39Z fishbone $ - * @link http://www.magic3.org - */ -// 直接アクセスの防止 -defined('M3_SYSTEM') or die('Access error: Direct access denied.'); - -// ウィジェット実行 -global $gLaunchManager; -$gLaunchManager->goWidget(__FILE__); -?> diff --git a/widgets/m/blog_list/images/icon32.png b/widgets/m/blog_list/images/icon32.png deleted file mode 100644 index 58c1d16fd44436783e8da1aa8aa4279b4f07b29c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24910 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 diff --git a/widgets/m/blog_list/images/icon64.png b/widgets/m/blog_list/images/icon64.png deleted file mode 100644 index ce70280423b133a2e8f8780e94bdf177e272670d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29932 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�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