diff --git a/.gitignore b/.gitignore index 8af6621df..d03fe3072 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ public_html/siteconfig.php system/lib-custom.php public_html/sitemap.xml -public_html/filemanager/scripts/filemanager.config.js +public_html/filemanager/scripts/filemanager.config.json # cache files data/layout_cache/** diff --git a/build.xml b/build.xml index 1717eeb8d..f417e17ff 100644 --- a/build.xml +++ b/build.xml @@ -84,6 +84,9 @@ + + + @@ -128,6 +131,7 @@ + diff --git a/language/afrikaans.php b/language/afrikaans.php index e8d4f61e0..4c1e07ff0 100644 --- a/language/afrikaans.php +++ b/language/afrikaans.php @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/afrikaans_utf-8.php b/language/afrikaans_utf-8.php index b0e3cd646..7ea9df5ea 100644 --- a/language/afrikaans_utf-8.php +++ b/language/afrikaans_utf-8.php @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/bosnian.php b/language/bosnian.php index 7123d8db1..170921997 100644 --- a/language/bosnian.php +++ b/language/bosnian.php @@ -930,7 +930,7 @@ 52 => '', 53 => 'nije koristena. Morate ukljuciti ovu sliku u intro ili body prije nego spasite vase izmjene', 54 => 'Ukljucene slike nisu koristene', - 55 => 'The following errors occured while trying to save your story. Please correct these errors before saving', + 55 => 'The following errors occurred while trying to save your story. Please correct these errors before saving', 56 => 'Prikazi ikonu teme', 57 => 'View unscaled image', 58 => 'Story Management', @@ -1166,6 +1166,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1279,7 +1281,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1462,8 +1464,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/language/bosnian_utf-8.php b/language/bosnian_utf-8.php index 596b951b8..61a917c69 100644 --- a/language/bosnian_utf-8.php +++ b/language/bosnian_utf-8.php @@ -930,7 +930,7 @@ 52 => '', 53 => 'nije koristena. Morate ukljuciti ovu sliku u intro ili body prije nego spasite vase izmjene', 54 => 'Ukljucene slike nisu koristene', - 55 => 'The following errors occured while trying to save your story. Please correct these errors before saving', + 55 => 'The following errors occurred while trying to save your story. Please correct these errors before saving', 56 => 'Prikazi ikonu teme', 57 => 'View unscaled image', 58 => 'Story Management', @@ -1166,6 +1166,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1279,7 +1281,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1462,8 +1464,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/language/bulgarian.php b/language/bulgarian.php index 4b1d42cd1..d34fdc7fa 100644 --- a/language/bulgarian.php +++ b/language/bulgarian.php @@ -926,7 +926,7 @@ 52 => '', 53 => 'was not used. You must include this image in the intro or body before you can save your changes', 54 => 'Attached Images Not Used', - 55 => 'The following errors occured while trying to save your story. Please correct these errors before saving', + 55 => 'The following errors occurred while trying to save your story. Please correct these errors before saving', 56 => 'Show Topic Icon', 57 => 'View unscaled image', 58 => 'Story Management', @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1458,8 +1460,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/bulgarian_utf-8.php b/language/bulgarian_utf-8.php index 26caa59ea..0ee313a3d 100644 --- a/language/bulgarian_utf-8.php +++ b/language/bulgarian_utf-8.php @@ -926,7 +926,7 @@ 52 => '', 53 => 'was not used. You must include this image in the intro or body before you can save your changes', 54 => 'Attached Images Not Used', - 55 => 'The following errors occured while trying to save your story. Please correct these errors before saving', + 55 => 'The following errors occurred while trying to save your story. Please correct these errors before saving', 56 => 'Show Topic Icon', 57 => 'View unscaled image', 58 => 'Story Management', @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1458,8 +1460,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/catalan.php b/language/catalan.php index a18795429..4c2302b22 100644 --- a/language/catalan.php +++ b/language/catalan.php @@ -1160,6 +1160,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1273,7 +1275,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1456,8 +1458,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2510,4 +2512,3 @@ ); -?> diff --git a/language/catalan_utf-8.php b/language/catalan_utf-8.php index 3233ffd71..6e1e3beec 100644 --- a/language/catalan_utf-8.php +++ b/language/catalan_utf-8.php @@ -1160,6 +1160,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1273,7 +1275,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1456,8 +1458,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2510,4 +2512,3 @@ ); -?> diff --git a/language/chinese_simplified_utf-8.php b/language/chinese_simplified_utf-8.php index 5936b5d38..486581200 100644 --- a/language/chinese_simplified_utf-8.php +++ b/language/chinese_simplified_utf-8.php @@ -1165,6 +1165,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1278,7 +1280,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2515,4 +2517,3 @@ ); -?> diff --git a/language/chinese_traditional_utf-8.php b/language/chinese_traditional_utf-8.php index d124a222e..cb29b468b 100644 --- a/language/chinese_traditional_utf-8.php +++ b/language/chinese_traditional_utf-8.php @@ -1165,6 +1165,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1278,7 +1280,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2515,4 +2517,3 @@ ); -?> diff --git a/language/croatian.php b/language/croatian.php index 268d578a3..2b6af66e8 100644 --- a/language/croatian.php +++ b/language/croatian.php @@ -926,7 +926,7 @@ 52 => '', 53 => 'was not used. You must include this image in the intro or body before you can save your changes', 54 => 'Attached Images Not Used', - 55 => 'The following errors occured while trying to save your story. Please correct these errors before saving', + 55 => 'The following errors occurred while trying to save your story. Please correct these errors before saving', 56 => 'Prika緄 ikonu teme', 57 => 'View unscaled image', 58 => 'Story Management', @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1458,8 +1460,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/croatian_utf-8.php b/language/croatian_utf-8.php index 4b380c02c..3297cd190 100644 --- a/language/croatian_utf-8.php +++ b/language/croatian_utf-8.php @@ -928,7 +928,7 @@ 52 => '', 53 => 'was not used. You must include this image in the intro or body before you can save your changes', 54 => 'Attached Images Not Used', - 55 => 'The following errors occured while trying to save your story. Please correct these errors before saving', + 55 => 'The following errors occurred while trying to save your story. Please correct these errors before saving', 56 => 'Prika戮i ikonu teme', 57 => 'View unscaled image', 58 => 'Story Management', @@ -1164,6 +1164,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1277,7 +1279,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1460,8 +1462,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2514,4 +2516,3 @@ ); -?> diff --git a/language/czech.php b/language/czech.php index 57c080cf2..05087ec0f 100644 --- a/language/czech.php +++ b/language/czech.php @@ -1161,6 +1161,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1274,7 +1276,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1457,8 +1459,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2511,4 +2513,3 @@ ); -?> diff --git a/language/czech_utf-8.php b/language/czech_utf-8.php index 7d14e09b6..0963d89df 100644 --- a/language/czech_utf-8.php +++ b/language/czech_utf-8.php @@ -1161,6 +1161,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1274,7 +1276,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1457,8 +1459,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2511,4 +2513,3 @@ ); -?> diff --git a/language/danish.php b/language/danish.php index b056c0395..f11936b06 100644 --- a/language/danish.php +++ b/language/danish.php @@ -1161,6 +1161,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1274,7 +1276,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1457,8 +1459,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2511,4 +2513,3 @@ ); -?> diff --git a/language/danish_utf-8.php b/language/danish_utf-8.php index 51de42350..56d186587 100644 --- a/language/danish_utf-8.php +++ b/language/danish_utf-8.php @@ -1161,6 +1161,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1274,7 +1276,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1457,8 +1459,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2511,4 +2513,3 @@ ); -?> diff --git a/language/dutch.php b/language/dutch.php index 758794a1a..8e4a94ccf 100644 --- a/language/dutch.php +++ b/language/dutch.php @@ -1168,6 +1168,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1281,7 +1283,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2518,4 +2520,3 @@ ); -?> diff --git a/language/dutch_utf-8.php b/language/dutch_utf-8.php index 1b475b06c..69ae13a6a 100644 --- a/language/dutch_utf-8.php +++ b/language/dutch_utf-8.php @@ -1168,6 +1168,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1281,7 +1283,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2518,4 +2520,3 @@ ); -?> diff --git a/language/english.php b/language/english.php index d347ac986..a438c0710 100644 --- a/language/english.php +++ b/language/english.php @@ -747,7 +747,14 @@ 'ok' => 'OK', 'on' => 'On', 'open_basedir' => 'If open_basedir restrictions are enabled on your site, it may cause permission problems during the install. The File System Check below should point out any issues.', - 'php_req_version' => 'Geeklog requires PHP version 5.2.0 or newer.', + 'database_settings' => 'Database Settings', + 'database_mysql_version' => 'MySQL Version', + 'database_mysql_req_version' => 'Geeklog requires MySQL version 4.1.2 or newer (MySQL 5 recommended).', + 'database_pgsql_version' => 'Postgresql Version', + 'database_pgsql_req_version' => 'Geeklog requires Postgresql version 9.1.7 or newer.', + 'database_dms' => 'Database Management System', + 'database_dms_notes' => 'Failed to determine Database Management System. Geeklog requires either MySQL or Postgresql', + 'php_req_version' => 'Geeklog requires PHP version 5.3.3 or newer.', 'php_settings' => 'PHP Settings', 'php_version' => 'PHP Version', 'php_warning' => 'If any of the items below are marked in red, you may encounter problems with your Geeklog site. Check with your hosting provider for information on changing any of these PHP settings.', @@ -869,7 +876,12 @@ 'autotag_desc_block' => '[block:name class:block-autotag] - Displays a block. Class not required. Class specifies the css class and will wrap the block in a div. The class block-autotag will always be included with the div.', 'position' => 'Position', 'cache_time' => 'Cache Time', - 'cache_time_desc' => 'This block will be cached for no longer than this many seconds. If 0 caching is disabled. If -1 cached until block is edited again. (3600 = 1 hour, 86400 = 1 day)' + 'cache_time_desc' => 'This block will be cached for no longer than this many seconds. If 0 caching is disabled. If -1 cached until block is edited again. (3600 = 1 hour, 86400 = 1 day)', + 'block_type_gldefault' => 'System', + 'block_type_normal' => 'Normal', + 'block_type_phpblock' => 'PHP', + 'block_type_portal' => 'Portal', + 'block_type_dynamic' => 'Dynamic' ); ############################################################################### @@ -1168,6 +1180,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1285,7 +1299,7 @@ // to match the PHP error constants, // http://www.php.net/manual/en/features.file-upload.errors.php // TBD: move to a separate $LANG array - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1466,8 +1480,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', diff --git a/language/english_utf-8.php b/language/english_utf-8.php index a79616064..57346e0ab 100644 --- a/language/english_utf-8.php +++ b/language/english_utf-8.php @@ -746,8 +746,15 @@ 'off' => 'Off', 'ok' => 'OK', 'on' => 'On', + 'database_settings' => 'Database Settings', + 'database_mysql_version' => 'MySQL Version', + 'database_mysql_req_version' => 'Geeklog requires MySQL version 4.1.2 or newer (MySQL 5 recommended).', + 'database_pgsql_version' => 'Postgresql Version', + 'database_pgsql_req_version' => 'Geeklog requires Postgresql version 9.1.7 or newer.', + 'database_dms' => 'Database Management System', + 'database_dms_notes' => 'Failed to determine Database Management System. Geeklog requires either MySQL or Postgresql', 'open_basedir' => 'If open_basedir restrictions are enabled on your site, it may cause permission problems during the install. The File System Check below should point out any issues.', - 'php_req_version' => 'Geeklog requires PHP version 5.2.0 or newer.', + 'php_req_version' => 'Geeklog requires PHP version 5.3.3 or newer.', 'php_settings' => 'PHP Settings', 'php_version' => 'PHP Version', 'php_warning' => 'If any of the items below are marked in red, you may encounter problems with your Geeklog site. Check with your hosting provider for information on changing any of these PHP settings.', @@ -869,7 +876,12 @@ 'autotag_desc_block' => '[block:name class:block-autotag] - Displays a block. Class not required. Class specifies the css class and will wrap the block in a div. The class block-autotag will always be included with the div.', 'position' => 'Position', 'cache_time' => 'Cache Time', - 'cache_time_desc' => 'This block will be cached for no longer than this many seconds. If 0 caching is disabled. If -1 cached until block is edited again. (3600 = 1 hour, 86400 = 1 day)' + 'cache_time_desc' => 'This block will be cached for no longer than this many seconds. If 0 caching is disabled. If -1 cached until block is edited again. (3600 = 1 hour, 86400 = 1 day)', + 'block_type_gldefault' => 'System', + 'block_type_normal' => 'Normal', + 'block_type_phpblock' => 'PHP', + 'block_type_portal' => 'Portal', + 'block_type_dynamic' => 'Dynamic' ); ############################################################################### @@ -1168,6 +1180,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1285,7 +1299,7 @@ // to match the PHP error constants, // http://www.php.net/manual/en/features.file-upload.errors.php // TBD: move to a separate $LANG array - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1466,8 +1480,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', diff --git a/language/estonian.php b/language/estonian.php index 3c527f35a..53edce310 100644 --- a/language/estonian.php +++ b/language/estonian.php @@ -1163,6 +1163,8 @@ 41 => 'Kommentaaride sisestused', 42 => 'Kasutaja nimi', 43 => 'Auto-publitseeri kommentaarid?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2513,4 +2515,3 @@ ); -?> diff --git a/language/estonian_utf-8.php b/language/estonian_utf-8.php index 9689f43a6..6333c9f6d 100644 --- a/language/estonian_utf-8.php +++ b/language/estonian_utf-8.php @@ -1163,6 +1163,8 @@ 41 => 'Kommentaaride sisestused', 42 => 'Kasutaja nimi', 43 => 'Auto-publitseeri kommentaarid?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2513,4 +2515,3 @@ ); -?> diff --git a/language/farsi_utf-8.php b/language/farsi_utf-8.php index 852162df4..9ca18ff37 100644 --- a/language/farsi_utf-8.php +++ b/language/farsi_utf-8.php @@ -1150,6 +1150,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1263,7 +1265,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1446,8 +1448,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2500,4 +2502,3 @@ ); -?> diff --git a/language/finnish.php b/language/finnish.php index 8294888b7..34866101a 100644 --- a/language/finnish.php +++ b/language/finnish.php @@ -1163,6 +1163,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1276,7 +1278,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1459,8 +1461,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2513,4 +2515,3 @@ ); -?> diff --git a/language/finnish_utf-8.php b/language/finnish_utf-8.php index 614a40317..7bbee7c7e 100644 --- a/language/finnish_utf-8.php +++ b/language/finnish_utf-8.php @@ -1165,6 +1165,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1278,7 +1280,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1461,8 +1463,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2515,4 +2517,3 @@ ); -?> diff --git a/language/french_canada.php b/language/french_canada.php index a034bae0c..c578d3e87 100644 --- a/language/french_canada.php +++ b/language/french_canada.php @@ -1165,6 +1165,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1278,7 +1280,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2515,4 +2517,3 @@ ); -?> diff --git a/language/french_canada_utf-8.php b/language/french_canada_utf-8.php index 3dadf90f0..2ea1fb4b3 100644 --- a/language/french_canada_utf-8.php +++ b/language/french_canada_utf-8.php @@ -1165,6 +1165,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1278,7 +1280,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1461,8 +1463,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2515,4 +2517,3 @@ ); -?> diff --git a/language/french_france.php b/language/french_france.php index ab669ee15..5665edc95 100644 --- a/language/french_france.php +++ b/language/french_france.php @@ -1163,6 +1163,8 @@ 41 => 'Soumission des commentaires', 42 => 'Nom du membre', 43 => 'Auto-publier les commentaires?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2513,4 +2515,3 @@ ); -?> diff --git a/language/french_france_utf-8.php b/language/french_france_utf-8.php index f0135d42c..1b2ef1aec 100644 --- a/language/french_france_utf-8.php +++ b/language/french_france_utf-8.php @@ -1163,6 +1163,8 @@ 41 => 'Soumission des commentaires', 42 => 'Nom du membre', 43 => 'Auto-publier les commentaires?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1910,7 +1912,7 @@ 'token_expiry' => 'Vous avez jusque %s pour saisir vos informations. Pass茅 ce d茅lais et pour des raisons de s茅curit茅, vous perdrez votre saisie.', 'token_expired' => 'Le d茅lais de s茅curit茅 pour cette op茅ratiton 脿 expir茅. Merci de vous identifier 脿 nouveau pour continuer.', 'reauth_msg' => 'Le d茅lais de s茅curit茅 pour cette op茅ratiton 脿 expir茅. Si vous souhaitez poursuivre l\'op茅ration, merci de vous identifier 脿 nouveau ci-dessous. Cela permettra de conserver vos derni猫res modifications.', - 'authenticate' => 'Authentification', + 'authenticate' => 'authentication', 'approve' => 'Approve', 'device' => 'Device', 'device_desc' => 'For what device do you want this item to display for?', @@ -2513,4 +2515,3 @@ ); -?> diff --git a/language/german.php b/language/german.php index cb6a7dc6c..33b6426c8 100644 --- a/language/german.php +++ b/language/german.php @@ -1166,6 +1166,8 @@ 41 => 'Beitr鋑e: Kommentare', 42 => 'Username', 43 => 'Moderation aufheben?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/language/german_formal.php b/language/german_formal.php index d91191fb9..f48371afe 100644 --- a/language/german_formal.php +++ b/language/german_formal.php @@ -1167,6 +1167,8 @@ 41 => 'Beitr鋑e: Kommentare', 42 => 'Username', 43 => 'Moderation aufheben?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2517,4 +2519,3 @@ ); -?> diff --git a/language/german_formal_utf-8.php b/language/german_formal_utf-8.php index dfc3f792c..3b1e17284 100644 --- a/language/german_formal_utf-8.php +++ b/language/german_formal_utf-8.php @@ -1167,6 +1167,8 @@ 41 => 'Beitr盲ge: Kommentare', 42 => 'Username', 43 => 'Moderation aufheben?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2517,4 +2519,3 @@ ); -?> diff --git a/language/german_utf-8.php b/language/german_utf-8.php index ffe48f53d..5b2a8666a 100644 --- a/language/german_utf-8.php +++ b/language/german_utf-8.php @@ -1166,6 +1166,8 @@ 41 => 'Beitr盲ge: Kommentare', 42 => 'Username', 43 => 'Moderation aufheben?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/language/hebrew_utf-8.php b/language/hebrew_utf-8.php index fd400e68f..5873d5f0b 100644 --- a/language/hebrew_utf-8.php +++ b/language/hebrew_utf-8.php @@ -1164,6 +1164,8 @@ 41 => '讛讙砖讜转 转讙讜讘讜转', 42 => '砖诐 诪砖转诪砖', 43 => '讛讗诐 诇驻专住诐 讗讜讟讜诪讟讬转 转讙讜讘讜转?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2514,4 +2516,3 @@ ); -?> diff --git a/language/hellenic.php b/language/hellenic.php index ee3c564a7..fb07da67a 100644 --- a/language/hellenic.php +++ b/language/hellenic.php @@ -1170,6 +1170,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1283,7 +1285,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1466,8 +1468,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2520,4 +2522,3 @@ ); -?> diff --git a/language/hellenic_utf-8.php b/language/hellenic_utf-8.php index b8dc403cc..ef1b19d5b 100644 --- a/language/hellenic_utf-8.php +++ b/language/hellenic_utf-8.php @@ -1170,6 +1170,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1283,7 +1285,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1466,8 +1468,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2520,4 +2522,3 @@ ); -?> diff --git a/language/indonesian.php b/language/indonesian.php index 218b80d9b..62d88db8b 100644 --- a/language/indonesian.php +++ b/language/indonesian.php @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1458,8 +1460,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/indonesian_utf-8.php b/language/indonesian_utf-8.php index ea5e98f47..acaca6d1e 100644 --- a/language/indonesian_utf-8.php +++ b/language/indonesian_utf-8.php @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1458,8 +1460,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/italian.php b/language/italian.php index d08eb3d0c..6cd07763f 100644 --- a/language/italian.php +++ b/language/italian.php @@ -1164,6 +1164,8 @@ 41 => 'Commenti Inviati', 42 => 'Nome utente', 43 => 'Auto-Pubblicare Commenti?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2514,4 +2516,3 @@ ); -?> diff --git a/language/italian_utf-8.php b/language/italian_utf-8.php index 42398974a..51698802d 100644 --- a/language/italian_utf-8.php +++ b/language/italian_utf-8.php @@ -1164,6 +1164,8 @@ 41 => 'Commenti Inviati', 42 => 'Nome utente', 43 => 'Auto-Pubblicare Commenti?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2514,4 +2516,3 @@ ); -?> diff --git a/language/japanese_utf-8.php b/language/japanese_utf-8.php index 562cfd5b5..199f01f4b 100644 --- a/language/japanese_utf-8.php +++ b/language/japanese_utf-8.php @@ -755,7 +755,14 @@ 'ok' => 'OK', 'on' => 'On', 'open_basedir' => 'open_basedir 銇埗闄愩亴銇撱伄銈点偆銉堛仹鏈夊姽銇牬鍚堛併偆銉炽偣銉堛兗銉伄闅涖伀銉戙兗銉熴儍銈枫儳銉炽仹鍟忛銇岃捣銇嶃倠銇嬨倐銇椼倢銇俱仜銈撱備互涓嬨伄銉曘偂銈ゃ儷銈枫偣銉嗐儬銉併偋銉冦偗銈掕銇c仸銇忋仩銇曘亜銆', - 'php_req_version' => 'Geeklog銇伅PHP version 5.2.0浠ラ檷銇屽繀瑕併仹銇欍', + 'database_settings' => 'Database Settings', + 'database_mysql_version' => 'MySQL Version', + 'database_mysql_req_version' => 'Geeklog requires MySQL version 4.1.2 or newer (MySQL 5 recommended).', + 'database_pgsql_version' => 'Postgresql Version', + 'database_pgsql_req_version' => 'Geeklog requires Postgresql version 9.1.7 or newer.', + 'database_dms' => 'Database Management System', + 'database_dms_notes' => 'Failed to determine Database Management System. Geeklog requires either MySQL or Postgresql', + 'php_req_version' => 'Geeklog銇伅PHP version 5.3.3浠ラ檷銇屽繀瑕併仹銇欍', 'php_settings' => 'PHP銇ō瀹', 'php_version' => 'PHP銇儛銉笺偢銉с兂', 'php_warning' => '浠ヤ笅銇儶銈广儓銇璧ゆ枃瀛椼伄绠囨墍銇屻亗銈屻伆銆併亗銇仧銇瓽eeklog銈点偆銉堛仹鍟忛銇岀櫤鐢熴仚銈嬨亱銈傘仐銈屻伨銇涖倱銆傘亾銈屻倝銇甈HP瑷畾銈掋儧銈广儐銈c兂銈般儣銉儛銈ゃ儉銉笺伄鎯呭牨銇収銈夈仐鍚堛倧銇涖仸銉併偋銉冦偗銇椼仸銇忋仩銇曘亜銆', @@ -806,8 +813,8 @@ 2 => '銇撱伄銉栥儹銉冦偗銈掔法闆嗐仚銈嬫ī闄愩亴銇傘倞銇俱仜銈撱', 3 => '銉栥儹銉冦偗銇法闆', 4 => '銉曘偅銉笺儔銇銇胯炯銇裤仹銈ㄣ儵銉笺亴鐧虹敓銇椼伨銇椼仧銆(error.log銈掑弬鐓с仐銇︺亸銇犮仌銇勩)', - 5 => 'Yes', - 6 => 'No', + 5 => '銇亜', + 6 => '銇勩亜銇', 7 => '銇欍伖銇', 8 => '銉栥儹銉冦偗銇偦銈儱銉儐銈c儸銉欍儷', 9 => '闋嗗簭', @@ -872,9 +879,14 @@ 68 => '銇撱伄銉濄兗銈裤儷銉栥儹銉冦偗銇儠銈c兗銉夈伅闀枫仚銇庛仸琛ㄧず銇с亶銇俱仜銈撱傘儢銉儍銈ō瀹氱敾闈€仹銉栥儹銉冦偗銇〃绀恒仚銈嬭浜嬨伄鏈澶ф暟銈掕ō瀹氥仚銈嬨亱銆併偝銉炽儠銈c偖銉ャ儸銉笺偡銉с兂銇ф婧栥伄鏈澶ф暟銈掕ō瀹氥仐銇︺亸銇犮仌銇勩', 69 => '銉椼儵銈般偆銉冲悕', 'autotag_desc_block' => '[block:name class:block-autotag] - Displays a block. Class not required. Class specifies the css class and will wrap the block in a div. The class block-autotag will always be included with the div.', - 'position' => 'Position', + 'position' => '浣嶇疆', 'cache_time' => '銈儯銉冦偡銉ユ湡闁', - 'cache_time_desc' => '銇撱伄銉栥儹銉冦偗銇寚瀹氥仌銈屻仧绉掓暟銇枔銈儯銉冦偡銉ャ仌銈屻伨銇欍0 銈掓寚瀹氥仚銈嬨仺銈儯銉冦偡銉ャ仐銇俱仜銈撱(3600 = 1鏅傞枔銆86400 = 1鏃)' + 'cache_time_desc' => '銇撱伄銉栥儹銉冦偗銇寚瀹氥仌銈屻仧绉掓暟銇枔銈儯銉冦偡銉ャ仌銈屻伨銇欍0 銈掓寚瀹氥仚銈嬨仺銈儯銉冦偡銉ャ仐銇俱仜銈撱(3600 = 1鏅傞枔銆86400 = 1鏃)', + 'block_type_gldefault' => '銈枫偣銉嗐儬', + 'block_type_normal' => '銉庛兗銉炪儷', + 'block_type_phpblock' => 'PHP', + 'block_type_portal' => '銉濄兗銈裤儷', + 'block_type_dynamic' => '銉銈ゃ儕銉熴儍銈' ); ############################################################################### @@ -1171,11 +1183,13 @@ 41 => '銈炽儭銉炽儓銇姇绋跨敵璜', 42 => '銉︺兗銈躲兗鍚', 43 => '銈炽儭銉炽儓銈掕嚜鍕曠殑銇叕闁?', + 44 => '鎶曠ǹ銇嚘鐞嗙祼鏋', + 45 => '銉︺兗銈躲兗銇屾姇绋裤仐銇︺亜銈嬮爡鐩伄銇嗐仭 %1$d 浠躲倰鎵胯獚銆%2$d 浠躲倰鍓婇櫎銇椼伨銇椼仧銆', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', 'users' => 'Users', - 'submissions_desc' => '銉︺兗銈躲兗銇姇绋裤倰绶ㄩ泦銇俱仧銇墛闄ゃ仚銈嬨伀銇併仢銇偄銈ゃ儐銉犮伄绶ㄩ泦銈€偆銈炽兂銈掋偗銉儍銈仐銇︺亸銇犮仌銇勩傘優銉儊銉椼儷鎶曠ǹ銈掓壙瑾嶃佸墛闄ゃ仚銈嬨伀銇併儶銈广儓銇儵銈ゃ偢銈偑銉椼偡銉с兂銈掕│鐢ㄣ仐銇︿繚瀛樸倰銈儶銉冦偗銇椼仸銇忋仩銇曘亜銆' + 'submissions_desc' => '銉︺兗銈躲兗銇姇绋裤倰绶ㄩ泦銇俱仧銇墛闄ゃ仚銈嬨伀銇併仢銇偄銈ゃ儐銉犮伄绶ㄩ泦銈€偆銈炽兂銈掋偗銉儍銈仐銇︺亸銇犮仌銇勩傛姇绋裤倰涓鎷仐銇︽壙瑾嶃兓鍓婇櫎銇欍倠銇伅銆併儶銈广儓銇儵銈搞偑銉溿偪銉炽倰閬告姙銇椼仸銇嬨倝淇濆瓨銈掋偗銉儍銈仐銇︺亸銇犮仌銇勩' ); ############################################################################### @@ -1466,9 +1480,9 @@ 68 => '姝c仐銇勭従鍦ㄣ伄銉戙偣銉兗銉夈倰鍏ュ姏銇椼仸銇忋仩銇曘亜銆', 69 => '銈€偒銈︺兂銉堛倰銉儍銈仐銇俱仐銇熴', 70 => '銈€偒銈︺兂銉堛伅绠$悊鑰呫伄鎵胯獚寰呫仭銇с仚銆', - 71 => '銈€偒銈︺兂銉堛伄纰鸿獚銈掋仐銇俱仐銇熴併仢銇椼仸绠$悊鑰呫伄鎵胯獚寰呫仭銇с仚銆', - 72 => '銉椼儵銈般偆銉炽伄銈ゃ兂銈广儓銉笺儷銇椼仸銈嬮枔銇偍銉┿兗銇岀櫤鐢熴仐銇俱仐銇熴俥rror.log銈掔⒑瑾嶃仐銇︺亸銇犮仌銇勩', - 73 => '銉椼儵銈般偆銉炽伄銈€兂銈ゃ兂銈广儓銉笺儷銇椼仸銇勩倠闁撱伀銈ㄣ儵銉笺亴鐧虹敓銇椼伨銇椼仧銆俥rror.log銈掔⒑瑾嶃仐銇︺亸銇犮仌銇勩', + 71 => '銈€偒銈︺兂銉堛伄纰鸿獚銈掕銇勩伨銇椼仧銆併仢銇椼仸绠$悊鑰呫伄鎵胯獚寰呫仭銇с仚銆', + 72 => '銉椼儵銈般偆銉炽倰銈ゃ兂銈广儓銉笺儷銇椼仸銇勩倠闁撱伀銈ㄣ儵銉笺亴鐧虹敓銇椼伨銇椼仧銆俥rror.log銈掔⒑瑾嶃仐銇︺亸銇犮仌銇勩', + 73 => '銉椼儵銈般偆銉炽倰銈€兂銈ゃ兂銈广儓銉笺儷銇椼仸銇勩倠闁撱伀銈ㄣ儵銉笺亴鐧虹敓銇椼伨銇椼仧銆俥rror.log銈掔⒑瑾嶃仐銇︺亸銇犮仌銇勩', 74 => '銉斻兂銈般儛銉冦偗銈掗佷俊銇椼伨銇椼仧銆', 75 => '銉堛儵銉冦偗銉愩儍銈伅POST銉偗銈ㄣ偣銉堛倰浣跨敤銇椼仸閫佷俊銇椼仾銇戙倢銇般仾銈娿伨銇涖倱銆', 76 => '銇撱伄闋呯洰銈掑墛闄ゃ仐銇︺倐銈堛亜銇с仚銇?', @@ -2521,4 +2535,3 @@ ); -?> diff --git a/language/korean.php b/language/korean.php index e4e231938..9d0d73daa 100644 --- a/language/korean.php +++ b/language/korean.php @@ -1163,6 +1163,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1276,7 +1278,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2513,4 +2515,3 @@ ); -?> diff --git a/language/korean_utf-8.php b/language/korean_utf-8.php index 18ffc8544..a010563bc 100644 --- a/language/korean_utf-8.php +++ b/language/korean_utf-8.php @@ -1163,6 +1163,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1276,7 +1278,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2513,4 +2515,3 @@ ); -?> diff --git a/language/norwegian.php b/language/norwegian.php index 1e3ff073b..cd01a1735 100644 --- a/language/norwegian.php +++ b/language/norwegian.php @@ -1175,6 +1175,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1288,7 +1290,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1471,8 +1473,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2525,4 +2527,3 @@ ); -?> diff --git a/language/norwegian_utf-8.php b/language/norwegian_utf-8.php index 69b330719..2e18745d1 100644 --- a/language/norwegian_utf-8.php +++ b/language/norwegian_utf-8.php @@ -1175,6 +1175,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1288,7 +1290,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1471,8 +1473,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2525,4 +2527,3 @@ ); -?> diff --git a/language/polish.php b/language/polish.php index 03e46ab87..fdabebcd7 100644 --- a/language/polish.php +++ b/language/polish.php @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1458,8 +1460,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/polish_utf-8.php b/language/polish_utf-8.php index 2dff942e1..26d438b36 100644 --- a/language/polish_utf-8.php +++ b/language/polish_utf-8.php @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1458,8 +1460,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/portuguese.php b/language/portuguese.php index fda87141b..24ae731ce 100644 --- a/language/portuguese.php +++ b/language/portuguese.php @@ -1161,6 +1161,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1274,7 +1276,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1457,8 +1459,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2511,4 +2513,3 @@ ); -?> diff --git a/language/portuguese_brazil.php b/language/portuguese_brazil.php index acf354203..e8aae249d 100644 --- a/language/portuguese_brazil.php +++ b/language/portuguese_brazil.php @@ -1166,6 +1166,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1279,7 +1281,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1462,8 +1464,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/language/portuguese_brazil_utf-8.php b/language/portuguese_brazil_utf-8.php index c3a478370..caa53b2f7 100644 --- a/language/portuguese_brazil_utf-8.php +++ b/language/portuguese_brazil_utf-8.php @@ -1166,6 +1166,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1279,7 +1281,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1462,8 +1464,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/language/portuguese_utf-8.php b/language/portuguese_utf-8.php index 8fde95afd..e695c422b 100644 --- a/language/portuguese_utf-8.php +++ b/language/portuguese_utf-8.php @@ -1161,6 +1161,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1274,7 +1276,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1457,8 +1459,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2511,4 +2513,3 @@ ); -?> diff --git a/language/romanian.php b/language/romanian.php index d9a2265bd..d997d7c7e 100644 --- a/language/romanian.php +++ b/language/romanian.php @@ -925,7 +925,7 @@ 52 => '', 53 => 'was not used. You must include this image in the intro or body before you can save your changes', 54 => 'Attached Images Not Used', - 55 => 'The following errors occured while trying to save your stire. Please correct these errors before saving', + 55 => 'The following errors occurred while trying to save your stire. Please correct these errors before saving', 56 => 'Show Topic Icon', 57 => 'View unscaled image', 58 => 'Story Management', @@ -1161,6 +1161,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1274,7 +1276,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1457,8 +1459,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2511,4 +2513,3 @@ ); -?> diff --git a/language/romanian_utf-8.php b/language/romanian_utf-8.php index a4ef56082..4e83aa89e 100644 --- a/language/romanian_utf-8.php +++ b/language/romanian_utf-8.php @@ -925,7 +925,7 @@ 52 => '', 53 => 'was not used. You must include this image in the intro or body before you can save your changes', 54 => 'Attached Images Not Used', - 55 => 'The following errors occured while trying to save your stire. Please correct these errors before saving', + 55 => 'The following errors occurred while trying to save your stire. Please correct these errors before saving', 56 => 'Show Topic Icon', 57 => 'View unscaled image', 58 => 'Story Management', @@ -1161,6 +1161,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1274,7 +1276,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1457,8 +1459,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2511,4 +2513,3 @@ ); -?> diff --git a/language/russian.php b/language/russian.php index 9c834214d..1b096eb0a 100644 --- a/language/russian.php +++ b/language/russian.php @@ -1178,6 +1178,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1291,7 +1293,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2528,4 +2530,3 @@ ); -?> diff --git a/language/russian_utf-8.php b/language/russian_utf-8.php index ba0c3c4bb..424dda52e 100644 --- a/language/russian_utf-8.php +++ b/language/russian_utf-8.php @@ -1178,6 +1178,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1291,7 +1293,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2528,4 +2530,3 @@ ); -?> diff --git a/language/serbian.php b/language/serbian.php index 222140c77..ed3efecf4 100644 --- a/language/serbian.php +++ b/language/serbian.php @@ -1167,6 +1167,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1280,7 +1282,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2517,4 +2519,3 @@ ); -?> diff --git a/language/serbian_utf-8.php b/language/serbian_utf-8.php index 5322dfeb2..3181bc1d2 100644 --- a/language/serbian_utf-8.php +++ b/language/serbian_utf-8.php @@ -1167,6 +1167,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1280,7 +1282,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2517,4 +2519,3 @@ ); -?> diff --git a/language/slovak.php b/language/slovak.php index 4833907bf..73961ee20 100644 --- a/language/slovak.php +++ b/language/slovak.php @@ -926,7 +926,7 @@ 52 => '', 53 => 'was not used. You must include this image in the intro or body before you can save your changes', 54 => 'Attached Images Not Used', - 55 => 'The following errors occured while trying to save your story. Please correct these errors before saving', + 55 => 'The following errors occurred while trying to save your story. Please correct these errors before saving', 56 => 'Show Topic Icon', 57 => 'View unscaled image', 58 => 'Spr醰a 鑜醤ku', @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'User Name', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1458,8 +1460,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/slovak_utf-8.php b/language/slovak_utf-8.php index 2427e6afc..0ba5252b5 100644 --- a/language/slovak_utf-8.php +++ b/language/slovak_utf-8.php @@ -926,7 +926,7 @@ 52 => '', 53 => 'was not used. You must include this image in the intro or body before you can save your changes', 54 => 'Attached Images Not Used', - 55 => 'The following errors occured while trying to save your story. Please correct these errors before saving', + 55 => 'The following errors occurred while trying to save your story. Please correct these errors before saving', 56 => 'Show Topic Icon', 57 => 'View unscaled image', 58 => 'Spr谩va 膷l谩nku', @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'User Name', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1458,8 +1460,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/slovenian.php b/language/slovenian.php index 16df7adbf..73916b79b 100644 --- a/language/slovenian.php +++ b/language/slovenian.php @@ -1165,6 +1165,8 @@ 41 => 'Oddaje komentarjev', 42 => 'Uporabni歬o ime', 43 => 'Samodejno objavi komentarje?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2515,4 +2517,3 @@ ); -?> diff --git a/language/slovenian_utf-8.php b/language/slovenian_utf-8.php index b44beb060..2ef3fdc19 100644 --- a/language/slovenian_utf-8.php +++ b/language/slovenian_utf-8.php @@ -1165,6 +1165,8 @@ 41 => 'Oddaje komentarjev', 42 => 'Uporabni拧ko ime', 43 => 'Samodejno objavi komentarje?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -2515,4 +2517,3 @@ ); -?> diff --git a/language/spanish.php b/language/spanish.php index 95ed6d841..18a930c3f 100644 --- a/language/spanish.php +++ b/language/spanish.php @@ -1160,6 +1160,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1273,7 +1275,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1457,7 +1459,7 @@ 70 => 'Su cuenta est pendiente de aprobaci髇 de el administrador.', 71 => 'Su cuenta ha sido confirmada y est pendiente de ser activada por el administrador.', 72 => 'Hubo un error al intentar instalar el plugin. Por favor, revise el archivo error.log par m醩 detalles.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => '縎eguro que desea eliminar este elemento?', @@ -2510,4 +2512,3 @@ ); -?> diff --git a/language/spanish_argentina.php b/language/spanish_argentina.php index ae75ce3ef..bc2e57fb3 100644 --- a/language/spanish_argentina.php +++ b/language/spanish_argentina.php @@ -1160,6 +1160,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1273,7 +1275,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1456,8 +1458,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2510,4 +2512,3 @@ ); -?> diff --git a/language/spanish_argentina_utf-8.php b/language/spanish_argentina_utf-8.php index 7d42010a3..ab41f5281 100644 --- a/language/spanish_argentina_utf-8.php +++ b/language/spanish_argentina_utf-8.php @@ -1160,6 +1160,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1273,7 +1275,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1456,8 +1458,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2510,4 +2512,3 @@ ); -?> diff --git a/language/spanish_utf-8.php b/language/spanish_utf-8.php index 2ab3f5179..df7c7784a 100644 --- a/language/spanish_utf-8.php +++ b/language/spanish_utf-8.php @@ -1163,6 +1163,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1276,7 +1278,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2513,4 +2515,3 @@ ); -?> diff --git a/language/swedish.php b/language/swedish.php index cdbd7464e..9def0c4f0 100644 --- a/language/swedish.php +++ b/language/swedish.php @@ -1166,6 +1166,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1279,7 +1281,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1462,8 +1464,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/language/swedish_utf-8.php b/language/swedish_utf-8.php index 5ae4df1e9..9f87bbfaf 100644 --- a/language/swedish_utf-8.php +++ b/language/swedish_utf-8.php @@ -1166,6 +1166,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1279,7 +1281,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -1462,8 +1464,8 @@ 69 => 'Your account has been blocked!', 70 => 'Your account is awaiting administrator approval.', 71 => 'Your account has now been confirmed and is awaiting administrator approval.', - 72 => 'An error occured while attempting to install the plugin. See error.log for details.', - 73 => 'An error occured while attempting to uninstall the plugin. See error.log for details.', + 72 => 'An error occurred while attempting to install the plugin. See error.log for details.', + 73 => 'An error occurred while attempting to uninstall the plugin. See error.log for details.', 74 => 'The pingback has been successfully sent.', 75 => 'Trackbacks must be sent using a POST request.', 76 => 'Do you really want to delete this item?', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/language/turkish.php b/language/turkish.php index 215da690b..48323bbdb 100644 --- a/language/turkish.php +++ b/language/turkish.php @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/turkish_utf-8.php b/language/turkish_utf-8.php index e36c2f360..b9bc047f6 100644 --- a/language/turkish_utf-8.php +++ b/language/turkish_utf-8.php @@ -1162,6 +1162,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1275,7 +1277,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2512,4 +2514,3 @@ ); -?> diff --git a/language/ukrainian.php b/language/ukrainian.php index be4a13746..55040812f 100644 --- a/language/ukrainian.php +++ b/language/ukrainian.php @@ -1166,6 +1166,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1279,7 +1281,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/language/ukrainian_koi8-u.php b/language/ukrainian_koi8-u.php index 69edcf85a..80881d8e8 100644 --- a/language/ukrainian_koi8-u.php +++ b/language/ukrainian_koi8-u.php @@ -1166,6 +1166,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1279,7 +1281,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/language/ukrainian_utf-8.php b/language/ukrainian_utf-8.php index 1bb5bbdd6..39df4a52c 100644 --- a/language/ukrainian_utf-8.php +++ b/language/ukrainian_utf-8.php @@ -1166,6 +1166,8 @@ 41 => 'Comment Submissions', 42 => 'Username', 43 => 'Auto-publish Comments?', + 44 => 'Results of your moderation', + 45 => 'Approved %1$d items and deleted %2$d items of user submissions.', 'core' => 'Core', 'plugins' => 'Plugins', 'tools' => 'Tools', @@ -1279,7 +1281,7 @@ 67 => 'The directory "%s" is not writable.', 68 => 'You do not have the required permissions to install plugins.', 69 => 'You do not have the required permissions to upload plugins.', - 99 => 'An unknown error occured', + 99 => 'An unknown error occurred', 100 => 'Ok.', 101 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', 102 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', @@ -2516,4 +2518,3 @@ ); -?> diff --git a/plugins/calendar/configuration_validation.php b/plugins/calendar/configuration_validation.php index a5bb8a6de..b8b8a4ff7 100644 --- a/plugins/calendar/configuration_validation.php +++ b/plugins/calendar/configuration_validation.php @@ -30,7 +30,7 @@ // | | // +---------------------------------------------------------------------------+ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'configuration_validation.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } @@ -78,5 +78,3 @@ $_CONF_VALIDATE['calendar']['autotag_permissions_event[3]'] = array( 'rule' => array('inList', array(0, 2), true) ); - -?> diff --git a/plugins/calendar/functions.inc b/plugins/calendar/functions.inc index 03d0f8a49..c23803988 100644 --- a/plugins/calendar/functions.inc +++ b/plugins/calendar/functions.inc @@ -40,7 +40,7 @@ * @package Calendar */ -if (stripos($_SERVER['PHP_SELF'], 'functions.inc') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own.'); } @@ -113,14 +113,9 @@ function phpblock_calendar($help = '', $title = '') if ($range == 0) { $range = 14; // fallback: 14 days } - $dateonly = $_CONF['dateonly']; - if (empty($dateonly)) { - $dateonly = '%d-%b'; // fallback: day - abbrev. month name - } if (empty($title)) { - $title = DB_getItem($_TABLES['blocks'], 'title', - "name = 'events_block'"); + $title = DB_getItem($_TABLES['blocks'], 'title', "name = 'events_block'"); } $eventSql = 'SELECT eid,title,url,datestart,dateend,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon ' . "FROM {$_TABLES['events']} "; @@ -132,19 +127,19 @@ function phpblock_calendar($help = '', $title = '') $eventSql .= 'ORDER BY datestart,timestart'; if (($_CA_CONF['personalcalendars'] == 1) && !COM_isAnonUser()) { - $personaleventsql = 'SELECT eid,title,url,datestart,dateend,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon ' + $personalEventSql = 'SELECT eid,title,url,datestart,dateend,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon ' . "FROM {$_TABLES['personal_events']} "; - if ($_DB_dbms == 'pgsql') { - $personaleventsql .= "WHERE uid = {$_USER['uid']} AND dateend >= (NOW() - INTERVAL '1 day') AND (NOW() - INTERVAL '$range days') < datestart "; + if ($_DB_dbms === 'pgsql') { + $personalEventSql .= "WHERE uid = {$_USER['uid']} AND dateend >= (NOW() - INTERVAL '1 day') AND (NOW() - INTERVAL '$range days') < datestart "; } else { - $personaleventsql .= "WHERE uid = {$_USER['uid']} AND dateend >= (NOW() - INTERVAL 24 HOUR) AND (TO_DAYS(datestart) - TO_DAYS(NOW()) < $range) "; + $personalEventSql .= "WHERE uid = {$_USER['uid']} AND dateend >= (NOW() - INTERVAL 24 HOUR) AND (TO_DAYS(datestart) - TO_DAYS(NOW()) < $range) "; } - $personaleventsql .= 'ORDER BY datestart, dateend'; + $personalEventSql .= 'ORDER BY datestart, dateend'; } $allEvents = DB_query($eventSql); $numRows = DB_numRows($allEvents); - $totalrows = $numRows; + $totalRows = $numRows; $numDays = 0; // Without limits, I'll force them. $theRow = 1; // Start with today! @@ -162,18 +157,18 @@ function phpblock_calendar($help = '', $title = '') for ($z = 1; $z <= $iterations; $z++) { if ($z == 2) { - $allEvents = DB_query($personaleventsql); + $allEvents = DB_query($personalEventSql); $numRows = DB_numRows($allEvents); - $totalrows = $totalrows + $numRows; + $totalRows = $totalRows + $numRows; $numDays = 0; // Without limits, I'll force them. $theRow = 1; // Start with today! $oldDate1 = 'no_day'; // Invalid Date! $oldDate2 = 'last_d'; // Invalid Date! - $classname = 'list-new-plugins'; + $className = 'list-new-plugins'; $headline = false; } else { - $classname = 'list-new-plugins'; + $className = 'list-new-plugins'; $headline = false; } if ($_CA_CONF['personalcalendars'] == 0) { @@ -182,7 +177,7 @@ function phpblock_calendar($help = '', $title = '') } while ($theRow <= $numRows && $numDays < $range) { - // Retreive the next event, and format the start date. + // Retrieve the next event, and format the start date. $theEvent = DB_fetchArray($allEvents); if (SEC_hasAccess($theEvent['owner_id'], $theEvent['group_id'], @@ -194,11 +189,11 @@ function phpblock_calendar($help = '', $title = '') if (!$headline) { if ($z == 2) { if ($numRows > 0) { - $retval .= '' . $LANG_CAL_1[23] . ''; + $retval .= '' . $LANG_CAL_1[23] . ''; } } else { - if ($totalrows > 0) { - $retval .= '' . $LANG_CAL_1[24] . ''; + if ($totalRows > 0) { + $retval .= '' . $LANG_CAL_1[24] . ''; } } $headline = true; @@ -208,13 +203,13 @@ function phpblock_calendar($help = '', $title = '') $startDate = $theEvent['datestart']; $theTime1 = strtotime($startDate); $dayName1 = strftime('%A', $theTime1); - $abbrDate1 = strftime($dateonly, $theTime1); + list($abbrDate1,) = COM_getUserDateTimeFormat($theTime1, 'dateonly'); // End Date strings... $endDate = $theEvent['dateend']; $theTime2 = strtotime($endDate); $dayName2 = strftime('%A', $theTime2); - $abbrDate2 = strftime($dateonly, $theTime2); + list($abbrDate2,) = COM_getUserDateTimeFormat($theTime2, 'dateonly'); $todaysEvent = false; if (date('Ymd', $theTime1) == date('Ymd', time())) { @@ -233,8 +228,8 @@ function phpblock_calendar($help = '', $title = '') $numDays++; if ($numDays < $range) { - if (!empty($newevents)) { - $retval .= COM_makeList($newevents, $classname); + if (!empty($newEvents)) { + $retval .= COM_makeList($newEvents, $className); } if ($skipFirstBreak) { $skipFirstBreak = false; @@ -255,36 +250,36 @@ function phpblock_calendar($help = '', $title = '') $retval .= ''; } } - $newevents = array(); + $newEvents = array(); } // Now display this event record. if ($numDays < $range) { // Display the url now! - $newevent_url = $_CONF['site_url'] + $newEventUrl = $_CONF['site_url'] . '/calendar/event.php?'; if ($z == 2) { - $newevent_url .= 'mode=personal&'; + $newEventUrl .= 'mode=personal&'; } - $newevent_url .= 'eid=' . $theEvent['eid']; + $newEventUrl .= 'eid=' . $theEvent['eid']; $attr = array(); if ($todaysEvent) { $attr = array('class' => $todaysClassName); } - $newevent = COM_createLink( + $newEvent = COM_createLink( stripslashes($theEvent['title']), - $newevent_url, + $newEventUrl, $attr ); - $newevents[] = $newevent; + $newEvents[] = $newEvent; } - if (!empty($newevents)) { - $retval .= COM_makeList($newevents, $classname); - $newevents = array(); + if (!empty($newEvents)) { + $retval .= COM_makeList($newEvents, $className); + $newEvents = array(); } } $theRow++; @@ -418,7 +413,7 @@ function plugin_savesubmission_calendar($A) $retval = ''; - $A['title'] = strip_tags(COM_checkWords($A['title'])); + $A['title'] = GLText::stripTags(COM_checkWords($A['title'])); $A['title'] = GLText::remove4byteUtf8Chars($A['title']); $A['start_year'] = COM_applyFilter($A['start_year'], true); $A['start_month'] = COM_applyFilter($A['start_month'], true); @@ -507,13 +502,13 @@ function plugin_savesubmission_calendar($A) // Remove any autotags the user doesn't have permission to use $A['description'] = PLG_replaceTags($A['description'], '', true); $A['description'] = DB_escapeString(htmlspecialchars(GLText::remove4byteUtf8Chars(COM_checkWords($A['description'])))); - $A['address1'] = DB_escapeString(GLText::remove4byteUtf8Chars(strip_tags(COM_checkWords($A['address1'])))); - $A['address2'] = DB_escapeString(GLText::remove4byteUtf8Chars(strip_tags(COM_checkWords($A['address2'])))); - $A['city'] = DB_escapeString(GLText::remove4byteUtf8Chars(strip_tags(COM_checkWords($A['city'])))); - $A['zipcode'] = DB_escapeString(GLText::remove4byteUtf8Chars(strip_tags(COM_checkWords($A['zipcode'])))); - $A['state'] = DB_escapeString(GLText::remove4byteUtf8Chars(strip_tags(COM_checkWords($A['state'])))); - $A['location'] = DB_escapeString(GLText::remove4byteUtf8Chars(strip_tags(COM_checkWords($A['location'])))); - $A['event_type'] = DB_escapeString(GLText::remove4byteUtf8Chars(strip_tags(COM_checkWords($A['event_type'])))); + $A['address1'] = DB_escapeString(GLText::remove4byteUtf8Chars(GLText::stripTags(COM_checkWords($A['address1'])))); + $A['address2'] = DB_escapeString(GLText::remove4byteUtf8Chars(GLText::stripTags(COM_checkWords($A['address2'])))); + $A['city'] = DB_escapeString(GLText::remove4byteUtf8Chars(GLText::stripTags(COM_checkWords($A['city'])))); + $A['zipcode'] = DB_escapeString(GLText::remove4byteUtf8Chars(GLText::stripTags(COM_checkWords($A['zipcode'])))); + $A['state'] = DB_escapeString(GLText::remove4byteUtf8Chars(GLText::stripTags(COM_checkWords($A['state'])))); + $A['location'] = DB_escapeString(GLText::remove4byteUtf8Chars(GLText::stripTags(COM_checkWords($A['location'])))); + $A['event_type'] = DB_escapeString(GLText::remove4byteUtf8Chars(GLText::stripTags(COM_checkWords($A['event_type'])))); $A['title'] = DB_escapeString(GLText::remove4byteUtf8Chars($A['title'])); $A['url'] = DB_escapeString(COM_sanitizeUrl($A['url'])); @@ -655,7 +650,7 @@ function plugin_getheadercode_calendar() global $_SCRIPTS; // use the CSS only if we are on the plugin's pages - if (substr_count($_SERVER['PHP_SELF'], '/calendar/') > 0) { + if (substr_count(Geeklog\Input::server('PHP_SELF'), '/calendar/') > 0) { $_SCRIPTS->setCSSFile('calendar', CTL_plugin_themeFindFile('calendar', 'css', 'style.css'), false); } } @@ -667,42 +662,29 @@ function plugin_submit_calendar($mode = 'master') { global $_CONF, $_CA_CONF, $LANG_CAL_1, $LANG12, $MESSAGE, $_SCRIPTS; - if (isset($_POST['calendar_type'])) { - $mode = $_POST['calendar_type']; + $mode = Geeklog\Input::fPost('calendar_type', null); + + if ($mode !== null) { if (!in_array($mode, array('master', 'personal', 'quickadd'))) { $mode = 'master'; } - } elseif (isset($_REQUEST['mode']) && ($_REQUEST['mode'] == 'personal')) { + } elseif (Geeklog\Input::fRequest('mode') === 'personal') { $mode = 'personal'; } - if (($_CA_CONF['personalcalendars'] == 1) && ($mode == 'quickadd')) { + if (($_CA_CONF['personalcalendars'] == 1) && ($mode === 'quickadd')) { // quick add form, just save it. $display = plugin_savesubmission_calendar($_POST); return $display; } elseif (SEC_hasRights('calendar.edit') && ($mode != 'personal')) { // admin posts non-personal, go to editor - if (isset($_REQUEST['year'])) { - $year = COM_applyFilter($_REQUEST['year'], true); - } else { - $year = date('Y', time()); - } - if (isset($_REQUEST['month'])) { - $month = COM_applyFilter($_REQUEST['month'], true); - } else { - $month = date('m', time()); - } - if (isset($_REQUEST['day'])) { - $day = COM_applyFilter($_REQUEST['day'], true); - } else { - $day = date('d', time()); - } - if (isset($_REQUEST['hour'])) { - $hour = COM_applyFilter($_REQUEST['hour'], true); - } else { - $hour = date('H', time()); - } + $currentTime = time(); + $year = (int) Geeklog\Input::fRequest('year', date('Y', $currentTime)); + $month = (int) Geeklog\Input::fRequest('month', date('m', $currentTime)); + $day = (int) Geeklog\Input::fRequest('day', date('d', $currentTime)); + $hour = (int) Geeklog\Input::fRequest('hour', date('H', $currentTime)); + $startat = ''; if ($year > 0) { $startat = '&datestart=' @@ -717,8 +699,7 @@ function plugin_submit_calendar($mode = 'master') // otherwise non-admin or admin-personal. do personal form or public submission. // Loads jQuery UI datepicker and timepicker-addon - $_SCRIPTS->setJavaScriptLibrary('jquery.ui.slider'); - $_SCRIPTS->setJavaScriptLibrary('jquery.ui.datepicker'); + $_SCRIPTS->setJavaScriptLibrary('jquery-ui'); // Require slider and date picker $_SCRIPTS->setJavaScriptLibrary('jquery-ui-i18n'); $_SCRIPTS->setJavaScriptLibrary('jquery-ui-timepicker-addon'); $_SCRIPTS->setJavaScriptLibrary('jquery-ui-timepicker-addon-i18n'); @@ -889,11 +870,7 @@ function CALENDAR_listOld() global $_CONF, $_TABLES, $LANG_ADMIN, $LANG_CAL_ADMIN, $LANG_ACCESS, $LANG01, $_IMAGE_TYPE; - if (isset($_REQUEST['usr_time'])) { - $usr_time = $_REQUEST['usr_time']; - } else { - $usr_time = 12; - } + $usr_time = (int) Geeklog\Input::fRequest('usr_time', 12); require_once $_CONF['path_system'] . 'lib-admin.php'; @@ -979,18 +956,14 @@ function CALENDAR_deleteOld() global $_CONF, $LANG_CAL_ADMIN; $msg = ''; - $event_list = array(); - if (isset($_POST['delitem'])) { - $event_list = $_POST['delitem']; - } + $event_list = Geeklog\Input::fPost('delitem', array()); - if (count($event_list) == 0) { + if (count($event_list) === 0) { $msg = $LANG_CAL_ADMIN[33] . ""; } $c = 0; if (isset($event_list) && is_array($event_list)) { foreach ($event_list as $delitem) { - $delitem = COM_applyFilter($delitem); if (!CALENDAR_deleteEvent($delitem)) { $msg .= "{$LANG_CAL_ADMIN[34]} $delitem $LANG_CAL_ADMIN[35]}\n"; } else { @@ -1084,30 +1057,28 @@ function CALENDAR_sendNotification($table, $A) $title = stripslashes($A['title']); $description = stripslashes($A['description']); - - $mailbody = "$LANG09[16]: $title\n" - . "$LANG09[17]: " . strftime($_CONF['date'], - strtotime($A['datestart'] . ' ' . $A['timestart'])); + list($dateTime, ) = COM_getUserDateTimeFormat(strtotime($A['datestart'] . ' ' . $A['timestart']), 'date'); + $mailBody = sprintf("%s: %s\n%s: %s", $LANG09[16], $title, $LANG09[17], $dateTime); if ($A['allday']) { - $mailbody .= ' (' . $LANG_CAL_2[26] . ')'; + $mailBody .= ' (' . $LANG_CAL_2[26] . ')'; } - $mailbody .= "\n"; - if (!empty($A['url']) && ($A['url'] != 'http://')) { - $mailbody .= "$LANG09[33]: <" . $A['url'] . ">\n"; + $mailBody .= "\n"; + if (!empty($A['url']) && ($A['url'] !== 'http://') && ($A['url'] !== 'https://')) { + $mailBody .= "$LANG09[33]: <" . $A['url'] . ">\n"; } - $mailbody .= "\n" . $description . "\n\n"; + $mailBody .= "\n" . $description . "\n\n"; if ($table == $_TABLES['eventsubmission']) { - $mailbody .= "$LANG01[10] <{$_CONF['site_admin_url']}/moderation.php>\n\n"; + $mailBody .= "$LANG01[10] <{$_CONF['site_admin_url']}/moderation.php>\n\n"; } else { - $mailbody .= "$LANG_CAL_1[12] <{$_CONF['site_url']}/calendar/event.php?eid={$A['eid']}>\n\n"; + $mailBody .= "$LANG_CAL_1[12] <{$_CONF['site_url']}/calendar/event.php?eid={$A['eid']}>\n\n"; } - $mailsubject = $_CONF['site_name'] . ' ' . $LANG_CAL_2[43]; + $mailSubject = $_CONF['site_name'] . ' ' . $LANG_CAL_2[43]; - $mailbody .= "\n------------------------------\n"; - $mailbody .= "\n$LANG08[34]\n"; - $mailbody .= "\n------------------------------\n"; + $mailBody .= "\n------------------------------\n"; + $mailBody .= "\n$LANG08[34]\n"; + $mailBody .= "\n------------------------------\n"; - COM_mail($_CONF['site_mail'], $mailsubject, $mailbody); + COM_mail($_CONF['site_mail'], $mailSubject, $mailBody); } /** diff --git a/plugins/calendar/install_defaults.php b/plugins/calendar/install_defaults.php index 7626d06de..bb4878e75 100644 --- a/plugins/calendar/install_defaults.php +++ b/plugins/calendar/install_defaults.php @@ -37,7 +37,7 @@ // // $Id: install_defaults.php,v 1.8 2008/09/21 08:37:08 dhaun Exp $ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'install_defaults.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/calendar/language/czech.php b/plugins/calendar/language/czech.php index 163532527..b2a44446e 100644 --- a/plugins/calendar/language/czech.php +++ b/plugins/calendar/language/czech.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/czech_utf-8.php b/plugins/calendar/language/czech_utf-8.php index eee5719ab..0f3621d6a 100644 --- a/plugins/calendar/language/czech_utf-8.php +++ b/plugins/calendar/language/czech_utf-8.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/danish.php b/plugins/calendar/language/danish.php index 679bef513..e0930bda3 100644 --- a/plugins/calendar/language/danish.php +++ b/plugins/calendar/language/danish.php @@ -250,4 +250,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/danish_utf-8.php b/plugins/calendar/language/danish_utf-8.php index 43f334942..9ce3274ae 100644 --- a/plugins/calendar/language/danish_utf-8.php +++ b/plugins/calendar/language/danish_utf-8.php @@ -250,4 +250,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/dutch.php b/plugins/calendar/language/dutch.php index d718843f1..e58ddc9e2 100644 --- a/plugins/calendar/language/dutch.php +++ b/plugins/calendar/language/dutch.php @@ -249,4 +249,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/dutch_utf-8.php b/plugins/calendar/language/dutch_utf-8.php index 3460628ec..330c38af7 100644 --- a/plugins/calendar/language/dutch_utf-8.php +++ b/plugins/calendar/language/dutch_utf-8.php @@ -249,4 +249,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/estonian.php b/plugins/calendar/language/estonian.php index 1d174a664..afdebda4d 100644 --- a/plugins/calendar/language/estonian.php +++ b/plugins/calendar/language/estonian.php @@ -252,4 +252,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/estonian_utf-8.php b/plugins/calendar/language/estonian_utf-8.php index 7c6868acb..5a41fbd08 100644 --- a/plugins/calendar/language/estonian_utf-8.php +++ b/plugins/calendar/language/estonian_utf-8.php @@ -252,4 +252,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/french_canada.php b/plugins/calendar/language/french_canada.php index c083d75a8..926823fcf 100644 --- a/plugins/calendar/language/french_canada.php +++ b/plugins/calendar/language/french_canada.php @@ -251,4 +251,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/french_canada_utf-8.php b/plugins/calendar/language/french_canada_utf-8.php index 7c8fdace7..8de7dee0f 100644 --- a/plugins/calendar/language/french_canada_utf-8.php +++ b/plugins/calendar/language/french_canada_utf-8.php @@ -251,4 +251,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/french_france.php b/plugins/calendar/language/french_france.php index 4e44f1347..8eda8f4b9 100644 --- a/plugins/calendar/language/french_france.php +++ b/plugins/calendar/language/french_france.php @@ -252,4 +252,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/french_france_utf-8.php b/plugins/calendar/language/french_france_utf-8.php index 5766a360b..05f09745c 100644 --- a/plugins/calendar/language/french_france_utf-8.php +++ b/plugins/calendar/language/french_france_utf-8.php @@ -252,4 +252,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/german.php b/plugins/calendar/language/german.php index 21e7e3b4a..92e3a7a9a 100644 --- a/plugins/calendar/language/german.php +++ b/plugins/calendar/language/german.php @@ -249,4 +249,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/german_formal.php b/plugins/calendar/language/german_formal.php index 31ac79ddf..a71cfb06e 100644 --- a/plugins/calendar/language/german_formal.php +++ b/plugins/calendar/language/german_formal.php @@ -249,4 +249,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/german_formal_utf-8.php b/plugins/calendar/language/german_formal_utf-8.php index 8897318da..6fcc361f4 100644 --- a/plugins/calendar/language/german_formal_utf-8.php +++ b/plugins/calendar/language/german_formal_utf-8.php @@ -249,4 +249,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/german_utf-8.php b/plugins/calendar/language/german_utf-8.php index 224acdc74..916e9fec6 100644 --- a/plugins/calendar/language/german_utf-8.php +++ b/plugins/calendar/language/german_utf-8.php @@ -249,4 +249,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/hebrew_utf-8.php b/plugins/calendar/language/hebrew_utf-8.php index 5e2676c6d..70d526a2a 100644 --- a/plugins/calendar/language/hebrew_utf-8.php +++ b/plugins/calendar/language/hebrew_utf-8.php @@ -249,4 +249,3 @@ 15 => array('讻讜诇诐' => 'all', '讚祝 讛讘讬转 讘诇讘讚' => 'homeonly', '讘讞讬专转 谞讜砖讗讬诐' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/italian.php b/plugins/calendar/language/italian.php index 8fbd8401f..c159cb3b9 100644 --- a/plugins/calendar/language/italian.php +++ b/plugins/calendar/language/italian.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/italian_utf-8.php b/plugins/calendar/language/italian_utf-8.php index 281a1c1e3..fa7519fb0 100644 --- a/plugins/calendar/language/italian_utf-8.php +++ b/plugins/calendar/language/italian_utf-8.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/japanese_utf-8.php b/plugins/calendar/language/japanese_utf-8.php index 09b4831f0..bc2bb44fa 100644 --- a/plugins/calendar/language/japanese_utf-8.php +++ b/plugins/calendar/language/japanese_utf-8.php @@ -256,4 +256,3 @@ 15 => array('銇欍伖銇' => 'all', '銉涖兗銉犮儦銉笺偢銇伩' => 'homeonly', '瑭遍銈掗伕鎶炪仚銈' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/korean.php b/plugins/calendar/language/korean.php index 07ac91b69..caed60e16 100644 --- a/plugins/calendar/language/korean.php +++ b/plugins/calendar/language/korean.php @@ -251,4 +251,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/korean_utf-8.php b/plugins/calendar/language/korean_utf-8.php index 8bb4f7442..0482c451d 100644 --- a/plugins/calendar/language/korean_utf-8.php +++ b/plugins/calendar/language/korean_utf-8.php @@ -251,4 +251,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/russian.php b/plugins/calendar/language/russian.php index 64819c29d..3fed2cb5a 100644 --- a/plugins/calendar/language/russian.php +++ b/plugins/calendar/language/russian.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/russian_utf-8.php b/plugins/calendar/language/russian_utf-8.php index 15293a62f..52335abf1 100644 --- a/plugins/calendar/language/russian_utf-8.php +++ b/plugins/calendar/language/russian_utf-8.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/slovak.php b/plugins/calendar/language/slovak.php index 21f4f8729..c7ea381d4 100644 --- a/plugins/calendar/language/slovak.php +++ b/plugins/calendar/language/slovak.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/slovak_utf-8.php b/plugins/calendar/language/slovak_utf-8.php index 18befd2a6..8b2eabbd4 100644 --- a/plugins/calendar/language/slovak_utf-8.php +++ b/plugins/calendar/language/slovak_utf-8.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/slovenian.php b/plugins/calendar/language/slovenian.php index adf3ce8e2..219151221 100644 --- a/plugins/calendar/language/slovenian.php +++ b/plugins/calendar/language/slovenian.php @@ -252,4 +252,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/slovenian_utf-8.php b/plugins/calendar/language/slovenian_utf-8.php index 4ab617634..579aac748 100644 --- a/plugins/calendar/language/slovenian_utf-8.php +++ b/plugins/calendar/language/slovenian_utf-8.php @@ -252,4 +252,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/spanish.php b/plugins/calendar/language/spanish.php index 6c992c44f..369d23647 100644 --- a/plugins/calendar/language/spanish.php +++ b/plugins/calendar/language/spanish.php @@ -253,4 +253,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/spanish_utf-8.php b/plugins/calendar/language/spanish_utf-8.php index 75d19a6ef..422a01bd3 100644 --- a/plugins/calendar/language/spanish_utf-8.php +++ b/plugins/calendar/language/spanish_utf-8.php @@ -253,4 +253,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/ukrainian.php b/plugins/calendar/language/ukrainian.php index 42d2c8901..f73aa5dbc 100644 --- a/plugins/calendar/language/ukrainian.php +++ b/plugins/calendar/language/ukrainian.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/ukrainian_koi8-u.php b/plugins/calendar/language/ukrainian_koi8-u.php index 0f7041066..42c5fecb3 100644 --- a/plugins/calendar/language/ukrainian_koi8-u.php +++ b/plugins/calendar/language/ukrainian_koi8-u.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/calendar/language/ukrainian_utf-8.php b/plugins/calendar/language/ukrainian_utf-8.php index e24d7917d..874569e1f 100644 --- a/plugins/calendar/language/ukrainian_utf-8.php +++ b/plugins/calendar/language/ukrainian_utf-8.php @@ -248,4 +248,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/links/autoinstall.php b/plugins/links/autoinstall.php index a6b1889fa..089f9622c 100644 --- a/plugins/links/autoinstall.php +++ b/plugins/links/autoinstall.php @@ -125,7 +125,7 @@ function plugin_load_configuration_links($pi_name) * We're inserting our default data here since it depends on other stuff that * has to happen first ... * -* @return boolean true = proceed with install, false = an error occured +* @return boolean true = proceed with install, false = an error occurred * */ function plugin_postinstall_links($pi_name) diff --git a/plugins/links/configuration_validation.php b/plugins/links/configuration_validation.php index ee95ac11c..63a67c68e 100644 --- a/plugins/links/configuration_validation.php +++ b/plugins/links/configuration_validation.php @@ -30,7 +30,7 @@ // | | // +---------------------------------------------------------------------------+ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'configuration_validation.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/links/functions.inc b/plugins/links/functions.inc index b7bf60b5e..1059833a6 100644 --- a/plugins/links/functions.inc +++ b/plugins/links/functions.inc @@ -42,7 +42,7 @@ * @package Links */ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'functions.inc') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own.'); } @@ -1032,10 +1032,7 @@ function plugin_submit_links() $linkform->set_var('lang_title', $LANG12[10]); $linkform->set_var('lang_link', $LANG_LINKS_SUBMIT[2]); $linkform->set_var('lang_category', $LANG_LINKS_SUBMIT[3]); - $category = ''; - if (isset($_REQUEST['cid'])) { - $category = $_REQUEST['cid']; - } + $category = Geeklog\Input::request('cid', ''); $linkform->set_var('link_category_options', links_select_box(2, $category)); $linkform->set_var('lang_description', $LANG12[15]); $linkform->set_var('lang_htmlnotallowed', $LANG12[35]); @@ -1088,7 +1085,7 @@ function plugin_save_submit_links($A) return $retval; } - $A['cid'] = strip_tags(COM_stripslashes($A['categorydd'])); + $A['cid'] = GLText::stripTags(COM_stripslashes($A['categorydd'])); $validcat = false; if (!empty($A['cid'])) { @@ -1111,7 +1108,7 @@ function plugin_save_submit_links($A) // Remove any autotags the user doesn't have permission to use $A['description'] = PLG_replaceTags($A['description'], '', true); $A['description'] = DB_escapeString(htmlspecialchars(COM_checkWords($A['description']))); - $A['title'] = DB_escapeString(strip_tags(COM_checkWords($A['title']))); + $A['title'] = DB_escapeString(GLText::stripTags(COM_checkWords($A['title']))); $A['url'] = DB_escapeString(COM_sanitizeUrl($A['url'])); $A['lid'] = DB_escapeString(COM_makeSid()); diff --git a/plugins/links/install_defaults.php b/plugins/links/install_defaults.php index c41ef29ba..a5da5c13d 100644 --- a/plugins/links/install_defaults.php +++ b/plugins/links/install_defaults.php @@ -42,7 +42,7 @@ * @package Links */ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'install_defaults.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/links/language/chinese_simplified_utf-8.php b/plugins/links/language/chinese_simplified_utf-8.php index 3d7583bf7..e20b2571e 100644 --- a/plugins/links/language/chinese_simplified_utf-8.php +++ b/plugins/links/language/chinese_simplified_utf-8.php @@ -273,4 +273,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/chinese_traditional_utf-8.php b/plugins/links/language/chinese_traditional_utf-8.php index f2465074a..0f40681d3 100644 --- a/plugins/links/language/chinese_traditional_utf-8.php +++ b/plugins/links/language/chinese_traditional_utf-8.php @@ -273,4 +273,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/czech.php b/plugins/links/language/czech.php index ad360f06b..e8af63301 100644 --- a/plugins/links/language/czech.php +++ b/plugins/links/language/czech.php @@ -270,4 +270,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/czech_utf-8.php b/plugins/links/language/czech_utf-8.php index b74d13d64..5c6d3e212 100644 --- a/plugins/links/language/czech_utf-8.php +++ b/plugins/links/language/czech_utf-8.php @@ -270,4 +270,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/dutch.php b/plugins/links/language/dutch.php index 5bedf95ac..2c62b999f 100644 --- a/plugins/links/language/dutch.php +++ b/plugins/links/language/dutch.php @@ -272,4 +272,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/dutch_utf-8.php b/plugins/links/language/dutch_utf-8.php index 5bedf95ac..2c62b999f 100644 --- a/plugins/links/language/dutch_utf-8.php +++ b/plugins/links/language/dutch_utf-8.php @@ -272,4 +272,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/estonian.php b/plugins/links/language/estonian.php index f19c457db..95c6570c2 100644 --- a/plugins/links/language/estonian.php +++ b/plugins/links/language/estonian.php @@ -274,4 +274,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/estonian_utf-8.php b/plugins/links/language/estonian_utf-8.php index 6ee1a28cb..401559b24 100644 --- a/plugins/links/language/estonian_utf-8.php +++ b/plugins/links/language/estonian_utf-8.php @@ -274,4 +274,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/french_canada.php b/plugins/links/language/french_canada.php index 575708910..7739afea1 100644 --- a/plugins/links/language/french_canada.php +++ b/plugins/links/language/french_canada.php @@ -273,4 +273,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/french_canada_utf-8.php b/plugins/links/language/french_canada_utf-8.php index f830b5fc3..699801a77 100644 --- a/plugins/links/language/french_canada_utf-8.php +++ b/plugins/links/language/french_canada_utf-8.php @@ -273,4 +273,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/french_france.php b/plugins/links/language/french_france.php index 3e0e9cdd4..74661b608 100644 --- a/plugins/links/language/french_france.php +++ b/plugins/links/language/french_france.php @@ -273,4 +273,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/french_france_utf-8.php b/plugins/links/language/french_france_utf-8.php index 5f74055da..c5cc58a8f 100644 --- a/plugins/links/language/french_france_utf-8.php +++ b/plugins/links/language/french_france_utf-8.php @@ -273,4 +273,3 @@ 13 => array('Pas d\'acc猫s' => 0, 'Utiliser' => 2) ); -?> diff --git a/plugins/links/language/german.php b/plugins/links/language/german.php index 286ba1290..4d38c7808 100644 --- a/plugins/links/language/german.php +++ b/plugins/links/language/german.php @@ -272,4 +272,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/german_formal.php b/plugins/links/language/german_formal.php index 81a0ceab6..6286ade2c 100644 --- a/plugins/links/language/german_formal.php +++ b/plugins/links/language/german_formal.php @@ -272,4 +272,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/german_formal_utf-8.php b/plugins/links/language/german_formal_utf-8.php index 1b364db33..178950ce6 100644 --- a/plugins/links/language/german_formal_utf-8.php +++ b/plugins/links/language/german_formal_utf-8.php @@ -272,4 +272,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/german_utf-8.php b/plugins/links/language/german_utf-8.php index 4c32e98e6..7830367eb 100644 --- a/plugins/links/language/german_utf-8.php +++ b/plugins/links/language/german_utf-8.php @@ -272,4 +272,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/hebrew_utf-8.php b/plugins/links/language/hebrew_utf-8.php index 5ba232c5c..60b3542c2 100644 --- a/plugins/links/language/hebrew_utf-8.php +++ b/plugins/links/language/hebrew_utf-8.php @@ -272,4 +272,3 @@ 13 => array('讗讬谉 讙讬砖讛' => 0, '诪讜转专 诇砖讬诪讜砖' => 2) ); -?> diff --git a/plugins/links/language/italian.php b/plugins/links/language/italian.php index d49072d9b..b772c95dd 100644 --- a/plugins/links/language/italian.php +++ b/plugins/links/language/italian.php @@ -270,4 +270,3 @@ 13 => array('Nessun Accesso' => 0, 'Utilizzo' => 2) ); -?> diff --git a/plugins/links/language/italian_utf-8.php b/plugins/links/language/italian_utf-8.php index 5454b8a5a..6410a2d8e 100644 --- a/plugins/links/language/italian_utf-8.php +++ b/plugins/links/language/italian_utf-8.php @@ -270,4 +270,3 @@ 13 => array('Nessun Accesso' => 0, 'Utilizzo' => 2) ); -?> diff --git a/plugins/links/language/japanese_utf-8.php b/plugins/links/language/japanese_utf-8.php index 1735c3c4c..e2b417fcc 100644 --- a/plugins/links/language/japanese_utf-8.php +++ b/plugins/links/language/japanese_utf-8.php @@ -278,4 +278,3 @@ 13 => array('銈€偗銈汇偣涓嶅彲' => 0, '鍒╃敤銇欍倠' => 2) ); -?> diff --git a/plugins/links/language/korean.php b/plugins/links/language/korean.php index c9234d2fa..a1cd22bce 100644 --- a/plugins/links/language/korean.php +++ b/plugins/links/language/korean.php @@ -274,4 +274,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/korean_utf-8.php b/plugins/links/language/korean_utf-8.php index 1b5d89ba9..4bb7f96ab 100644 --- a/plugins/links/language/korean_utf-8.php +++ b/plugins/links/language/korean_utf-8.php @@ -274,4 +274,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/polish.php b/plugins/links/language/polish.php index 4899b891a..01e82c2dd 100644 --- a/plugins/links/language/polish.php +++ b/plugins/links/language/polish.php @@ -270,4 +270,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/polish_utf-8.php b/plugins/links/language/polish_utf-8.php index d52e56ba9..e45c3a4e2 100644 --- a/plugins/links/language/polish_utf-8.php +++ b/plugins/links/language/polish_utf-8.php @@ -270,4 +270,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/russian.php b/plugins/links/language/russian.php index a7669228b..fb1739229 100644 --- a/plugins/links/language/russian.php +++ b/plugins/links/language/russian.php @@ -270,4 +270,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/russian_utf-8.php b/plugins/links/language/russian_utf-8.php index c9245e1c6..95c55598c 100644 --- a/plugins/links/language/russian_utf-8.php +++ b/plugins/links/language/russian_utf-8.php @@ -270,4 +270,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/slovenian.php b/plugins/links/language/slovenian.php index 235fa7625..f22c1c329 100644 --- a/plugins/links/language/slovenian.php +++ b/plugins/links/language/slovenian.php @@ -274,4 +274,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/slovenian_utf-8.php b/plugins/links/language/slovenian_utf-8.php index 3d1f1435b..4cc6be3ba 100644 --- a/plugins/links/language/slovenian_utf-8.php +++ b/plugins/links/language/slovenian_utf-8.php @@ -274,4 +274,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/spanish.php b/plugins/links/language/spanish.php index 8de83681d..ad0f48f35 100644 --- a/plugins/links/language/spanish.php +++ b/plugins/links/language/spanish.php @@ -275,4 +275,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/spanish_utf-8.php b/plugins/links/language/spanish_utf-8.php index da8b3371c..2f2dfa462 100644 --- a/plugins/links/language/spanish_utf-8.php +++ b/plugins/links/language/spanish_utf-8.php @@ -275,4 +275,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/ukrainian.php b/plugins/links/language/ukrainian.php index 010de64ea..e9d65da7d 100644 --- a/plugins/links/language/ukrainian.php +++ b/plugins/links/language/ukrainian.php @@ -270,4 +270,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/ukrainian_koi8-u.php b/plugins/links/language/ukrainian_koi8-u.php index d9174d28c..25e51bcc3 100644 --- a/plugins/links/language/ukrainian_koi8-u.php +++ b/plugins/links/language/ukrainian_koi8-u.php @@ -270,4 +270,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/links/language/ukrainian_utf-8.php b/plugins/links/language/ukrainian_utf-8.php index 9c22d373f..e939b7308 100644 --- a/plugins/links/language/ukrainian_utf-8.php +++ b/plugins/links/language/ukrainian_utf-8.php @@ -270,4 +270,3 @@ 13 => array('No access' => 0, 'Use' => 2) ); -?> diff --git a/plugins/polls/configuration_validation.php b/plugins/polls/configuration_validation.php index fe321cb16..fd6729189 100644 --- a/plugins/polls/configuration_validation.php +++ b/plugins/polls/configuration_validation.php @@ -30,7 +30,7 @@ // | | // +---------------------------------------------------------------------------+ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'configuration_validation.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/polls/functions.inc b/plugins/polls/functions.inc index 3ce7aa6a0..0085d2e99 100644 --- a/plugins/polls/functions.inc +++ b/plugins/polls/functions.inc @@ -40,7 +40,7 @@ * @package Polls */ -if (stripos($_SERVER['PHP_SELF'], 'functions.inc') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own.'); } @@ -516,11 +516,7 @@ function POLLS_pollVote($pid, $showall = true, $displaytype = 0, $order = '', $m $poll->set_var('edit_icon', $editlink); } - if (array_key_exists('aid', $_POST)) { - $aid = $_POST['aid']; - } else { - $aid = array(); - } + $aid = Geeklog\Input::fPost('aid', array()); for ($j = 0; $j < $nquestions; $j++) { $Q = DB_fetchArray($questions); diff --git a/plugins/polls/install_defaults.php b/plugins/polls/install_defaults.php index 8b1ecf912..948fbc6df 100644 --- a/plugins/polls/install_defaults.php +++ b/plugins/polls/install_defaults.php @@ -37,7 +37,7 @@ * @package Polls */ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'install_defaults.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/polls/language/chinese_simplified_utf-8.php b/plugins/polls/language/chinese_simplified_utf-8.php index 7e015db40..c3df034c3 100644 --- a/plugins/polls/language/chinese_simplified_utf-8.php +++ b/plugins/polls/language/chinese_simplified_utf-8.php @@ -193,4 +193,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/chinese_traditional_utf-8.php b/plugins/polls/language/chinese_traditional_utf-8.php index 2a21c7e9d..afade2560 100644 --- a/plugins/polls/language/chinese_traditional_utf-8.php +++ b/plugins/polls/language/chinese_traditional_utf-8.php @@ -193,4 +193,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/dutch.php b/plugins/polls/language/dutch.php index 8e90e052b..932ff04c8 100644 --- a/plugins/polls/language/dutch.php +++ b/plugins/polls/language/dutch.php @@ -192,4 +192,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/dutch_utf-8.php b/plugins/polls/language/dutch_utf-8.php index 8461098ad..1815d6d0a 100644 --- a/plugins/polls/language/dutch_utf-8.php +++ b/plugins/polls/language/dutch_utf-8.php @@ -192,4 +192,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/estonian.php b/plugins/polls/language/estonian.php index f88fb973f..6931009fd 100644 --- a/plugins/polls/language/estonian.php +++ b/plugins/polls/language/estonian.php @@ -194,4 +194,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/estonian_utf-8.php b/plugins/polls/language/estonian_utf-8.php index c645544a9..c4efb4db7 100644 --- a/plugins/polls/language/estonian_utf-8.php +++ b/plugins/polls/language/estonian_utf-8.php @@ -194,4 +194,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/french_canada.php b/plugins/polls/language/french_canada.php index 0e0d7670f..c20044025 100644 --- a/plugins/polls/language/french_canada.php +++ b/plugins/polls/language/french_canada.php @@ -193,4 +193,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/french_canada_utf-8.php b/plugins/polls/language/french_canada_utf-8.php index c3b24d60e..57f3b54d3 100644 --- a/plugins/polls/language/french_canada_utf-8.php +++ b/plugins/polls/language/french_canada_utf-8.php @@ -193,4 +193,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/french_france.php b/plugins/polls/language/french_france.php index ee3e6f496..dc4f7b549 100644 --- a/plugins/polls/language/french_france.php +++ b/plugins/polls/language/french_france.php @@ -193,4 +193,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/french_france_utf-8.php b/plugins/polls/language/french_france_utf-8.php index 783e5691e..0ddc55ad2 100644 --- a/plugins/polls/language/french_france_utf-8.php +++ b/plugins/polls/language/french_france_utf-8.php @@ -193,4 +193,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/german.php b/plugins/polls/language/german.php index 4f6747111..164b8f5e2 100644 --- a/plugins/polls/language/german.php +++ b/plugins/polls/language/german.php @@ -192,4 +192,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/german_formal.php b/plugins/polls/language/german_formal.php index 899874baa..6cbcbdf38 100644 --- a/plugins/polls/language/german_formal.php +++ b/plugins/polls/language/german_formal.php @@ -192,4 +192,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/german_formal_utf-8.php b/plugins/polls/language/german_formal_utf-8.php index ca37853bb..a8547f029 100644 --- a/plugins/polls/language/german_formal_utf-8.php +++ b/plugins/polls/language/german_formal_utf-8.php @@ -192,4 +192,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/german_utf-8.php b/plugins/polls/language/german_utf-8.php index a2048faba..b56e2fa73 100644 --- a/plugins/polls/language/german_utf-8.php +++ b/plugins/polls/language/german_utf-8.php @@ -192,4 +192,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/hebrew_utf-8.php b/plugins/polls/language/hebrew_utf-8.php index 587bc0598..ba8709d95 100644 --- a/plugins/polls/language/hebrew_utf-8.php +++ b/plugins/polls/language/hebrew_utf-8.php @@ -192,4 +192,3 @@ 15 => array('讻讜诇诐' => 'all', '讚祝 讛讘讬转 讘诇讘讚' => 'homeonly', '讘讞讬专转 谞讜砖讗讬诐' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/italian.php b/plugins/polls/language/italian.php index 90d34a33d..8a0d62356 100644 --- a/plugins/polls/language/italian.php +++ b/plugins/polls/language/italian.php @@ -190,4 +190,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/italian_utf-8.php b/plugins/polls/language/italian_utf-8.php index ab9fdca4d..e473a931b 100644 --- a/plugins/polls/language/italian_utf-8.php +++ b/plugins/polls/language/italian_utf-8.php @@ -190,4 +190,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/japanese_utf-8.php b/plugins/polls/language/japanese_utf-8.php index 8e2d9c900..ab0fe8a0b 100644 --- a/plugins/polls/language/japanese_utf-8.php +++ b/plugins/polls/language/japanese_utf-8.php @@ -198,4 +198,3 @@ 15 => array('銇欍伖銇' => 'all', '銉涖兗銉犮儦銉笺偢銇伩' => 'homeonly', '瑭遍銈掗伕鎶炪仚銈' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/korean.php b/plugins/polls/language/korean.php index f7cd07eb6..f31dc2b97 100644 --- a/plugins/polls/language/korean.php +++ b/plugins/polls/language/korean.php @@ -193,4 +193,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/korean_utf-8.php b/plugins/polls/language/korean_utf-8.php index 81ff85fea..6aac78634 100644 --- a/plugins/polls/language/korean_utf-8.php +++ b/plugins/polls/language/korean_utf-8.php @@ -193,4 +193,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/russian.php b/plugins/polls/language/russian.php index af5f92a9d..2ca3314ce 100644 --- a/plugins/polls/language/russian.php +++ b/plugins/polls/language/russian.php @@ -190,4 +190,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/russian_utf-8.php b/plugins/polls/language/russian_utf-8.php index fe4c46c50..8b1b4b1f9 100644 --- a/plugins/polls/language/russian_utf-8.php +++ b/plugins/polls/language/russian_utf-8.php @@ -190,4 +190,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/slovenian.php b/plugins/polls/language/slovenian.php index 79d113978..3ec890405 100644 --- a/plugins/polls/language/slovenian.php +++ b/plugins/polls/language/slovenian.php @@ -194,4 +194,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/slovenian_utf-8.php b/plugins/polls/language/slovenian_utf-8.php index 87567c020..755ee1ae2 100644 --- a/plugins/polls/language/slovenian_utf-8.php +++ b/plugins/polls/language/slovenian_utf-8.php @@ -194,4 +194,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/spanish.php b/plugins/polls/language/spanish.php index 4312ce948..e29009ee6 100644 --- a/plugins/polls/language/spanish.php +++ b/plugins/polls/language/spanish.php @@ -195,4 +195,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/spanish_utf-8.php b/plugins/polls/language/spanish_utf-8.php index d8b9b1d27..99c6dc788 100644 --- a/plugins/polls/language/spanish_utf-8.php +++ b/plugins/polls/language/spanish_utf-8.php @@ -195,4 +195,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/ukrainian.php b/plugins/polls/language/ukrainian.php index d8f6a394e..56f814161 100644 --- a/plugins/polls/language/ukrainian.php +++ b/plugins/polls/language/ukrainian.php @@ -190,4 +190,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/ukrainian_koi8-u.php b/plugins/polls/language/ukrainian_koi8-u.php index fcea10651..75ac60586 100644 --- a/plugins/polls/language/ukrainian_koi8-u.php +++ b/plugins/polls/language/ukrainian_koi8-u.php @@ -190,4 +190,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/polls/language/ukrainian_utf-8.php b/plugins/polls/language/ukrainian_utf-8.php index 66f45c366..255295b82 100644 --- a/plugins/polls/language/ukrainian_utf-8.php +++ b/plugins/polls/language/ukrainian_utf-8.php @@ -190,4 +190,3 @@ 15 => array('All' => 'all', 'Homepage Only' => 'homeonly', 'Select Topics' => 'selectedtopics') ); -?> diff --git a/plugins/spamx/BanUser.Action.class.php b/plugins/spamx/BanUser.Action.class.php index 4eac77a01..9ccc3fc4e 100644 --- a/plugins/spamx/BanUser.Action.class.php +++ b/plugins/spamx/BanUser.Action.class.php @@ -12,7 +12,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'banuser.action.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/BannedUsers.Examine.class.php b/plugins/spamx/BannedUsers.Examine.class.php index bb36b7723..a5a8aa75e 100644 --- a/plugins/spamx/BannedUsers.Examine.class.php +++ b/plugins/spamx/BannedUsers.Examine.class.php @@ -12,7 +12,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'bannedusers.examine.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/BaseAdmin.class.php b/plugins/spamx/BaseAdmin.class.php index d2476a0d9..a2c285ae8 100644 --- a/plugins/spamx/BaseAdmin.class.php +++ b/plugins/spamx/BaseAdmin.class.php @@ -38,14 +38,14 @@ public function __get($name) */ protected function getAction() { - $action = ''; - - if (isset($_GET['action'])) { - $action = $_GET['action']; - } else if (isset($_POST['paction'])) { - $action = $_POST['paction']; - } else if (isset($_POST['delbutton_x']) && isset($_POST['delbutton_y'])) { - $action = 'mass_delete'; + $action = Geeklog\Input::get('action', ''); + + if (empty($action)) { + $action = Geeklog\Input::post('paction', ''); + + if (empty($action) && isset($_POST['delbutton_x'], $_POST['delbutton_y'])) { + $action = 'mass_delete'; + } } return $action; @@ -58,12 +58,10 @@ protected function getAction() */ protected function getEntry() { - $entry = ''; + $entry = Geeklog\Input::fGet('entry', ''); - if (isset($_GET['entry'])) { - $entry = COM_stripslashes($_GET['entry']); - } elseif (isset($_POST['pentry'])) { - $entry = COM_stripslashes($_POST['pentry']); + if (empty($entry)) { + $entry = Geeklog\Input::fPost('pentry', ''); } return $entry; @@ -176,7 +174,7 @@ public function fieldFunction($fieldName, $fieldValue, $A, $iconArr) if ($fieldName === 'id') { $retval = ''; - } else if ($fieldName === 'value') { + } elseif ($fieldName === 'value') { $retval = COM_createLink( $this->escape($fieldValue), $_CONF['site_admin_url'] . '/plugins/spamx/index.php?' @@ -188,7 +186,7 @@ public function fieldFunction($fieldName, $fieldValue, $A, $iconArr) )) ); - } else if ($fieldName === 'regdate') { + } elseif ($fieldName === 'regdate') { // Does nothing for now } @@ -321,7 +319,7 @@ public function display() case 'mass_delete': if (isset($_POST['delitem'])) { - $this->deleteSelectedEntries($_POST['delitem']); + $this->deleteSelectedEntries(Geeklog\Input::post('delitem')); } break; diff --git a/plugins/spamx/BlackList.Examine.class.php b/plugins/spamx/BlackList.Examine.class.php index 99a4cd9bd..86900459e 100644 --- a/plugins/spamx/BlackList.Examine.class.php +++ b/plugins/spamx/BlackList.Examine.class.php @@ -11,7 +11,7 @@ * @subpackage Modules */ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'blacklist.examine.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/DeleteComment.Action.class.php b/plugins/spamx/DeleteComment.Action.class.php index c317e4dd8..3142d7d54 100644 --- a/plugins/spamx/DeleteComment.Action.class.php +++ b/plugins/spamx/DeleteComment.Action.class.php @@ -11,7 +11,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'deletecomment.action.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/EditBlackList.Admin.class.php b/plugins/spamx/EditBlackList.Admin.class.php index 5819fc262..4e1bb8834 100644 --- a/plugins/spamx/EditBlackList.Admin.class.php +++ b/plugins/spamx/EditBlackList.Admin.class.php @@ -12,7 +12,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'editblacklist.admin.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } @@ -67,7 +67,7 @@ public function display() case 'mass_delete': if (isset($_POST['delitem'])) { - $this->deleteSelectedEntries($_POST['delitem']); + $this->deleteSelectedEntries(Geeklog\Input::post('delitem')); } break; diff --git a/plugins/spamx/EditHeader.Admin.class.php b/plugins/spamx/EditHeader.Admin.class.php index 68f0c4698..62b3a0344 100644 --- a/plugins/spamx/EditHeader.Admin.class.php +++ b/plugins/spamx/EditHeader.Admin.class.php @@ -12,7 +12,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'editheader.admin.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } @@ -86,10 +86,10 @@ public function display() $this->deleteEntry($entry); } elseif (($action === $LANG_SX00['addentry']) && SEC_checkToken()) { $entry = ''; - $name = COM_applyFilter($_REQUEST['header-name']); + $name = Geeklog\Input::fRequest('header-name'); $n = explode(':', $name); $name = $n[0]; - $value = $_REQUEST['header-value']; + $value = Geeklog\Input::request('header-value'); if (!empty($name) && !empty($value)) { $entry = $name . ': ' . $value; diff --git a/plugins/spamx/EditIP.Admin.class.php b/plugins/spamx/EditIP.Admin.class.php index 18830bf98..150a46927 100644 --- a/plugins/spamx/EditIP.Admin.class.php +++ b/plugins/spamx/EditIP.Admin.class.php @@ -12,7 +12,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'editip.admin.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/EditIPofURL.Admin.class.php b/plugins/spamx/EditIPofURL.Admin.class.php index 9f9bea08a..7bbf574ea 100644 --- a/plugins/spamx/EditIPofURL.Admin.class.php +++ b/plugins/spamx/EditIPofURL.Admin.class.php @@ -12,7 +12,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'editipofurl.admin.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/EditSFS.Admin.class.php b/plugins/spamx/EditSFS.Admin.class.php index dfaf8778f..701078938 100644 --- a/plugins/spamx/EditSFS.Admin.class.php +++ b/plugins/spamx/EditSFS.Admin.class.php @@ -12,7 +12,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'editsfs.admin.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/Header.Examine.class.php b/plugins/spamx/Header.Examine.class.php index 1af8a1d58..794690e6c 100644 --- a/plugins/spamx/Header.Examine.class.php +++ b/plugins/spamx/Header.Examine.class.php @@ -12,7 +12,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'header.examine.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/IP.Examine.class.php b/plugins/spamx/IP.Examine.class.php index 8e9a2fbf3..af23cdfd1 100644 --- a/plugins/spamx/IP.Examine.class.php +++ b/plugins/spamx/IP.Examine.class.php @@ -11,7 +11,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'ip.examine.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/IPofUrl.Examine.class.php b/plugins/spamx/IPofUrl.Examine.class.php index c7e2f13af..5253c4a99 100644 --- a/plugins/spamx/IPofUrl.Examine.class.php +++ b/plugins/spamx/IPofUrl.Examine.class.php @@ -11,7 +11,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'ipofurl.examine.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/MailAdmin.Action.class.php b/plugins/spamx/MailAdmin.Action.class.php index eaa82442f..61efd2b06 100644 --- a/plugins/spamx/MailAdmin.Action.class.php +++ b/plugins/spamx/MailAdmin.Action.class.php @@ -11,7 +11,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'mailadmin.action.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/MassDelTrackback.Admin.class.php b/plugins/spamx/MassDelTrackback.Admin.class.php index 3200afba4..e57e712e4 100644 --- a/plugins/spamx/MassDelTrackback.Admin.class.php +++ b/plugins/spamx/MassDelTrackback.Admin.class.php @@ -12,7 +12,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'massdeltrackback.admin.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } @@ -47,17 +47,8 @@ public function display() $display = $LANG_SX00['masstb']; - $act = ''; - - if (isset($_POST['action'])) { - $act = COM_applyFilter($_POST['action']); - } - - $lmt = 0; - - if (isset($_POST['limit'])) { - $lmt = COM_applyFilter($_POST['limit'], true); - } + $act = Geeklog\Input::fPost('action', ''); + $lmt = (int) Geeklog\Input::fPost('limit', 0); if (($act == $LANG_SX00['deletespam']) && ($lmt > 0) && SEC_checkToken() diff --git a/plugins/spamx/MassDelete.Admin.class.php b/plugins/spamx/MassDelete.Admin.class.php index 6a7b274e9..93b0623d4 100644 --- a/plugins/spamx/MassDelete.Admin.class.php +++ b/plugins/spamx/MassDelete.Admin.class.php @@ -11,7 +11,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'massdelete.admin.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } @@ -46,17 +46,8 @@ public function display() global $_CONF, $_TABLES, $LANG_SX00; $display = $LANG_SX00['masshead']; - $act = ''; - - if (isset($_POST['action'])) { - $act = COM_applyFilter($_POST['action']); - } - - $lmt = 0; - - if (isset($_POST['limit'])) { - $lmt = COM_applyFilter($_POST['limit'], true); - } + $act = Geeklog\Input::fPost('action', ''); + $lmt = (int) Geeklog\Input::fPost('limit', 0); if (($act === $LANG_SX00['deletespam']) && ($lmt > 0) && SEC_checkToken() diff --git a/plugins/spamx/SFS.Examine.class.php b/plugins/spamx/SFS.Examine.class.php index ee53aa2ca..9fbc2b44d 100644 --- a/plugins/spamx/SFS.Examine.class.php +++ b/plugins/spamx/SFS.Examine.class.php @@ -7,7 +7,7 @@ * Licensed under the GNU General Public License */ -if (stripos($_SERVER['PHP_SELF'], 'SFS.Examine.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die ('This file can not be used on its own!'); } diff --git a/plugins/spamx/SFS.Misc.class.php b/plugins/spamx/SFS.Misc.class.php index 86b55ade0..257161b90 100644 --- a/plugins/spamx/SFS.Misc.class.php +++ b/plugins/spamx/SFS.Misc.class.php @@ -14,7 +14,7 @@ * GNU Public License v2 or later */ -if (stripos($_SERVER['PHP_SELF'], 'sfs.misc.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/SFSbase.class.php b/plugins/spamx/SFSbase.class.php index 5e817165c..d60d5110d 100644 --- a/plugins/spamx/SFSbase.class.php +++ b/plugins/spamx/SFSbase.class.php @@ -9,7 +9,7 @@ */ -if (stripos($_SERVER['PHP_SELF'], 'SFSbase.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die ('This file can not be used on its own!'); } diff --git a/plugins/spamx/SFSreport.Action.class.php b/plugins/spamx/SFSreport.Action.class.php index 48bcad61f..3951f8496 100644 --- a/plugins/spamx/SFSreport.Action.class.php +++ b/plugins/spamx/SFSreport.Action.class.php @@ -9,7 +9,7 @@ */ -if (stripos($_SERVER['PHP_SELF'], 'SFSreport.Action.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die ('This file can not be used on its own!'); } diff --git a/plugins/spamx/SLV.Examine.class.php b/plugins/spamx/SLV.Examine.class.php index 3e75b396b..b528bcec4 100644 --- a/plugins/spamx/SLV.Examine.class.php +++ b/plugins/spamx/SLV.Examine.class.php @@ -11,7 +11,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'slv.examine.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/SLVbase.class.php b/plugins/spamx/SLVbase.class.php index 9a04c0dab..b034effcf 100644 --- a/plugins/spamx/SLVbase.class.php +++ b/plugins/spamx/SLVbase.class.php @@ -11,7 +11,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'slvbase.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } @@ -190,7 +190,7 @@ public function prepareLinks($comment) $links = $this->getLinks($comment); // strip all HTML, then get all the plain text links - $comment = COM_makeClickableLinks(strip_tags($comment)); + $comment = COM_makeClickableLinks(GLText::stripTags($comment)); $links += $this->getLinks($comment); if (count($links) > 0) { diff --git a/plugins/spamx/SLVreport.Action.class.php b/plugins/spamx/SLVreport.Action.class.php index d6c56231b..e1ab815be 100644 --- a/plugins/spamx/SLVreport.Action.class.php +++ b/plugins/spamx/SLVreport.Action.class.php @@ -11,7 +11,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'slvreport.action.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/SLVwhitelist.Admin.class.php b/plugins/spamx/SLVwhitelist.Admin.class.php index 94fb31c7c..81064a581 100644 --- a/plugins/spamx/SLVwhitelist.Admin.class.php +++ b/plugins/spamx/SLVwhitelist.Admin.class.php @@ -12,7 +12,7 @@ * @subpackage Modules */ -if (stripos($_SERVER['PHP_SELF'], 'slvwhitelist.admin.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/SNL.Examine.class.php b/plugins/spamx/SNL.Examine.class.php index 9148c4fe1..ef8ffb362 100644 --- a/plugins/spamx/SNL.Examine.class.php +++ b/plugins/spamx/SNL.Examine.class.php @@ -9,7 +9,7 @@ */ -if (stripos($_SERVER['PHP_SELF'], 'SNL.Examine.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die ('This file can not be used on its own!'); } diff --git a/plugins/spamx/SNLbase.class.php b/plugins/spamx/SNLbase.class.php index 5a11b6b24..7f4f23e9d 100644 --- a/plugins/spamx/SNLbase.class.php +++ b/plugins/spamx/SNLbase.class.php @@ -9,7 +9,7 @@ */ -if (stripos($_SERVER['PHP_SELF'], 'SNLbase.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die ('This file can not be used on its own!'); } @@ -126,7 +126,7 @@ public function prepareLinks($comment) $links = $this->getLinks($comment); // strip all HTML, then get all the plain text links - $comment = COM_makeClickableLinks(strip_tags($comment)); + $comment = COM_makeClickableLinks(GLText::stripTags($comment)); $links += $this->getLinks($comment); return $links; diff --git a/plugins/spamx/SNLreport.Action.class.php b/plugins/spamx/SNLreport.Action.class.php index d846482e6..bd1bb844e 100644 --- a/plugins/spamx/SNLreport.Action.class.php +++ b/plugins/spamx/SNLreport.Action.class.php @@ -9,7 +9,7 @@ */ -if (stripos($_SERVER['PHP_SELF'], 'SNLreport.Action.class.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die ('This file can not be used on its own!'); } diff --git a/plugins/spamx/configuration_validation.php b/plugins/spamx/configuration_validation.php index c8ec0011a..accae0420 100644 --- a/plugins/spamx/configuration_validation.php +++ b/plugins/spamx/configuration_validation.php @@ -30,7 +30,7 @@ // | | // +---------------------------------------------------------------------------+ -if (stripos($_SERVER['PHP_SELF'], 'configuration_validation.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/functions.inc b/plugins/spamx/functions.inc index 10d589bdd..f0e8a7fad 100644 --- a/plugins/spamx/functions.inc +++ b/plugins/spamx/functions.inc @@ -13,7 +13,7 @@ * @package Spam-X */ -if (stripos($_SERVER['PHP_SELF'], 'functions.inc') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die ('This file can not be used on its own.'); } @@ -633,7 +633,7 @@ function plugin_itemPreSave_spamx($type, $username) if ($type == 'registration') { require_once $_CONF['path'].'/plugins/spamx/SFS.Misc.class.php'; $EX = new SFS; - $res = $EX->execute($_POST['email'], $_SERVER['REMOTE_ADDR']); + $res = $EX->execute(Geeklog\Input::post('email'), Geeklog\Input::server('REMOTE_ADDR')); if ($res > 0) { return $LANG_SX00['invalid_email_or_ip']; } diff --git a/plugins/spamx/install_defaults.php b/plugins/spamx/install_defaults.php index 77796fd84..bf3de13ba 100644 --- a/plugins/spamx/install_defaults.php +++ b/plugins/spamx/install_defaults.php @@ -37,7 +37,7 @@ * @package Spam-X */ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'install_defaults.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/spamx/language/dutch.php b/plugins/spamx/language/dutch.php index fb1dc34e4..357076085 100644 --- a/plugins/spamx/language/dutch.php +++ b/plugins/spamx/language/dutch.php @@ -187,4 +187,3 @@ 1 => array('Waar' => true, 'Fout' => false) ); -?> diff --git a/plugins/spamx/language/dutch_utf-8.php b/plugins/spamx/language/dutch_utf-8.php index b447bc12c..75a0f35eb 100644 --- a/plugins/spamx/language/dutch_utf-8.php +++ b/plugins/spamx/language/dutch_utf-8.php @@ -187,4 +187,3 @@ 1 => array('Waar' => true, 'Fout' => false) ); -?> diff --git a/plugins/spamx/language/estonian.php b/plugins/spamx/language/estonian.php index 3df5eb308..ed7ed3122 100644 --- a/plugins/spamx/language/estonian.php +++ b/plugins/spamx/language/estonian.php @@ -190,4 +190,3 @@ 1 => array('Jah' => true, 'Ei' => false) ); -?> diff --git a/plugins/spamx/language/estonian_utf-8.php b/plugins/spamx/language/estonian_utf-8.php index 950b92d4f..5f0f0c822 100644 --- a/plugins/spamx/language/estonian_utf-8.php +++ b/plugins/spamx/language/estonian_utf-8.php @@ -190,4 +190,3 @@ 1 => array('Jah' => true, 'Ei' => false) ); -?> diff --git a/plugins/spamx/language/farsi_utf-8.php b/plugins/spamx/language/farsi_utf-8.php index aa2954793..e03887088 100644 --- a/plugins/spamx/language/farsi_utf-8.php +++ b/plugins/spamx/language/farsi_utf-8.php @@ -191,4 +191,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/french_canada.php b/plugins/spamx/language/french_canada.php index 6bb7fd989..e545095ca 100644 --- a/plugins/spamx/language/french_canada.php +++ b/plugins/spamx/language/french_canada.php @@ -191,4 +191,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/french_canada_utf-8.php b/plugins/spamx/language/french_canada_utf-8.php index d190fae84..75031e366 100644 --- a/plugins/spamx/language/french_canada_utf-8.php +++ b/plugins/spamx/language/french_canada_utf-8.php @@ -191,4 +191,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/french_france.php b/plugins/spamx/language/french_france.php index cb98c1f04..d94f0d164 100644 --- a/plugins/spamx/language/french_france.php +++ b/plugins/spamx/language/french_france.php @@ -189,4 +189,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/french_france_utf-8.php b/plugins/spamx/language/french_france_utf-8.php index 965a346bd..4ff815747 100644 --- a/plugins/spamx/language/french_france_utf-8.php +++ b/plugins/spamx/language/french_france_utf-8.php @@ -190,4 +190,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/hebrew_utf-8.php b/plugins/spamx/language/hebrew_utf-8.php index 14c96c2e7..5e0909afb 100644 --- a/plugins/spamx/language/hebrew_utf-8.php +++ b/plugins/spamx/language/hebrew_utf-8.php @@ -189,4 +189,3 @@ 1 => array('讻谉' => true, '诇讗' => false) ); -?> diff --git a/plugins/spamx/language/italian.php b/plugins/spamx/language/italian.php index 825fc2d35..de84f0659 100644 --- a/plugins/spamx/language/italian.php +++ b/plugins/spamx/language/italian.php @@ -203,4 +203,3 @@ 1 => array('Vero' => true, 'Falso' => false) ); -?> diff --git a/plugins/spamx/language/italian_utf-8.php b/plugins/spamx/language/italian_utf-8.php index 88357c102..73d2962b8 100644 --- a/plugins/spamx/language/italian_utf-8.php +++ b/plugins/spamx/language/italian_utf-8.php @@ -203,4 +203,3 @@ 1 => array('Vero' => true, 'Falso' => false) ); -?> diff --git a/plugins/spamx/language/japanese_utf-8.php b/plugins/spamx/language/japanese_utf-8.php index db34f9be9..19adb395a 100644 --- a/plugins/spamx/language/japanese_utf-8.php +++ b/plugins/spamx/language/japanese_utf-8.php @@ -194,4 +194,3 @@ 1 => array('銇亜' => true, '銇勩亜銇' => false) ); -?> diff --git a/plugins/spamx/language/russian.php b/plugins/spamx/language/russian.php index 42fbcbfb8..c6c68f5e8 100644 --- a/plugins/spamx/language/russian.php +++ b/plugins/spamx/language/russian.php @@ -189,4 +189,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/russian_utf-8.php b/plugins/spamx/language/russian_utf-8.php index a1b3afeb3..186c734ae 100644 --- a/plugins/spamx/language/russian_utf-8.php +++ b/plugins/spamx/language/russian_utf-8.php @@ -189,4 +189,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/slovenian.php b/plugins/spamx/language/slovenian.php index 32efc07ce..552a1c080 100644 --- a/plugins/spamx/language/slovenian.php +++ b/plugins/spamx/language/slovenian.php @@ -191,4 +191,3 @@ 1 => array('Da' => 'velja', 'Ne' => 'ne velja') ); -?> diff --git a/plugins/spamx/language/slovenian_utf-8.php b/plugins/spamx/language/slovenian_utf-8.php index b93efa45f..4dc748120 100644 --- a/plugins/spamx/language/slovenian_utf-8.php +++ b/plugins/spamx/language/slovenian_utf-8.php @@ -191,4 +191,3 @@ 1 => array('Da' => 'velja', 'Ne' => 'ne velja') ); -?> diff --git a/plugins/spamx/language/spanish.php b/plugins/spamx/language/spanish.php index 0d7c37055..8856ae07e 100644 --- a/plugins/spamx/language/spanish.php +++ b/plugins/spamx/language/spanish.php @@ -189,4 +189,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/spanish_utf-8.php b/plugins/spamx/language/spanish_utf-8.php index 8f0e0723d..542f8414b 100644 --- a/plugins/spamx/language/spanish_utf-8.php +++ b/plugins/spamx/language/spanish_utf-8.php @@ -189,4 +189,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/ukrainian.php b/plugins/spamx/language/ukrainian.php index 22663815b..919e2fa07 100644 --- a/plugins/spamx/language/ukrainian.php +++ b/plugins/spamx/language/ukrainian.php @@ -189,4 +189,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/ukrainian_koi8-u.php b/plugins/spamx/language/ukrainian_koi8-u.php index a12077d01..21594293c 100644 --- a/plugins/spamx/language/ukrainian_koi8-u.php +++ b/plugins/spamx/language/ukrainian_koi8-u.php @@ -189,4 +189,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/spamx/language/ukrainian_utf-8.php b/plugins/spamx/language/ukrainian_utf-8.php index e4dbf1da8..603a4f256 100644 --- a/plugins/spamx/language/ukrainian_utf-8.php +++ b/plugins/spamx/language/ukrainian_utf-8.php @@ -189,4 +189,3 @@ 1 => array('True' => true, 'False' => false) ); -?> diff --git a/plugins/staticpages/configuration_validation.php b/plugins/staticpages/configuration_validation.php index 0ea4bd670..a30f78e16 100644 --- a/plugins/staticpages/configuration_validation.php +++ b/plugins/staticpages/configuration_validation.php @@ -30,7 +30,7 @@ // | | // +---------------------------------------------------------------------------+ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'configuration_validation.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/staticpages/functions.inc b/plugins/staticpages/functions.inc index ca188abd5..4ef07fd13 100755 --- a/plugins/staticpages/functions.inc +++ b/plugins/staticpages/functions.inc @@ -40,7 +40,7 @@ * @package StaticPages */ -if (stripos($_SERVER['PHP_SELF'], 'functions.inc') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own.'); } @@ -1077,12 +1077,9 @@ function plugin_centerblock_staticpages($where = 1, $page = 1, $topic = '') $what = 'menu'; break; } - if (isset($_GET['msg'])) { - $msg = COM_applyFilter($_GET['msg'], true); - if ($msg > 0) { - $retval .= COM_showMessage($msg); - } - } + + $msg = (int) Geeklog\Input::fGet('msg', 0); + $retval .= COM_showMessage($msg); } $spage = COM_newTemplate(CTL_plugin_templatePath('staticpages')); diff --git a/plugins/staticpages/install_defaults.php b/plugins/staticpages/install_defaults.php index 7f601b838..37444de16 100644 --- a/plugins/staticpages/install_defaults.php +++ b/plugins/staticpages/install_defaults.php @@ -38,7 +38,7 @@ * @package StaticPages */ -if (strpos(strtolower($_SERVER['PHP_SELF']), 'install_defaults.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/staticpages/language/chinese_simplified_utf-8.php b/plugins/staticpages/language/chinese_simplified_utf-8.php index 1f5f82796..5e52d47a6 100644 --- a/plugins/staticpages/language/chinese_simplified_utf-8.php +++ b/plugins/staticpages/language/chinese_simplified_utf-8.php @@ -210,4 +210,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/chinese_traditional_utf-8.php b/plugins/staticpages/language/chinese_traditional_utf-8.php index ea798a350..7e904b8cf 100644 --- a/plugins/staticpages/language/chinese_traditional_utf-8.php +++ b/plugins/staticpages/language/chinese_traditional_utf-8.php @@ -210,4 +210,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/czech.php b/plugins/staticpages/language/czech.php index 018fb9fc1..0134bef6f 100644 --- a/plugins/staticpages/language/czech.php +++ b/plugins/staticpages/language/czech.php @@ -207,4 +207,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/czech_utf-8.php b/plugins/staticpages/language/czech_utf-8.php index 8e8bdafb7..577e2a142 100644 --- a/plugins/staticpages/language/czech_utf-8.php +++ b/plugins/staticpages/language/czech_utf-8.php @@ -207,4 +207,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/danish.php b/plugins/staticpages/language/danish.php index 07a1d5d8f..082800039 100644 --- a/plugins/staticpages/language/danish.php +++ b/plugins/staticpages/language/danish.php @@ -208,4 +208,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/danish_utf-8.php b/plugins/staticpages/language/danish_utf-8.php index a8e34865b..7417fe8b2 100644 --- a/plugins/staticpages/language/danish_utf-8.php +++ b/plugins/staticpages/language/danish_utf-8.php @@ -208,4 +208,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/dutch.php b/plugins/staticpages/language/dutch.php index 50e99362f..2d3a05704 100644 --- a/plugins/staticpages/language/dutch.php +++ b/plugins/staticpages/language/dutch.php @@ -209,4 +209,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/dutch_utf-8.php b/plugins/staticpages/language/dutch_utf-8.php index 50e99362f..2d3a05704 100644 --- a/plugins/staticpages/language/dutch_utf-8.php +++ b/plugins/staticpages/language/dutch_utf-8.php @@ -209,4 +209,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/estonian.php b/plugins/staticpages/language/estonian.php index bc79b7618..6e60eb281 100644 --- a/plugins/staticpages/language/estonian.php +++ b/plugins/staticpages/language/estonian.php @@ -209,4 +209,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/estonian_utf-8.php b/plugins/staticpages/language/estonian_utf-8.php index 6ed31e839..95050025a 100644 --- a/plugins/staticpages/language/estonian_utf-8.php +++ b/plugins/staticpages/language/estonian_utf-8.php @@ -209,4 +209,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/farsi_utf-8.php b/plugins/staticpages/language/farsi_utf-8.php index 2746b249e..d548fc162 100644 --- a/plugins/staticpages/language/farsi_utf-8.php +++ b/plugins/staticpages/language/farsi_utf-8.php @@ -207,4 +207,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/french_canada.php b/plugins/staticpages/language/french_canada.php index 9c775cc75..be9f92cee 100644 --- a/plugins/staticpages/language/french_canada.php +++ b/plugins/staticpages/language/french_canada.php @@ -209,4 +209,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/french_canada_utf-8.php b/plugins/staticpages/language/french_canada_utf-8.php index abba22bcc..54278e0bf 100644 --- a/plugins/staticpages/language/french_canada_utf-8.php +++ b/plugins/staticpages/language/french_canada_utf-8.php @@ -209,4 +209,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/french_france.php b/plugins/staticpages/language/french_france.php index 0092e95e3..d59525f02 100644 --- a/plugins/staticpages/language/french_france.php +++ b/plugins/staticpages/language/french_france.php @@ -207,4 +207,3 @@ 17 => array('Commentaires activ閟' => 0, 'Commentaires d閟activ閟' => -1) ); -?> diff --git a/plugins/staticpages/language/french_france_utf-8.php b/plugins/staticpages/language/french_france_utf-8.php index d60d1ead1..7c93f1c8f 100644 --- a/plugins/staticpages/language/french_france_utf-8.php +++ b/plugins/staticpages/language/french_france_utf-8.php @@ -209,4 +209,3 @@ 17 => array('Commentaires activ茅s' => 0, 'Commentaires d茅sactiv茅s' => -1) ); -?> diff --git a/plugins/staticpages/language/german.php b/plugins/staticpages/language/german.php index 524138f33..81bef5b12 100644 --- a/plugins/staticpages/language/german.php +++ b/plugins/staticpages/language/german.php @@ -211,4 +211,3 @@ 17 => array('Kommentare eingeschaltet' => 0, 'Kommentare ausgeschaltet' => -1) ); -?> diff --git a/plugins/staticpages/language/german_formal.php b/plugins/staticpages/language/german_formal.php index 75e713315..99ffce9a4 100644 --- a/plugins/staticpages/language/german_formal.php +++ b/plugins/staticpages/language/german_formal.php @@ -211,4 +211,3 @@ 17 => array('Kommentare eingeschaltet' => 0, 'Kommentare ausgeschaltet' => -1) ); -?> diff --git a/plugins/staticpages/language/german_formal_utf-8.php b/plugins/staticpages/language/german_formal_utf-8.php index 693845f8d..09a7c5cae 100644 --- a/plugins/staticpages/language/german_formal_utf-8.php +++ b/plugins/staticpages/language/german_formal_utf-8.php @@ -211,4 +211,3 @@ 17 => array('Kommentare eingeschaltet' => 0, 'Kommentare ausgeschaltet' => -1) ); -?> diff --git a/plugins/staticpages/language/german_utf-8.php b/plugins/staticpages/language/german_utf-8.php index 4e264466d..ed05bd752 100644 --- a/plugins/staticpages/language/german_utf-8.php +++ b/plugins/staticpages/language/german_utf-8.php @@ -211,4 +211,3 @@ 17 => array('Kommentare eingeschaltet' => 0, 'Kommentare ausgeschaltet' => -1) ); -?> diff --git a/plugins/staticpages/language/hebrew_utf-8.php b/plugins/staticpages/language/hebrew_utf-8.php index c5c2afacf..dd00510e7 100644 --- a/plugins/staticpages/language/hebrew_utf-8.php +++ b/plugins/staticpages/language/hebrew_utf-8.php @@ -208,4 +208,3 @@ 17 => array('讗讬驻砖讜专 转讙讜讘讜转' => 0, '谞讬讟专讜诇 转讙讜讘讜转' => -1) ); -?> diff --git a/plugins/staticpages/language/italian.php b/plugins/staticpages/language/italian.php index 5a654f2b4..19a252c98 100644 --- a/plugins/staticpages/language/italian.php +++ b/plugins/staticpages/language/italian.php @@ -208,4 +208,3 @@ 17 => array('Commenti Abilitati' => 0, 'Commenti Disabilitati' => -1) ); -?> diff --git a/plugins/staticpages/language/italian_utf-8.php b/plugins/staticpages/language/italian_utf-8.php index 9b3f674d9..b6e095c61 100644 --- a/plugins/staticpages/language/italian_utf-8.php +++ b/plugins/staticpages/language/italian_utf-8.php @@ -208,4 +208,3 @@ 17 => array('Commenti Abilitati' => 0, 'Commenti Disabilitati' => -1) ); -?> diff --git a/plugins/staticpages/language/japanese_utf-8.php b/plugins/staticpages/language/japanese_utf-8.php index 6d24038b1..eec96e936 100644 --- a/plugins/staticpages/language/japanese_utf-8.php +++ b/plugins/staticpages/language/japanese_utf-8.php @@ -212,4 +212,3 @@ 17 => array('銈炽儭銉炽儓鏈夊姽' => 0, '銈炽儭銉炽儓鐒″姽' => -1) ); -?> diff --git a/plugins/staticpages/language/korean.php b/plugins/staticpages/language/korean.php index 84191d954..f80e29595 100644 --- a/plugins/staticpages/language/korean.php +++ b/plugins/staticpages/language/korean.php @@ -208,4 +208,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/korean_utf-8.php b/plugins/staticpages/language/korean_utf-8.php index c96391a8d..f555d42d3 100644 --- a/plugins/staticpages/language/korean_utf-8.php +++ b/plugins/staticpages/language/korean_utf-8.php @@ -208,4 +208,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/polish.php b/plugins/staticpages/language/polish.php index 1e7dec027..37044493f 100644 --- a/plugins/staticpages/language/polish.php +++ b/plugins/staticpages/language/polish.php @@ -207,4 +207,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/polish_utf-8.php b/plugins/staticpages/language/polish_utf-8.php index d10906924..035d39870 100644 --- a/plugins/staticpages/language/polish_utf-8.php +++ b/plugins/staticpages/language/polish_utf-8.php @@ -207,4 +207,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/portuguese_brazil.php b/plugins/staticpages/language/portuguese_brazil.php index 56ede2c19..3918c63fd 100644 --- a/plugins/staticpages/language/portuguese_brazil.php +++ b/plugins/staticpages/language/portuguese_brazil.php @@ -210,4 +210,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/portuguese_brazil_utf-8.php b/plugins/staticpages/language/portuguese_brazil_utf-8.php index f16bb78e3..1eea1cf6d 100644 --- a/plugins/staticpages/language/portuguese_brazil_utf-8.php +++ b/plugins/staticpages/language/portuguese_brazil_utf-8.php @@ -210,4 +210,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/slovenian.php b/plugins/staticpages/language/slovenian.php index c3739c7cc..9adff03a3 100644 --- a/plugins/staticpages/language/slovenian.php +++ b/plugins/staticpages/language/slovenian.php @@ -209,4 +209,3 @@ 17 => array('Komentarji omogo鑕ni' => 0, 'Komentarji onemogo鑕ni' => -1) ); -?> diff --git a/plugins/staticpages/language/slovenian_utf-8.php b/plugins/staticpages/language/slovenian_utf-8.php index 9afe189ea..4228f144e 100644 --- a/plugins/staticpages/language/slovenian_utf-8.php +++ b/plugins/staticpages/language/slovenian_utf-8.php @@ -209,4 +209,3 @@ 17 => array('Komentarji omogo猫eni' => 0, 'Komentarji onemogo猫eni' => -1) ); -?> diff --git a/plugins/staticpages/language/spanish.php b/plugins/staticpages/language/spanish.php index 004a3cc0b..8279a83e8 100644 --- a/plugins/staticpages/language/spanish.php +++ b/plugins/staticpages/language/spanish.php @@ -207,4 +207,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/spanish_utf-8.php b/plugins/staticpages/language/spanish_utf-8.php index 3d014c31c..cb5aa6b46 100644 --- a/plugins/staticpages/language/spanish_utf-8.php +++ b/plugins/staticpages/language/spanish_utf-8.php @@ -210,4 +210,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/swedish.php b/plugins/staticpages/language/swedish.php index 5b046da46..fcad85a23 100644 --- a/plugins/staticpages/language/swedish.php +++ b/plugins/staticpages/language/swedish.php @@ -209,4 +209,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/swedish_utf-8.php b/plugins/staticpages/language/swedish_utf-8.php index aac583478..4718195da 100644 --- a/plugins/staticpages/language/swedish_utf-8.php +++ b/plugins/staticpages/language/swedish_utf-8.php @@ -209,4 +209,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/turkish.php b/plugins/staticpages/language/turkish.php index fcd7a47da..dfe3b0aad 100644 --- a/plugins/staticpages/language/turkish.php +++ b/plugins/staticpages/language/turkish.php @@ -208,4 +208,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/turkish_utf-8.php b/plugins/staticpages/language/turkish_utf-8.php index 1677f7523..500f971d7 100644 --- a/plugins/staticpages/language/turkish_utf-8.php +++ b/plugins/staticpages/language/turkish_utf-8.php @@ -208,4 +208,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/ukrainian.php b/plugins/staticpages/language/ukrainian.php index 56b570b74..b14017307 100644 --- a/plugins/staticpages/language/ukrainian.php +++ b/plugins/staticpages/language/ukrainian.php @@ -207,4 +207,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/ukrainian_koi8-u.php b/plugins/staticpages/language/ukrainian_koi8-u.php index bf3281669..0d428830d 100644 --- a/plugins/staticpages/language/ukrainian_koi8-u.php +++ b/plugins/staticpages/language/ukrainian_koi8-u.php @@ -207,4 +207,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/language/ukrainian_utf-8.php b/plugins/staticpages/language/ukrainian_utf-8.php index 83fe5ff86..cba541fc0 100644 --- a/plugins/staticpages/language/ukrainian_utf-8.php +++ b/plugins/staticpages/language/ukrainian_utf-8.php @@ -207,4 +207,3 @@ 17 => array('Comments Enabled' => 0, 'Comments Disabled' => -1) ); -?> diff --git a/plugins/staticpages/services.inc.php b/plugins/staticpages/services.inc.php index d81a12356..16e6e8a53 100644 --- a/plugins/staticpages/services.inc.php +++ b/plugins/staticpages/services.inc.php @@ -39,7 +39,7 @@ * @package StaticPages */ -if (stripos($_SERVER['PHP_SELF'], 'services.inc.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own.'); } @@ -395,16 +395,16 @@ function service_submit_staticpages($args, &$output, &$svc_msg) } $sp_content = GLText::remove4byteUtf8Chars($sp_content); - $sp_title = strip_tags($sp_title); + $sp_title = GLText::stripTags($sp_title); $sp_title = GLText::remove4byteUtf8Chars($sp_title); - $sp_page_title = strip_tags($sp_page_title); + $sp_page_title = GLText::stripTags($sp_page_title); $sp_page_title = GLText::remove4byteUtf8Chars($sp_page_title); - $sp_label = strip_tags($sp_label); + $sp_label = GLText::stripTags($sp_label); $sp_label = GLText::remove4byteUtf8Chars($sp_label); - $meta_description = strip_tags($meta_description); + $meta_description = GLText::stripTags($meta_description); $meta_description = GLText::remove4byteUtf8Chars($meta_description); - $meta_keywords = strip_tags($meta_keywords); + $meta_keywords = GLText::stripTags($meta_keywords); $meta_keywords = GLText::remove4byteUtf8Chars($meta_keywords); $sp_help = GLText::remove4byteUtf8Chars($sp_help); @@ -779,7 +779,7 @@ function service_get_staticpages($args, &$output, &$svc_msg) if (!isset($args['template'])) { $output['sp_content'] = SP_render_content($page, $output['sp_content'], $output['sp_php'], $output['cache_time'], $output['template_id']); } - } else { // an error occured (page not found, access denied, ...) + } else { // an error occurred (page not found, access denied, ...) /** * if the user has edit permissions and the page does not exist, * send them to the editor so they can create it "wiki style" diff --git a/plugins/staticpages/templates/denim/printable.thtml b/plugins/staticpages/templates/denim/printable.thtml index 634b0a89f..7b4deede5 100644 --- a/plugins/staticpages/templates/denim/printable.thtml +++ b/plugins/staticpages/templates/denim/printable.thtml @@ -24,4 +24,4 @@ {# end {templatelocation} #} - + \ No newline at end of file diff --git a/plugins/staticpages/templates/denim/spcomments.thtml b/plugins/staticpages/templates/denim/spcomments.thtml index 145e257c0..f8cbd67c4 100644 --- a/plugins/staticpages/templates/denim/spcomments.thtml +++ b/plugins/staticpages/templates/denim/spcomments.thtml @@ -2,4 +2,4 @@ | {num_comments} {lang_comments} -{# end {templatelocation} #} +{# end {templatelocation} #} \ No newline at end of file diff --git a/plugins/staticpages/templates/denim/staticpage.thtml b/plugins/staticpages/templates/denim/staticpage.thtml index d7c6d1cd4..dd6c3175e 100644 --- a/plugins/staticpages/templates/denim/staticpage.thtml +++ b/plugins/staticpages/templates/denim/staticpage.thtml @@ -4,11 +4,11 @@ {block_start} {content} {block_end} -

- {!if lastupdate}{lastupdate}|{!endif} +

+ {!if lastupdate}{lastupdate}|{!endif} {!if hits}{hits}{!endif} {print_icon}{edit_icon}

{commentbar} -{# end {templatelocation} #} +{# end {templatelocation} #} \ No newline at end of file diff --git a/plugins/xmlsitemap/configuration_validation.php b/plugins/xmlsitemap/configuration_validation.php index d258bcc22..9077334fa 100644 --- a/plugins/xmlsitemap/configuration_validation.php +++ b/plugins/xmlsitemap/configuration_validation.php @@ -30,7 +30,7 @@ // | | // +---------------------------------------------------------------------------+ -if (stripos($_SERVER['PHP_SELF'], 'configuration_validation.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/xmlsitemap/functions.inc b/plugins/xmlsitemap/functions.inc index 7ca3b217c..8219465e4 100644 --- a/plugins/xmlsitemap/functions.inc +++ b/plugins/xmlsitemap/functions.inc @@ -38,7 +38,7 @@ * @package XMLSitemap */ -if (stripos($_SERVER['PHP_SELF'], 'functions.inc') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die ('This file can not be used on its own.'); } diff --git a/plugins/xmlsitemap/install_defaults.php b/plugins/xmlsitemap/install_defaults.php index fd9c28f53..5e2ed3a36 100644 --- a/plugins/xmlsitemap/install_defaults.php +++ b/plugins/xmlsitemap/install_defaults.php @@ -38,7 +38,7 @@ * @package XMLSitemap */ -if (stripos($_SERVER['PHP_SELF'], 'install_defaults.php') !== false) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/xmlsitemap/language/estonian.php b/plugins/xmlsitemap/language/estonian.php index 0f8c878a9..94af28307 100644 --- a/plugins/xmlsitemap/language/estonian.php +++ b/plugins/xmlsitemap/language/estonian.php @@ -79,4 +79,3 @@ 20 => array('Alati' => 'always', 'Tunni tagant' => 'hourly', 'p鋏va tagant' => 'daily', 'n鋎ala tagant' => 'weekly', 'kuu tagant' => 'monthly', 'aasta tagant' => 'yearly', 'mitte kunagi' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/estonian_utf-8.php b/plugins/xmlsitemap/language/estonian_utf-8.php index afc0305d7..52820328d 100644 --- a/plugins/xmlsitemap/language/estonian_utf-8.php +++ b/plugins/xmlsitemap/language/estonian_utf-8.php @@ -79,4 +79,3 @@ 20 => array('Alati' => 'always', 'Tunni tagant' => 'hourly', 'p盲eva tagant' => 'daily', 'n盲dala tagant' => 'weekly', 'kuu tagant' => 'monthly', 'aasta tagant' => 'yearly', 'mitte kunagi' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/french_france.php b/plugins/xmlsitemap/language/french_france.php index 6c1754b66..e9d5c8784 100644 --- a/plugins/xmlsitemap/language/french_france.php +++ b/plugins/xmlsitemap/language/french_france.php @@ -79,4 +79,3 @@ 20 => array('toujours' => 'always', 'Toutes les heures' => 'hourly', 'Quotidienne' => 'daily', 'Hebdomadaire' => 'weekly', 'mensuelle' => 'monthly', 'annuelle' => 'yearly', 'jamais' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/french_france_utf-8.php b/plugins/xmlsitemap/language/french_france_utf-8.php index ef8fd8717..32a5bafeb 100644 --- a/plugins/xmlsitemap/language/french_france_utf-8.php +++ b/plugins/xmlsitemap/language/french_france_utf-8.php @@ -79,4 +79,3 @@ 20 => array('toujours' => 'always', 'Toutes les heures' => 'hourly', 'Quotidienne' => 'daily', 'Hebdomadaire' => 'weekly', 'mensuelle' => 'monthly', 'annuelle' => 'yearly', 'jamais' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/german.php b/plugins/xmlsitemap/language/german.php index 72a3a7259..91424e472 100644 --- a/plugins/xmlsitemap/language/german.php +++ b/plugins/xmlsitemap/language/german.php @@ -79,4 +79,3 @@ 20 => array('immer' => 'always', 'st黱dlich' => 'hourly', 't鋑lich' => 'daily', 'w鯿hentlich' => 'weekly', 'monatlich' => 'monthly', 'j鋒rlich' => 'yearly', 'nie' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/german_formal.php b/plugins/xmlsitemap/language/german_formal.php index 253a47c52..2816677b1 100644 --- a/plugins/xmlsitemap/language/german_formal.php +++ b/plugins/xmlsitemap/language/german_formal.php @@ -79,4 +79,3 @@ 20 => array('immer' => 'always', 'st黱dlich' => 'hourly', 't鋑lich' => 'daily', 'w鯿hentlich' => 'weekly', 'monatlich' => 'monthly', 'j鋒rlich' => 'yearly', 'nie' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/german_formal_utf-8.php b/plugins/xmlsitemap/language/german_formal_utf-8.php index fb6cd8112..a4c9b002c 100644 --- a/plugins/xmlsitemap/language/german_formal_utf-8.php +++ b/plugins/xmlsitemap/language/german_formal_utf-8.php @@ -79,4 +79,3 @@ 20 => array('immer' => 'always', 'st眉ndlich' => 'hourly', 't盲glich' => 'daily', 'w枚chentlich' => 'weekly', 'monatlich' => 'monthly', 'j盲hrlich' => 'yearly', 'nie' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/german_utf-8.php b/plugins/xmlsitemap/language/german_utf-8.php index 6b0fce0da..1ae6c3624 100644 --- a/plugins/xmlsitemap/language/german_utf-8.php +++ b/plugins/xmlsitemap/language/german_utf-8.php @@ -79,4 +79,3 @@ 20 => array('immer' => 'always', 'st眉ndlich' => 'hourly', 't盲glich' => 'daily', 'w枚chentlich' => 'weekly', 'monatlich' => 'monthly', 'j盲hrlich' => 'yearly', 'nie' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/hebrew_utf-8.php b/plugins/xmlsitemap/language/hebrew_utf-8.php index 446cf2c29..7dd5956f3 100644 --- a/plugins/xmlsitemap/language/hebrew_utf-8.php +++ b/plugins/xmlsitemap/language/hebrew_utf-8.php @@ -79,4 +79,3 @@ 20 => array('转诪讬讚' => 'always', '讻诇 砖注讛' => 'hourly', '讬讜诪讬' => 'daily', '砖讘讜注讬' => 'weekly', '讞讜讚砖讬' => 'monthly', '砖谞转讬' => 'yearly', '讗祝 驻注诐' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/italian.php b/plugins/xmlsitemap/language/italian.php index 018018378..aed76221a 100644 --- a/plugins/xmlsitemap/language/italian.php +++ b/plugins/xmlsitemap/language/italian.php @@ -75,4 +75,3 @@ 20 => array('sempre' => 'always', 'ogni ora' => 'hourly', 'giornaliero' => 'daily', 'settimanale' => 'weekly', 'mensile' => 'monthly', 'annuale' => 'yearly', 'mai' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/italian_utf-8.php b/plugins/xmlsitemap/language/italian_utf-8.php index 6fbbf9f0a..f612398e9 100644 --- a/plugins/xmlsitemap/language/italian_utf-8.php +++ b/plugins/xmlsitemap/language/italian_utf-8.php @@ -75,4 +75,3 @@ 20 => array('sempre' => 'always', 'ogni ora' => 'hourly', 'giornaliero' => 'daily', 'settimanale' => 'weekly', 'mensile' => 'monthly', 'annuale' => 'yearly', 'mai' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/japanese_utf-8.php b/plugins/xmlsitemap/language/japanese_utf-8.php index d53b976a6..e9f0088dd 100644 --- a/plugins/xmlsitemap/language/japanese_utf-8.php +++ b/plugins/xmlsitemap/language/japanese_utf-8.php @@ -79,4 +79,3 @@ 20 => array('甯告檪' => 'always', '姣庢檪闁' => 'hourly', '姣庢棩' => 'daily', '姣庨' => 'weekly', '姣庢湀' => 'monthly', '姣庡勾' => 'yearly', '鏇存柊銇椼仾銇' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/slovenian.php b/plugins/xmlsitemap/language/slovenian.php index 401f09084..4112fd676 100644 --- a/plugins/xmlsitemap/language/slovenian.php +++ b/plugins/xmlsitemap/language/slovenian.php @@ -79,4 +79,3 @@ 20 => array('vedno' => 'always', 'ob uri' => 'hourly', 'dnevno' => 'daily', 'tedensko' => 'weekly', 'mese鑞o' => 'monthly', 'letno' => 'yearly', 'nikoli' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/language/slovenian_utf-8.php b/plugins/xmlsitemap/language/slovenian_utf-8.php index 35044f24f..b30306db4 100644 --- a/plugins/xmlsitemap/language/slovenian_utf-8.php +++ b/plugins/xmlsitemap/language/slovenian_utf-8.php @@ -79,4 +79,3 @@ 20 => array('vedno' => 'always', 'ob uri' => 'hourly', 'dnevno' => 'daily', 'tedensko' => 'weekly', 'mese猫no' => 'monthly', 'letno' => 'yearly', 'nikoli' => 'never', 'hidden' => 'hidden') ); -?> diff --git a/plugins/xmlsitemap/sql/mysql_install.php b/plugins/xmlsitemap/sql/mysql_install.php index a599780fd..5ed122074 100644 --- a/plugins/xmlsitemap/sql/mysql_install.php +++ b/plugins/xmlsitemap/sql/mysql_install.php @@ -33,7 +33,7 @@ * @package XMLSitemap */ -if (strpos(strtolower($_SERVER['PHP_SELF']), strtolower(basename(__FILE__))) !== FALSE) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/plugins/xmlsitemap/sql/pgsql_install.php b/plugins/xmlsitemap/sql/pgsql_install.php index 9ca710e76..261ffcd14 100644 --- a/plugins/xmlsitemap/sql/pgsql_install.php +++ b/plugins/xmlsitemap/sql/pgsql_install.php @@ -33,7 +33,7 @@ * @package XMLSitemap */ -if (strpos(strtolower($_SERVER['PHP_SELF']), strtolower(basename(__FILE__))) !== FALSE) { +if (stripos($_SERVER['PHP_SELF'], basename(__FILE__)) !== false) { die('This file can not be used on its own!'); } diff --git a/public_html/admin/auth.inc.php b/public_html/admin/auth.inc.php index ba2f896a3..fd0346729 100644 --- a/public_html/admin/auth.inc.php +++ b/public_html/admin/auth.inc.php @@ -45,8 +45,7 @@ $uid = ''; if (!empty($_POST['loginname']) && !empty($_POST['passwd'])) { if ($_CONF['user_login_method']['standard']) { - $status = SEC_authenticate(COM_applyFilter($_POST['loginname']), - $_POST['passwd'], $uid); + $status = SEC_authenticate(Geeklog\Input::fPost('loginname'), Geeklog\Input::post('passwd'), $uid); } else { $status = ''; } @@ -98,7 +97,7 @@ if (isset($_POST['warn'])) { $display .= $LANG20[2] . '' - . COM_accessLog($LANG20[3] . ' ' . $_POST['loginname']); + . COM_accessLog($LANG20[3] . ' ' . Geeklog\Input::post('loginname')); } $display .= '
' diff --git a/public_html/admin/block.php b/public_html/admin/block.php index 1d69264b3..6b28ea7f5 100644 --- a/public_html/admin/block.php +++ b/public_html/admin/block.php @@ -185,57 +185,58 @@ function editdefaultblock($A, $access) function overridePostdata(&$A) { if (isset($_POST['name'])) { - $A['name'] = COM_sanitizeID($_POST['name']); + $A['name'] = COM_sanitizeID(Geeklog\Input::post('name')); } if (isset($_POST['title'])) { - $A['title'] = COM_stripslashes(strip_tags($_POST['title'])); + $A['title'] = GLText::stripTags(Geeklog\Input::post('title')); } if (isset($_POST['help'])) { - $A['help'] = COM_sanitizeUrl($_POST['help'], array('http', 'https')); + $A['help'] = COM_sanitizeUrl(Geeklog\Input::post('help'), array('http', 'https')); } if (in_array($_POST['type'], array('normal', 'portal', 'phpblock', 'gldefault'))) { - $A['type'] = $_POST['type']; + $A['type'] = Geeklog\Input::post('type'); } if (isset($_POST['blockorder'])) { - $A['blockorder'] = COM_applyFilter($_POST['blockorder'], true); + $A['blockorder'] = (int) Geeklog\Input::fPost('blockorder', 0); } if (isset($_POST['device'])) { - $A['device'] = COM_applyFilter($_POST['device']); + $A['device'] = Geeklog\Input::fPost('device'); } if (isset($_POST['content'])) { - $A['content'] = $_POST['content']; // to be sanitized when saving + $A['content'] = Geeklog\Input::post('content'); // to be sanitized when saving } if (isset($_POST['rdfurl'])) { - $A['rdfurl'] = $_POST['rdfurl']; // to be sanitized when saving + $A['rdfurl'] = Geeklog\Input::post('rdfurl'); // to be sanitized when saving } if (isset($_POST['rdfupdated'])) { - $A['rdfupdated'] = COM_applyFilter($_POST['rdfupdated']); + $A['rdfupdated'] = Geeklog\Input::fPost('rdfupdated'); } if (isset($_POST['rdflimit'])) { - $A['rdflimit'] = COM_applyFilter($_POST['rdflimit'], true); + $A['rdflimit'] = (int) Geeklog\Input::fPost('rdflimit'); } if (isset($_POST['phpblockfn'])) { - $A['phpblockfn'] = $_POST['phpblockfn']; // to be sanitized when saving + $A['phpblockfn'] = Geeklog\Input::post('phpblockfn'); // to be sanitized when saving } if (isset($_POST['owner_id'])) { - $A['owner_id'] = COM_applyFilter($_POST['owner_id'], true); + $A['owner_id'] = (int) Geeklog\Input::fPost('owner_id', 0); } if (isset($_POST['group_id'])) { - $A['group_id'] = COM_applyFilter($_POST['group_id'], true); + $A['group_id'] = (int) Geeklog\Input::fPost('group_id', 0); } list($A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon']) = SEC_getPermissionValues( - $_POST['perm_owner'], $_POST['perm_group'], - $_POST['perm_members'], $_POST['perm_anon']); + Geeklog\Input::post('perm_owner'), Geeklog\Input::post('perm_group'), + Geeklog\Input::post('perm_members'), Geeklog\Input::post('perm_anon') + ); $A['onleft'] = ($_POST['onleft'] == 1) ? 1 : 0; $A['is_enabled'] = ($_POST['is_enabled'] == 'on') ? 1 : 0; $A['allow_autotags'] = ($_POST['allow_autotags'] == 'on') ? 1 : 0; if (isset($_POST['cache_time'])) { - $A['cache_time'] = COM_applyFilter($_POST['cache_time'], true); + $A['cache_time'] = (int) Geeklog\Input::fPost('cache_time', 0); } } @@ -295,7 +296,7 @@ function editblock($bid = '') $A['phpblockfn'] = ''; $A['help'] = ''; $A['owner_id'] = $_USER['uid']; - if (isset ($_GROUPS['Block Admin'])) { + if (isset($_GROUPS['Block Admin'])) { $A['group_id'] = $_GROUPS['Block Admin']; } else { $A['group_id'] = SEC_getFeatureGroup('block.edit'); @@ -485,7 +486,8 @@ function editblock($bid = '') /** * Display two lists of blocks, separated by left and right * - * @return string HTML for the two lists + * @param int $position + * @return string HTML for the two lists */ function listblocks($position = BLOCK_ALL_POSITIONS) { @@ -508,8 +510,7 @@ function listblocks($position = BLOCK_ALL_POSITIONS) ), ); - $retval .= COM_startBlock($LANG21[19], '', - COM_getBlockTemplate('_admin_block', 'header')); + $retval .= COM_startBlock($LANG21[19], '', COM_getBlockTemplate('_admin_block', 'header')); $retval .= ADMIN_createMenu( $menu_arr, $LANG21[25], @@ -683,7 +684,7 @@ function saveblock($bid, $name, $title, $help, $type, $blockOrder, $device, $con $retval = ''; - $title = DB_escapeString(COM_stripslashes(strip_tags($title))); + $title = DB_escapeString(COM_stripslashes(GLText::stripTags($title))); $phpBlockFn = DB_escapeString(COM_stripslashes(trim($phpBlockFn))); if (empty($title) || !TOPIC_checkTopicSelectionControl()) { $retval .= COM_showMessageText($LANG21[64], $LANG21[63]) @@ -801,7 +802,7 @@ function saveblock($bid, $name, $title, $help, $type, $blockOrder, $device, $con } if ($bid > 0) { - DB_save($_TABLES['blocks'], 'bid,name,title,help,type,blockorder,device,content,rdfurl,rdfupdated,rdflimit,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled,allow_autotags,cache_time,rdf_last_modified,rdf_etag', "$bid,'$name','$title','$help','$type','$blockOrder','$device','$content','$rdfUrl','$rdfUpdated','$rdfLimit','$phpBlockFn',$onLeft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled,$allow_autotags,$cache_time,NULL,NULL"); + DB_save($_TABLES['blocks'], 'bid,name,title,help,type,blockorder,device,content,rdfurl,rdfupdated,rdflimit,phpblockfn,onleft,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon,is_enabled,allow_autotags,cache_time,rdf_last_modified,rdf_etag', "$bid,'$name','$title','$help','$type','$blockOrder','$device','$content','$rdfUrl',$rdfUpdated,'$rdfLimit','$phpBlockFn',$onLeft,$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$is_enabled,$allow_autotags,$cache_time,NULL,NULL"); } else { $sql = array(); $sql['mysql'] = "INSERT INTO {$_TABLES['blocks']} " @@ -888,8 +889,8 @@ function moveBlock() { global $_CONF, $_TABLES; - $bid = COM_applyFilter($_GET['bid']); - $where = COM_applyFilter($_GET['where']); + $bid = Geeklog\Input::fGet('bid'); + $where = Geeklog\Input::fGet('where'); // if the block id exists if (DB_count($_TABLES['blocks'], "bid", $bid) == 1) { @@ -979,35 +980,18 @@ function deleteBlock($bid) } // MAIN -$mode = ''; -if (!empty($_REQUEST['mode'])) { - $mode = $_REQUEST['mode']; -} - -$position = BLOCK_ALL_POSITIONS; -if (isset($_REQUEST['position'])) { - $position = COM_applyFilter($_REQUEST['position'], true); -} - -$bid = ''; -if (!empty($_REQUEST['bid'])) { - $bid = COM_applyFilter($_REQUEST['bid']); -} +$mode = Geeklog\Input::request('mode', ''); +$position = (int) Geeklog\Input::fRequest('position', BLOCK_ALL_POSITIONS); +$bid = Geeklog\Input::fRequest('bid', ''); if (isset($_POST['blockenabler']) && SEC_checkToken()) { - $enabledblocks = array(); - if (isset($_POST['enabledblocks'])) { - $enabledblocks = $_POST['enabledblocks']; - } - $visibleblocks = array(); - if (isset($_POST['visibleblocks'])) { - $visibleblocks = $_POST['visibleblocks']; - } + $enabledblocks = Geeklog\Input::post('enabledblocks', array()); + $visibleblocks = Geeklog\Input::post('visibleblocks', array()); changeBlockStatus($enabledblocks, $visibleblocks); } if (($mode == $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete'])) { - if (!isset ($bid) || empty($bid) || ($bid == 0)) { + if (!isset($bid) || empty($bid) || ($bid == 0)) { COM_errorLog('Attempted to delete block, bid empty or null, value =' . $bid); COM_redirect($_CONF['site_admin_url'] . '/block.php'); } elseif (SEC_checkToken()) { @@ -1017,64 +1001,32 @@ function deleteBlock($bid) COM_redirect($_CONF['site_admin_url'] . '/index.php'); } } elseif (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save']) && SEC_checkToken()) { - $name = ''; - if (isset ($_POST['name'])) { - $name = COM_sanitizeID($_POST['name']); - } - $help = ''; - if (isset ($_POST['help'])) { - $help = COM_sanitizeUrl($_POST['help'], array('http', 'https')); - } - $blockorder = 0; - if (isset ($_POST['blockorder'])) { - $blockorder = COM_applyFilter($_POST['blockorder'], true); - } - $device = Device::ALL; - if (isset ($_POST['device'])) { - $device = COM_applyFilter($_POST['device']); - } - $content = ''; - if (isset ($_POST['content'])) { - $content = $_POST['content']; - } - $rdfurl = ''; - if (isset ($_POST['rdfurl'])) { - $rdfurl = $_POST['rdfurl']; // to be sanitized later - } - $rdfupdated = ''; - if (isset ($_POST['rdfupdated'])) { - $rdfupdated = COM_applyFilter($_POST['rdfupdated']); - } - $rdflimit = 0; - if (isset ($_POST['rdflimit'])) { - $rdflimit = COM_applyFilter($_POST['rdflimit'], true); - } - $phpblockfn = ''; - if (isset ($_POST['phpblockfn'])) { - $phpblockfn = $_POST['phpblockfn']; - } - $is_enabled = ''; - if (isset ($_POST['is_enabled'])) { - $is_enabled = $_POST['is_enabled']; - } - $allow_autotags = ''; - if (isset ($_POST['allow_autotags'])) { - $allow_autotags = $_POST['allow_autotags']; + $name = Geeklog\Input::post('name', ''); + if (!empty($name)) { + $name = COM_sanitizeID($name); } - $cache_time = $_CONF['default_cache_time_block']; - if (isset ($_POST['cache_time'])) { - $cache_time = COM_applyFilter($_POST['cache_time'], true); + $help = Geeklog\Input::post('help', ''); + if (!empty($help)) { + $help = COM_sanitizeUrl($help, array('http', 'https')); } - $display .= saveblock($bid, $name, $_POST['title'], - $help, $_POST['type'], $blockorder, $device, $content, - $rdfurl, $rdfupdated, - $rdflimit, $phpblockfn, $_POST['onleft'], - COM_applyFilter($_POST['owner_id'], true), - COM_applyFilter($_POST['group_id'], true), - $_POST['perm_owner'], $_POST['perm_group'], - $_POST['perm_members'], $_POST['perm_anon'], + $blockorder = (int) Geeklog\Input::fPost('blockorder', 0); + $device = Geeklog\Input::fPost('device', Device::ALL); + $content = Geeklog\Input::post('content', ''); + $rdfurl = Geeklog\Input::post('rdfurl', ''); // to be sanitized later + $rdfupdated = Geeklog\Input::fPost('rdfupdated', ''); + $rdflimit = (int) Geeklog\Input::fPost('rdflimit', 0); + $phpblockfn = Geeklog\Input::post('phpblockfn', ''); + $is_enabled = Geeklog\Input::post('is_enabled', ''); + $allow_autotags = Geeklog\Input::post('allow_autotags', ''); + $cache_time = (int) Geeklog\Input::fPost('cache_time', $_CONF['default_cache_time_block']); + $display .= saveblock( + $bid, $name, Geeklog\Input::post('title'), $help, Geeklog\Input::post('type'), $blockorder, + $device, $content, $rdfurl, $rdfupdated, $rdflimit, $phpblockfn, Geeklog\Input::post('onleft'), + (int) Geeklog\Input::fPost('owner_id', 0), (int) Geeklog\Input::fPost('group_id', 0), + Geeklog\Input::post('perm_owner'), Geeklog\Input::post('perm_group'), + Geeklog\Input::post('perm_members'), Geeklog\Input::post('perm_anon'), $is_enabled, $allow_autotags, $cache_time); -} elseif ($mode == 'edit') { +} elseif ($mode === 'edit') { $tmp = editblock($bid); $display = COM_createHTMLDocument($tmp, array('pagetitle' => $LANG21[3])); } elseif ($mode == 'move') { diff --git a/public_html/admin/comment.php b/public_html/admin/comment.php index 0c748dbd9..80a454d17 100644 --- a/public_html/admin/comment.php +++ b/public_html/admin/comment.php @@ -8,7 +8,7 @@ // | | // | Geeklog block administration. | // +---------------------------------------------------------------------------+ -// | Copyright (C) 2000-2012 by the following authors: | +// | Copyright (C) 2000-2016 by the following authors: | // | | // | Authors: Tony Bibbs - tony AT tonybibbs DOT com | // | Mark Limburg - mlimburg AT users DOT sourceforge DOT net | @@ -41,6 +41,7 @@ define('SUFFIX_COMMENTS', '_comments'); define('SUFFIX_COMMENT_SUBMISSIONS', '_submissions'); +define('COMMENT_MAX_LENGTH', 60); // Geeklog common function library require_once '../lib-common.php'; @@ -98,16 +99,11 @@ function ADMIN_getListField_comments($fieldName, $fieldValue, $A, $iconArray, $s $encoding = COM_getEncodingt(); } - if (!in_array($A['type'], array('article', 'staticpages', 'polls'))) { - throw new Exception(__FUNCTION__ . ': unknown type "' . $A['type'] . '" was given'); - } - $commentId = $A['cid']; switch ($fieldName) { case 'selector': - $fieldValue = ''; + $fieldValue = ''; break; case 'edit': @@ -120,8 +116,7 @@ function ADMIN_getListField_comments($fieldName, $fieldValue, $A, $iconArray, $s . htmlspecialchars($commentId, ENT_QUOTES, $encoding); } - $fieldValue = '' - . $iconArray['edit'] . ''; + $fieldValue = '' . $iconArray['edit'] . ''; break; case 'type': @@ -130,35 +125,24 @@ function ADMIN_getListField_comments($fieldName, $fieldValue, $A, $iconArray, $s $fieldValue = $LANG01[11]; break; - case 'staticpages': - $fieldValue = $LANG_STATIC['staticpages']; - break; - - case 'polls': - $fieldValue = $LANG_POLLS['poll']; + default: + $fieldValue = ucfirst($fieldValue); break; } break; case 'sid': - $what = 'title,url'; - - switch ($A['type']) { - case 'article': - list($title, $url) = plugin_getiteminfo_story($fieldValue, $what); - break; - - case 'staticpages': - list($title, $url) = plugin_getiteminfo_staticpages($fieldValue, $what); - break; - - case 'polls': - list($title, $url) = plugin_getiteminfo_polls($fieldValue, $what); - break; + $result = PLG_getItemInfo($A['type'], $fieldValue, 'title,url'); + if (is_array($result) && isset($result[0], $result[1])) { + list ($title, $url) = $result; + $fieldValue = '' . htmlspecialchars($title, ENT_QUOTES, $encoding) . ''; + } elseif (is_array(0) && isset($result[1])) { + list ($title) = $result; + $fieldValue = htmlspecialchars($title, ENT_QUOTES, $encoding); + } else { + $fieldValue = ''; } - - $fieldValue = '' - . htmlspecialchars($title, ENT_QUOTES, $encoding) . ''; + break; case 'title': @@ -168,6 +152,7 @@ function ADMIN_getListField_comments($fieldName, $fieldValue, $A, $iconArray, $s break; case 'comment': + $fieldValue = COM_truncate(GLText::stripTags($fieldValue), COMMENT_MAX_LENGTH, '...'); break; case 'uid': @@ -212,16 +197,16 @@ function getTypeSelector($itemType) $selected = ($itemType === 'article') ? ' selected="selected"' : ''; $retval .= '' . LB; - - if (in_array('staticpages', $_PLUGINS)) { - $selected = ($itemType === 'staticpages') ? ' selected="selected"' : ''; - $retval .= '' . LB; - } - - if (in_array('polls', $_PLUGINS)) { - $selected = ($itemType === 'polls') ? ' selected="selected"' : ''; - $retval .= '' . LB; - } + + // Add enabled plugins that use comments + foreach ($_PLUGINS as $pi_name) { + $function = 'plugin_displaycomment_' . $pi_name; + if (function_exists($function)) { + // Since can display comments assume it uses comment system + $selected = ($itemType === $pi_name) ? ' selected="selected"' : ''; + $retval .= '' . LB; + } + } $retval .= '' . LB; @@ -297,29 +282,11 @@ function ADMIN_buildCommentList($suffix, $tableName, $securityToken) $itemType = \Geeklog\Input::fPost('item_type', ''); - switch ($itemType) { - case 'article': - case 'all': - break; - - case 'staticpages': - if (!in_array('staticpages', $_PLUGINS)) { - $itemType = ''; - } - break; - - case 'polls': - if (!in_array('polls', $_PLUGINS)) { - $itemType = ''; - } - break; - - default: - $itemType = ''; - break; + if (($itemType !== 'article') && ($itemType !== 'all') && !in_array($itemType, $_PLUGINS)) { + $itemType = ''; } - if (($itemType === '') || ($itemType === 'all')) { + if (empty($itemType) || ($itemType === 'all')) { $sqlForType = ''; } else { $sqlForType = " AND (type = '" . DB_escapeString($itemType) . "') "; diff --git a/public_html/admin/configuration.php b/public_html/admin/configuration.php index 4c898c5f8..4915ea2c7 100644 --- a/public_html/admin/configuration.php +++ b/public_html/admin/configuration.php @@ -2,7 +2,7 @@ /* Reminder: always indent with 4 spaces (no tabs). */ // +---------------------------------------------------------------------------+ -// | Geeklog 1.8 | +// | Geeklog 2.1 | // +---------------------------------------------------------------------------+ // | configuration.php | // | | @@ -39,11 +39,9 @@ /** * Helper function: Provide language dropdown - * * NOTE: Note that key/value are being swapped! * * @return array Array of (filename, displayname) pairs - * */ function configmanager_select_language_helper() { @@ -54,11 +52,9 @@ function configmanager_select_language_helper() /** * Helper function: Provide themes dropdown - * * NOTE: Beautifying code duplicated from usersettings.php * * @return array Array of (filename, displayname) pairs - * */ function configmanager_select_theme_helper() { @@ -72,7 +68,8 @@ function configmanager_select_theme_helper() $bwords = array(); foreach ($words as $th) { if ((strtolower($th[0]) == $th[0]) && - (strtolower($th[1]) == $th[1])) { + (strtolower($th[1]) == $th[1]) + ) { $bwords[] = ucfirst($th); } else { $bwords[] = $th; @@ -89,7 +86,6 @@ function configmanager_select_theme_helper() * Helper function: Provide timezone dropdown * * @return array Array of (timezone-long-name, timezone-short-name) pairs - * */ function configmanager_select_timezone_helper() { @@ -104,7 +100,6 @@ function configmanager_select_timezone_helper() * Helper function: Provide dropdown for Permanent Cookie Timeout * * @return array Array of (description, timeout-in-seconds) pairs - * */ function configmanager_select_default_perm_cookie_timeout_helper() { @@ -128,7 +123,6 @@ function configmanager_select_default_perm_cookie_timeout_helper() * Helper function: Provide advanced editors dropdown * * @return array Array of (filename, displayname) pairs - * */ function configmanager_select_advanced_editor_name_helper() { @@ -140,12 +134,13 @@ function configmanager_select_advanced_editor_name_helper() $editorFiles = array(); $fd = opendir($_CONF['path_editors']); clearstatcache(); - while (($dir = @readdir($fd)) == TRUE) { + while (($dir = @readdir($fd)) == true) { if (is_dir($_CONF['path_editors'] . $dir) && - $dir <> '.' && - $dir <> '..' && - $dir <> 'CVS' && - substr($dir, 0 , 1) <> '.') { + $dir <> '.' && + $dir <> '..' && + $dir <> 'CVS' && + substr($dir, 0, 1) <> '.' + ) { $editorFiles[] = $dir; } } @@ -167,7 +162,8 @@ function configmanager_select_advanced_editor_name_helper() $bwords = array(); foreach ($words as $th) { if ((strtolower($th[0]) == $th[0]) && - (strtolower($th[1]) == $th[1])) { + (strtolower($th[1]) == $th[1]) + ) { $bwords[] = ucfirst($th); } else { $bwords[] = $th; @@ -184,12 +180,12 @@ function configmanager_select_advanced_editor_name_helper() /** * Custom validation rule for copyrightyear * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_copyrightyear($rule, $ruleParams) { +function custom_validation_copyrightyear($rule, $ruleParams) +{ $year = $ruleParams[0]['copyrightyear']; return preg_match('/^\d{1,4}\s{0,1}\-{0,1}\s{0,1}\d{0,4}$/', $year); @@ -198,19 +194,19 @@ function custom_validation_copyrightyear($rule, $ruleParams) { /** * Custom validation rule for mail_settings[sendmail_path] * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_mail_settings_sendmail_path($rule, $ruleParams) { +function custom_validation_mail_settings_sendmail_path($rule, $ruleParams) +{ $ret = true; - if ( isset($ruleParams[2]['backend']) && $ruleParams[2]['backend'] == 'sendmail' ) { - if ( isset($ruleParams[0]['mail_settings[sendmail_path]']) && - empty($ruleParams[0]['mail_settings[sendmail_path]']) ) - { + if (isset($ruleParams[2]['backend']) && $ruleParams[2]['backend'] == 'sendmail') { + if (isset($ruleParams[0]['mail_settings[sendmail_path]']) && + empty($ruleParams[0]['mail_settings[sendmail_path]']) + ) { $ret = false; - } else if ( is_string($ruleParams[0]['mail_settings[sendmail_path]']) ) { + } else if (is_string($ruleParams[0]['mail_settings[sendmail_path]'])) { $ret = true; } } @@ -221,14 +217,14 @@ function custom_validation_mail_settings_sendmail_path($rule, $ruleParams) { /** * Custom validation rule for Feed Limit * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_rdf_limit($rule, $ruleParams) { +function custom_validation_rdf_limit($rule, $ruleParams) +{ $ret = false; - if ( isset($ruleParams[0]['rdf_limit']) ) { + if (isset($ruleParams[0]['rdf_limit'])) { $ret = preg_match('/^[\d]+h?$/i', $ruleParams[0]['rdf_limit']); } @@ -238,15 +234,15 @@ function custom_validation_rdf_limit($rule, $ruleParams) { /** * Custom validation rule for check path existence * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_path($rule, $ruleParams) { +function custom_validation_path($rule, $ruleParams) +{ $ret = false; - if ( isset($ruleParams[0]) ) { - foreach ($ruleParams[0] as $paramName => $paramValue ) { + if (isset($ruleParams[0])) { + foreach ($ruleParams[0] as $paramName => $paramValue) { break; } $ret = is_dir($ruleParams[0][$paramName]); @@ -258,15 +254,15 @@ function custom_validation_path($rule, $ruleParams) { /** * Custom validation rule for check file existence * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_file($rule, $ruleParams) { +function custom_validation_file($rule, $ruleParams) +{ $ret = false; - if ( isset($ruleParams[0]) ) { - foreach ($ruleParams[0] as $paramName => $paramValue ) { + if (isset($ruleParams[0])) { + foreach ($ruleParams[0] as $paramName => $paramValue) { break; } $ret = file_exists($ruleParams[0][$paramName]); @@ -278,24 +274,24 @@ function custom_validation_file($rule, $ruleParams) { /** * Custom validation rule for page limits for search * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_search_limits($rule, $ruleParams) { +function custom_validation_search_limits($rule, $ruleParams) +{ $ret = false; - if ( isset($ruleParams[0]['search_limits']) ) { + if (isset($ruleParams[0]['search_limits'])) { $limits = explode(',', $ruleParams[0]['search_limits']); $prevLimit = 0; foreach ($limits as $limit) { - if ( !is_numeric($limit) || $limit < 0 ) { + if (!is_numeric($limit) || $limit < 0) { $ret = false; break; } - if ( $limit < $prevLimit ) { + if ($limit < $prevLimit) { $ret = false; break; } @@ -311,22 +307,22 @@ function custom_validation_search_limits($rule, $ruleParams) { /** * Custom validation rule for number of searh results * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_num_search_results($rule, $ruleParams) { +function custom_validation_num_search_results($rule, $ruleParams) +{ global $_CONF; $ret = false; - if ( isset($_CONF['search_limits']) && - isset($ruleParams[0]['num_search_results']) ) - { + if (isset($_CONF['search_limits']) && + isset($ruleParams[0]['num_search_results']) + ) { $limits = explode(',', $_CONF['search_limits']); - if ( in_array($ruleParams[0]['num_search_results'], $limits) ) { + if (in_array($ruleParams[0]['num_search_results'], $limits)) { $ret = true; } } @@ -337,19 +333,19 @@ function custom_validation_num_search_results($rule, $ruleParams) { /** * Custom validation rule for theme * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_theme($rule, $ruleParams) { +function custom_validation_theme($rule, $ruleParams) +{ global $_CONF; $ret = false; - if ( isset($_CONF['path_themes']) && - isset($ruleParams[0]['theme']) ) - { - if ( is_dir($_CONF['path_themes'] . DIRECTORY_SEPARATOR . $ruleParams[0]['theme']) ) { + if (isset($_CONF['path_themes']) && + isset($ruleParams[0]['theme']) + ) { + if (is_dir($_CONF['path_themes'] . DIRECTORY_SEPARATOR . $ruleParams[0]['theme'])) { $ret = true; } } @@ -360,18 +356,18 @@ function custom_validation_theme($rule, $ruleParams) { /** * Custom validation rule for path_themes * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_path_themes($rule, $ruleParams) { +function custom_validation_path_themes($rule, $ruleParams) +{ $ret = false; - if ( isset($ruleParams[0]['path_themes']) && is_dir($ruleParams[0]['path_themes']) ) { + if (isset($ruleParams[0]['path_themes']) && is_dir($ruleParams[0]['path_themes'])) { $ret = true; } - if ( substr($ruleParams[0]['path_themes'], -1) !== DIRECTORY_SEPARATOR ) { + if (substr($ruleParams[0]['path_themes'], -1) !== DIRECTORY_SEPARATOR) { $ret = false; } @@ -381,19 +377,19 @@ function custom_validation_path_themes($rule, $ruleParams) { /** * Custom validation rule for path_to_mogrify * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_path_to_mogrify($rule, $ruleParams) { +function custom_validation_path_to_mogrify($rule, $ruleParams) +{ global $_CONF; $ret = false; - if ( isset($ruleParams[0]['path_to_mogrify']) && isset($_CONF['image_lib']) && - $_CONF['image_lib'] == 'imagemagick' && - file_exists($ruleParams[0]['path_to_mogrify']) ) - { + if (isset($ruleParams[0]['path_to_mogrify']) && isset($_CONF['image_lib']) && + $_CONF['image_lib'] == 'imagemagick' && + file_exists($ruleParams[0]['path_to_mogrify']) + ) { $ret = true; } @@ -403,19 +399,19 @@ function custom_validation_path_to_mogrify($rule, $ruleParams) { /** * Custom validation rule for path_to_netpbm * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_path_to_netpbm($rule, $ruleParams) { +function custom_validation_path_to_netpbm($rule, $ruleParams) +{ global $_CONF; $ret = false; - if ( isset($ruleParams[0]['path_to_netpbm']) && isset($_CONF['image_lib']) && - $_CONF['image_lib'] == 'netpbm' && - is_dir($ruleParams[0]['path_to_netpbm']) ) - { + if (isset($ruleParams[0]['path_to_netpbm']) && isset($_CONF['image_lib']) && + $_CONF['image_lib'] == 'netpbm' && + is_dir($ruleParams[0]['path_to_netpbm']) + ) { $ret = true; } @@ -425,19 +421,19 @@ function custom_validation_path_to_netpbm($rule, $ruleParams) { /** * Custom validation rule for language * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_language($rule, $ruleParams) { +function custom_validation_language($rule, $ruleParams) +{ global $_CONF; $ret = false; $languages = array_flip(MBYTE_languageList($_CONF['default_charset'])); - if ( isset($ruleParams[0]['language']) && - in_array($ruleParams[0]['language'], $languages) ) - { + if (isset($ruleParams[0]['language']) && + in_array($ruleParams[0]['language'], $languages) + ) { $ret = true; } @@ -447,21 +443,21 @@ function custom_validation_language($rule, $ruleParams) { /** * Custom validation rule for timezone * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_timezone($rule, $ruleParams) { +function custom_validation_timezone($rule, $ruleParams) +{ global $_CONF; require_once $_CONF['path_system'] . 'classes/timezoneconfig.class.php'; $timezones = array_flip(TimeZoneConfig::listAvailableTimeZones()); $ret = false; - if ( isset($ruleParams[0]['timezone']) && - in_array($ruleParams[0]['timezone'], $timezones) ) - { + if (isset($ruleParams[0]['timezone']) && + in_array($ruleParams[0]['timezone'], $timezones) + ) { $ret = true; } @@ -471,21 +467,21 @@ function custom_validation_timezone($rule, $ruleParams) { /** * Custom validation rule to determine if HTML or PHP tags exist * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_noTags($rule, $ruleParams) { +function custom_validation_noTags($rule, $ruleParams) +{ $ret = false; - + if (isset($ruleParams[0])) { - foreach ($ruleParams[0] as $paramName => $paramValue ) { + foreach ($ruleParams[0] as $paramName => $paramValue) { break; } - if ($ruleParams[0][$paramName] == strip_tags($ruleParams[0][$paramName])) { + if ($ruleParams[0][$paramName] == GLText::stripTags($ruleParams[0][$paramName])) { $ret = true; - } + } } return $ret; @@ -494,20 +490,20 @@ function custom_validation_noTags($rule, $ruleParams) { /** * Custom validation rule for single character * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_single_char($rule, $ruleParams) { +function custom_validation_single_char($rule, $ruleParams) +{ $ret = false; - if ( isset($ruleParams[0]) ) { - foreach ($ruleParams[0] as $paramName => $paramValue ) { + if (isset($ruleParams[0])) { + foreach ($ruleParams[0] as $paramName => $paramValue) { break; } - if ( preg_match('/^[\s\w.,;\-]{1}$/i', $paramValue) ) { + if (preg_match('/^[\s\w.,;\-]{1}$/i', $paramValue)) { $ret = true; } } @@ -518,37 +514,37 @@ function custom_validation_single_char($rule, $ruleParams) { /** * Custom validation rule for hash function * - * @param string $rule String of rule name - * @param array $ruleParams Parameter of validation + * @param string $rule String of rule name + * @param array $ruleParams Parameter of validation * @return boolean Success - * */ -function custom_validation_hash_function($rule, $ruleParams) { +function custom_validation_hash_function($rule, $ruleParams) +{ $ret = false; switch ($ruleParams[0]['pass_alg']) { - case HashFunction::md5: - if (function_exists('md5')) $ret = true; - break; + case HashFunction::md5: + if (function_exists('md5')) $ret = true; + break; - case HashFunction::sha1: - if (function_exists('sha1')) $ret = true; - break; + case HashFunction::sha1: + if (function_exists('sha1')) $ret = true; + break; - case HashFunction::sha256: - if (CRYPT_SHA256 == 1) $ret = true; - break; + case HashFunction::sha256: + if (CRYPT_SHA256 == 1) $ret = true; + break; - case HashFunction::sha512: - if (CRYPT_SHA512 == 1) $ret = true; - break; + case HashFunction::sha512: + if (CRYPT_SHA512 == 1) $ret = true; + break; - case HashFunction::blowfish: - if (CRYPT_BLOWFISH == 1) $ret = true; - break; + case HashFunction::blowfish: + if (CRYPT_BLOWFISH == 1) $ret = true; + break; - default: - $ret = false; + default: + $ret = false; } return $ret; @@ -562,7 +558,7 @@ function custom_validation_hash_function($rule, $ruleParams) { $default_conf_group = 'Core'; if (!SEC_inGroup('Root')) { $default_conf_group = $config->_get_groups(); - if ( !empty($default_conf_group) ) { + if (!empty($default_conf_group)) { $default_conf_group = array_values($default_conf_group); $default_conf_group = $default_conf_group[0]; } else { @@ -570,33 +566,29 @@ function custom_validation_hash_function($rule, $ruleParams) { exit; } } -$conf_group = array_key_exists('conf_group', $_POST) -// ? $_POST['conf_group'] : $default_conf_group; - ? COM_applyFilter($_POST['conf_group']) : $default_conf_group; - -if (array_key_exists('set_action', $_POST) && SEC_checkToken()){ +$conf_group = Geeklog\Input::fPost('conf_group', $default_conf_group); +if (array_key_exists('set_action', $_POST) && SEC_checkToken()) { if ($_POST['set_action'] == 'restore') { $config->restore_param( - $_POST['name'], $conf_group, $_POST['subgroup'], $_POST['tab'] + Geeklog\Input::post('name'), $conf_group, Geeklog\Input::post('subgroup'), Geeklog\Input::post('tab') ); } elseif ($_POST['set_action'] == 'unset') { $config->unset_param( - $_POST['name'], $conf_group, $_POST['subgroup'], $_POST['tab'] + Geeklog\Input::post('name'), $conf_group, Geeklog\Input::post('subgroup'), Geeklog\Input::post('tab') ); } // notify plugins when config item enabled or disabled - $config_item[] = $_POST['name']; + $config_item[] = Geeklog\Input::post('name'); PLG_configChange($conf_group, $config_item); - $subgroup = array_key_exists('subgroup', $_POST) - ? COM_applyFilter($_POST['subgroup']) : null; + $subgroup = Geeklog\Input::fPost('subgroup', null); $display = $config->get_ui($conf_group, $subgroup); } elseif (array_key_exists('form_submit', $_POST) && SEC_checkToken()) { $result = null; - if (! array_key_exists('form_reset', $_POST)) { - if ($conf_group == 'Core') { + if (!array_key_exists('form_reset', $_POST)) { + if ($conf_group === 'Core') { require_once 'configuration_validation.php'; } else { // Retrieve plugin config validation if found @@ -614,17 +606,13 @@ function custom_validation_hash_function($rule, $ruleParams) { } } //$display = $config->get_ui($conf_group, $_POST['sub_group'], $result); - $sub_group = array_key_exists('sub_group', $_POST) - ? COM_applyFilter($_POST['sub_group']) : '0'; + $sub_group = Geeklog\Input::fPost('sub_group', '0'); $display = $config->get_ui($conf_group, $sub_group, $result); } else { //$display = $config->get_ui($conf_group, array_key_exists('subgroup', $_POST) // ? $_POST['subgroup'] : null); - $subgroup = array_key_exists('subgroup', $_POST) - ? COM_applyFilter($_POST['subgroup']) : null; + $subgroup = Geeklog\Input::fPost('subgroup', null); $display = $config->get_ui($conf_group, $subgroup); } COM_output($display); - -?> diff --git a/public_html/admin/configuration_validation.php b/public_html/admin/configuration_validation.php index 4d918eb99..47f5e5151 100644 --- a/public_html/admin/configuration_validation.php +++ b/public_html/admin/configuration_validation.php @@ -152,18 +152,11 @@ $LANG_VALIDATION['path'] : $LANG_VALIDATION['default'] ); -/* Subgroup Site, Tab Pear */ -$_CONF_VALIDATE['Core']['have_pear'] = array('rule' => 'boolean'); -$_CONF_VALIDATE['Core']['path_pear'] = array( - 'rule' => 'path', - 'message' => isset($LANG_VALIDATION['path']) ? - $LANG_VALIDATION['path'] : $LANG_VALIDATION['default'] -); - -/* Subgroup Site, Tab MySQL */ +/* Subgroup Site, Tab Database */ +$_CONF_VALIDATE['Core']['dbdump_filename_prefix'] = array('rule' => 'stringOrEmpty'); $_CONF_VALIDATE['Core']['dbdump_tables_only'] = array('rule' => 'boolean'); $_CONF_VALIDATE['Core']['dbdump_gzip'] = array('rule' => 'boolean'); -$_CONF_VALIDATE['Core']['dbdump_filename_prefix'] = array('rule' => 'stringOrEmpty'); +$_CONF_VALIDATE['Core']['dbdump_max_files'] = array('rule' => 'numeric'); /* Subgroup Site, Tab Search */ $_CONF_VALIDATE['Core']['search_style'] = array('rule' => array('inList', array('google', 'table'), true)); diff --git a/public_html/admin/database.php b/public_html/admin/database.php index 438977331..0e8e921a3 100644 --- a/public_html/admin/database.php +++ b/public_html/admin/database.php @@ -39,13 +39,18 @@ require_once '../lib-common.php'; require_once 'auth.inc.php'; -require_once $_CONF['path'].'system/classes/dbbackup.class.php'; +// Currently, database feature is supported with MySQL only +if ($_DB_dbms !== 'mysql') { + COM_redirect($_CONF['site_url']); +} + +require_once $_CONF['path'] . 'system/classes/dbbackup.class.php'; $display = ''; -$page = ''; +$page = ''; // If user isn't a root user, bail. -if (!SEC_inGroup('Root') ) { +if (!SEC_inGroup('Root')) { $display .= COM_showMessageText($MESSAGE[29], $MESSAGE[30]); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_DB_BACKUP['database_admin'])); COM_accessLog("User {$_USER['username']} tried to illegally access the database backup screen."); @@ -56,11 +61,11 @@ require_once $_CONF['path_system'] . 'lib-admin.php'; /** -* Sort backup files with newest first, oldest last. -* For use with usort() function. -* This is needed because the sort order of the backup files, coming from the -* 'readdir' function, might not be that way. -*/ + * Sort backup files with newest first, oldest last. + * For use with usort() function. + * This is needed because the sort order of the backup files, coming from the + * 'readdir' function, might not be that way. + */ function DBADMIN_compareBackupFiles($pFileA, $pFileB) { global $_CONF; @@ -68,18 +73,17 @@ function DBADMIN_compareBackupFiles($pFileA, $pFileB) $lFiletimeA = @filemtime($_CONF['backup_path'] . $pFileA); $lFiletimeB = @filemtime($_CONF['backup_path'] . $pFileB); if ($lFiletimeA == $lFiletimeB) { - return 0; + return 0; } return ($lFiletimeA > $lFiletimeB) ? -1 : 1; } /** -* List all backups, i.e. all files ending in .sql -* -* @return string HTML for the list of files or an error when not writable -* -*/ + * List all backups, i.e. all files ending in .sql + * + * @return string HTML for the list of files or an error when not writable + */ function DBADMIN_list() { global $_CONF, $_TABLES, $_IMAGE_TYPE, $LANG08, $LANG_ADMIN, $LANG_DB_BACKUP; @@ -92,7 +96,8 @@ function DBADMIN_list() $index = 0; while ((false !== ($file = @readdir($fd)))) { if ($file <> '.' && $file <> '..' && $file <> 'CVS' && - preg_match('/\.sql(\.gz)?$/i', $file)) { + preg_match('/\.sql(\.gz)?$/i', $file) + ) { $index++; clearstatcache(); $backups[] = $file; @@ -109,7 +114,7 @@ function DBADMIN_list() $num_backups = count($backups); for ($i = 0; $i < $num_backups; $i++) { $downloadUrl = $thisUrl . '?download=x&file=' - . urlencode($backups[$i]); + . urlencode($backups[$i]); $downloadLink = COM_createLink(COM_createImage($diskIconUrl, $alt, $attr), $downloadUrl, $attr); $downloadLink .= '  '; @@ -117,9 +122,9 @@ function DBADMIN_list() $downloadLink .= COM_createLink($backups[$i], $downloadUrl, $attr); $backupfile = $_CONF['backup_path'] . $backups[$i]; $backupfilesize = COM_numberFormat(filesize($backupfile)) - . ' ' . $LANG_DB_BACKUP['bytes'] . ''; - $data_arr[$i] = array('file' => $downloadLink, - 'size' => $backupfilesize, + . ' ' . $LANG_DB_BACKUP['bytes'] . ''; + $data_arr[$i] = array('file' => $downloadLink, + 'size' => $backupfilesize, 'filename' => $backups[$i]); } @@ -130,31 +135,31 @@ function DBADMIN_list() $allInnoDB = DBADMIN_innodbStatus(); - $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php?backupdb=x', + $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php?backupdb=x', 'text' => $LANG_DB_BACKUP['create_backup']); - $menu_arr[] = array('url' => $_CONF['site_admin_url'].'/database.php?optimize=x', + $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php?optimize=x', 'text' => $LANG_DB_BACKUP['optimize_menu']); - if ( !$allInnoDB && DBADMIN_supported_engine( 'InnoDB' ) ) { - $menu_arr[] = array('url' => $_CONF['site_admin_url'].'/database.php?innodb=x', + if (!$allInnoDB && DBADMIN_supported_engine('InnoDB')) { + $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php?innodb=x', 'text' => $LANG_DB_BACKUP['convert_menu']); } - if ( $allInnoDB && DBADMIN_supported_engine( 'MyISAM' ) ) { - $menu_arr[] = array('url' => $_CONF['site_admin_url'].'/database.php?myisam=x', + if ($allInnoDB && DBADMIN_supported_engine('MyISAM')) { + $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php?myisam=x', 'text' => $LANG_DB_BACKUP['convert_myisam_menu']); } - $menu_arr[] = array('url' => $_CONF['site_admin_url'].'/database.php?config=x', + $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php?config=x', 'text' => $LANG_DB_BACKUP['configure']); - $menu_arr[] = array('url' => $_CONF['site_admin_url'], + $menu_arr[] = array('url' => $_CONF['site_admin_url'], 'text' => $LANG_ADMIN['admin_home']); $retval .= COM_startBlock($LANG_DB_BACKUP['database_admin'], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= ADMIN_createMenu( $menu_arr, "

{$LANG_DB_BACKUP['db_explanation']}

" . @@ -164,26 +169,26 @@ function DBADMIN_list() $header_arr = array( // display 'text' and use table field 'field' array('text' => $LANG_DB_BACKUP['backup_file'], 'field' => 'file'), - array('text' => $LANG_DB_BACKUP['size'], 'field' => 'size') + array('text' => $LANG_DB_BACKUP['size'], 'field' => 'size'), ); $text_arr = array( - 'form_url' => $thisUrl + 'form_url' => $thisUrl, ); $form_arr = array('bottom' => '', 'top' => ''); if ($num_backups > 0) { $form_arr['bottom'] = '' - . '' . LB; + . '' . LB; } $options = array('chkdelete' => true, 'chkminimum' => 0, - 'chkfield' => 'filename'); + 'chkfield' => 'filename'); $retval .= ADMIN_simpleList('', $header_arr, $text_arr, $data_arr, - $options, $form_arr); + $options, $form_arr); $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); } else { $retval .= COM_startBlock($LANG08[06], '', - COM_getBlockTemplate('_msg_block', 'header')); + COM_getBlockTemplate('_msg_block', 'header')); $retval .= $LANG_DB_BACKUP['no_access']; COM_errorLog($_CONF['backup_path'] . ' is not writable.', 1); $retval .= COM_endBlock(COM_getBlockTemplate('_msg_block', 'footer')); @@ -196,7 +201,7 @@ function DBADMIN_backupAjax() { global $_CONF, $_DB_name; - if ( !COM_isAjax()) die(); + if (!COM_isAjax()) die(); $retval = array(); $errorCode = 0; @@ -206,7 +211,7 @@ function DBADMIN_backupAjax() $backup_filename = $backup->getBackupFilename(); $rc = $backup->initBackup(); - if ( $rc === false ) { + if ($rc === false) { COM_errorLog("DBADMIN error - unable to initialize backup"); $errorCode = 1; $retval['statusMessage'] = 'Unable to initialize backup - see error.log for details'; @@ -217,7 +222,7 @@ function DBADMIN_backupAjax() $rowCount = 0; $backup_tables = $backup->getTableList(); - if ( is_array($backup_tables)) { + if (is_array($backup_tables)) { foreach ($backup_tables AS $index => $value) { $tableList[] = $value; $rowCount += DB_count($value); @@ -238,14 +243,13 @@ function DBADMIN_backupAjax() function DBADMIN_backupCompleteAjax() { - if ( !COM_isAjax()) die(); + if (!COM_isAjax()) die(); - $filename = ''; $retval = array(); + $filename = Geeklog\Input::post('backup_filename', ''); - if (isset($_POST['backup_filename'])) { - $filename = $_POST['backup_filename']; - $filename = COM_sanitizeFilename($filename,true); + if (!empty($filename)) { + $filename = COM_sanitizeFilename($filename, true); } $backup = new dbBackup(); $backup->setBackupFilename($filename); @@ -262,7 +266,7 @@ function DBADMIN_backupTableAjax() { global $_VARS; - if ( !COM_isAjax()) die(); + if (!COM_isAjax()) die(); $retval = array(); @@ -270,26 +274,19 @@ function DBADMIN_backupTableAjax() $_VARS['_dbback_allstructs'] = 0; } - $filename = ''; - - if (isset($_POST['backup_filename'])) { - $filename = $_POST['backup_filename']; - $filename = COM_sanitizeFilename($filename,true); + $filename = Geeklog\Input::post('backup_filename', ''); + if (!empty($filename)) { + $filename = COM_sanitizeFilename($filename, true); } - $table = COM_applyFilter($_POST['table']); - - if ( isset($_POST['start']) ) { - $start = COM_applyFilter($_POST['start'],true); - } else { - $start = 0; - } + $table = Geeklog\Input::fPost('table', ''); + $start = (int) Geeklog\Input::fPost('start', 0); $backup = new dbBackup(); $backup->setBackupFilename($filename); - list($rc,$sessionCounter,$recordCounter) = $backup->backupTable($table,$_VARS['_dbback_allstructs'],$start); + list($rc, $sessionCounter, $recordCounter) = $backup->backupTable($table, $_VARS['_dbback_allstructs'], $start); - switch ( $rc ) { + switch ($rc) { case 1 : $retval['errorCode'] = 2; $retval['startrecord'] = $recordCounter; @@ -315,11 +312,10 @@ function DBADMIN_backupTableAjax() /** -* Prepare to backup -* -* @return string HTML form -* -*/ + * Prepare to backup + * + * @return string HTML form + */ function DBADMIN_backupPrompt() { global $_CONF, $_TABLES, $_VARS, $_IMAGE_TYPE, $LANG01, $LANG08, $LANG_ADMIN, $LANG_DB_BACKUP; @@ -329,89 +325,89 @@ function DBADMIN_backupPrompt() if (is_writable($_CONF['backup_path'])) { $T = COM_newTemplate($_CONF['path_layout'] . 'admin/dbadmin'); - $T->set_file('page','dbbackup.thtml'); + $T->set_file('page', 'dbbackup.thtml'); $lastrun = DB_getItem($_TABLES['vars'], 'UNIX_TIMESTAMP(value)', - "name = 'db_backup_lastrun'"); + "name = 'db_backup_lastrun'"); $menu_arr = array(); $allInnoDB = DBADMIN_innodbStatus(); - $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php', + $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php', 'text' => $LANG_DB_BACKUP['database_admin']); - $menu_arr[] = array('url' => $_CONF['site_admin_url'].'/database.php?optimize=x', + $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php?optimize=x', 'text' => $LANG_DB_BACKUP['optimize_menu']); - if ( !$allInnoDB && DBADMIN_supported_engine( 'InnoDB' ) ) { - $menu_arr[] = array('url' => $_CONF['site_admin_url'].'/database.php?innodb=x', + if (!$allInnoDB && DBADMIN_supported_engine('InnoDB')) { + $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php?innodb=x', 'text' => $LANG_DB_BACKUP['convert_menu']); } - if ( $allInnoDB && DBADMIN_supported_engine( 'MyISAM' ) ) { - $menu_arr[] = array('url' => $_CONF['site_admin_url'].'/database.php?myisam=x', + if ($allInnoDB && DBADMIN_supported_engine('MyISAM')) { + $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/database.php?myisam=x', 'text' => $LANG_DB_BACKUP['convert_myisam_menu']); } - $menu_arr[] = array('url' => $_CONF['site_admin_url'], + $menu_arr[] = array('url' => $_CONF['site_admin_url'], 'text' => $LANG_ADMIN['admin_home']); $T->set_var('start_block', COM_startBlock($LANG_DB_BACKUP['database_admin'], '', - COM_getBlockTemplate('_admin_block', 'header'))); + COM_getBlockTemplate('_admin_block', 'header'))); - $T->set_var('admin_menu',ADMIN_createMenu( + $T->set_var('admin_menu', ADMIN_createMenu( $menu_arr, "", $_CONF['layout_url'] . '/images/icons/database.' . $_IMAGE_TYPE )); - $T->set_var('end_block',COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); + $T->set_var('end_block', COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); - $T->set_var('security_token',SEC_createToken()); - $T->set_var('security_token_name',CSRF_TOKEN); + $T->set_var('security_token', SEC_createToken()); + $T->set_var('security_token_name', CSRF_TOKEN); if (!empty($lastrun)) { $last = COM_getUserDateTimeFormat($lastrun); - $T->set_var('lang_last_backup',$LANG_DB_BACKUP['latest_backup']); - $T->set_var('last_backup',$last[0]); + $T->set_var('lang_last_backup', $LANG_DB_BACKUP['latest_backup']); + $T->set_var('last_backup', $last[0]); } - if ( isset($_VARS['_dbback_allstructs']) && $_VARS['_dbback_allstructs'] ) { - $T->set_var('struct_warning',$LANG_DB_BACKUP['backup_warning']); + if (isset($_VARS['_dbback_allstructs']) && $_VARS['_dbback_allstructs']) { + $T->set_var('struct_warning', $LANG_DB_BACKUP['backup_warning']); } $T->set_var(array( - 'action' => 'backup', - 'lang_backingup' => $LANG_DB_BACKUP['backingup'], - 'lang_backup' => $LANG_DB_BACKUP['do_backup'], - 'lang_success' => $LANG_DB_BACKUP['backup_successful'], - 'lang_cancel' => $LANG_ADMIN['cancel'], - 'lang_ajax_status' => $LANG_DB_BACKUP['backup_status'], + 'action' => 'backup', + 'lang_backingup' => $LANG_DB_BACKUP['backingup'], + 'lang_backup' => $LANG_DB_BACKUP['do_backup'], + 'lang_success' => $LANG_DB_BACKUP['backup_successful'], + 'lang_cancel' => $LANG_ADMIN['cancel'], + 'lang_ajax_status' => $LANG_DB_BACKUP['backup_status'], 'lang_backup_instructions' => $LANG_DB_BACKUP['backup_instructions'], - 'lang_title' => $LANG_DB_BACKUP['backup_title'], - 'lang_ok' => $LANG01['ok'], + 'lang_title' => $LANG_DB_BACKUP['backup_title'], + 'lang_ok' => $LANG01['ok'], )); $T->parse('output', 'page'); $retval .= $T->finish($T->get_var('output')); } else { $retval .= COM_startBlock($LANG08[06], '', - COM_getBlockTemplate('_msg_block', 'header')); + COM_getBlockTemplate('_msg_block', 'header')); $retval .= $LANG_DB_BACKUP['no_access']; COM_errorLog($_CONF['backup_path'] . ' is not writable.', 1); $retval .= COM_endBlock(COM_getBlockTemplate('_msg_block', 'footer')); } + return $retval; } /** -* Perform database backup -* -* @return string HTML success or error message -* -*/ + * Perform database backup + * + * @return string HTML success or error message + */ function DBADMIN_backup() { global $_CONF, $LANG08, $LANG_DB_BACKUP, $MESSAGE, $_IMAGE_TYPE, @@ -429,13 +425,12 @@ function DBADMIN_backup() } /** -* Download a backup file -* -* @param string $file Filename (without the path) -* @return void -* @note Filename should have been sanitized and checked before calling this. -* -*/ + * Download a backup file + * + * @param string $file Filename (without the path) + * @return void + * @note Filename should have been sanitized and checked before calling this. + */ function DBADMIN_download($file) { global $_CONF; @@ -450,23 +445,22 @@ function DBADMIN_download($file) $dl->setPath($_CONF['backup_path']); $dl->setAllowedExtensions(array( - 'sql' => 'application/x-gzip-compressed', - 'gz' => 'application/x-gzip-compressed', + 'sql' => 'application/x-gzip-compressed', + 'gz' => 'application/x-gzip-compressed', )); $dl->downloadFile($file); } /** -* Check for DB storage engine support -* -* @return true = if engine is supported, false = not supported -* -*/ -function DBADMIN_supported_engine( $type = 'MyISAM' ) + * Check for DB storage engine support + * + * @return true = if engine is supported, false = not supported + */ +function DBADMIN_supported_engine($type = 'MyISAM') { $retval = false; - if ( $type != 'MyISAM' || $type != 'InnoDB' ) { + if ($type != 'MyISAM' || $type != 'InnoDB') { $type = 'MyISAM'; } @@ -475,9 +469,10 @@ function DBADMIN_supported_engine( $type = 'MyISAM' ) for ($i = 0; $i < $numEngines; $i++) { $A = DB_fetchArray($result); - if (strcasecmp($A['Engine'], $type ) == 0) { + if (strcasecmp($A['Engine'], $type) == 0) { if ((strcasecmp($A['Support'], 'yes') == 0) || - (strcasecmp($A['Support'], 'default') == 0)) { + (strcasecmp($A['Support'], 'default') == 0) + ) { $retval = true; } break; @@ -488,7 +483,6 @@ function DBADMIN_supported_engine( $type = 'MyISAM' ) } - function DBADMIN_innodbStatus() { global $_CONF, $_TABLES, $_DB_name; @@ -556,48 +550,48 @@ function DBADMIN_innodb() global $_CONF, $LANG01, $LANG_ADMIN, $LANG_DB_BACKUP, $_IMAGE_TYPE; $retval = ''; - + $T = COM_newTemplate($_CONF['path_layout'] . 'admin/dbadmin'); - - $T->set_file('page','dbconvert.thtml'); + + $T->set_file('page', 'dbconvert.thtml'); $menu_arr = array( - array('url' => $_CONF['site_admin_url'] . '/database.php', + array('url' => $_CONF['site_admin_url'] . '/database.php', 'text' => $LANG_DB_BACKUP['database_admin']), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + array('url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home']), ); $T->set_var('start_block', COM_startBlock($LANG_DB_BACKUP['database_admin'], '', - COM_getBlockTemplate('_admin_block', 'header'))); + COM_getBlockTemplate('_admin_block', 'header'))); - $T->set_var('admin_menu',ADMIN_createMenu( - $menu_arr, - "", - $_CONF['layout_url'] . '/images/icons/database.' . $_IMAGE_TYPE) + $T->set_var('admin_menu', ADMIN_createMenu( + $menu_arr, + "", + $_CONF['layout_url'] . '/images/icons/database.' . $_IMAGE_TYPE) ); - $T->set_var('lang_title',$LANG_DB_BACKUP['convert_title']); - $T->set_var('lang_conversion_instructions',$LANG_DB_BACKUP['innodb_instructions']); + $T->set_var('lang_title', $LANG_DB_BACKUP['convert_title']); + $T->set_var('lang_conversion_instructions', $LANG_DB_BACKUP['innodb_instructions']); if (DBADMIN_innodbStatus()) { - $T->set_var('lang_conversion_status',$LANG_DB_BACKUP['already_converted']); + $T->set_var('lang_conversion_status', $LANG_DB_BACKUP['already_converted']); } else { - $T->set_var('lang_conversion_status',$LANG_DB_BACKUP['conversion_message']); + $T->set_var('lang_conversion_status', $LANG_DB_BACKUP['conversion_message']); } - $T->set_var('security_token',SEC_createToken()); - $T->set_var('security_token_name',CSRF_TOKEN); + $T->set_var('security_token', SEC_createToken()); + $T->set_var('security_token_name', CSRF_TOKEN); $T->set_var(array( - 'lang_convert' => $LANG_DB_BACKUP['convert_button'], - 'lang_cancel' => $LANG_ADMIN['cancel'], - 'lang_ok' => $LANG01['ok'], - 'lang_converting' => $LANG_DB_BACKUP['converting'], - 'lang_success' => $LANG_DB_BACKUP['innodb_success'], - 'lang_ajax_status' => $LANG_DB_BACKUP['conversion_status'], - 'to_engine' => 'InnoDB', - 'action' => "doinnodb", - 'mode' => "convertdb", + 'lang_convert' => $LANG_DB_BACKUP['convert_button'], + 'lang_cancel' => $LANG_ADMIN['cancel'], + 'lang_ok' => $LANG01['ok'], + 'lang_converting' => $LANG_DB_BACKUP['converting'], + 'lang_success' => $LANG_DB_BACKUP['innodb_success'], + 'lang_ajax_status' => $LANG_DB_BACKUP['conversion_status'], + 'to_engine' => 'InnoDB', + 'action' => "doinnodb", + 'mode' => "convertdb", )); - $T->set_var('end_block',COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); + $T->set_var('end_block', COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); $T->parse('output', 'page'); $retval .= $T->finish($T->get_var('output')); @@ -612,46 +606,46 @@ function DBADMIN_myisam() $retval = ''; $T = COM_newTemplate($_CONF['path_layout'] . 'admin/dbadmin'); - - $T->set_file('page','dbconvert.thtml'); + + $T->set_file('page', 'dbconvert.thtml'); $menu_arr = array( - array('url' => $_CONF['site_admin_url'] . '/database.php', + array('url' => $_CONF['site_admin_url'] . '/database.php', 'text' => $LANG_DB_BACKUP['database_admin']), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + array('url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home']), ); $T->set_var('start_block', COM_startBlock($LANG_DB_BACKUP['database_admin'], '', - COM_getBlockTemplate('_admin_block', 'header'))); + COM_getBlockTemplate('_admin_block', 'header'))); - $T->set_var('admin_menu',ADMIN_createMenu( - $menu_arr, - "", - $_CONF['layout_url'] . '/images/icons/database.' . $_IMAGE_TYPE) + $T->set_var('admin_menu', ADMIN_createMenu( + $menu_arr, + "", + $_CONF['layout_url'] . '/images/icons/database.' . $_IMAGE_TYPE) ); - $T->set_var('lang_title',$LANG_DB_BACKUP['convert_myisam_title']); - $T->set_var('lang_conversion_instructions',$LANG_DB_BACKUP['myisam_instructions']); + $T->set_var('lang_title', $LANG_DB_BACKUP['convert_myisam_title']); + $T->set_var('lang_conversion_instructions', $LANG_DB_BACKUP['myisam_instructions']); if (DBADMIN_myisamStatus()) { - $T->set_var('lang_conversion_status',$LANG_DB_BACKUP['already_converted']); + $T->set_var('lang_conversion_status', $LANG_DB_BACKUP['already_converted']); } else { - $T->set_var('lang_conversion_status',$LANG_DB_BACKUP['conversion_message']); + $T->set_var('lang_conversion_status', $LANG_DB_BACKUP['conversion_message']); } - $T->set_var('security_token',SEC_createToken()); - $T->set_var('security_token_name',CSRF_TOKEN); + $T->set_var('security_token', SEC_createToken()); + $T->set_var('security_token_name', CSRF_TOKEN); $T->set_var(array( - 'lang_convert' => $LANG_DB_BACKUP['convert_button'], - 'lang_cancel' => $LANG_ADMIN['cancel'], - 'lang_ok' => $LANG01['ok'], - 'lang_converting' => $LANG_DB_BACKUP['converting'], - 'lang_success' => $LANG_DB_BACKUP['myisam_success'], - 'lang_ajax_status' => $LANG_DB_BACKUP['conversion_status'], - 'to_engine' => 'MyISAM', - 'action' => "domyisam", - 'mode' => "convertdb", + 'lang_convert' => $LANG_DB_BACKUP['convert_button'], + 'lang_cancel' => $LANG_ADMIN['cancel'], + 'lang_ok' => $LANG01['ok'], + 'lang_converting' => $LANG_DB_BACKUP['converting'], + 'lang_success' => $LANG_DB_BACKUP['myisam_success'], + 'lang_ajax_status' => $LANG_DB_BACKUP['conversion_status'], + 'to_engine' => 'MyISAM', + 'action' => "domyisam", + 'mode' => "convertdb", )); - $T->set_var('end_block',COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); + $T->set_var('end_block', COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); $T->parse('output', 'page'); $retval .= $T->finish($T->get_var('output')); @@ -661,13 +655,12 @@ function DBADMIN_myisam() /** -* Convert to InnoDB tables -* -* @param string $startwith table to start with -* @param int $failures number of previous errors -* @return int number of errors during conversion -* -*/ + * Convert to InnoDB tables + * + * @param string $startwith table to start with + * @param int $failures number of previous errors + * @return int number of errors during conversion + */ function DBADMIN_convert_innodb($startwith = '', $failures = 0) { global $_CONF, $_TABLES, $_DB_name; @@ -692,7 +685,7 @@ function DBADMIN_convert_innodb($startwith = '', $failures = 0) $A = DB_fetchArray($result, true); $table = $A[0]; if (in_array($table, $_TABLES)) { - if (! empty($startwith)) { + if (!empty($startwith)) { if ($table == $startwith) { $startwith = ''; } else { @@ -710,11 +703,11 @@ function DBADMIN_convert_innodb($startwith = '', $failures = 0) // this is taking too long - kick off another request $startwith = $table; $url = $_CONF['site_admin_url'] . '/database.php?doinnodb=x'; - if (! empty($token)) { + if (!empty($token)) { $token = '&' . CSRF_TOKEN . '=' . $token; } header("Location: $url&startwith=$startwith&failures=$failures" - . $token); + . $token); exit; } @@ -722,7 +715,7 @@ function DBADMIN_convert_innodb($startwith = '', $failures = 0) if ($make_innodb === false) { $failures++; COM_errorLog('SQL error for table "' . $table . '" (ignored): ' - . DB_error()); + . DB_error()); } } } @@ -742,22 +735,22 @@ function DBADMIN_ajaxFinishCvt($engine) DB_delete($_TABLES['vars'], 'name', 'database_engine'); DB_query("INSERT INTO {$_TABLES['vars']} (name, value) VALUES ('database_engine', 'InnoDB')"); break; - case 'MyISAM' : + case 'MyISAM' : DB_delete($_TABLES['vars'], 'name', 'database_engine'); break; } + return true; } /** -* Convert to MyISAM tables -* -* @param string $startwith table to start with -* @param int $failures number of previous errors -* @return int number of errors during conversion -* -*/ + * Convert to MyISAM tables + * + * @param string $startwith table to start with + * @param int $failures number of previous errors + * @return int number of errors during conversion + */ function DBADMIN_convert_myisam($startwith = '', $failures = 0) { global $_CONF, $_TABLES, $_DB_name; @@ -782,7 +775,7 @@ function DBADMIN_convert_myisam($startwith = '', $failures = 0) $A = DB_fetchArray($result, true); $table = $A[0]; if (in_array($table, $_TABLES)) { - if (! empty($startwith)) { + if (!empty($startwith)) { if ($table == $startwith) { $startwith = ''; } else { @@ -800,11 +793,11 @@ function DBADMIN_convert_myisam($startwith = '', $failures = 0) // this is taking too long - kick off another request $startwith = $table; $url = $_CONF['site_admin_url'] . '/database.php?domyisam=x'; - if (! empty($token)) { + if (!empty($token)) { $token = '&' . CSRF_TOKEN . '=' . $token; } header("Location: $url&startwith=$startwith&failures=$failures" - . $token); + . $token); exit; } @@ -812,7 +805,7 @@ function DBADMIN_convert_myisam($startwith = '', $failures = 0) if ($make_myisam === false) { $failures++; COM_errorLog('SQL error for table "' . $table . '" (ignored): ' - . DB_error()); + . DB_error()); } } } @@ -823,13 +816,11 @@ function DBADMIN_convert_myisam($startwith = '', $failures = 0) } - /** -* Prepare for optimizing tables -* -* @return string HTML form -* -*/ + * Prepare for optimizing tables + * + * @return string HTML form + */ function DBADMIN_optimize() { global $_CONF, $_TABLES, $LANG01, $LANG_ADMIN, $LANG_DB_BACKUP, $_IMAGE_TYPE; @@ -837,53 +828,53 @@ function DBADMIN_optimize() $retval = ''; $lastrun = DB_getItem($_TABLES['vars'], 'UNIX_TIMESTAMP(value)', - "name = 'lastoptimizeddb'"); + "name = 'lastoptimizeddb'"); $T = COM_newTemplate($_CONF['path_layout'] . 'admin/dbadmin'); - $T->set_file('page','dbconvert.thtml'); + $T->set_file('page', 'dbconvert.thtml'); $menu_arr = array( - array('url' => $_CONF['site_admin_url'] . '/database.php', + array('url' => $_CONF['site_admin_url'] . '/database.php', 'text' => $LANG_DB_BACKUP['database_admin']), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + array('url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home']), ); $T->set_var('start_block', COM_startBlock($LANG_DB_BACKUP['database_admin'], '', - COM_getBlockTemplate('_admin_block', 'header'))); + COM_getBlockTemplate('_admin_block', 'header'))); - $T->set_var('admin_menu',ADMIN_createMenu( - $menu_arr, - "", - $_CONF['layout_url'] . '/images/icons/database.' . $_IMAGE_TYPE) + $T->set_var('admin_menu', ADMIN_createMenu( + $menu_arr, + "", + $_CONF['layout_url'] . '/images/icons/database.' . $_IMAGE_TYPE) ); - $T->set_var('lang_title',$LANG_DB_BACKUP['optimize_title']); - $T->set_var('lang_conversion_instructions',$LANG_DB_BACKUP['optimize_explain']); - $T->set_var('lang_conversion_status',$LANG_DB_BACKUP['optimization_message']); + $T->set_var('lang_title', $LANG_DB_BACKUP['optimize_title']); + $T->set_var('lang_conversion_instructions', $LANG_DB_BACKUP['optimize_explain']); + $T->set_var('lang_conversion_status', $LANG_DB_BACKUP['optimization_message']); if (!empty($lastrun)) { $last = COM_getUserDateTimeFormat($lastrun); - $T->set_var('lang_last_optimization',$LANG_DB_BACKUP['last_optimization']); - $T->set_var('last_optimization',$last[0]); + $T->set_var('lang_last_optimization', $LANG_DB_BACKUP['last_optimization']); + $T->set_var('last_optimization', $last[0]); } - $T->set_var('security_token',SEC_createToken()); - $T->set_var('security_token_name',CSRF_TOKEN); + $T->set_var('security_token', SEC_createToken()); + $T->set_var('security_token_name', CSRF_TOKEN); $T->set_var(array( - 'lang_convert' => $LANG_DB_BACKUP['optimize_button'], - 'lang_cancel' => $LANG_ADMIN['cancel'], - 'lang_ok' => $LANG01['ok'], - 'lang_converting' => $LANG_DB_BACKUP['optimizing'], - 'lang_success' => $LANG_DB_BACKUP['optimize_success'], - 'lang_ajax_status' => $LANG_DB_BACKUP['optimization_status'], - 'to_engine' => 'all', - 'action' => "dooptimize", - 'mode' => "optimize", + 'lang_convert' => $LANG_DB_BACKUP['optimize_button'], + 'lang_cancel' => $LANG_ADMIN['cancel'], + 'lang_ok' => $LANG01['ok'], + 'lang_converting' => $LANG_DB_BACKUP['optimizing'], + 'lang_success' => $LANG_DB_BACKUP['optimize_success'], + 'lang_ajax_status' => $LANG_DB_BACKUP['optimization_status'], + 'to_engine' => 'all', + 'action' => "dooptimize", + 'mode' => "optimize", )); - $T->set_var('end_block',COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); + $T->set_var('end_block', COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); $T->parse('output', 'page'); $retval .= $T->finish($T->get_var('output')); @@ -892,13 +883,12 @@ function DBADMIN_optimize() } /** -* Optimize database tables -* -* @param string $startwith table to start with -* @param int $failures number of previous errors -* @return int number of errors during conversion -* -*/ + * Optimize database tables + * + * @param string $startwith table to start with + * @param int $failures number of previous errors + * @return int number of errors during conversion + */ function DBADMIN_dooptimize($startwith = '', $failures = 0) { global $_CONF, $_TABLES; @@ -907,7 +897,7 @@ function DBADMIN_dooptimize($startwith = '', $failures = 0) $start = time(); $lasttable = DB_getItem($_TABLES['vars'], 'value', - "name = 'lastoptimizedtable'"); + "name = 'lastoptimizedtable'"); if (empty($startwith) && !empty($lasttable)) { $startwith = $lasttable; } @@ -929,7 +919,7 @@ function DBADMIN_dooptimize($startwith = '', $failures = 0) $A = DB_fetchArray($result, true); $table = $A[0]; if (in_array($table, $_TABLES)) { - if (! empty($startwith)) { + if (!empty($startwith)) { if ($table == $startwith) { $startwith = ''; } else { @@ -944,12 +934,12 @@ function DBADMIN_dooptimize($startwith = '', $failures = 0) // this is taking too long - kick off another request $startwith = $table; $url = $_CONF['site_admin_url'] - . '/database.php?dooptimize=x'; - if (! empty($token)) { + . '/database.php?dooptimize=x'; + if (!empty($token)) { $token = '&' . CSRF_TOKEN . '=' . $token; } header("Location: $url&startwith=$startwith&failures=$failures" - . $token); + . $token); exit; } @@ -963,16 +953,16 @@ function DBADMIN_dooptimize($startwith = '', $failures = 0) if ($optimize === false) { $failures++; COM_errorLog('SQL error for table "' . $table . '" (ignored): ' - . DB_error()); + . DB_error()); $startwith = $table; $url = $_CONF['site_admin_url'] - . '/database.php?dooptimize=x'; - if (! empty($token)) { + . '/database.php?dooptimize=x'; + if (!empty($token)) { $token = '&' . CSRF_TOKEN . '=' . $token; } header("Location: $url&startwith=$startwith&failures=$failures" - . $token); + . $token); exit; } } @@ -991,25 +981,26 @@ function DBADMIN_alterEngine($table_name, $engine = 'MyISAM') $retval = true; - $convert_engine = DB_query("ALTER TABLE $table_name ENGINE=".$engine, 1); + $convert_engine = DB_query("ALTER TABLE $table_name ENGINE=" . $engine, 1); if ($convert_engine === false) { $retval = false; - COM_errorLog('SQL error converting table "' . $table_name . '" to '.$engine.' (ignored): '.DB_error()); + COM_errorLog('SQL error converting table "' . $table_name . '" to ' . $engine . ' (ignored): ' . DB_error()); } + return $retval; } -function DBADMIN_ajaxConvertTable( $table, $engine = 'MyISAM') +function DBADMIN_ajaxConvertTable($table, $engine = 'MyISAM') { - if ( !COM_isAjax()) die(); + if (!COM_isAjax()) die(); $retval = array(); $return = array(); - $rc = DBADMIN_alterEngine($table,$engine); - if ( $rc === false ) { + $rc = DBADMIN_alterEngine($table, $engine); + if ($rc === false) { $retval['errorCode'] = 1; - $retval['statusMessage'] = 'Failure: '.$table.' was not converted to '.$engine; + $retval['statusMessage'] = 'Failure: ' . $table . ' was not converted to ' . $engine; } else { $retval['errorCode'] = 0; } @@ -1020,17 +1011,17 @@ function DBADMIN_ajaxConvertTable( $table, $engine = 'MyISAM') exit; } -function DBADMIN_ajaxOptimizeTable( $table ) +function DBADMIN_ajaxOptimizeTable($table) { - if ( !COM_isAjax()) die(); + if (!COM_isAjax()) die(); $retval = array(); $return = array(); $rc = DB_query("OPTIMIZE TABLE $table", 1); - if ( $rc === false ) { + if ($rc === false) { $retval['errorCode'] = 1; - $retval['statusMessage'] = 'Failure: '.$table.' was not optimized.'; + $retval['statusMessage'] = 'Failure: ' . $table . ' was not optimized.'; } else { $retval['errorCode'] = 0; } @@ -1048,7 +1039,7 @@ function DBADMIN_ajaxGetTableList($engine = 'MyISAM') $tableList = array(); $retval = array(); - if ( !COM_isAjax()) die(); + if (!COM_isAjax()) die(); $result = DB_query("SHOW TABLES"); $numTables = DB_numRows($result); @@ -1074,19 +1065,20 @@ function DBADMIN_ajaxGetTableList($engine = 'MyISAM') exit; } -function DBADMIN_validateEngine( $engine ) +function DBADMIN_validateEngine($engine) { $validEngineTypes = array('MyISAM', 'InnoDB'); - if ( in_array($engine,$validEngineTypes)) return true; + if (in_array($engine, $validEngineTypes)) return true; + return false; } /** -* Provide an interface to configure backups -* -* @return string HTML for configuration function -*/ + * Provide an interface to configure backups + * + * @return string HTML for configuration function + */ function DBADMIN_configBackup() { global $_CONF, $_TABLES, $_VARS, $LANG_DB_BACKUP, $LANG_ADMIN, $_IMAGE_TYPE, $_SCRIPTS; @@ -1094,7 +1086,7 @@ function DBADMIN_configBackup() $tablenames = $_TABLES; $included = ''; $excluded = ''; - $retval = ''; + $retval = ''; $exclude_tables = @unserialize($_VARS['_dbback_exclude']); if (!is_array($exclude_tables)) { @@ -1102,33 +1094,33 @@ function DBADMIN_configBackup() } $menu_arr = array( - array('url' => $_CONF['site_admin_url'] . '/database.php', + array('url' => $_CONF['site_admin_url'] . '/database.php', 'text' => $LANG_DB_BACKUP['database_admin']), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + array('url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home']), ); $T = COM_newTemplate($_CONF['path_layout'] . 'admin/dbadmin'); - - $T->set_file('page','dbbackupcfg.thtml'); - + + $T->set_file('page', 'dbbackupcfg.thtml'); + $_SCRIPTS->setJavaScriptFile('move_users', '/javascript/moveusers.js'); $T->set_var('start_block', COM_startBlock($LANG_DB_BACKUP['database_admin'], '', - COM_getBlockTemplate('_admin_block', 'header'))); + COM_getBlockTemplate('_admin_block', 'header'))); - $T->set_var('admin_menu',ADMIN_createMenu( - $menu_arr, - $LANG_DB_BACKUP['config_instructions'], - $_CONF['layout_url'] . '/images/icons/database.' . $_IMAGE_TYPE) + $T->set_var('admin_menu', ADMIN_createMenu( + $menu_arr, + $LANG_DB_BACKUP['config_instructions'], + $_CONF['layout_url'] . '/images/icons/database.' . $_IMAGE_TYPE) ); $include_tables = array_diff($tablenames, $exclude_tables); - foreach ($include_tables as $key=>$name) { + foreach ($include_tables as $key => $name) { $included .= "\n"; } - foreach ($exclude_tables as $key=>$name) { + foreach ($exclude_tables as $key => $name) { $excluded .= "\n"; } @@ -1139,9 +1131,9 @@ function DBADMIN_configBackup() 'lang_save' => $LANG_ADMIN['save'], 'included_tables' => $included, 'excluded_tables' => $excluded, - ) ); + )); - $T->set_var('end_block',COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); + $T->set_var('end_block', COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); $T->parse('output', 'page'); $retval .= $T->finish($T->get_var('output')); @@ -1150,21 +1142,21 @@ function DBADMIN_configBackup() } - $action = ''; -$expected = array('backup','backupdb','config','download','delete','innodb','doinnodb','myisam','domyisam','optimize','dooptimize','mode','saveconfig'); -foreach($expected as $provided) { +$expected = array('backup', 'backupdb', 'config', 'download', 'delete', 'innodb', 'doinnodb', 'myisam', 'domyisam', 'optimize', 'dooptimize', 'mode', 'saveconfig'); +foreach ($expected as $provided) { if (isset($_POST[$provided])) { $action = $provided; } elseif (isset($_GET[$provided])) { - $action = $provided; + $action = $provided; } } -if ( isset($_POST['dbcancelbutton'])) $action = ''; +if (isset($_POST['dbcancelbutton'])) { + $action = ''; +} switch ($action) { - case 'config' : $page = DBADMIN_configBackup(); break; @@ -1184,7 +1176,7 @@ function DBADMIN_configBackup() case 'download': $file = ''; if (isset($_GET['file'])) { - $file = preg_replace('/[^a-zA-Z0-9\-_\.]/', '', COM_applyFilter($_GET['file'])); + $file = preg_replace('/[^a-zA-Z0-9\-_\.]/', '', Geeklog\Input::fGet('file')); $file = str_replace('..', '', $file); if (!file_exists($_CONF['backup_path'] . $file)) { $file = ''; @@ -1197,7 +1189,7 @@ function DBADMIN_configBackup() break; case 'delete': - if (isset($_POST['delitem']) AND SEC_checkToken()) { + if (isset($_POST['delitem']) && SEC_checkToken()) { foreach ($_POST['delitem'] as $delfile) { $file = preg_replace('/[^a-zA-Z0-9\-_\.]/', '', COM_applyFilter($delfile)); $file = str_replace('..', '', $file); @@ -1214,69 +1206,57 @@ function DBADMIN_configBackup() case 'myisam': $pagetitle = $LANG_DB_BACKUP['convert_myisam_title']; - if (DBADMIN_supported_engine( 'MyISAM')) { + if (DBADMIN_supported_engine('MyISAM')) { $page .= DBADMIN_myisam(); } else { - $page .= COM_showMessageText($LANG_DB_BACKUP['no_myisam'],'',true,'error'); + $page .= COM_showMessageText($LANG_DB_BACKUP['no_myisam'], '', true, 'error'); } break; case 'innodb': $pagetitle = $LANG_DB_BACKUP['convert_title']; - if (DBADMIN_supported_engine( 'InnoDB')) { + if (DBADMIN_supported_engine('InnoDB')) { $page .= DBADMIN_innodb(); } else { - $page .= COM_showMessageText($LANG_DB_BACKUP['no_innodb'],'',true,'error'); + $page .= COM_showMessageText($LANG_DB_BACKUP['no_innodb'], '', true, 'error'); } break; case 'doinnodb': $pagetitle = $LANG_DB_BACKUP['convert_title']; - if (DBADMIN_supported_engine( 'InnoDB')) { - $startwith = ''; - if (isset($_GET['startwith'])) { - $startwith = COM_applyFilter($_GET['startwith']); - } + if (DBADMIN_supported_engine('InnoDB')) { + $startwith = Geeklog\Input::fGet('startwith', ''); if (!empty($startwith) || SEC_checkToken()) { - $failures = 0; - if (isset($_GET['failures'])) { - $failures = COM_applyFilter($_GET['failures'], true); - } + $failures = (int) Geeklog\Input::fGet('failures', 0); $num_errors = DBADMIN_convert_innodb($startwith, $failures); if ($num_errors == 0) { $page .= COM_showMessageText($LANG_DB_BACKUP['innodb_success']); } else { - $page .= COM_showMessageText($LANG_DB_BACKUP['innodb_success'] . ' ' . $LANG_DB_BACKUP['table_issues'],'',true,'error'); + $page .= COM_showMessageText($LANG_DB_BACKUP['innodb_success'] . ' ' . $LANG_DB_BACKUP['table_issues'], '', true, 'error'); } $page .= DBADMIN_list(); } } else { - $page .= COM_showMessageText($LANG_DB_BACKUP['no_innodb'],'',true,'error'); + $page .= COM_showMessageText($LANG_DB_BACKUP['no_innodb'], '', true, 'error'); } break; case 'domyisam': $pagetitle = $LANG_DB_BACKUP['convert_myisam_title']; - if (DBADMIN_supported_engine( 'MyISAM' )) { - $startwith = ''; - if (isset($_GET['startwith'])) { - $startwith = COM_applyFilter($_GET['startwith']); - } + if (DBADMIN_supported_engine('MyISAM')) { + $startwith = Geeklog\Input::fGet('startwith', ''); if (!empty($startwith) || SEC_checkToken()) { - $failures = 0; - if (isset($_GET['failures'])) { - $failures = COM_applyFilter($_GET['failures'], true); - } + $failures = (int) Geeklog\Input::fGet('failures', 0); $num_errors = DBADMIN_convert_myisam($startwith, $failures); if ($num_errors == 0) { $page .= COM_showMessageText($LANG_DB_BACKUP['myisam_success']); } else { - $page .= COM_showMessageText($LANG_DB_BACKUP['myisam_success'] . ' ' . $LANG_DB_BACKUP['table_issues'],'',true,'error'); + $page .= COM_showMessageText($LANG_DB_BACKUP['myisam_success'] . ' ' . $LANG_DB_BACKUP['table_issues'], '', true, 'error'); } $page .= DBADMIN_list(); } } else { - $page .= COM_showMessageText($LANG_DB_BACKUP['no_innodb'],'',true,'error'); + $page .= COM_showMessageText($LANG_DB_BACKUP['no_innodb'], '', true, 'error'); } break; @@ -1287,22 +1267,16 @@ function DBADMIN_configBackup() break; case 'dooptimize': - $startwith = ''; - if (isset($_GET['startwith'])) { - $startwith = COM_applyFilter($_GET['startwith']); - } + $startwith = Geeklog\Input::fGet('startwith', ''); $pagetitle = $LANG_DB_BACKUP['optimize_title']; if (!empty($startwith) || SEC_checkToken()) { - $failures = 0; - if (isset($_GET['failures'])) { - $failures = COM_applyFilter($_GET['failures'], true); - } + $failures = (int) Geeklog\Input::fGet('failures', 0); $num_errors = DBADMIN_dooptimize($startwith, $failures); if ($num_errors == 0) { $page .= COM_showMessageText($LANG_DB_BACKUP['optimize_success']); } else { $page .= COM_showMessageText($LANG_DB_BACKUP['optimize_success'] - . ' ' . $LANG_DB_BACKUP['table_issues'],'',true,'error'); + . ' ' . $LANG_DB_BACKUP['table_issues'], '', true, 'error'); } $page .= DBADMIN_list(); } @@ -1312,19 +1286,18 @@ function DBADMIN_configBackup() $items = array(); // Get the excluded tables into a serialized string - $tables = explode('|', $_POST['groupmembers']); + $tables = explode('|', Geeklog\Input::post('groupmembers')); $items['_dbback_exclude'] = DB_escapeString(@serialize($tables)); + $items['_dbback_files'] = (int) Geeklog\Input::post('db_backup_maxfiles', 0); - $items['_dbback_files'] = (int)$_POST['db_backup_maxfiles']; - -/* --- - if (isset($_POST['disable_cron'])) { - $str = '-1'; - } else { - $str = (int)$_POST['db_backup_interval']; - } - $items['_dbback_cron'] = $str; ---- */ + /* --- + if (isset($_POST['disable_cron'])) { + $str = '-1'; + } else { + $str = (int)$_POST['db_backup_interval']; + } + $items['_dbback_cron'] = $str; + --- */ $items['_dbback_gzip'] = isset($_POST['use_gzip']) ? 1 : 0; $items['_dbback_allstructs'] = isset($_POST['allstructs']) ? 1 : 0; @@ -1337,27 +1310,21 @@ function DBADMIN_configBackup() } $page = DBADMIN_list(); - break; - - - - - - case 'mode' : - $mode = COM_applyFilter($_POST['mode']); - switch ( $mode ) { + $mode = Geeklog\Input::fPost('mode'); + + switch ($mode) { case 'optimize' : - $tbl = COM_applyFilter($_POST['table']); + $tbl = Geeklog\Input::fPost('table'); $rc = DBADMIN_ajaxOptimizeTable($tbl); - if ( $rc === false ) { + if ($rc === false) { $retval['errorCode'] = 1; - $retval['statusMessage'] = 'Failed optimizing '.$tbl; + $retval['statusMessage'] = 'Failed optimizing ' . $tbl; } else { - $retval['statusMessage'] = 'Table '.$tbl.' successfully optimized'; + $retval['statusMessage'] = 'Table ' . $tbl . ' successfully optimized'; $retval['errorCode'] = 0; } $retval['errorCode'] = 0; @@ -1365,6 +1332,7 @@ function DBADMIN_configBackup() echo json_encode($return); exit; break; + case 'optimizecomplete' : DB_delete($_TABLES['vars'], 'name', 'lastoptimizedtable'); DB_delete($_TABLES['vars'], 'name', 'lastoptimizeddb'); @@ -1374,19 +1342,21 @@ function DBADMIN_configBackup() echo json_encode($return); exit; break; + case 'dblist' : - $engine = COM_applyFilter($_POST['engine']); + $engine = Geeklog\Input::fPost('engine'); DBADMIN_ajaxGetTableList($engine); break; + case 'convertdb' : - $tbl = COM_applyFilter($_POST['table']); - $engine = COM_applyFilter($_POST['engine']); - $rc = DBADMIN_ajaxConvertTable( $tbl, $engine); - if ( $rc === false ) { + $tbl = Geeklog\Input::fPost('table'); + $engine = Geeklog\Input::fPost('engine'); + $rc = DBADMIN_ajaxConvertTable($tbl, $engine); + if ($rc === false) { $retval['errorCode'] = 1; - $retval['statusMessage'] = 'Failed converting '.$tbl.' to '.$engine; + $retval['statusMessage'] = 'Failed converting ' . $tbl . ' to ' . $engine; } else { - $retval['statusMessage'] = 'Table '.$tbl.' successfully converted to '.$engine; + $retval['statusMessage'] = 'Table ' . $tbl . ' successfully converted to ' . $engine; $retval['errorCode'] = 0; } $retval['errorCode'] = 0; @@ -1394,20 +1364,24 @@ function DBADMIN_configBackup() echo json_encode($return); exit; break; + case 'convertdbcomplete' : - $engine = COM_applyFilter($_POST['engine']); + $engine = Geeklog\Input::fPost('engine'); DBADMIN_ajaxFinishCvt($engine); $retval['errorCode'] = 0; $return["json"] = json_encode($retval); echo json_encode($return); exit; break; + case 'dbbackup_init' : DBADMIN_backupAjax(); break; + case 'dbbackup_table' : DBADMIN_backupTableAjax(); break; + case 'dbbackup_complete' : DBADMIN_backupCompleteAjax(); break; @@ -1422,5 +1396,3 @@ function DBADMIN_configBackup() $display = COM_createHTMLDocument($page, array('pagetitle' => $LANG_DB_BACKUP['database_admin'])); COM_output($display); - -?> diff --git a/public_html/admin/envcheck.php b/public_html/admin/envcheck.php index 3f1083603..889a9dd32 100644 --- a/public_html/admin/envcheck.php +++ b/public_html/admin/envcheck.php @@ -46,7 +46,7 @@ function _checkEnvironment() { - global $_CONF, $_TABLES, $_PLUGINS, $_SYSTEM, $LANG_ADMIN, $LANG_ENVCHECK, $_SCRIPTS; + global $_CONF, $_TABLES, $_PLUGINS, $_SYSTEM, $LANG_ADMIN, $LANG_ENVCHECK, $_SCRIPTS, $_DB_dbms; $retval = ''; $permError = 0; @@ -78,7 +78,75 @@ function _checkEnvironment() $LANG_ENVCHECK['php_warning'], $_CONF['layout_url'] . '/images/icons/envcheck.png' ); + + // *********************************************** + // Database Settings Section + $dbms_error = false; + if (!empty($_DB_dbms)) { + $header_arr = array( // display 'text' and use table field 'field' + array('text' => $LANG_ENVCHECK['setting'], 'field' => 'settings'), + array('text' => $LANG_ENVCHECK['current'], 'field' => 'current'), + array('text' => $LANG_ENVCHECK['recommended'], 'field' => 'recommended'), + array('text' => $LANG_ENVCHECK['notes'], 'field' => 'notes') + + ); + $text_arr = array('has_menu' => false, + 'title' => $LANG_ENVCHECK['database_settings'], + 'form_url' => "{$_CONF['site_admin_url']}/envcheck.php" + ); + $data_arr = array(); + + $current = preg_replace('#[^0-9\.]#', '', DB_getVersion()); + + if ($_DB_dbms == 'mysql') { + if (version_compare($current, '4.1.2', '>=')) { + $current = ''.$current.''; + } else { + $current = ''.$current.''; + } + $data_arr[] = array('settings' => $LANG_ENVCHECK['database_mysql_version'], + 'current' => $current, + 'recommended' => '4.1.2+', + 'notes' => $LANG_ENVCHECK['database_mysql_req_version']); + } elseif ($_DB_dbms == 'pgsql') { + if (version_compare($current, '9.1.7', '>=')) { + $current = ''.$current.''; + } else { + $current = ''.$current.''; + } + $data_arr[] = array('settings' => $LANG_ENVCHECK['database_pgsql_version'], + 'current' => $current, + 'recommended' => '9.1.7+', + 'notes' => $LANG_ENVCHECK['database_pgsql_req_version']); + } else { + $dbms_error = true; + } + } else { + $dbms_error = true; + } + + if ($dbms_error) { + $header_arr = array( // display 'text' and use table field 'field' + array('text' => $LANG_ENVCHECK['item'], 'field' => 'item'), + array('text' => $LANG_ENVCHECK['status'], 'field' => 'status'), + array('text' => $LANG_ENVCHECK['notes'], 'field' => 'notes') + ); + $text_arr = array('has_menu' => false, + 'title' => $LANG_ENVCHECK['database_settings'], + 'form_url' => "{$_CONF['site_admin_url']}/envcheck.php" + ); + $data_arr = array(); + $data_arr[] = array( + 'item' => $LANG_ENVCHECK['database_dms'], + 'status' => '' . $LANG_ENVCHECK['not_found'] . '', + 'notes' => $LANG_ENVCHECK['database_dms_notes'] + ); + } + + $admin_list = ADMIN_simpleList('', $header_arr, $text_arr, $data_arr); + $T->set_var('database_settings_list', $admin_list); + // *********************************************** // PHP Settings Section - First we will validate the general environment. $header_arr = array( // display 'text' and use table field 'field' @@ -101,8 +169,9 @@ function _checkEnvironment() } $data_arr[] = array('settings' => $LANG_ENVCHECK['php_version'], 'current' => $current, - 'recommended' => '5.2.0+', + 'recommended' => '5.3.3+', 'notes' => $LANG_ENVCHECK['php_req_version']); + $rg = ini_get('register_globals'); $sm = ini_get('safe_mode'); @@ -173,6 +242,7 @@ function _checkEnvironment() $admin_list = ADMIN_simpleList('', $header_arr, $text_arr, $data_arr); $T->set_var('php_settings_list', $admin_list); + // *********************************************** // Libraries @@ -575,13 +645,15 @@ function php_v() /** * Check if the user's PHP version is supported by Geeklog * - * @return bool True if supported, falsed if not supported + * @return bool True if supported, false if not supported * */ function _phpOutOfDate() { + // Min PHP Version 5.3.3 + $phpv = php_v(); - if (($phpv[0] < 5) || (($phpv[0] == 5) && ($phpv[1] < 2))) { + if (($phpv[0] < 5) || (($phpv[0] == 3) && ($phpv[1] < 3))) { return true; } else { return false; diff --git a/public_html/admin/group.php b/public_html/admin/group.php index 83aaa4466..e42484f82 100644 --- a/public_html/admin/group.php +++ b/public_html/admin/group.php @@ -2,7 +2,7 @@ /* Reminder: always indent with 4 spaces (no tabs). */ // +---------------------------------------------------------------------------+ -// | Geeklog 1.8 | +// | Geeklog 2.1 | // +---------------------------------------------------------------------------+ // | group.php | // | | @@ -33,20 +33,19 @@ // +---------------------------------------------------------------------------+ /** -* This file is the Geeklog Group administration page -* -* @author Tony Bibbs, tony AT tonybibbs DOT com -* -*/ + * This file is the Geeklog Group administration page + * + * @author Tony Bibbs, tony AT tonybibbs DOT com + */ /** -* Geeklog common function library -*/ + * Geeklog common function library + */ require_once '../lib-common.php'; /** -* Security check to ensure user even belongs on this page -*/ + * Security check to ensure user even belongs on this page + */ require_once 'auth.inc.php'; // Uncomment the line below if you need to debug the HTTP variables being passed @@ -69,12 +68,11 @@ } /** -* Shows the group editor form -* -* @param string $grp_id ID of group to edit -* @return string HTML for group editor -* -*/ + * Shows the group editor form + * + * @param string $grp_id ID of group to edit + * @return string HTML for group editor + */ function editgroup($grp_id = '') { global $_TABLES, $_CONF, $_USER, $LANG_ACCESS, $LANG_ADMIN, $MESSAGE, @@ -86,16 +84,18 @@ function editgroup($grp_id = '') $thisUsersGroups = SEC_getUserGroups(); if (!empty($grp_id) && ($grp_id > 0) && - !in_array($grp_id, $thisUsersGroups) && - !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $thisUsersGroups)) { + !in_array($grp_id, $thisUsersGroups) && + !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $thisUsersGroups) + ) { if (!SEC_inGroup('Root') && (DB_getItem($_TABLES['groups'], - 'grp_name', "grp_id = $grp_id") == 'Root')) { + 'grp_name', "grp_id = $grp_id") == 'Root') + ) { $retval .= COM_showMessageText($LANG_ACCESS['canteditroot'], - $LANG_ACCESS['groupeditor']); + $LANG_ACCESS['groupeditor']); COM_accessLog("User {$_USER['username']} tried to edit the Root group with insufficient privileges."); } else { $retval .= COM_showMessageText($LANG_ACCESS['canteditgroup'], - $LANG_ACCESS['groupeditor']); + $LANG_ACCESS['groupeditor']); } return $retval; @@ -114,16 +114,16 @@ function editgroup($grp_id = '') $group_templates->set_var('lang_groupname', $LANG_ACCESS['groupname']); $group_templates->set_var('lang_description', $LANG_ACCESS['description']); $group_templates->set_var('lang_securitygroups', - $LANG_ACCESS['securitygroups']); + $LANG_ACCESS['securitygroups']); $group_templates->set_var('lang_rights', $LANG_ACCESS['rights']); $showall = 0; - if (isset($_REQUEST['chk_showall']) && ($_REQUEST['chk_showall'] == 1)) { + if (Geeklog\Input::request('chk_showall') == 1) { $showall = 1; } $group_templates->set_var('show_all', $showall); - if (! empty($grp_id)) { + if (!empty($grp_id)) { $result = DB_query("SELECT grp_id,grp_name,grp_descr,grp_gl_core,grp_default FROM {$_TABLES['groups']} WHERE grp_id ='$grp_id'"); $A = DB_fetchArray($result); if ($A['grp_gl_core'] > 0) { @@ -140,19 +140,19 @@ function editgroup($grp_id = '') $token = SEC_createToken(); $retval .= COM_startBlock($LANG_ACCESS['groupeditor'], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= SEC_getTokenExpiryNotice($token); - if (! empty($grp_id)) { + if (!empty($grp_id)) { // Groups tied to Geeklog's functionality shouldn't be deleted if ($A['grp_gl_core'] != 1) { $delbutton = ''; + . '" name="mode"%s' . XHTML . '>'; $jsconfirm = ' onclick="return confirm(\'' . $MESSAGE[76] . '\');"'; $group_templates->set_var('delete_option', - sprintf($delbutton, $jsconfirm)); + sprintf($delbutton, $jsconfirm)); $group_templates->set_var('delete_option_no_confirmation', - sprintf($delbutton, '')); + sprintf($delbutton, '')); $group_templates->set_var('allow_delete', true); $group_templates->set_var('lang_delete', $LANG_ADMIN['delete']); @@ -178,16 +178,16 @@ function editgroup($grp_id = '') $group_templates->set_var('group_name', $A['grp_name']); switch ($A['grp_name']) { - case 'All Users': - case 'Logged-in Users': - case 'Remote Users': - $group_templates->set_var('hide_defaultoption', - ' style="display:none;"'); - break; - - default: - $group_templates->set_var('hide_defaultoption', ''); - break; + case 'All Users': + case 'Logged-in Users': + case 'Remote Users': + $group_templates->set_var('hide_defaultoption', + ' style="display:none;"'); + break; + + default: + $group_templates->set_var('hide_defaultoption', ''); + break; } } else { @@ -201,7 +201,7 @@ function editgroup($grp_id = '') } $selected = ''; - if (! empty($grp_id)) { + if (!empty($grp_id)) { $tmp = DB_query("SELECT ug_main_grp_id FROM {$_TABLES['group_assignments']} WHERE ug_grp_id = $grp_id"); $num_groups = DB_numRows($tmp); for ($x = 0; $x < $num_groups; $x++) { @@ -217,12 +217,12 @@ function editgroup($grp_id = '') $groupoptions = ''; if ($A['grp_gl_core'] == 1) { $group_templates->set_var('lang_securitygroupmsg', - $LANG_ACCESS['coregroupmsg']); + $LANG_ACCESS['coregroupmsg']); $group_templates->set_var('hide_adminoption', - ' style="display:none;"'); + ' style="display:none;"'); $count = 0; - if (! empty($selected)) { + if (!empty($selected)) { $inclause = str_replace(' ', ',', $selected); $result = DB_query("SELECT COUNT(*) AS count FROM {$_TABLES['groups']} WHERE grp_id <> $grp_id AND grp_id IN ($inclause)"); list($count) = DB_fetchArray($result); @@ -230,11 +230,11 @@ function editgroup($grp_id = '') if ($count == 0) { // this group doesn't belong to anything...give a friendly message $groupoptions = '

' - . $LANG_ACCESS['nogroupsforcoregroup'] . '

'; + . $LANG_ACCESS['nogroupsforcoregroup'] . '

'; } } else { $group_templates->set_var('lang_securitygroupmsg', - $LANG_ACCESS['groupmsg']); + $LANG_ACCESS['groupmsg']); $group_templates->set_var('hide_adminoption', ''); } if ($_GROUP_VERBOSE) { @@ -244,43 +244,43 @@ function editgroup($grp_id = '') if (empty($groupoptions)) { // make sure to list only those groups of which the Group Admin // is a member - $whereGroups = '(grp_id IN (' . implode (',', $thisUsersGroups) . '))'; + $whereGroups = '(grp_id IN (' . implode(',', $thisUsersGroups) . '))'; $header_arr = array( - array('text' => $LANG28[86], 'field' => ($A['grp_gl_core'] == 1 ? 'disabled-checkbox' : 'checkbox'), 'sort' => false), - array('text' => $LANG_ACCESS['groupname'], 'field' => 'grp_name', 'sort' => true), - array('text' => $LANG_ACCESS['description'], 'field' => 'grp_descr', 'sort' => true) + array('text' => $LANG28[86], 'field' => ($A['grp_gl_core'] == 1 ? 'disabled-checkbox' : 'checkbox'), 'sort' => false), + array('text' => $LANG_ACCESS['groupname'], 'field' => 'grp_name', 'sort' => true), + array('text' => $LANG_ACCESS['description'], 'field' => 'grp_descr', 'sort' => true), ); $defsort_arr = array('field' => 'grp_name', 'direction' => 'asc'); $form_url = $_CONF['site_admin_url'] - . '/group.php?mode=edit&grp_id=' . $grp_id; + . '/group.php?mode=edit&grp_id=' . $grp_id; $text_arr = array('has_menu' => false, - 'title' => '', 'instructions' => '', - 'icon' => '', 'form_url' => $form_url, - 'inline' => true); + 'title' => '', 'instructions' => '', + 'icon' => '', 'form_url' => $form_url, + 'inline' => true); if ($A['grp_gl_core'] == 1) { $inclause = str_replace(' ', ',', $selected); $sql = "SELECT grp_id, grp_name, grp_descr FROM {$_TABLES['groups']} WHERE grp_id <> $grp_id AND grp_id IN ($inclause)"; } else { $xsql = ''; - if (! empty($grp_id)) { + if (!empty($grp_id)) { $xsql = " AND (grp_id <> $grp_id)"; } $sql = "SELECT grp_id, grp_name, grp_descr FROM {$_TABLES['groups']} WHERE (grp_name <> 'Root')" . $xsql . ' AND ' . $whereGroups; } - $query_arr = array('table' => 'groups', - 'sql' => $sql, - 'query_fields' => array('grp_name'), + $query_arr = array('table' => 'groups', + 'sql' => $sql, + 'query_fields' => array('grp_name'), 'default_filter' => '', - 'query' => '', - 'query_limit' => 0); + 'query' => '', + 'query_limit' => 0); $groupoptions = ADMIN_list('groups', 'ADMIN_getListField_groups', - $header_arr, $text_arr, $query_arr, - $defsort_arr, '', explode(' ', $selected)); + $header_arr, $text_arr, $query_arr, + $defsort_arr, '', explode(' ', $selected)); } $group_templates->set_var('group_options', $groupoptions); @@ -291,10 +291,10 @@ function editgroup($grp_id = '') } $group_templates->set_var('rights_options', - printrights($grp_id, $A['grp_gl_core'])); + printrights($grp_id, $A['grp_gl_core'])); $group_templates->set_var('gltoken_name', CSRF_TOKEN); $group_templates->set_var('gltoken', $token); - $group_templates->parse('output','editor'); + $group_templates->parse('output', 'editor'); $retval .= $group_templates->finish($group_templates->get_var('output')); $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); @@ -303,46 +303,45 @@ function editgroup($grp_id = '') /** -* Get the indirect features for a group, i.e. a list of all the features -* that this group inherited from other groups. -* -* @param int $grp_id ID of group -* @return string comma-separated list of feature names -* -*/ -function getIndirectFeatures ($grp_id) + * Get the indirect features for a group, i.e. a list of all the features + * that this group inherited from other groups. + * + * @param int $grp_id ID of group + * @return string comma-separated list of feature names + */ +function getIndirectFeatures($grp_id) { global $_TABLES; - $checked = array (); - $tocheck = array ($grp_id); + $checked = array(); + $tocheck = array($grp_id); do { - $grp = array_pop ($tocheck); + $grp = array_pop($tocheck); - $result = DB_query ("SELECT ug_main_grp_id FROM {$_TABLES['group_assignments']} WHERE ug_grp_id = $grp AND ug_uid IS NULL"); - $numrows = DB_numRows ($result); + $result = DB_query("SELECT ug_main_grp_id FROM {$_TABLES['group_assignments']} WHERE ug_grp_id = $grp AND ug_uid IS NULL"); + $numrows = DB_numRows($result); $checked[] = $grp; for ($j = 0; $j < $numrows; $j++) { - $A = DB_fetchArray ($result); - if (!in_array ($A['ug_main_grp_id'], $checked) && - !in_array ($A['ug_main_grp_id'], $tocheck)) { + $A = DB_fetchArray($result); + if (!in_array($A['ug_main_grp_id'], $checked) && + !in_array($A['ug_main_grp_id'], $tocheck) + ) { $tocheck[] = $A['ug_main_grp_id']; } } - } - while (count($tocheck) > 0); + } while (count($tocheck) > 0); // get features for all groups in $checked $glist = implode(',', $checked); $result = DB_query("SELECT DISTINCT ft_name FROM {$_TABLES['access']},{$_TABLES['features']} WHERE ft_id = acc_ft_id AND acc_grp_id IN ($glist)"); - $nrows = DB_numRows ($result); + $nrows = DB_numRows($result); $retval = ''; for ($j = 1; $j <= $nrows; $j++) { - $A = DB_fetchArray ($result); + $A = DB_fetchArray($result); $retval .= $A['ft_name']; if ($j < $nrows) { $retval .= ','; @@ -353,15 +352,53 @@ function getIndirectFeatures ($grp_id) } /** -* Prints the features a group has access. Please follow the comments in the -* code closely if you need to modify this function. Also right is synonymous -* with feature. -* -* @param mixed $grp_id ID to print rights for -* @param boolean $core indicates if group is a core Geeklog group -* @return string HTML for rights -* -*/ + * Remove indirect features + * + * @param int $grp_id ID of the group + * @param array $features array of feature IDs + * @return array + */ +function removeIndirectFeatures($grp_id, array $features) +{ + global $_TABLES; + + $retval = array(); + + if (count($features) > 0) { + $indirectFeatureNames = trim(getIndirectFeatures($grp_id)); + + if ($indirectFeatureNames !== '') { + $indirectFeatureNames = explode(',', $indirectFeatureNames); + $indirectFeatureNames = array_map('DB_escapeString', $indirectFeatureNames); + $sql = "SELECT ft_id FROM {$_TABLES['features']} " + . "WHERE ft_name IN ('" . implode("', '", $indirectFeatureNames) . "')"; + $result = DB_query($sql); + $indirectFeatures = array(); + + while (($A = DB_fetchArray($result, false)) !== false) { + $indirectFeatures[] = $A['ft_id']; + } + + foreach ($features as $feature) { + if (!in_array($feature, $indirectFeatures)) { + $retval[] = $feature; + } + } + } + } + + return $retval; +} + +/** + * Prints the features a group has access. Please follow the comments in the + * code closely if you need to modify this function. Also right is synonymous + * with feature. + * + * @param mixed $grp_id ID to print rights for + * @param boolean $core indicates if group is a core Geeklog group + * @return string HTML for rights + */ function printrights($grp_id = '', $core = 0) { global $_TABLES, $_USER, $LANG_ACCESS, $_GROUP_VERBOSE; @@ -372,28 +409,28 @@ function printrights($grp_id = '', $core = 0) // get a list of all the features that the current user (i.e. Group Admin) // has access to, so we only include these features in the list below if (!SEC_inGroup('Root')) { - $GroupAdminFeatures = SEC_getUserPermissions (); - $availableFeatures = explode (',', $GroupAdminFeatures); - $GroupAdminFeatures = "'" . implode ("','", $availableFeatures) . "'"; + $GroupAdminFeatures = SEC_getUserPermissions(); + $availableFeatures = explode(',', $GroupAdminFeatures); + $GroupAdminFeatures = "'" . implode("','", $availableFeatures) . "'"; $ftWhere = ' WHERE ft_name IN (' . $GroupAdminFeatures . ')'; } else { $ftWhere = ''; } // now query for all available features - $features = DB_query ("SELECT ft_id,ft_name,ft_descr FROM {$_TABLES['features']}{$ftWhere} ORDER BY ft_name"); + $features = DB_query("SELECT ft_id,ft_name,ft_descr FROM {$_TABLES['features']}{$ftWhere} ORDER BY ft_name"); $nfeatures = DB_numRows($features); - $grpftarray = array (); + $grpftarray = array(); if (!empty($grp_id)) { // now get all the feature this group gets directly - $directfeatures = DB_query("SELECT acc_ft_id,ft_name FROM {$_TABLES['access']},{$_TABLES['features']} WHERE ft_id = acc_ft_id AND acc_grp_id = $grp_id",1); + $directfeatures = DB_query("SELECT acc_ft_id,ft_name FROM {$_TABLES['access']},{$_TABLES['features']} WHERE ft_id = acc_ft_id AND acc_grp_id = $grp_id", 1); // now in many cases the features will be given to this user indirectly // via membership to another group. These are not editable and must, // instead, be removed from that group directly - $indirectfeatures = getIndirectFeatures ($grp_id); - $indirectfeatures = explode (',', $indirectfeatures); + $indirectfeatures = getIndirectFeatures($grp_id); + $indirectfeatures = explode(',', $indirectfeatures); // Build an array of indirect features for ($i = 0; $i < count($indirectfeatures); $i++) { @@ -402,7 +439,7 @@ function printrights($grp_id = '', $core = 0) } // Build an arrray of direct features - $grpftarray1 = array (); + $grpftarray1 = array(); $ndirect = DB_numRows($directfeatures); for ($i = 0; $i < $ndirect; $i++) { $A = DB_fetchArray($directfeatures); @@ -410,11 +447,11 @@ function printrights($grp_id = '', $core = 0) } // Now merge the two arrays - $grpftarray = array_merge ($grpftarray, $grpftarray1); + $grpftarray = array_merge($grpftarray, $grpftarray1); if ($_GROUP_VERBOSE) { // this is for debugging purposes for ($i = 1; $i < count($grpftarray); $i++) { - COM_errorLog("element $i is feature " . key($grpftarray) . " and is " . current($grpftarray),1); + COM_errorLog("element $i is feature " . key($grpftarray) . " and is " . current($grpftarray), 1); next($grpftarray); } } @@ -436,8 +473,8 @@ function printrights($grp_id = '', $core = 0) $ftcount++; $retval .= '' - . ''; + . $A['ft_name'] . ''; } else { // either this is an indirect right OR this is a core feature if ((($core == 1) AND (isset($grpftarray[$A['ft_name']]) AND (($grpftarray[$A['ft_name']] == 'indirect') OR ($grpftarray[$A['ft_name']] == 'direct')))) OR ($core != 1)) { @@ -456,19 +493,19 @@ function printrights($grp_id = '', $core = 0) $ftcount++; $retval .= '' - . '' - . '' - . '(' . $A['ft_name'] - . ')'; + . '' + . '' + . '(' . $A['ft_name'] + . ')'; } } } if ($ftcount == 0) { // This group doesn't have rights to any features $retval .= '' - . $LANG_ACCESS['grouphasnorights'] . ''; + . $LANG_ACCESS['grouphasnorights'] . ''; } $retval .= '' . LB; @@ -477,21 +514,20 @@ function printrights($grp_id = '', $core = 0) } /** -* Add or remove a default group to/from all existing accounts -* -* @param int $grp_id ID of default group -* @param boolean $add true: add, false: remove -* @return void -* -*/ + * Add or remove a default group to/from all existing accounts + * + * @param int $grp_id ID of default group + * @param boolean $add true: add, false: remove + * @return void + */ function applydefaultgroup($grp_id, $add = true) { global $_TABLES, $_GROUP_VERBOSE; /** - * In the "add" case, we have to insert one record for each user. Pack this - * many values into one INSERT statement to save some time and bandwidth. - */ + * In the "add" case, we have to insert one record for each user. Pack this + * many values into one INSERT statement to save some time and bandwidth. + */ $_values_per_insert = 25; if ($_GROUP_VERBOSE) { @@ -523,20 +559,20 @@ function applydefaultgroup($grp_id, $add = true) } /** -* Save a group to the database -* -* @param string $grp_id ID of group to save -* @param string $grp_name Group Name -* @param string $grp_descr Description of group -* @param boolean $grp_admin Flag that indicates this is an admin use group -* @param boolean $grp_gl_core Flag that indicates if this is a core Geeklog group -* @param boolean $grp_default Flag that indicates if this is a default group -* @param boolean $grp_applydefault Flag that indicates whether to apply a change in $grp_default to all existing user accounts -* @param array $features Features the group has access to -* @param array $groups Groups this group will belong to -* @return string HTML refresh or error message -* -*/ + * Save a group to the database + * + * @param string $grp_id ID of group to save + * @param string $grp_name Group Name + * @param string $grp_descr Description of group + * @param boolean $grp_admin Flag that indicates this is an admin use group + * @param boolean $grp_gl_core Flag that indicates if this is a core Geeklog group + * @param boolean $grp_default Flag that indicates if this is a default group + * @param boolean $grp_applydefault Flag that indicates whether to apply a change in $grp_default to all existing + * user accounts + * @param array $features Features the group has access to + * @param array $groups Groups this group will belong to + * @return string HTML refresh or error message + */ function savegroup($grp_id, $grp_name, $grp_descr, $grp_admin, $grp_gl_core, $grp_default, $grp_applydefault, $features, $groups) { global $_CONF, $_TABLES, $_USER, $LANG_ACCESS, $_GROUP_VERBOSE; @@ -544,28 +580,28 @@ function savegroup($grp_id, $grp_name, $grp_descr, $grp_admin, $grp_gl_core, $gr $retval = ''; if (!empty($grp_name) && !empty($grp_descr)) { $GroupAdminGroups = SEC_getUserGroups(); - if (!empty ($grp_id) && + if (!empty($grp_id) && ($grp_id > 0) && - !in_array ($grp_id, $GroupAdminGroups) && - !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $GroupAdminGroups)) { - COM_accessLog ("User {$_USER['username']} tried to edit group '$grp_name' ($grp_id) with insufficient privileges."); + !in_array($grp_id, $GroupAdminGroups) && + !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $GroupAdminGroups) + ) { + COM_accessLog("User {$_USER['username']} tried to edit group '$grp_name' ($grp_id) with insufficient privileges."); COM_redirect($_CONF['site_admin_url'] . '/group.php'); } - if ($grp_gl_core == 1 AND !is_array ($features)) { - COM_errorLog ("Sorry, no valid features were passed to this core group ($grp_id) and saving could cause problem...bailing."); + if ($grp_gl_core == 1 && !is_array($features)) { + COM_errorLog("Sorry, no valid features were passed to this core group ($grp_id) and saving could cause problem...bailing."); COM_redirect($_CONF['site_admin_url'] . '/group.php'); } // group names have to be unique, so check if this one exists already - $g_id = DB_getItem ($_TABLES['groups'], 'grp_id', - "grp_name = '$grp_name'"); + $g_id = DB_getItem($_TABLES['groups'], 'grp_id', "grp_name = '$grp_name'"); if ($g_id > 0) { if (empty($grp_id) || ($grp_id != $g_id)) { // there already is a group with that name - complain $retval .= COM_showMessageText($LANG_ACCESS['groupexistsmsg'], - $LANG_ACCESS['groupexists']) - . editgroup($grp_id); + $LANG_ACCESS['groupexists']) + . editgroup($grp_id); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $LANG_ACCESS['groupeditor'])); return $retval; @@ -578,16 +614,16 @@ function savegroup($grp_id, $grp_name, $grp_descr, $grp_admin, $grp_gl_core, $gr $grp_applydefault_add = true; if (empty($grp_id)) { DB_save($_TABLES['groups'], - 'grp_name,grp_descr,grp_gl_core,grp_default', - "'$grp_name','$grp_descr',$grp_gl_core,$grp_default"); + 'grp_name,grp_descr,grp_gl_core,grp_default', + "'$grp_name','$grp_descr',$grp_gl_core,$grp_default"); $grp_id = DB_getItem($_TABLES['groups'], 'grp_id', - "grp_name = '$grp_name'"); + "grp_name = '$grp_name'"); $new_group = true; } else { if ($grp_applydefault == 1) { // check if $grp_default changed $old_default = DB_getItem($_TABLES['groups'], 'grp_default', - "grp_id = $grp_id"); + "grp_id = $grp_id"); if ($old_default == $grp_default) { // no change required $grp_applydefault = 0; @@ -597,8 +633,8 @@ function savegroup($grp_id, $grp_name, $grp_descr, $grp_admin, $grp_gl_core, $gr } DB_save($_TABLES['groups'], - 'grp_id,grp_name,grp_descr,grp_gl_core,grp_default', - "$grp_id,'$grp_name','$grp_descr',$grp_gl_core,$grp_default"); + 'grp_id,grp_name,grp_descr,grp_gl_core,grp_default', + "$grp_id,'$grp_name','$grp_descr',$grp_gl_core,$grp_default"); $new_group = false; } @@ -623,31 +659,37 @@ function savegroup($grp_id, $grp_name, $grp_descr, $grp_admin, $grp_gl_core, $gr // now save the features DB_delete($_TABLES['access'], 'acc_grp_id', $grp_id); - $num_features = count($features); - if (SEC_inGroup('Root')) { - foreach ($features as $f) { - DB_query ("INSERT INTO {$_TABLES['access']} (acc_ft_id,acc_grp_id) VALUES ($f,$grp_id)"); - } - } else { - $GroupAdminFeatures = SEC_getUserPermissions(); - $availableFeatures = explode(',', $GroupAdminFeatures); - foreach ($features as $f) { - if (in_array($f, $availableFeatures)) { + + // Remove features inherited from groups (bug # + $features = removeIndirectFeatures($grp_id, $features); + + if (count($features) > 0) { + if (SEC_inGroup('Root')) { + foreach ($features as $f) { DB_query("INSERT INTO {$_TABLES['access']} (acc_ft_id,acc_grp_id) VALUES ($f,$grp_id)"); } + } else { + $GroupAdminFeatures = SEC_getUserPermissions(); + $availableFeatures = explode(',', $GroupAdminFeatures); + foreach ($features as $f) { + if (in_array($f, $availableFeatures)) { + DB_query("INSERT INTO {$_TABLES['access']} (acc_ft_id,acc_grp_id) VALUES ($f,$grp_id)"); + } + } } } + if ($_GROUP_VERBOSE) { COM_errorLog('groups = ' . $groups); - COM_errorLog("deleting all group_assignments for group $grp_id/$grp_name",1); + COM_errorLog("deleting all group_assignments for group $grp_id/$grp_name", 1); } DB_delete($_TABLES['group_assignments'], 'ug_grp_id', $grp_id); - if (! empty($groups)) { + if (!empty($groups)) { foreach ($groups as $g) { if (in_array($g, $GroupAdminGroups)) { if ($_GROUP_VERBOSE) { - COM_errorLog("adding group_assignment $g for $grp_name",1); + COM_errorLog("adding group_assignment $g for $grp_name", 1); } $sql = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_grp_id) VALUES ($g,$grp_id)"; DB_query($sql); @@ -656,16 +698,18 @@ function savegroup($grp_id, $grp_name, $grp_descr, $grp_admin, $grp_gl_core, $gr } // Make sure Root group belongs to any new group - if (DB_getItem ($_TABLES['group_assignments'], 'COUNT(*)', - "ug_main_grp_id = $grp_id AND ug_grp_id = 1") == 0) { + if (DB_getItem($_TABLES['group_assignments'], 'COUNT(*)', + "ug_main_grp_id = $grp_id AND ug_grp_id = 1") == 0 + ) { DB_query("INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_grp_id) VALUES ($grp_id, 1)"); } // make sure this Group Admin belongs to the new group - if (!SEC_inGroup ('Root')) { - if (DB_count ($_TABLES['group_assignments'], 'ug_uid', - "(ug_uid = {$_USER['uid']}) AND (ug_main_grp_id = $grp_id)") == 0) { - DB_query ("INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid) VALUES ($grp_id,{$_USER['uid']})"); + if (!SEC_inGroup('Root')) { + if (DB_count($_TABLES['group_assignments'], 'ug_uid', + "(ug_uid = {$_USER['uid']}) AND (ug_main_grp_id = $grp_id)") == 0 + ) { + DB_query("INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid) VALUES ($grp_id,{$_USER['uid']})"); } } @@ -678,15 +722,15 @@ function savegroup($grp_id, $grp_name, $grp_descr, $grp_admin, $grp_gl_core, $gr } else { PLG_groupChanged($grp_id, 'edit'); } - if (isset($_REQUEST['chk_showall']) && ($_REQUEST['chk_showall'] == 1)) { + if (Geeklog\Input::request('chk_showall') == 1) { COM_redirect($_CONF['site_admin_url'] . '/group.php?msg=49&chk_showall=1'); } else { COM_redirect($_CONF['site_admin_url'] . '/group.php?msg=49'); } } else { $retval .= COM_showMessageText($LANG_ACCESS['missingfieldsmsg'], - $LANG_ACCESS['missingfields']) - . editgroup($grp_id); + $LANG_ACCESS['missingfields']) + . editgroup($grp_id); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $LANG_ACCESS['groupeditor'])); return $retval; @@ -694,31 +738,30 @@ function savegroup($grp_id, $grp_name, $grp_descr, $grp_admin, $grp_gl_core, $gr } /** -* Get a list (actually an array) of all groups this group belongs to. -* -* @param int $basegroup id of group -* @return array array of all groups $basegroup belongs to -* -*/ + * Get a list (actually an array) of all groups this group belongs to. + * + * @param int $basegroup id of group + * @return array array of all groups $basegroup belongs to + */ function getGroupList($basegroup) { global $_TABLES; - $to_check = array (); - array_push ($to_check, $basegroup); + $to_check = array(); + array_push($to_check, $basegroup); - $checked = array (); + $checked = array(); while (count($to_check) > 0) { - $thisgroup = array_pop ($to_check); + $thisgroup = array_pop($to_check); if ($thisgroup > 0) { - $result = DB_query ("SELECT ug_grp_id FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id = $thisgroup"); - $numGroups = DB_numRows ($result); + $result = DB_query("SELECT ug_grp_id FROM {$_TABLES['group_assignments']} WHERE ug_main_grp_id = $thisgroup"); + $numGroups = DB_numRows($result); for ($i = 0; $i < $numGroups; $i++) { - $A = DB_fetchArray ($result); - if (!in_array ($A['ug_grp_id'], $checked)) { - if (!in_array ($A['ug_grp_id'], $to_check)) { - array_push ($to_check, $A['ug_grp_id']); + $A = DB_fetchArray($result); + if (!in_array($A['ug_grp_id'], $checked)) { + if (!in_array($A['ug_grp_id'], $to_check)) { + array_push($to_check, $A['ug_grp_id']); } } } @@ -730,13 +773,12 @@ function getGroupList($basegroup) } /** -* Display a list of all users in a given group. -* -* @param int $grp_id group id -* @return string HTML for user listing -* -*/ -function listusers ($grp_id) + * Display a list of all users in a given group. + * + * @param int $grp_id group id + * @return string HTML for user listing + */ +function listusers($grp_id) { global $_CONF, $_TABLES, $LANG28, $LANG_ACCESS, $LANG_ADMIN, $_IMAGE_TYPE; @@ -744,12 +786,13 @@ function listusers ($grp_id) $retval = ''; - $thisUsersGroups = SEC_getUserGroups (); - if (!empty ($grp_id) && ($grp_id > 0) && - !in_array($grp_id, $thisUsersGroups) && - !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $thisUsersGroups)) { + $thisUsersGroups = SEC_getUserGroups(); + if (!empty($grp_id) && ($grp_id > 0) && + !in_array($grp_id, $thisUsersGroups) && + !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $thisUsersGroups) + ) { $retval .= COM_showMessageText($LANG_ACCESS['cantlistgroup'], - $LANG_ACCESS['usergroupadmin']); + $LANG_ACCESS['usergroupadmin']); return $retval; } @@ -762,51 +805,53 @@ function listusers ($grp_id) $login_field = 'regdate'; } - $header_arr = array ( + $header_arr = array( array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false), array('text' => $LANG28[37], 'field' => 'uid', 'sort' => true), array('text' => $LANG28[3], 'field' => 'username', 'sort' => true), array('text' => $LANG28[4], 'field' => 'fullname', 'sort' => true), array('text' => $login_text, 'field' => $login_field, 'sort' => true), - array('text' => $LANG28[7], 'field' => 'email', 'sort' => true) + array('text' => $LANG28[7], 'field' => 'email', 'sort' => true), ); - $defsort_arr = array ('field' => 'username', - 'direction' => 'asc' + $defsort_arr = array('field' => 'username', + 'direction' => 'asc', ); - $form_url = $_CONF['site_admin_url'] . '/group.php?mode=listusers&grp_id='.$grp_id; - if (isset($_REQUEST['chk_showall']) && ($_REQUEST['chk_showall'] == 1)) { + $form_url = $_CONF['site_admin_url'] . '/group.php?mode=listusers&grp_id=' . $grp_id; + if (Geeklog\Input::request('chk_showall') == 1) { $form_url .= '&chk_showall=1'; } - $groupname = DB_getItem ($_TABLES['groups'], 'grp_name', - "grp_id = '$grp_id'"); - $headline = sprintf ($LANG_ACCESS['usersingroup'], $groupname); + $groupname = DB_getItem($_TABLES['groups'], 'grp_name', "grp_id = '$grp_id'"); + $headline = sprintf($LANG_ACCESS['usersingroup'], $groupname); $url = $_CONF['site_admin_url'] . '/group.php'; - if (isset($_REQUEST['chk_showall']) && ($_REQUEST['chk_showall'] == 1)) { + if (Geeklog\Input::request('chk_showall') == 1) { $url .= '?chk_showall=1'; } - $menu_arr = array ( - array('url' => $url, - 'text' => $LANG28[38]), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home'])); - - $retval .= COM_startBlock($headline, '', - COM_getBlockTemplate('_admin_block', 'header')); + $menu_arr = array( + array( + 'url' => $url, + 'text' => $LANG28[38], + ), + array( + 'url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home'], + ), + ); + $retval .= COM_startBlock($headline, '', COM_getBlockTemplate('_admin_block', 'header')); $retval .= ADMIN_createMenu( $menu_arr, ' ', $_CONF['layout_url'] . '/images/icons/group.' . $_IMAGE_TYPE ); - $text_arr = array ( + $text_arr = array( 'has_extras' => true, 'form_url' => $form_url, - 'help_url' => '' + 'help_url' => '', ); $join_userinfo = ''; @@ -816,35 +861,34 @@ function listusers ($grp_id) $select_userinfo = ",lastlogin "; } - $groups = getGroupList ($grp_id); - $groupList = implode (',', $groups); + $groups = getGroupList($grp_id); + $groupList = implode(',', $groups); $sql = "SELECT DISTINCT {$_TABLES['users']}.uid,username,fullname,email,photo,regdate$select_userinfo " - ."FROM {$_TABLES['group_assignments']},{$_TABLES['users']} $join_userinfo " - ."WHERE {$_TABLES['users']}.uid > 1 " - ."AND {$_TABLES['users']}.uid = {$_TABLES['group_assignments']}.ug_uid " - ."AND ({$_TABLES['group_assignments']}.ug_main_grp_id IN ({$groupList}))"; - - $query_arr = array ('table' => 'users', - 'sql' => $sql, - 'query_fields' => array('username', 'email', 'fullname'), - 'default_filter' => "AND {$_TABLES['users']}.uid > 1" + . "FROM {$_TABLES['group_assignments']},{$_TABLES['users']} $join_userinfo " + . "WHERE {$_TABLES['users']}.uid > 1 " + . "AND {$_TABLES['users']}.uid = {$_TABLES['group_assignments']}.ug_uid " + . "AND ({$_TABLES['group_assignments']}.ug_main_grp_id IN ({$groupList}))"; + + $query_arr = array('table' => 'users', + 'sql' => $sql, + 'query_fields' => array('username', 'email', 'fullname'), + 'default_filter' => "AND {$_TABLES['users']}.uid > 1", ); $retval .= ADMIN_list('user', 'ADMIN_getListField_users', $header_arr, - $text_arr, $query_arr, $defsort_arr); + $text_arr, $query_arr, $defsort_arr); $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); return $retval; } /** -* Display a list of (all) groups -* -* @param boolean $show_all_groups include admin groups if true -* @return string HTML of the group list -* -*/ + * Display a list of (all) groups + * + * @param boolean $show_all_groups include admin groups if true + * @return string HTML of the group list + */ function listgroups($show_all_groups = false) { global $_CONF, $_TABLES, $LANG_ADMIN, $LANG_ACCESS, $LANG28, $_IMAGE_TYPE; @@ -859,7 +903,7 @@ function listgroups($show_all_groups = false) array('text' => $LANG_ACCESS['description'], 'field' => 'grp_descr', 'sort' => true), array('text' => $LANG_ACCESS['coregroup'], 'field' => 'grp_gl_core', 'sort' => true), array('text' => $LANG28[88], 'field' => 'grp_default', 'sort' => true), - array('text' => $LANG_ACCESS['listusers'], 'field' => 'list', 'sort' => false) + array('text' => $LANG_ACCESS['listusers'], 'field' => 'list', 'sort' => false), ); $defsort_arr = array('field' => 'grp_name', 'direction' => 'asc'); @@ -871,15 +915,15 @@ function listgroups($show_all_groups = false) $edit_url .= '&chk_showall=1'; } - $menu_arr = array ( - array('url' => $edit_url, + $menu_arr = array( + array('url' => $edit_url, 'text' => $LANG_ADMIN['create_new']), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + array('url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home']), ); $retval .= COM_startBlock($LANG_ACCESS['groupmanager'], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= ADMIN_createMenu( $menu_arr, @@ -889,12 +933,12 @@ function listgroups($show_all_groups = false) $text_arr = array( 'has_extras' => true, - 'form_url' => $form_url + 'form_url' => $form_url, ); $filter = ''; - $checked =''; + $checked = ''; if ($show_all_groups) { $checked = ' checked="checked"'; } @@ -902,45 +946,43 @@ function listgroups($show_all_groups = false) if (SEC_inGroup('Root')) { $grpFilter = ''; } else { - $thisUsersGroups = SEC_getUserGroups (); - $grpFilter = 'AND (grp_id IN (' . implode (',', $thisUsersGroups) . '))'; + $thisUsersGroups = SEC_getUserGroups(); + $grpFilter = 'AND (grp_id IN (' . implode(',', $thisUsersGroups) . '))'; } if ($show_all_groups) { $filter .= ''; $retval .= ADMIN_list('groups', 'ADMIN_getListField_groups', $header_arr, - $text_arr, $query_arr, $defsort_arr, $filter); + $text_arr, $query_arr, $defsort_arr, $filter); $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); return $retval; } /** -* Get list of users in a given group -* -* Effectively, this function is used twice: To get a list of all users currently -* in the given group and to get all list of all users NOT in that group. -* -* @param int $group_id group id -* @param boolean $allusers true: return users not in the group -* @return string option list containing uids and usernames -* -*/ + * Get list of users in a given group + * Effectively, this function is used twice: To get a list of all users currently + * in the given group and to get all list of all users NOT in that group. + * + * @param int $group_id group id + * @param boolean $allusers true: return users not in the group + * @return string option list containing uids and usernames + */ function grp_selectUsers($group_id, $allusers = false) { global $_TABLES, $_USER; @@ -948,17 +990,17 @@ function grp_selectUsers($group_id, $allusers = false) $retval = ''; // Get a list of users in the Root Group and the selected group - $sql = "SELECT DISTINCT uid FROM {$_TABLES['users']} LEFT JOIN {$_TABLES['group_assignments']} "; + $sql = "SELECT DISTINCT uid FROM {$_TABLES['users']} LEFT JOIN {$_TABLES['group_assignments']} "; $sql .= "ON {$_TABLES['group_assignments']}.ug_uid = uid WHERE uid > 1 AND "; $sql .= "({$_TABLES['group_assignments']}.ug_main_grp_id = 1 OR {$_TABLES['group_assignments']}.ug_main_grp_id = $group_id)"; - $result = DB_query ($sql); + $result = DB_query($sql); $filteredusers = array(); while ($A = DB_fetchArray($result)) { $filteredusers[] = $A['uid']; } - $groups = getGroupList ($group_id); - $grouplist = '(' . implode (',', $groups) . ')'; + $groups = getGroupList($group_id); + $grouplist = '(' . implode(',', $groups) . ')'; $sql = "SELECT DISTINCT uid,username FROM {$_TABLES['users']} LEFT JOIN {$_TABLES['group_assignments']} "; $sql .= "ON {$_TABLES['group_assignments']}.ug_uid = uid WHERE uid > 1 AND "; $sql .= "{$_TABLES['group_assignments']}.ug_main_grp_id "; @@ -968,14 +1010,14 @@ function grp_selectUsers($group_id, $allusers = false) $sql .= "IN {$grouplist} "; // Filter out the users that will be in the selected group if ($allusers) { - $filteredusers = implode(',',$filteredusers); + $filteredusers = implode(',', $filteredusers); $sql .= " AND uid NOT IN ($filteredusers) "; } $sql .= "ORDER BY username"; - $result = DB_query ($sql); - $numUsers = DB_numRows ($result); + $result = DB_query($sql); + $numUsers = DB_numRows($result); for ($i = 0; $i < $numUsers; $i++) { - list($uid, $username) = DB_fetchArray ($result); + list($uid, $username) = DB_fetchArray($result); $retval .= ''; } @@ -983,12 +1025,11 @@ function grp_selectUsers($group_id, $allusers = false) } /** -* Allow easy addition/removal of users to/from a group -* -* @param int $group Group ID -* @return string HTML form -* -*/ + * Allow easy addition/removal of users to/from a group + * + * @param int $group Group ID + * @return string HTML form + */ function editusers($group) { global $_CONF, $_TABLES, $_USER, $LANG_ACCESS, $LANG_ADMIN, $LANG28, @@ -1003,17 +1044,18 @@ function editusers($group) $thisUsersGroups = SEC_getUserGroups(); $groupName = DB_getItem($_TABLES['groups'], 'grp_name', "grp_id='$group'"); if ((!empty($group) && ($group > 0) && - !in_array($group, $thisUsersGroups) && - !SEC_groupIsRemoteUserAndHaveAccess($group, $thisUsersGroups)) - || (($grp_name == 'All Users') || - ($grp_name == 'Logged-in Users'))) { + !in_array($group, $thisUsersGroups) && + !SEC_groupIsRemoteUserAndHaveAccess($group, $thisUsersGroups)) + || (($grp_name == 'All Users') || + ($grp_name == 'Logged-in Users')) + ) { if (!SEC_inGroup('Root') && ($grp_name == 'Root')) { $retval .= COM_showMessageText($LANG_ACCESS['canteditroot'], - $LANG_ACCESS['usergroupadmin']); + $LANG_ACCESS['usergroupadmin']); COM_accessLog("User {$_USER['username']} tried to edit the Root group with insufficient privileges."); } else { $retval .= COM_showMessageText($LANG_ACCESS['canteditgroup'], - $LANG_ACCESS['usergroupadmin']); + $LANG_ACCESS['usergroupadmin']); } return $retval; @@ -1021,23 +1063,27 @@ function editusers($group) $group_listing_url = $_CONF['site_admin_url'] . '/group.php'; $showall = 0; - if (isset($_REQUEST['chk_showall']) && ($_REQUEST['chk_showall'] == 1)) { + if (Geeklog\Input::request('chk_showall') == 1) { $group_listing_url .= '?chk_showall=1'; $showall = 1; } $menu_arr = array( - array('url' => $group_listing_url, - 'text' => $LANG28[38]), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) - ); + array( + 'url' => $group_listing_url, + 'text' => $LANG28[38], + ), + array( + 'url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home'], + ), + ); $retval .= COM_startBlock($LANG_ACCESS['usergroupadmin'] . " - $groupName", - '', COM_getBlockTemplate('_admin_block', 'header')); + '', COM_getBlockTemplate('_admin_block', 'header')); $retval .= ADMIN_createMenu($menu_arr, $LANG_ACCESS['editgroupmsg'], - $_CONF['layout_url'] . '/images/icons/group.' . $_IMAGE_TYPE); + $_CONF['layout_url'] . '/images/icons/group.' . $_IMAGE_TYPE); $groupmembers = COM_newTemplate($_CONF['path_layout'] . 'admin/group'); $groupmembers->set_file(array('groupmembers' => 'groupmembers.thtml')); @@ -1045,17 +1091,17 @@ function editusers($group) $groupmembers->set_var('phpself', $_CONF['site_admin_url'] . '/group.php'); $groupmembers->set_var('lang_adminhome', $LANG_ACCESS['adminhome']); $groupmembers->set_var('lang_instructions', $LANG_ACCESS['editgroupmsg']); - $groupmembers->set_var('LANG_sitemembers',$LANG_ACCESS['availmembers']); - $groupmembers->set_var('LANG_grpmembers',$LANG_ACCESS['groupmembers']); + $groupmembers->set_var('LANG_sitemembers', $LANG_ACCESS['availmembers']); + $groupmembers->set_var('LANG_grpmembers', $LANG_ACCESS['groupmembers']); $groupmembers->set_var('sitemembers', grp_selectUsers($group, true)); $groupmembers->set_var('group_list', grp_selectUsers($group)); - $groupmembers->set_var('LANG_add',$LANG_ACCESS['add']); - $groupmembers->set_var('LANG_remove',$LANG_ACCESS['remove']); + $groupmembers->set_var('LANG_add', $LANG_ACCESS['add']); + $groupmembers->set_var('LANG_remove', $LANG_ACCESS['remove']); $groupmembers->set_var('lang_save', $LANG_ADMIN['save']); $groupmembers->set_var('lang_cancel', $LANG_ADMIN['cancel']); $groupmembers->set_var('lang_grouplist', $LANG28[38]); $groupmembers->set_var('show_all', $showall); - $groupmembers->set_var('group_id',$group); + $groupmembers->set_var('group_id', $group); $groupmembers->set_var('gltoken_name', CSRF_TOKEN); $groupmembers->set_var('gltoken', SEC_createToken()); $groupmembers->parse('output', 'groupmembers'); @@ -1067,11 +1113,11 @@ function editusers($group) } /** -* Save changes from the form to add/remove users to/from groups -* -* @param int $groupid id of the group being changed -* @param string $groupmembers list of group members -*/ + * Save changes from the form to add/remove users to/from groups + * + * @param int $groupid id of the group being changed + * @param string $groupmembers list of group members + */ function savegroupusers($groupid, $groupmembers) { global $_CONF, $_TABLES; @@ -1118,7 +1164,7 @@ function savegroupusers($groupid, $groupmembers) } - if (isset($_REQUEST['chk_showall']) && ($_REQUEST['chk_showall'] == 1)) { + if (Geeklog\Input::request('chk_showall') == 1) { COM_redirect($_CONF['site_admin_url'] . '/group.php?msg=49&chk_showall=1'); } else { COM_redirect($_CONF['site_admin_url'] . '/group.php?msg=49'); @@ -1126,35 +1172,35 @@ function savegroupusers($groupid, $groupmembers) } /** -* Delete a group -* -* @param int $grp_id id of group to delete -* @return string HTML redirect -* -*/ -function deleteGroup ($grp_id) + * Delete a group + * + * @param int $grp_id id of group to delete + * @return string HTML redirect + */ +function deleteGroup($grp_id) { global $_CONF, $_TABLES, $_USER; - if (!SEC_inGroup ('Root') && (DB_getItem ($_TABLES['groups'], 'grp_name', - "grp_id = $grp_id") == 'Root')) { - COM_accessLog ("User {$_USER['username']} tried to delete the Root group with insufficient privileges."); + if (!SEC_inGroup('Root') && (DB_getItem($_TABLES['groups'], 'grp_name', + "grp_id = $grp_id") == 'Root') + ) { + COM_accessLog("User {$_USER['username']} tried to delete the Root group with insufficient privileges."); COM_redirect($_CONF['site_admin_url'] . '/group.php'); } - $GroupAdminGroups = SEC_getUserGroups (); - if (!in_array ($grp_id, $GroupAdminGroups) && !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $GroupAdminGroups)) { - COM_accessLog ("User {$_USER['username']} tried to delete group $grp_id with insufficient privileges."); + $GroupAdminGroups = SEC_getUserGroups(); + if (!in_array($grp_id, $GroupAdminGroups) && !SEC_groupIsRemoteUserAndHaveAccess($grp_id, $GroupAdminGroups)) { + COM_accessLog("User {$_USER['username']} tried to delete group $grp_id with insufficient privileges."); COM_redirect($_CONF['site_admin_url'] . '/group.php'); } - DB_delete ($_TABLES['access'], 'acc_grp_id', $grp_id); - DB_delete ($_TABLES['group_assignments'], 'ug_grp_id', $grp_id); - DB_delete ($_TABLES['group_assignments'], 'ug_main_grp_id', $grp_id); - DB_delete ($_TABLES['groups'], 'grp_id', $grp_id); + DB_delete($_TABLES['access'], 'acc_grp_id', $grp_id); + DB_delete($_TABLES['group_assignments'], 'ug_grp_id', $grp_id); + DB_delete($_TABLES['group_assignments'], 'ug_main_grp_id', $grp_id); + DB_delete($_TABLES['groups'], 'grp_id', $grp_id); - PLG_groupChanged ($grp_id, 'delete'); - if (isset($_REQUEST['chk_showall']) && ($_REQUEST['chk_showall'] == 1)) { + PLG_groupChanged($grp_id, 'delete'); + if (Geeklog\Input::request('chk_showall') == 1) { COM_redirect($_CONF['site_admin_url'] . '/group.php?msg=50&chk_showall=1'); } else { COM_redirect($_CONF['site_admin_url'] . '/group.php?msg=50'); @@ -1162,75 +1208,55 @@ function deleteGroup ($grp_id) } // MAIN -$mode = ''; -if (isset($_REQUEST['mode'])) { - $mode = $_REQUEST['mode']; -} +$mode = Geeklog\Input::request('mode', ''); -if (($mode == $LANG_ADMIN['delete']) && !empty ($LANG_ADMIN['delete'])) { - $grp_id = COM_applyFilter ($_REQUEST['grp_id'], true); - if (!isset ($grp_id) || empty ($grp_id) || ($grp_id == 0)) { - COM_errorLog ('Attempted to delete group grp_id=' . $grp_id); +if (($mode == $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete'])) { + $grp_id = (int) Geeklog\Input::fRequest('grp_id'); + if (!isset ($grp_id) || empty($grp_id) || ($grp_id == 0)) { + COM_errorLog('Attempted to delete group grp_id=' . $grp_id); COM_redirect($_CONF['site_admin_url'] . '/group.php'); } elseif (SEC_checkToken()) { - $display .= deleteGroup ($grp_id); + $display .= deleteGroup($grp_id); } else { COM_accessLog("User {$_USER['username']} tried to illegally delete group $grp_id and failed CSRF checks."); COM_redirect($_CONF['site_admin_url'] . '/index.php'); } } elseif (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save']) && SEC_checkToken()) { - $grp_gl_core = COM_applyFilter($_POST['grp_gl_core'], true); - $grp_default = 0; - if (isset($_POST['chk_grpdefault'])) { - $grp_default = 1; - } - $grp_applydefault = 0; - if (isset($_POST['chk_applydefault'])) { - $grp_applydefault = 1; - } - $chk_grpadmin = ''; - if (isset($_POST['chk_grpadmin'])) { - $chk_grpadmin = COM_applyFilter($_POST['chk_grpadmin']); - } - $features = array(); - if (isset($_POST['features'])) { - $features = $_POST['features']; - } - $groups = array(); - if (isset($_POST['groups'])) { - $groups = $_POST['groups']; - } - $display .= savegroup(COM_applyFilter($_POST['grp_id'], true), - COM_applyFilter($_POST['grp_name']), - $_POST['grp_descr'], $chk_grpadmin, $grp_gl_core, - $grp_default, $grp_applydefault, $features, $groups); -} elseif (($mode == 'savegroupusers') && SEC_checkToken()) { - $grp_id = COM_applyFilter($_REQUEST['grp_id'], true); + $grp_gl_core = (int) Geeklog\Input::fPost('grp_gl_core', 0); + $grp_default = isset($_POST['chk_grpdefault']) ? 1 : 0; + $grp_applydefault = isset($_POST['chk_applydefault']) ? 1 : 0; + $chk_grpadmin = Geeklog\Input::fPost('chk_grpadmin', ''); + $features = Geeklog\Input::post('features', array()); + $groups = Geeklog\Input::post('groups', array()); + $display .= savegroup( + (int) Geeklog\Input::fPost('grp_id', 0), + Geeklog\Input::fPost('grp_name'), + Geeklog\Input::post('grp_descr'), + $chk_grpadmin, $grp_gl_core, $grp_default, $grp_applydefault, $features, $groups + ); +} elseif (($mode === 'savegroupusers') && SEC_checkToken()) { + $grp_id = (int) Geeklog\Input::fRequest('grp_id', 0); $display .= savegroupusers($grp_id, $_POST['groupmembers']); -} elseif ($mode == 'edit') { - $grp_id = 0; - if (isset ($_REQUEST['grp_id'])) { - $grp_id = COM_applyFilter ($_REQUEST['grp_id'], true); - } - $display .= editgroup ($grp_id); +} elseif ($mode === 'edit') { + $grp_id = (int) Geeklog\Input::fRequest('grp_id', 0); + $display .= editgroup($grp_id); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_ACCESS['groupeditor'])); -} elseif ($mode == 'listusers') { - $grp_id = COM_applyFilter ($_REQUEST['grp_id'], true); - $display .= listusers ($grp_id); +} elseif ($mode === 'listusers') { + $grp_id = (int) Geeklog\Input::fRequest('grp_id', 0); + $display .= listusers($grp_id); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_ACCESS['groupmembers'])); -} elseif ($mode == 'editusers') { - $grp_id = COM_applyFilter ($_REQUEST['grp_id'], true); - $display .= editusers ($grp_id); +} elseif ($mode === 'editusers') { + $grp_id = (int) Geeklog\Input::fRequest('grp_id', 0); + $display .= editusers($grp_id); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_ACCESS['usergroupadmin'])); } else { // 'cancel' or no mode at all $show_all_groups = false; if (isset($_POST['q'])) { // check $_POST only, as $_GET['chk_showall'] may also be set - if (isset($_POST['chk_showall']) && ($_POST['chk_showall'] == 1)) { + if (Geeklog\Input::post('chk_showall') == 1) { $show_all_groups = true; } - } elseif (isset($_REQUEST['chk_showall']) && - ($_REQUEST['chk_showall'] == 1)) { + } elseif (Geeklog\Input::request('chk_showall') == 1) { $show_all_groups = true; } $display .= COM_showMessageFromParameter(); @@ -1239,5 +1265,3 @@ function deleteGroup ($grp_id) } COM_output($display); - -?> diff --git a/public_html/admin/index.php b/public_html/admin/index.php index 88644fcea..6fb342274 100644 --- a/public_html/admin/index.php +++ b/public_html/admin/index.php @@ -33,7 +33,7 @@ require_once 'auth.inc.php'; // MAIN -if (isset($_GET['mode']) && ($_GET['mode'] == 'logout')) { +if (Geeklog\Input::get('mode') === 'logout') { COM_redirect($_CONF['site_url'] . '/users.php?mode=logout'); } diff --git a/public_html/admin/install/classes/db.class.php b/public_html/admin/install/classes/db.class.php index 17949075e..794877ebb 100644 --- a/public_html/admin/install/classes/db.class.php +++ b/public_html/admin/install/classes/db.class.php @@ -1,128 +1,128 @@ -env['siteconfig_path']; - require $this->env['dbconfig_path']; + $this->includeConfig($this->env['dbconfig_path']); } // Update the GL configuration with the correct paths. @@ -2912,6 +2934,7 @@ private function doDatabaseUpgrades($currentGlVersion, $checkForMessage = false) } } else { $this->updateDB($_SQL, $progress); + update_dateTimeColumns212(); update_addLanguage(); update_addRouting(); update_ConfValuesFor212(); @@ -3706,7 +3729,7 @@ private function migrateStep2() } } - require_once $this->env['dbconfig_path']; // Not sure if this needs to be included.. + $this->includeConfig($this->env['dbconfig_path']); // Not sure if this needs to be included.. switch ($_REQUEST['migration_type']) { case 'select': @@ -3953,7 +3976,7 @@ private function migrateStep4() $this->env['dbconfig_path'] = $_CONF['path'] . 'db-config.php'; } - require_once $this->env['dbconfig_path']; + $this->includeConfig($this->env['dbconfig_path']); require_once $_CONF['path_system'] . 'lib-database.php'; require_once $_CONF['path_system'] . 'classes/Autoload.php'; Geeklog\Autoload::initialize(); @@ -4503,7 +4526,7 @@ private function installEngine($installType, $installStep) } } - require $this->env['dbconfig_path']; + $this->includeConfig($this->env['dbconfig_path']); require_once $this->env['siteconfig_path']; require_once $_CONF['path_system'] . 'lib-database.php'; @@ -4620,7 +4643,7 @@ private function installEngine($installType, $installStep) $utf8 = ($this->post('utf8') === 'true') || ($this->get('utf8') === 'true'); // We need all this just to do one DB query - require_once $this->env['dbconfig_path']; + $this->includeConfig($this->env['dbconfig_path']); require_once $this->env['siteconfig_path']; require_once $_CONF['path_system'] . 'lib-database.php'; @@ -4734,7 +4757,7 @@ private function installEngine($installType, $installStep) $version = $this->get('version', $this->post('version', '')); // Let's do this - require_once $this->env['dbconfig_path']; + $this->includeConfig($this->env['dbconfig_path']); require_once $this->env['siteconfig_path']; require_once $_CONF['path_system'] . 'lib-database.php'; @@ -4843,7 +4866,7 @@ private function installEngine($installType, $installStep) */ public function run() { - global $_CONF, $_TABLES, $_VARS, $_URL, $_DEVICE, $_SCRIPTS, $_IMAGE_TYPE, $TEMPLATE_OPTIONS, $_GROUPS, $_RIGHTS; + global $_CONF, $_TABLES, $_VARS, $_URL, $_DEVICE, $_SCRIPTS, $_IMAGE_TYPE, $TEMPLATE_OPTIONS, $_GROUPS, $_RIGHTS, $_USER, $_DB_dbms, $_DB_table_prefix; // Prepare some hints about what /path/to/geeklog might be ... $this->env['gl_path'] = BASE_FILE; diff --git a/public_html/admin/install/classes/mysql.class.php b/public_html/admin/install/classes/mysql.class.php index 59ba1f0b6..dd925a45d 100644 --- a/public_html/admin/install/classes/mysql.class.php +++ b/public_html/admin/install/classes/mysql.class.php @@ -1,102 +1,102 @@ -fixMysqlCharset($args['charset']); - } - - $this->args = $args; - - if (!is_callable('mysql_connect')) { - throw new \Exception(__METHOD__ . ': mysql_connect is not supported.'); - } - - $this->conn = mysql_connect($args['host'], $args['user'], $args['pass']); - - if ($this->conn === false) { - throw new \Exception(__METHOD__ . ': failed to connect to MySQL server.'); - } - - if (!mysql_select_db($args['name'], $this->conn)) { - throw new \Exception(__METHOD__ . ': could not select database.'); - } - - $this->serverVersion = @mysqli_get_server_version($this->conn); - - if (!empty($args['charset'])) { - if (!mysql_set_charset($args['charset'], $this->conn)) { - @mysql_query("SET NAMES {$args['charset']}"); - } - } - } - - /** - * Close database connection - * - * @return void - */ - public function close() - { - mysql_close($this->conn); - $this->conn = null; - } - - /** - * Perform a query - * - * @param string $sql - * @return mixed - */ - public function query($sql) - { - $result = mysql_query($sql, $this->conn); - - return $result; - } - - /** - * Return error message - * - * @return string - */ - public function error() - { - return mysql_error($this->conn); - } - - /** - * Return server version - * - * @return int - */ - public function getVersion() - { - return $this->serverVersion; - } -} +fixMysqlCharset($args['charset']); + } + + $this->args = $args; + + if (!is_callable('mysql_connect')) { + throw new \Exception(__METHOD__ . ': mysql_connect is not supported.'); + } + + $this->conn = mysql_connect($args['host'], $args['user'], $args['pass']); + + if ($this->conn === false) { + throw new \Exception(__METHOD__ . ': failed to connect to MySQL server.'); + } + + if (!mysql_select_db($args['name'], $this->conn)) { + throw new \Exception(__METHOD__ . ': could not select database.'); + } + + $this->serverVersion = @mysqli_get_server_version($this->conn); + + if (!empty($args['charset'])) { + if (!mysql_set_charset($args['charset'], $this->conn)) { + @mysql_query("SET NAMES {$args['charset']}"); + } + } + } + + /** + * Close database connection + * + * @return void + */ + public function close() + { + mysql_close($this->conn); + $this->conn = null; + } + + /** + * Perform a query + * + * @param string $sql + * @return mixed + */ + public function query($sql) + { + $result = mysql_query($sql, $this->conn); + + return $result; + } + + /** + * Return error message + * + * @return string + */ + public function error() + { + return mysql_error($this->conn); + } + + /** + * Return server version + * + * @return int + */ + public function getVersion() + { + return $this->serverVersion; + } +} diff --git a/public_html/admin/install/classes/mysqli.class.php b/public_html/admin/install/classes/mysqli.class.php index e34012c0d..faff6ca26 100644 --- a/public_html/admin/install/classes/mysqli.class.php +++ b/public_html/admin/install/classes/mysqli.class.php @@ -1,98 +1,98 @@ -fixMysqlCharset($args['charset']); - } - - $this->args = $args; - - if (!is_callable('mysqli_connect')) { - throw new \Exception(__METHOD__ . ': mysqli_connect is not supported.'); - } - - $this->conn = new \mysqli($args['host'], $args['user'], $args['pass'], $args['name']); - - if ($this->conn->connect_error) { - throw new \Exception(__METHOD__ . ': failed to connect to MySQL server.'); - } - - $this->serverVersion = $this->conn->server_version; - - if (!empty($args['charset'])) { - if (!$this->conn->set_charset($args['charset'])) { - @$this->conn->query("SET NAMES {$args['charset']}"); - } - } - } - - /** - * Close database connection - * - * @return void - */ - public function close() - { - $this->conn->close(); - $this->conn = null; - } - - /** - * Perform a query - * - * @param string $sql - * @return mixed - */ - public function query($sql) - { - $result = $this->conn->query($sql); - - return $result; - } - - /** - * Return error message - * - * @return string - */ - public function error() - { - return $this->conn->error; - } - - /** - * Return server version - * - * @return int - */ - public function getVersion() - { - return $this->serverVersion; - } -} +fixMysqlCharset($args['charset']); + } + + $this->args = $args; + + if (!is_callable('mysqli_connect')) { + throw new \Exception(__METHOD__ . ': mysqli_connect is not supported.'); + } + + $this->conn = new \mysqli($args['host'], $args['user'], $args['pass'], $args['name']); + + if ($this->conn->connect_error) { + throw new \Exception(__METHOD__ . ': failed to connect to MySQL server.'); + } + + $this->serverVersion = $this->conn->server_version; + + if (!empty($args['charset'])) { + if (!$this->conn->set_charset($args['charset'])) { + @$this->conn->query("SET NAMES {$args['charset']}"); + } + } + } + + /** + * Close database connection + * + * @return void + */ + public function close() + { + $this->conn->close(); + $this->conn = null; + } + + /** + * Perform a query + * + * @param string $sql + * @return mixed + */ + public function query($sql) + { + $result = $this->conn->query($sql); + + return $result; + } + + /** + * Return error message + * + * @return string + */ + public function error() + { + return $this->conn->error; + } + + /** + * Return server version + * + * @return int + */ + public function getVersion() + { + return $this->serverVersion; + } +} diff --git a/public_html/admin/install/classes/pgsql.class.php b/public_html/admin/install/classes/pgsql.class.php index d8df9e470..9452f98e9 100644 --- a/public_html/admin/install/classes/pgsql.class.php +++ b/public_html/admin/install/classes/pgsql.class.php @@ -1,114 +1,114 @@ -args = $args; - - if (!is_callable('pgsql_connect')) { - throw new \Exception(__METHOD__ . ': pgsql_connect is not supported.'); - } - - $this->conn = pg_connect(sprintf('host=%s user=%s password=%s dbname=%s', $args['host'], $args['user'], $args['pass'], $args['name'])); - - if ($this->conn === false) { - throw new \Exception(__METHOD__ . ': failed to connect to PostgreSQL server.'); - } - - $version = pg_version($this->conn); - - if (is_array($version) && isset($version['server'])) { - $this->serverVersion = $this->getIntVersion($version['server']); - } else { - $this->serverVersion = 0; - } - - if (!empty($args['charset'])) { - pg_set_client_encoding($this->conn, $args['charset']); - } - } - - /** - * Close database connection - * - * @return void - */ - public function close() - { - pg_close($this->conn); - $this->conn = null; - } - - /** - * Perform a query - * - * @param string $sql - * @return mixed - */ - public function query($sql) - { - $retval = pg_query($this->conn, $sql); - - return $retval; - } - - /** - * Return error message - * - * @return string - */ - public function error() - { - return pg_last_error($this->conn); - } - - /** - * @param string $version - * @return int - */ - private function getIntVersion($version) - { - $retval = 0; - $version = preg_replace('/[^0-9.]/', '', $version); - - foreach (explode('.', $version) as $digit) { - $retval = 100 * $retval + (int) $digit; - } - - return $retval; - } - - /** - * Return server version - * - * @return int - */ - public function getVersion() - { - return $this->serverVersion; - } -} +args = $args; + + if (!is_callable('pgsql_connect')) { + throw new \Exception(__METHOD__ . ': pgsql_connect is not supported.'); + } + + $this->conn = pg_connect(sprintf('host=%s user=%s password=%s dbname=%s', $args['host'], $args['user'], $args['pass'], $args['name'])); + + if ($this->conn === false) { + throw new \Exception(__METHOD__ . ': failed to connect to PostgreSQL server.'); + } + + $version = pg_version($this->conn); + + if (is_array($version) && isset($version['server'])) { + $this->serverVersion = $this->getIntVersion($version['server']); + } else { + $this->serverVersion = 0; + } + + if (!empty($args['charset'])) { + pg_set_client_encoding($this->conn, $args['charset']); + } + } + + /** + * Close database connection + * + * @return void + */ + public function close() + { + pg_close($this->conn); + $this->conn = null; + } + + /** + * Perform a query + * + * @param string $sql + * @return mixed + */ + public function query($sql) + { + $retval = pg_query($this->conn, $sql); + + return $retval; + } + + /** + * Return error message + * + * @return string + */ + public function error() + { + return pg_last_error($this->conn); + } + + /** + * @param string $version + * @return int + */ + private function getIntVersion($version) + { + $retval = 0; + $version = preg_replace('/[^0-9.]/', '', $version); + + foreach (explode('.', $version) as $digit) { + $retval = 100 * $retval + (int) $digit; + } + + return $retval; + } + + /** + * Return server version + * + * @return int + */ + public function getVersion() + { + return $this->serverVersion; + } +} diff --git a/public_html/admin/install/install-plugins.php b/public_html/admin/install/install-plugins.php index eb1201465..95fd2612c 100644 --- a/public_html/admin/install/install-plugins.php +++ b/public_html/admin/install/install-plugins.php @@ -126,7 +126,7 @@ $upload_success = false; if (isset($_FILES['plugin'])) { - if ($error_msg = $installer->getUploadError($_FILES['plugin'])) { // If an error occured while uploading the file. + if ($error_msg = $installer->getUploadError($_FILES['plugin'])) { // If an error occurred while uploading the file. $display .= '
' . $LANG_INSTALL[38] . ' ' . $error_msg . '
' . PHP_EOL; } else { $plugin_file = $_CONF['path_data'] . $_FILES['plugin']['name']; // Name the plugin file diff --git a/public_html/admin/install/language/chinese_simplified_utf-8.php b/public_html/admin/install/language/chinese_simplified_utf-8.php index 626b2e17e..5932571c6 100644 --- a/public_html/admin/install/language/chinese_simplified_utf-8.php +++ b/public_html/admin/install/language/chinese_simplified_utf-8.php @@ -429,4 +429,3 @@ 'plugin_upload' => $LANG_PLUGINS[10] ); -?> diff --git a/public_html/admin/install/language/chinese_traditional_utf-8.php b/public_html/admin/install/language/chinese_traditional_utf-8.php index 2e8c05ce9..f5ed9a8e2 100644 --- a/public_html/admin/install/language/chinese_traditional_utf-8.php +++ b/public_html/admin/install/language/chinese_traditional_utf-8.php @@ -429,4 +429,3 @@ 'plugin_upload' => $LANG_PLUGINS[10] ); -?> diff --git a/public_html/admin/install/language/german.php b/public_html/admin/install/language/german.php index 27d94b5b1..137ad05c1 100644 --- a/public_html/admin/install/language/german.php +++ b/public_html/admin/install/language/german.php @@ -136,7 +136,7 @@ 84 => 'Der Pfad "', 85 => '" scheint nicht korrekt zu sein. Bitte gib den Pfad noch einmal ein.', 86 => 'Sprache', - 87 => 'http://geeklog.info/forum/index.php?forum=1', + 87 => 'https://www.geeklog.net/forum/index.php?forum=1', 88 => 'Ändere das Verzeichnis und die Dateien darin zu', 89 => 'Aktuelle Version:', 90 => 'Leere Datenbank?', @@ -428,4 +428,3 @@ 'plugin_upload' => $LANG_PLUGINS[10] ); -?> diff --git a/public_html/admin/install/language/hebrew_utf-8.php b/public_html/admin/install/language/hebrew_utf-8.php index 92a14fe6f..4649568e2 100644 --- a/public_html/admin/install/language/hebrew_utf-8.php +++ b/public_html/admin/install/language/hebrew_utf-8.php @@ -423,4 +423,3 @@ 'plugin_upload' => $LANG_PLUGINS[10] ); -?> diff --git a/public_html/admin/install/language/japanese_utf-8.php b/public_html/admin/install/language/japanese_utf-8.php index 02d664a00..1398b05b8 100644 --- a/public_html/admin/install/language/japanese_utf-8.php +++ b/public_html/admin/install/language/japanese_utf-8.php @@ -430,4 +430,3 @@ 'plugin_upload' => $LANG_PLUGINS[10] ); -?> diff --git a/public_html/admin/install/language/polish.php b/public_html/admin/install/language/polish.php index 3b97f2acc..7d8068582 100644 --- a/public_html/admin/install/language/polish.php +++ b/public_html/admin/install/language/polish.php @@ -128,7 +128,7 @@ 76 => 'Select Your Current Geeklog Version', 77 => 'The installer was unable to determine your current version of Geeklog, please select it from the list below:', 78 => 'Upgrade Error', - 79 => 'An error occured while upgrading your Geeklog installation.', + 79 => 'An error occurred while upgrading your Geeklog installation.', 80 => 'Change', 81 => 'Stop!', 82 => 'It is critical that you change permissions on the files listed below. Geeklog will not be able to be installed until you do so.', @@ -428,4 +428,3 @@ 'plugin_upload' => $LANG_PLUGINS[10] ); -?> diff --git a/public_html/admin/logviewer.php b/public_html/admin/logviewer.php index 1f7d7fdaf..867281075 100644 --- a/public_html/admin/logviewer.php +++ b/public_html/admin/logviewer.php @@ -47,14 +47,7 @@ exit; } -if (isset($_GET['log'])) { - $log = COM_applyFilter($_GET['log']); -} elseif (isset($_POST['log'])) { - $log = COM_applyFilter($_POST['log']); -} else { - $log = ''; -} - +$log = Geeklog\Input::fGetOrPost('log', ''); $log = COM_sanitizeFilename($log, true); if (empty($log)) { $log = 'error.log'; diff --git a/public_html/admin/mail.php b/public_html/admin/mail.php index 1c25720ae..d95e68840 100755 --- a/public_html/admin/mail.php +++ b/public_html/admin/mail.php @@ -117,7 +117,7 @@ function display_mailform($vars = array()) } else { $from = $_CONF['site_name']; } - $from = strip_tags($from); + $from = GLText::stripTags($from); $from = substr($from, 0, strcspn($from, "\r\n")); $from = htmlspecialchars(trim($from), ENT_QUOTES); $mail_templates->set_var('site_name', $from); @@ -128,7 +128,7 @@ function display_mailform($vars = array()) } else { $fromEmail = $_CONF['site_mail']; } - $fromEmail = strip_tags($fromEmail); + $fromEmail = GLText::stripTags($fromEmail); $fromEmail = substr($fromEmail, 0, strcspn($fromEmail, "\r\n")); $fromEmail = htmlspecialchars(trim($fromEmail), ENT_QUOTES); $mail_templates->set_var('site_mail', $fromEmail); @@ -229,7 +229,7 @@ function send_messages(array $vars) $from = array($vars['fraepost'] => $vars['fra']); $subject = COM_stripslashes($vars['subject']); - $subject = strip_tags($subject); + $subject = GLText::stripTags($subject); $message = COM_stripslashes($vars['message']); if ($html) { @@ -245,7 +245,7 @@ function send_messages(array $vars) $message = '' . PHP_EOL . $message . '' . PHP_EOL; } } else { - $message = strip_tags($message); + $message = GLText::stripTags($message); } // Loop through and send the messages! @@ -300,7 +300,7 @@ function send_messages(array $vars) } // MAIN -if (isset($_POST['mail']) && ($_POST['mail'] == 'mail') && SEC_checkToken()) { +if ((Geeklog\Input::post('mail') === 'mail') && SEC_checkToken()) { $display .= send_messages($_POST); } else { $display .= COM_showMessageFromParameter(); diff --git a/public_html/admin/moderation.php b/public_html/admin/moderation.php index 1e02ce8df..264e63dbd 100644 --- a/public_html/admin/moderation.php +++ b/public_html/admin/moderation.php @@ -2,7 +2,7 @@ /* Reminder: always indent with 4 spaces (no tabs). */ // +---------------------------------------------------------------------------+ -// | Geeklog 1.6 | +// | Geeklog 2.1 | // +---------------------------------------------------------------------------+ // | moderation.php | // | | @@ -54,13 +54,14 @@ } /** -* Prints the user submission lists at the top -* -* @param string $token CSRF token -* @return string HTML for the C&C block -* -*/ -function usersubmissions($token) + * Prints the user submission lists at the top + * + * @param string $token CSRF token + * @param int $approved the number of approved items + * @param int $deleted the number of deleted items + * @return string HTML for the C&C block + */ +function usersubmissions($token, $approved = 0, $deleted = 0) { global $_CONF, $_TABLES, $LANG_ADMIN, $LANG29, $_IMAGE_TYPE; @@ -68,18 +69,27 @@ function usersubmissions($token) $retval = ''; + $approved = (int) $approved; + $deleted = (int) $deleted; + + if (($approved > 0) || ($deleted > 0)) { + $retval .= COM_showMessageText(sprintf($LANG29[45], $approved, $deleted), $LANG29[44]); + } + // writing the menu on top - $menu_arr = array ( - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + $menu_arr = array( + array( + 'url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home'] + ), ); $retval .= COM_startBlock($LANG29[13], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= ADMIN_createMenu( $menu_arr, $LANG29['submissions_desc'], - $_CONF['layout_url'] . '/images/icons/moderation.'. $_IMAGE_TYPE + $_CONF['layout_url'] . '/images/icons/moderation.' . $_IMAGE_TYPE ); // IMPORTANT - If any of the below submission lists change, please @@ -116,15 +126,13 @@ function usersubmissions($token) } /** -* Displays items needing moderation -* -* Displays the moderation list of items from the submission tables -* -* @param string $type Type of object to build list for -* @param string $token CSRF token -* @return string HTML for the list of items -* -*/ + * Displays items needing moderation + * Displays the moderation list of items from the submission tables + * + * @param string $type Type of object to build list for + * @param string $token CSRF token + * @return string HTML for the list of items + */ function itemlist($type, $token) { global $_CONF, $_TABLES, $LANG29, $LANG_ADMIN; @@ -136,6 +144,7 @@ function itemlist($type, $token) if (empty($type)) { // something is terribly wrong, bail COM_errorLog("Submission type not set in moderation.php"); + return $retval; } @@ -143,8 +152,8 @@ function itemlist($type, $token) if ($type == 'comment') { $sql = "SELECT cid AS id,title,comment,date,uid,type,sid " - . "FROM {$_TABLES['commentsubmissions']} " - . "ORDER BY cid ASC"; + . "FROM {$_TABLES['commentsubmissions']} " + . "ORDER BY cid ASC"; $H = array($LANG29[10], $LANG29[36], $LANG29[14]); $section_title = $LANG29[41]; $section_help = 'cccommentsubmission.html'; @@ -176,6 +185,7 @@ function itemlist($type, $token) if (empty($sql) || DB_error()) { // was more than likely a plugin that doesn't need moderation $nrows = 0; + return; } else { $nrows = DB_numRows($result); @@ -188,16 +198,16 @@ function itemlist($type, $token) */ if ($isplugin) { $A['edit'] = $_CONF['site_admin_url'] . '/plugins/' . $type - . '/index.php?mode=editsubmission&id=' . $A[0]; + . '/index.php?mode=editsubmission&id=' . $A[0]; } elseif ($type == 'comment') { $A['edit'] = $_CONF['site_url'] . '/comment.php' - . '?mode=editsubmission&cid=' . $A[0]; + . '?mode=editsubmission&cid=' . $A[0]; } elseif ($type == 'story_draft') { $A['edit'] = $_CONF['site_admin_url'] . '/story.php' - . '?mode=edit&sid=' . $A[0]; + . '?mode=edit&sid=' . $A[0]; } else { // this pretty much only leaves $type == 'story' - $A['edit'] = $_CONF['site_admin_url'] . '/' . $type - . '.php?mode=editsubmission&id=' . $A[0]; + $A['edit'] = $_CONF['site_admin_url'] . '/' . $type + . '.php?mode=editsubmission&id=' . $A[0]; } $A['row'] = $i; $A['_moderation_type'] = $type; @@ -213,7 +223,7 @@ function itemlist($type, $token) array('text' => $LANG29[2], 'field' => 'delete'), array('text' => $LANG29[1], 'field' => 'approve'), array('text' => $LANG29[42], 'field' => 'uid'), - array('text' => $LANG29[43], 'field' => 'publishfuture') + array('text' => $LANG29[43], 'field' => 'publishfuture'), ); } elseif ($type == 'story' || $type == 'story_draft') { $header_arr = array( // display 'text' and use table field 'field' @@ -223,7 +233,7 @@ function itemlist($type, $token) array('text' => $H[2], 'field' => 3), array('text' => $H[3], 'field' => 4), array('text' => $LANG29[2], 'field' => 'delete'), - array('text' => $LANG29[1], 'field' => 'approve') + array('text' => $LANG29[1], 'field' => 'approve'), ); } else { $header_arr = array( // display 'text' and use table field 'field' @@ -232,7 +242,7 @@ function itemlist($type, $token) array('text' => $H[1], 'field' => 2), array('text' => $H[2], 'field' => 3), array('text' => $LANG29[2], 'field' => 'delete'), - array('text' => $LANG29[1], 'field' => 'approve') + array('text' => $LANG29[1], 'field' => 'approve'), ); } @@ -240,36 +250,34 @@ function itemlist($type, $token) 'title' => $section_title, 'help_url' => $section_help, 'no_data' => $LANG29[39], - 'form_url' => "{$_CONF['site_admin_url']}/moderation.php" + 'form_url' => "{$_CONF['site_admin_url']}/moderation.php", ); $form_arr = array('bottom' => '', 'top' => ''); if ($nrows > 0) { $form_arr['bottom'] = '' . LB - . '' . LB - . '' . LB - . '' - . '

' . LB; + . '' . LB + . '' . LB + . '' + . '

' . LB; } $listoptions = array('chkdelete' => true, 'chkfield' => 'id'); $retval .= ADMIN_simpleList('ADMIN_getListField_moderation', $header_arr, - $text_arr, $data_arr, $listoptions, $form_arr); + $text_arr, $data_arr, $listoptions, $form_arr); return $retval; } /** -* Displays new user submissions -* -* When enabled, this will list all the new users which have applied for a -* site membership. When approving an application, an email containing the -* password is sent out immediately. -* -* @param string $token CSRF token -* @return string HTML for the list of users -* -*/ + * Displays new user submissions + * When enabled, this will list all the new users which have applied for a + * site membership. When approving an application, an email containing the + * password is sent out immediately. + * + * @param string $token CSRF token + * @return string HTML for the list of users + */ function userlist($token) { global $_CONF, $_TABLES, $LANG29, $LANG_ADMIN; @@ -278,12 +286,12 @@ function userlist($token) $retval = ''; $sql = "SELECT uid as id,username,fullname,email FROM {$_TABLES['users']} WHERE status = 2"; - $result = DB_query ($sql); + $result = DB_query($sql); $nrows = DB_numRows($result); $data_arr = array(); for ($i = 0; $i < $nrows; $i++) { $A = DB_fetchArray($result); - $A['edit'] = $_CONF['site_admin_url'].'/user.php?mode=edit&uid='.$A['id']; + $A['edit'] = $_CONF['site_admin_url'] . '/user.php?mode=edit&uid=' . $A['id']; $A['row'] = $i; $A['fullname'] = stripslashes($A['fullname']); $A['email'] = stripslashes($A['email']); @@ -295,14 +303,14 @@ function userlist($token) array('text' => $LANG29[17], 'field' => 2), array('text' => $LANG29[18], 'field' => 3), array('text' => $LANG29[2], 'field' => 'delete'), - array('text' => $LANG29[1], 'field' => 'approve') + array('text' => $LANG29[1], 'field' => 'approve'), ); - $text_arr = array('has_menu' => false, - 'title' => $LANG29[40], - 'help_url' => 'ccusersubmission.html', - 'no_data' => $LANG29[39], - 'form_url' => "{$_CONF['site_admin_url']}/moderation.php" + $text_arr = array('has_menu' => false, + 'title' => $LANG29[40], + 'help_url' => 'ccusersubmission.html', + 'no_data' => $LANG29[39], + 'form_url' => "{$_CONF['site_admin_url']}/moderation.php", ); $listoptions = array('chkdelete' => true, 'chkfield' => 'id'); @@ -310,15 +318,15 @@ function userlist($token) $form_arr = array("bottom" => '', "top" => ''); if ($nrows > 0) { $form_arr['bottom'] = '' . LB - . '' . LB - . '' . LB - . '' - . '

' . LB; + . '' . LB + . '' . LB + . '' + . '

' . LB; } $table = ADMIN_simpleList('ADMIN_getListField_moderation', $header_arr, - $text_arr, $data_arr, $listoptions, $form_arr); + $text_arr, $data_arr, $listoptions, $form_arr); $retval .= $table; @@ -326,117 +334,124 @@ function userlist($token) } /** -* Moderates an item -* -* This will actually perform moderation (approve or delete) one or more items -* -* @param array $mid Array of items -* @param array $action Array of actions to perform on items -* @param string $type Type of items ('story', etc.) -* @param int $count Number of items to moderate -* @return string HTML for "command and control" page -* -*/ + * Moderates an item + * This will actually perform moderation (approve or delete) one or more items + * + * @param array $mid Array of items + * @param array $action Array of actions to perform on items + * @param string $type Type of items ('story', etc.) + * @param int $count Number of items to moderate + * @return string HTML for "command and control" page + */ function moderation($mid, $action, $type, $count) { global $_CONF, $_TABLES; $retval = ''; + $sidArray = array(); + if (empty($type)) { // something is terribly wrong, bail $retval .= COM_errorLog("Submission type not set in moderation.php"); + return $retval; } - if ($type == 'comment') { + if ($type === 'comment') { $id = 'cid'; $table = $_TABLES['comments']; - $submissiontable = $_TABLES['commentsubmissions']; - $sidArray[] = ''; + $submissionTable = $_TABLES['commentsubmissions']; } else { - list($id, $table, $fields, $submissiontable) = PLG_getModerationValues($type); + list($id, $table, $fields, $submissionTable) = PLG_getModerationValues($type); } // Set true if a valid action other than delete_all is selected - $formaction = false; + $formAction = false; + $approved = 0; + $deleted = 0; for ($i = 0; $i < $count; $i++) { - if (isset($action[$i]) AND ($action[$i] != '')) { - $formaction = true; + if (isset($action[$i]) && ($action[$i] != '')) { + $formAction = true; } else { continue; } switch ($action[$i]) { - case 'delete': - if (empty($mid[$i])) { - $retval .= COM_errorLog("moderation.php just tried deleting everything in table $submissiontable because it got an empty id. Please report this immediately to your site administrator"); - return $retval; - } + case 'delete': + if (empty($mid[$i])) { + $retval .= COM_errorLog("moderation.php just tried deleting everything in table {$submissionTable} because it got an empty id. Please report this immediately to your site administrator"); + + return $retval; + } - // There may be some plugin specific processing that needs to - // happen first. - $retval .= PLG_deleteSubmission($type, $mid[$i]); + // There may be some plugin specific processing that needs to + // happen first. + $retval .= PLG_deleteSubmission($type, $mid[$i]); - // Notify plugins of a submission that is deleted - PLG_submissionDeleted($type); + // Notify plugins of a submission that is deleted + PLG_submissionDeleted($type); - DB_delete($submissiontable, $id, $mid[$i]); - break; + DB_delete($submissionTable, $id, $mid[$i]); + $deleted++; + break; - case 'approve': - if ($type == 'story') { - $sql = "SELECT *, ta.tid + case 'approve': + if ($type === 'story') { + $sql = "SELECT *, ta.tid FROM {$_TABLES['storysubmission']}, {$_TABLES['topic_assignments']} ta WHERE ta.type = 'article' AND ta.id = sid AND sid = '$mid[$i]'"; - $result = DB_query ($sql); - $A = DB_fetchArray ($result); - $A['related'] = DB_escapeString(implode ("\n", STORY_extractLinks ($A['introtext']))); - $A['owner_id'] = $A['uid']; - $A['title'] = DB_escapeString($A['title']); - $A['introtext'] = DB_escapeString($A['introtext']); - $A['bodytext'] = DB_escapeString( $A['bodytext'] ); - $result = DB_query ("SELECT group_id,perm_owner,perm_group,perm_members,perm_anon,archive_flag FROM {$_TABLES['topics']} WHERE tid = '{$A['tid']}'"); - $T = DB_fetchArray ($result); - if ($T['archive_flag'] == 1) { - $frontpage = 0; - } elseif (isset ($_CONF['frontpage'])) { - $frontpage = $_CONF['frontpage']; + $result = DB_query($sql); + $A = DB_fetchArray($result); + $A['related'] = DB_escapeString(implode("\n", STORY_extractLinks($A['introtext']))); + $A['owner_id'] = $A['uid']; + $A['title'] = DB_escapeString($A['title']); + $A['introtext'] = DB_escapeString($A['introtext']); + $A['bodytext'] = DB_escapeString($A['bodytext']); + $result = DB_query("SELECT group_id,perm_owner,perm_group,perm_members,perm_anon,archive_flag FROM {$_TABLES['topics']} WHERE tid = '{$A['tid']}'"); + $T = DB_fetchArray($result); + if ($T['archive_flag'] == 1) { + $frontPage = 0; + } elseif (isset($_CONF['frontpage'])) { + $frontPage = $_CONF['frontpage']; + } else { + $frontPage = 1; + } + DB_save($_TABLES['stories'], 'sid,uid,title,introtext,bodytext,related,date,show_topic_icon,commentcode,trackbackcode,postmode,frontpage,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon', + "'{$A['sid']}',{$A['uid']},'{$A['title']}','{$A['introtext']}','{$A['bodytext']}','{$A['related']}','{$A['date']}','{$_CONF['show_topic_icon']}','{$_CONF['comment_code']}','{$_CONF['trackback_code']}','{$A['postmode']}',$frontPage,{$A['owner_id']},{$T['group_id']},{$T['perm_owner']},{$T['perm_group']},{$T['perm_members']},{$T['perm_anon']}"); + DB_delete($_TABLES['storysubmission'], "$id", $mid[$i]); + $approved++; + + PLG_itemSaved($A['sid'], 'article'); + COM_rdfUpToDateCheck(); + } elseif ($type === 'comment') { + $sid = CMT_approveModeration($mid[$i]); + $approved++; + + if (!in_array($sid, $sidArray)) { + $sidArray[$i] = $sid; + } } else { - $frontpage = 1; - } - DB_save ($_TABLES['stories'],'sid,uid,title,introtext,bodytext,related,date,show_topic_icon,commentcode,trackbackcode,postmode,frontpage,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon', - "'{$A['sid']}',{$A['uid']},'{$A['title']}','{$A['introtext']}','{$A['bodytext']}','{$A['related']}','{$A['date']}','{$_CONF['show_topic_icon']}','{$_CONF['comment_code']}','{$_CONF['trackback_code']}','{$A['postmode']}',$frontpage,{$A['owner_id']},{$T['group_id']},{$T['perm_owner']},{$T['perm_group']},{$T['perm_members']},{$T['perm_anon']}"); - DB_delete($_TABLES['storysubmission'],"$id",$mid[$i]); - - PLG_itemSaved($A['sid'], 'article'); - COM_rdfUpToDateCheck (); - } elseif ($type == 'comment') { - $sid = CMT_approveModeration($mid[$i]); - if (! in_array($sid, $sidArray)) { - $sidArray[$i] = $sid; + /** + * This is called in case this is a plugin. There may be some + * plugin specific processing that needs to happen. + */ + + // avoid unnecessary copy, e.g. for draft stories + if ($table != $submissionTable) { + DB_copy($table, $fields, $fields, $submissionTable, $id, $mid[$i]); + } + $retval .= PLG_approveSubmission($type, $mid[$i]); + $approved++; } - } else { - /** - * This is called in case this is a plugin. There may be some - * plugin specific processing that needs to happen. - */ - - // avoid unnecessary copy, e.g. for draft stories - if ($table != $submissiontable) { - DB_copy($table, $fields, $fields, - $submissiontable, $id, $mid[$i]); - } - $retval .= PLG_approveSubmission($type, $mid[$i]); - } - break; + break; } } // after loop update comment tree and count for each story - if (isset($sidArray)) { + if (count($sidArray) > 0) { foreach ($sidArray as $sid) { CMT_rebuildTree($sid); // update comment count of stories; @@ -446,10 +461,11 @@ function moderation($mid, $action, $type, $count) } // Add new comment users to group comment.submit group - if (isset($_POST['publishfuture']) ) { - for ($i = 0; $i < count($_POST['publishfuture']); $i++ ) { - $uid = COM_applyFilter($_POST['publishfuture'][$i], true); - if ($uid > 1 && !SEC_inGroup('Comment Submitters', $uid)) { + if (isset($_POST['publishfuture']) && is_array($_POST['publishfuture'])) { + foreach (Geeklog\Input::fPost('publishfuture') as $uid) { + $uid = (int) $uid; + + if (($uid > 1) && !SEC_inGroup('Comment Submitters', $uid)) { SEC_addUserToGroup($uid, 'Comment Submitters'); } } @@ -457,118 +473,117 @@ function moderation($mid, $action, $type, $count) // Check if there was no direct action used on the form // and if the delete_all submit action was used - if (!$formaction AND isset($_POST['delitem'])) { - foreach ($_POST['delitem'] as $delitem) { - $delitem = COM_applyFilter($delitem); - if (! empty($delitem)) { + if (!$formAction && isset($_POST['delitem'])) { + foreach (Geeklog\Input::fPost('delitem') as $delItem) { + if (!empty($delItem)) { // There may be some plugin specific processing that needs // to happen first. - $retval .= PLG_deleteSubmission($type, $delitem); + $retval .= PLG_deleteSubmission($type, $delItem); // Notify plugins of a submission type that is deleted PLG_submissionDeleted($type); - DB_delete($submissiontable, $id, $delitem); + DB_delete($submissionTable, $id, $delItem); + $deleted++; } } } - $retval .= usersubmissions(SEC_createToken()); + $retval .= usersubmissions(SEC_createToken(), $approved, $deleted); return $retval; } /** -* Moderate user submissions -* -* Users from the user submission queue are either appoved (an email containing -* the password is sent out) or deleted. -* -* @param int $uid Array of items -* @param array $action Action to perform ('delete', 'approve') -* @param int $count Number of items -* @return string HTML for "command and control" page -* -*/ -function moderateusers ($uid, $action, $count) + * Moderate user submissions + * Users from the user submission queue are either approved (an email containing + * the password is sent out) or deleted. + * + * @param int $uid Array of items + * @param array $action Action to perform ('delete', 'approve') + * @param int $count Number of items + * @return string HTML for "command and control" page + */ +function moderateusers($uid, $action, $count) { global $_CONF, $_TABLES, $LANG04; $retval = ''; // Set true if an valid action other then delete_all is selected - $formaction = false; + $formAction = false; + $approved = 0; + $deleted = 0; for ($i = 0; $i < $count; $i++) { - if (isset($action[$i]) AND ($action[$i] != '')) { - $formaction = true; + if (isset($action[$i]) && ($action[$i] != '')) { + $formAction = true; } else { continue; } switch ($action[$i]) { - case 'delete': // Ok, delete everything related to this user - if ($uid[$i] > 1) { - USER_deleteAccount($uid[$i]); - } - break; - - case 'approve': - $uid[$i] = COM_applyFilter($uid[$i], true); - $result = DB_query("SELECT email,username, uid FROM {$_TABLES['users']} WHERE uid = $uid[$i]"); - $nrows = DB_numRows($result); - if ($nrows == 1) { - $A = DB_fetchArray($result); - $sql = "UPDATE {$_TABLES['users']} SET status=3 WHERE uid={$A['uid']}"; - DB_query($sql); - USER_createAndSendPassword($A['username'], $A['email'], $A['uid']); - } - break; + case 'delete': // Ok, delete everything related to this user + if ($uid[$i] > 1) { + USER_deleteAccount($uid[$i]); + $deleted++; + } + break; + + case 'approve': + $uid[$i] = COM_applyFilter($uid[$i], true); + $result = DB_query("SELECT email,username, uid FROM {$_TABLES['users']} WHERE uid = $uid[$i]"); + $numRows = DB_numRows($result); + + if ($numRows == 1) { + $A = DB_fetchArray($result); + $sql = "UPDATE {$_TABLES['users']} SET status=3 WHERE uid={$A['uid']}"; + DB_query($sql); + USER_createAndSendPassword($A['username'], $A['email'], $A['uid']); + $approved++; + } + break; } } // Check if there was no direct action used on the form // and if the delete_all submit action was used - if (!$formaction AND isset($_POST['delitem'])) { - foreach ($_POST['delitem'] as $del_uid) { - $del_uid = COM_applyFilter($del_uid,true); - if ($del_uid > 1) { - USER_deleteAccount($del_uid); + if (!$formAction && isset($_POST['delitem'])) { + foreach (Geeklog\Input::fPost('delitem', array()) as $delUid) { + $delUid = (int) $delUid; + + if ($delUid > 1) { + USER_deleteAccount($delUid); + $deleted++; } } } - $retval .= usersubmissions(SEC_createToken()); + $retval .= usersubmissions(SEC_createToken(), $approved, $deleted); return $retval; } // MAIN - $display = ''; -if (isset($_POST['mode']) && ($_POST['mode'] == 'moderation') && - SEC_checkToken()) { - $action = array(); - if (isset($_POST['action'])) { - $action = $_POST['action']; - } - if ($_POST['type'] == 'user') { - $mod_result = moderateusers($_POST['id'], $action, - COM_applyFilter($_POST['count'], true)); +if ((Geeklog\Input::post('mode') === 'moderation') && SEC_checkToken()) { + $action = Geeklog\Input::post('action', array()); + $id = Geeklog\Input::post('id'); + $type = Geeklog\Input::post('type'); + $count = (int) Geeklog\Input::fPost('count'); + + if ($type === 'user') { + $mod_result = moderateusers($id, $action, $count); } else { - $mod_result = moderation($_POST['id'], $action, $_POST['type'], - COM_applyFilter($_POST['count'], true)); + $mod_result = moderation($id, $action, $type, $count); } - $display .= COM_showMessageFromParameter() - . $mod_result; + + $display .= COM_showMessageFromParameter() . $mod_result; } else { - $display .= COM_showMessageFromParameter() - . usersubmissions(SEC_createToken()); + $display .= COM_showMessageFromParameter() . usersubmissions(SEC_createToken()); } $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG29[34])); COM_output($display); - -?> diff --git a/public_html/admin/plugins.php b/public_html/admin/plugins.php index 761b506c2..56dd4db47 100644 --- a/public_html/admin/plugins.php +++ b/public_html/admin/plugins.php @@ -566,11 +566,11 @@ function change_load_order($pi_name = '', $where = '') } /** - * Check if an error occured while uploading a file + * Check if an error occurred while uploading a file * * @param array $mFile $_FILE['uploaded_file'] - * @return mixed Returns the error string if an error occured, - * returns false if no error occured + * @return mixed Returns the error string if an error occurred, + * returns false if no error occurred */ function plugin_getUploadError($mFile) { @@ -578,7 +578,7 @@ function plugin_getUploadError($mFile) $retval = ''; - if (isset($mFile['error']) && ($mFile['error'] !== UPLOAD_ERR_OK)) { // If an error occured while uploading the file. + if (isset($mFile['error']) && ($mFile['error'] !== UPLOAD_ERR_OK)) { // If an error occurred while uploading the file. if ($mFile['error'] > UPLOAD_ERR_EXTENSION) { // If the error code isn't known $retval = $LANG32[99]; // Unknown error } else { @@ -684,7 +684,7 @@ function plugin_upload() $upload_success = false; - // If an error occured while uploading the file. + // If an error occurred while uploading the file. $error_msg = plugin_getUploadError($_FILES['plugin']); if (!empty($error_msg)) { $retval .= plugin_main($error_msg); @@ -865,7 +865,7 @@ function plugin_upload() PLG_pluginStateChange($pi_name, 'installed'); $msg = 44; // successfully installed } else { - $msg = 72; // an error occured while installing the plugin + $msg = 72; // an error occurred while installing the plugin } } else { $msg = 98; // successfully uploaded @@ -1304,16 +1304,12 @@ function plugin_get_pluginname($plugin) // MAIN $display = ''; -$mode = ''; -if (isset($_POST['mode'])) { - $mode = $_POST['mode']; -} elseif (isset($_GET['mode'])) { - $mode = $_GET['mode']; -} +$mode = Geeklog\Input::postOrGet('mode', ''); + if ($mode === 'delete') { - $pi_name = COM_applyFilter($_GET['pi_name']); + $pi_name = Geeklog\Input::fGet('pi_name'); if ((!empty($pi_name)) && SEC_hasRights('plugin.install')) { - if (($_GET['confirmed'] == 1) && SEC_checkToken()) { + if ((Geeklog\Input::get('confirmed') == 1) && SEC_checkToken()) { $msg = do_uninstall($pi_name); if ($msg === false) { COM_redirect($_CONF['site_admin_url'] . '/plugins.php'); @@ -1335,25 +1331,21 @@ function plugin_get_pluginname($plugin) } else { COM_redirect($_CONF['site_admin_url'] . '/plugins.php'); } - } elseif (($mode === 'updatethisplugin') && SEC_checkToken()) { // update - $pi_name = COM_applyFilter($_GET['pi_name']); + $pi_name = Geeklog\Input::fGet('pi_name'); $display .= do_update($pi_name); } elseif ($mode === 'info_installed') { - $display .= plugin_info_installed(COM_applyFilter($_GET['pi_name'])); + $display .= plugin_info_installed(Geeklog\Input::fGet('pi_name')); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG32[13])); } elseif ($mode === 'info_uninstalled') { - $display .= plugin_info_uninstalled(COM_applyFilter($_GET['pi_name'])); + $display .= plugin_info_uninstalled(Geeklog\Input::fGet('pi_name')); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG32[13])); } elseif ($mode === 'toggle') { SEC_checkToken(); - $pi_name = ''; - if (!empty($_GET['pi_name'])) { - $pi_name = COM_applyFilter($_GET['pi_name']); - } + $pi_name = Geeklog\Input::fGet('pi_name', ''); changePluginStatus($pi_name); $sorting = ''; if (!empty($_GET['order']) && !empty($_GET['direction'])) { // Remember how the list was sorted @@ -1364,14 +1356,11 @@ function plugin_get_pluginname($plugin) } COM_redirect($_CONF['site_admin_url'] . '/plugins.php' . $sorting); } elseif (($mode === 'change_load_order') && SEC_checkToken()) { - change_load_order(COM_applyFilter($_GET['pi_name']), COM_applyFilter($_GET['where'])); + change_load_order(Geeklog\Input::fGet('pi_name'), Geeklog\Input::fGet('where')); COM_redirect($_CONF['site_admin_url'] . '/plugins.php'); } elseif (($mode === 'autoinstall') && SEC_checkToken()) { if (SEC_hasRights('plugin.install')) { - $plugin = ''; - if (isset($_GET['plugin'])) { - $plugin = COM_applyFilter($_GET['plugin']); - } + $plugin = Geeklog\Input::fGet('plugin', ''); if (plugin_autoinstall($plugin)) { PLG_pluginStateChange($plugin, 'installed'); COM_redirect($_CONF['site_admin_url'] . '/plugins.php?msg=44'); @@ -1382,12 +1371,12 @@ function plugin_get_pluginname($plugin) COM_redirect($_CONF['site_admin_url'] . '/plugins.php'); } } elseif ($mode === 'continue_upgrade') { - $display .= continue_upgrade(COM_sanitizeFilename($_GET['plugin']), - $_GET['piversion'], $_GET['codeversion']); - + $display .= continue_upgrade( + COM_sanitizeFilename(Geeklog\Input::Get('plugin')), + Geeklog\Input::Get('piversion'), Geeklog\Input::Get('codeversion') + ); } elseif (isset($_FILES['plugin']) && SEC_checkToken() && SEC_hasRights('plugin.install,plugin.upload')) { $display .= plugin_upload(); - } else { // 'cancel' or no mode at all $display .= plugin_main(); } diff --git a/public_html/admin/plugins/calendar/index.php b/public_html/admin/plugins/calendar/index.php index b99c90766..070b75723 100644 --- a/public_html/admin/plugins/calendar/index.php +++ b/public_html/admin/plugins/calendar/index.php @@ -33,13 +33,13 @@ // +---------------------------------------------------------------------------+ /** -* Geeklog common function library -*/ + * Geeklog common function library + */ require_once '../../../lib-common.php'; /** -* Security check to ensure user even belongs on this page -*/ + * Security check to ensure user even belongs on this page + */ require_once '../../auth.inc.php'; // Uncomment the line below if you need to debug the HTTP variables being passed @@ -64,23 +64,21 @@ /** -* Shows event editor -* -* @param string $mode Indicates if this is a submission or a regular entry -* @param array $A array holding the event's details -* @param string $msg an optional error message to display -* @return string HTML for event editor or error message -* -*/ -function CALENDAR_editEvent ($mode, $A, $msg = '') + * Shows event editor + * + * @param string $mode Indicates if this is a submission or a regular entry + * @param array $A array holding the event's details + * @param string $msg an optional error message to display + * @return string HTML for event editor or error message + */ +function CALENDAR_editEvent($mode, $A, $msg = '') { global $_CONF, $_GROUPS, $_TABLES, $_USER, $_CA_CONF, $LANG_CAL_1, $LANG_CAL_ADMIN, $LANG10, $LANG12, $LANG_ACCESS, $LANG_ADMIN, $MESSAGE, $_SCRIPTS; // Loads jQuery UI datepicker and timepicker-addon - $_SCRIPTS->setJavaScriptLibrary('jquery.ui.slider'); - $_SCRIPTS->setJavaScriptLibrary('jquery.ui.datepicker'); + $_SCRIPTS->setJavaScriptLibrary('jquery-ui'); // Require slider and date picker $_SCRIPTS->setJavaScriptLibrary('jquery-ui-i18n'); $_SCRIPTS->setJavaScriptLibrary('jquery-ui-timepicker-addon'); $_SCRIPTS->setJavaScriptLibrary('jquery-ui-timepicker-addon-i18n'); @@ -90,8 +88,8 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') $_SCRIPTS->setJavaScriptFile('postmode_control', '/javascript/postmode_control.js'); $langCode = COM_getLangIso639Code(); - $toolTip = $MESSAGE[118]; - $imgUrl = $_CONF['site_url'] . '/images/calendar.png'; + $toolTip = $MESSAGE[118]; + $imgUrl = $_CONF['site_url'] . '/images/calendar.png'; $_SCRIPTS->setJavaScript( "jQuery(function () {" @@ -99,17 +97,17 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') . " geeklog.datetimepicker.options.stepMinute = 15;" . " geeklog.datetimepicker.set('start', '{$langCode}', '{$toolTip}', '{$imgUrl}');" . " geeklog.datetimepicker.set('end', '{$langCode}', '{$toolTip}', '{$imgUrl}');" - . "});", TRUE, TRUE + . "});", true, true ); $retval = ''; - if (!empty ($msg)) { + if (!empty($msg)) { $retval .= COM_showMessageText($msg, $LANG_CAL_ADMIN[2]); } $event_templates = COM_newTemplate(CTL_plugin_templatePath('calendar', 'admin')); - $event_templates->set_file('editor','eventeditor.thtml'); + $event_templates->set_file('editor', 'eventeditor.thtml'); $allowed = ''; foreach (array('plaintext', 'html') as $pm) { @@ -120,51 +118,52 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') $event_templates->set_var('lang_allowed_html', $allowed); $event_templates->set_var('lang_postmode', $LANG_CAL_ADMIN[3]); - if ($mode <> 'editsubmission' AND !empty($A['eid'])) { + if (($mode !== 'editsubmission') && !empty($A['eid'])) { // Get what level of access user has to this object - $access = SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon']); - if ($access == 0 OR $access == 2) { + $access = SEC_hasAccess($A['owner_id'], $A['group_id'], $A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon']); + if ($access == 0 || $access == 2) { // Uh, oh! User doesn't have access to this object $retval .= COM_showMessageText($LANG_CAL_ADMIN[17], $LANG_ACCESS['accessdenied']); - COM_accessLog("User {$_USER['username']} tried to illegally submit or edit event $eid."); + COM_accessLog("User {$_USER['username']} tried to illegally submit or edit event {$A['eid']}."); + return $retval; } } else { if (empty($A['owner_id'])) { $A['owner_id'] = $_USER['uid']; } - if (isset ($_GROUPS['Calendar Admin'])) { + if (isset($_GROUPS['Calendar Admin'])) { $A['group_id'] = $_GROUPS['Calendar Admin']; } else { - $A['group_id'] = SEC_getFeatureGroup ('calendar.edit'); + $A['group_id'] = SEC_getFeatureGroup('calendar.edit'); } - SEC_setDefaultPermissions ($A, $_CA_CONF['default_permissions']); + SEC_setDefaultPermissions($A, $_CA_CONF['default_permissions']); $access = 3; } if ($mode == 'editsubmission') { - $event_templates->set_var('post_options', COM_optionList($_TABLES['postmodes'],'code,name','plaintext')); + $event_templates->set_var('post_options', COM_optionList($_TABLES['postmodes'], 'code,name', 'plaintext')); } else { - if (!isset ($A['postmode'])) { + if (!isset($A['postmode'])) { $A['postmode'] = $_CONF['postmode']; } - $event_templates->set_var('post_options', COM_optionList($_TABLES['postmodes'],'code,name',$A['postmode'])); + $event_templates->set_var('post_options', COM_optionList($_TABLES['postmodes'], 'code,name', $A['postmode'])); } $token = SEC_createToken(); $retval .= COM_startBlock($LANG_CAL_ADMIN[1], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= SEC_getTokenExpiryNotice($token); if (!empty($A['eid'])) { $delbutton = ''; + . '" name="mode"%s' . XHTML . '>'; $jsconfirm = ' onclick="return confirm(\'' . $MESSAGE[76] . '\');"'; - $event_templates->set_var ('delete_option', - sprintf ($delbutton, $jsconfirm)); - $event_templates->set_var ('delete_option_no_confirmation', - sprintf ($delbutton, '')); + $event_templates->set_var('delete_option', + sprintf($delbutton, $jsconfirm)); + $event_templates->set_var('delete_option_no_confirmation', + sprintf($delbutton, '')); $event_templates->set_var('allow_delete', true); $event_templates->set_var('lang_delete', $LANG_ADMIN['delete']); @@ -176,7 +175,7 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') . XHTML . '>'); } } else { // new event - $A['eid'] = COM_makesid (); + $A['eid'] = COM_makesid(); $A['title'] = ''; $A['description'] = ''; $A['url'] = ''; @@ -184,10 +183,10 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') // in case a start date/time has been passed from the calendar, // pick it up for the end date/time - if (empty ($A['dateend'])) { + if (empty($A['dateend'])) { $A['dateend'] = $A['datestart']; } - if (empty ($A['timeend'])) { + if (empty($A['timeend'])) { $A['timeend'] = $A['timestart']; } $A['event_type'] = ''; @@ -203,15 +202,15 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') $event_templates->set_var('lang_eventid', $LANG_CAL_ADMIN[34]); $event_templates->set_var('event_id', $A['eid']); $event_templates->set_var('lang_eventtitle', $LANG_ADMIN['title']); - $A['title'] = str_replace('{','{',$A['title']); - $A['title'] = str_replace('}','}',$A['title']); - $A['title'] = str_replace('"','"',$A['title']); - $event_templates->set_var('event_title', stripslashes ($A['title'])); + $A['title'] = str_replace('{', '{', $A['title']); + $A['title'] = str_replace('}', '}', $A['title']); + $A['title'] = str_replace('"', '"', $A['title']); + $event_templates->set_var('event_title', stripslashes($A['title'])); $event_templates->set_var('lang_eventtype', $LANG_CAL_1[37]); $event_templates->set_var('lang_editeventtypes', $LANG12[50]); $event_templates->set_var('type_options', - CALENDAR_eventTypeList ($A['event_type'])); + CALENDAR_eventTypeList($A['event_type'])); $event_templates->set_var('lang_eventurl', $LANG_CAL_ADMIN[4]); $event_templates->set_var('max_url_length', 255); @@ -222,17 +221,17 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') $event_templates->set_var('lang_starttime', $LANG_CAL_1[30]); // Combine date/time for easier manipulation - $A['datestart'] = trim ($A['datestart'] . ' ' . $A['timestart']); - if (empty ($A['datestart'])) { - $start_stamp = time (); + $A['datestart'] = trim($A['datestart'] . ' ' . $A['timestart']); + if (empty($A['datestart'])) { + $start_stamp = time(); } else { - $start_stamp = strtotime ($A['datestart']); + $start_stamp = strtotime($A['datestart']); } - $A['dateend'] = trim ($A['dateend'] . ' ' . $A['timeend']); - if (empty ($A['dateend'])) { - $end_stamp = time (); + $A['dateend'] = trim($A['dateend'] . ' ' . $A['timeend']); + if (empty($A['dateend'])) { + $end_stamp = time(); } else { - $end_stamp = strtotime ($A['dateend']); + $end_stamp = strtotime($A['dateend']); } $start_month = date('m', $start_stamp); $start_day = date('d', $start_stamp); @@ -241,8 +240,8 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') $end_day = date('d', $end_stamp); $end_year = date('Y', $end_stamp); - $start_hour = date ('H', $start_stamp); - $start_minute = intval (date ('i', $start_stamp) / 15) * 15; + $start_hour = date('H', $start_stamp); + $start_minute = intval(date('i', $start_stamp) / 15) * 15; if ($start_hour >= 12) { $startampm = 'pm'; } else { @@ -251,12 +250,12 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') $start_hour_24 = $start_hour % 24; if ($start_hour > 12) { $start_hour = $start_hour - 12; - } else if ($start_hour == 0) { + } elseif ($start_hour == 0) { $start_hour = 12; } $end_hour = date('H', $end_stamp); - $end_minute = intval (date('i', $end_stamp) / 15) * 15; + $end_minute = intval(date('i', $end_stamp) / 15) * 15; if ($end_hour >= 12) { $endampm = 'pm'; } else { @@ -265,55 +264,55 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') $end_hour_24 = $end_hour % 24; if ($end_hour > 12) { $end_hour = $end_hour - 12; - } else if ($end_hour == 0) { + } elseif ($end_hour == 0) { $end_hour = 12; } - $month_options = COM_getMonthFormOptions ($start_month); - $event_templates->set_var ('startmonth_options', $month_options); + $month_options = COM_getMonthFormOptions($start_month); + $event_templates->set_var('startmonth_options', $month_options); - $month_options = COM_getMonthFormOptions ($end_month); - $event_templates->set_var ('endmonth_options', $month_options); + $month_options = COM_getMonthFormOptions($end_month); + $event_templates->set_var('endmonth_options', $month_options); - $day_options = COM_getDayFormOptions ($start_day); - $event_templates->set_var ('startday_options', $day_options); + $day_options = COM_getDayFormOptions($start_day); + $event_templates->set_var('startday_options', $day_options); - $day_options = COM_getDayFormOptions ($end_day); - $event_templates->set_var ('endday_options', $day_options); + $day_options = COM_getDayFormOptions($end_day); + $event_templates->set_var('endday_options', $day_options); - $year_options = COM_getYearFormOptions ($start_year); - $event_templates->set_var ('startyear_options', $year_options); + $year_options = COM_getYearFormOptions($start_year); + $event_templates->set_var('startyear_options', $year_options); - $year_options = COM_getYearFormOptions ($end_year); - $event_templates->set_var ('endyear_options', $year_options); + $year_options = COM_getYearFormOptions($end_year); + $event_templates->set_var('endyear_options', $year_options); - if (isset ($_CA_CONF['hour_mode']) && ($_CA_CONF['hour_mode'] == 24)) { - $hour_options = COM_getHourFormOptions ($start_hour_24, 24); - $event_templates->set_var ('starthour_options', $hour_options); + if (isset($_CA_CONF['hour_mode']) && ($_CA_CONF['hour_mode'] == 24)) { + $hour_options = COM_getHourFormOptions($start_hour_24, 24); + $event_templates->set_var('starthour_options', $hour_options); - $hour_options = COM_getHourFormOptions ($end_hour_24, 24); - $event_templates->set_var ('endhour_options', $hour_options); + $hour_options = COM_getHourFormOptions($end_hour_24, 24); + $event_templates->set_var('endhour_options', $hour_options); - $event_templates->set_var ('hour_mode', 24); + $event_templates->set_var('hour_mode', 24); } else { - $hour_options = COM_getHourFormOptions ($start_hour); - $event_templates->set_var ('starthour_options', $hour_options); + $hour_options = COM_getHourFormOptions($start_hour); + $event_templates->set_var('starthour_options', $hour_options); - $hour_options = COM_getHourFormOptions ($end_hour); - $event_templates->set_var ('endhour_options', $hour_options); + $hour_options = COM_getHourFormOptions($end_hour); + $event_templates->set_var('endhour_options', $hour_options); - $event_templates->set_var ('hour_mode', 12); + $event_templates->set_var('hour_mode', 12); } - $event_templates->set_var ('startampm_selection', - COM_getAmPmFormSelection ('start_ampm', $startampm)); - $event_templates->set_var ('endampm_selection', - COM_getAmPmFormSelection ('end_ampm', $endampm)); + $event_templates->set_var('startampm_selection', + COM_getAmPmFormSelection('start_ampm', $startampm)); + $event_templates->set_var('endampm_selection', + COM_getAmPmFormSelection('end_ampm', $endampm)); - $event_templates->set_var ('startminute_options', - COM_getMinuteFormOptions ($start_minute, 15)); - $event_templates->set_var ('endminute_options', - COM_getMinuteFormOptions ($end_minute, 15)); + $event_templates->set_var('startminute_options', + COM_getMinuteFormOptions($start_minute, 15)); + $event_templates->set_var('endminute_options', + COM_getMinuteFormOptions($end_minute, 15)); $event_templates->set_var('lang_enddate', $LANG12[13]); $event_templates->set_var('lang_eventenddate', $LANG_CAL_ADMIN[6]); @@ -324,69 +323,68 @@ function CALENDAR_editEvent ($mode, $A, $msg = '') if ($A['allday'] == 1) { $event_templates->set_var('allday_checked', 'checked="checked"'); } - $event_templates->set_var('lang_location',$LANG12[51]); - $event_templates->set_var('event_location', stripslashes ($A['location'])); - $event_templates->set_var('lang_addressline1',$LANG12[44]); - $event_templates->set_var('event_address1', stripslashes ($A['address1'])); - $event_templates->set_var('lang_addressline2',$LANG12[45]); - $event_templates->set_var('event_address2', stripslashes ($A['address2'])); - $event_templates->set_var('lang_city',$LANG12[46]); - $event_templates->set_var('event_city', stripslashes ($A['city'])); - $event_templates->set_var('lang_state',$LANG12[47]); + $event_templates->set_var('lang_location', $LANG12[51]); + $event_templates->set_var('event_location', stripslashes($A['location'])); + $event_templates->set_var('lang_addressline1', $LANG12[44]); + $event_templates->set_var('event_address1', stripslashes($A['address1'])); + $event_templates->set_var('lang_addressline2', $LANG12[45]); + $event_templates->set_var('event_address2', stripslashes($A['address2'])); + $event_templates->set_var('lang_city', $LANG12[46]); + $event_templates->set_var('event_city', stripslashes($A['city'])); + $event_templates->set_var('lang_state', $LANG12[47]); $event_templates->set_var('state_options', ''); - $event_templates->set_var('event_state', stripslashes ($A['state'])); - $event_templates->set_var('lang_zipcode',$LANG12[48]); + $event_templates->set_var('event_state', stripslashes($A['state'])); + $event_templates->set_var('lang_zipcode', $LANG12[48]); $event_templates->set_var('event_zipcode', $A['zipcode']); $event_templates->set_var('lang_eventlocation', $LANG_CAL_ADMIN[7]); - $event_templates->set_var('event_location', stripslashes ($A['location'])); + $event_templates->set_var('event_location', stripslashes($A['location'])); $event_templates->set_var('lang_eventdescription', $LANG_CAL_ADMIN[8]); - $event_templates->set_var('event_description', stripslashes ($A['description'])); + $event_templates->set_var('event_description', stripslashes($A['description'])); $event_templates->set_var('lang_hits', $LANG10[30]); - $event_templates->set_var('hits', COM_numberFormat ($A['hits'])); + $event_templates->set_var('hits', COM_numberFormat($A['hits'])); $event_templates->set_var('lang_save', $LANG_ADMIN['save']); $event_templates->set_var('lang_cancel', $LANG_ADMIN['cancel']); // user access info - $event_templates->set_var('lang_accessrights',$LANG_ACCESS['accessrights']); + $event_templates->set_var('lang_accessrights', $LANG_ACCESS['accessrights']); $event_templates->set_var('lang_owner', $LANG_ACCESS['owner']); - $ownername = COM_getDisplayName ($A['owner_id']); + $ownername = COM_getDisplayName($A['owner_id']); $event_templates->set_var('owner_username', DB_getItem($_TABLES['users'], - 'username', "uid = {$A['owner_id']}")); + 'username', "uid = {$A['owner_id']}")); $event_templates->set_var('owner_name', $ownername); $event_templates->set_var('owner', $ownername); $event_templates->set_var('owner_id', $A['owner_id']); $event_templates->set_var('lang_group', $LANG_ACCESS['group']); $event_templates->set_var('group_dropdown', - SEC_getGroupDropdown ($A['group_id'], $access)); + SEC_getGroupDropdown($A['group_id'], $access)); $event_templates->set_var('lang_permissions', $LANG_ACCESS['permissions']); $event_templates->set_var('lang_permissionskey', $LANG_ACCESS['permissionskey']); $event_templates->set_var('lang_perm_key', $LANG_ACCESS['permissionskey']); - $event_templates->set_var('permissions_editor', SEC_getPermissionsHTML($A['perm_owner'],$A['perm_group'],$A['perm_members'],$A['perm_anon'])); + $event_templates->set_var('permissions_editor', SEC_getPermissionsHTML($A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon'])); $event_templates->set_var('lang_permissions_msg', $LANG_ACCESS['permmsg']); $event_templates->set_var('gltoken_name', CSRF_TOKEN); $event_templates->set_var('gltoken', $token); $event_templates->parse('output', 'editor'); $retval .= $event_templates->finish($event_templates->get_var('output')); - $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); + $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); return $retval; } /** -* Saves an event to the database -* -* (parameters should be obvious - old list was incomplete anyway) -* @return string HTML redirect or error message -* -*/ -function CALENDAR_saveEvent ($eid, $title, $event_type, $url, $allday, - $start_month, $start_day, $start_year, $start_hour, - $start_minute, $start_ampm, $end_month, $end_day, - $end_year, $end_hour, $end_minute, $end_ampm, - $location, $address1, $address2, $city, $state, - $zipcode, $description, $postmode, $owner_id, - $group_id, $perm_owner, $perm_group, $perm_members, - $perm_anon, $hour_mode) + * Saves an event to the database + * (parameters should be obvious - old list was incomplete anyway) + * + * @return string HTML redirect or error message + */ +function CALENDAR_saveEvent($eid, $title, $event_type, $url, $allday, + $start_month, $start_day, $start_year, $start_hour, + $start_minute, $start_ampm, $end_month, $end_day, + $end_year, $end_hour, $end_minute, $end_ampm, + $location, $address1, $address2, $city, $state, + $zipcode, $description, $postmode, $owner_id, + $group_id, $perm_owner, $perm_group, $perm_members, + $perm_anon, $hour_mode) { global $_CONF, $_TABLES, $_USER, $LANG_CAL_ADMIN, $MESSAGE, $_CA_CONF; @@ -397,27 +395,28 @@ function CALENDAR_saveEvent ($eid, $title, $event_type, $url, $allday, $perm_group, $perm_members, $perm_anon) = SEC_getPermissionValues($perm_owner, - $perm_group, - $perm_members, - $perm_anon); + $perm_group, + $perm_members, + $perm_anon); $access = 0; - if (DB_count ($_TABLES['events'], 'eid', $eid) > 0) { - $result = DB_query ("SELECT owner_id,group_id,perm_owner,perm_group," - ."perm_members,perm_anon FROM {$_TABLES['events']} " - ."WHERE eid = '{$eid}'"); - $A = DB_fetchArray ($result); - $access = SEC_hasAccess ($A['owner_id'], $A['group_id'], - $A['perm_owner'], $A['perm_group'], $A['perm_members'], - $A['perm_anon']); + if (DB_count($_TABLES['events'], 'eid', $eid) > 0) { + $result = DB_query("SELECT owner_id,group_id,perm_owner,perm_group," + . "perm_members,perm_anon FROM {$_TABLES['events']} " + . "WHERE eid = '{$eid}'"); + $A = DB_fetchArray($result); + $access = SEC_hasAccess($A['owner_id'], $A['group_id'], + $A['perm_owner'], $A['perm_group'], $A['perm_members'], + $A['perm_anon']); } else { - $access = SEC_hasAccess ($owner_id, $group_id, $perm_owner, $perm_group, - $perm_members, $perm_anon); + $access = SEC_hasAccess($owner_id, $group_id, $perm_owner, $perm_group, + $perm_members, $perm_anon); } - if (($access < 3) || !SEC_inGroup ($group_id)) { + if (($access < 3) || !SEC_inGroup($group_id)) { $retval .= COM_showMessageText($MESSAGE[29], $MESSAGE[30]); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $MESSAGE[30])); - COM_accessLog ("User {$_USER['username']} tried to illegally submit or edit event $eid."); + COM_accessLog("User {$_USER['username']} tried to illegally submit or edit event $eid."); + return $retval; } @@ -446,16 +445,12 @@ function CALENDAR_saveEvent ($eid, $title, $event_type, $url, $allday, } } - if ($allday == 'on') { - $allday = 1; - } else { - $allday = 0; - } + $allday = ($allday == 'on') ? 1 : 0; // Make sure start date is before end date - if (checkdate ($start_month, $start_day, $start_year)) { + if (checkdate($start_month, $start_day, $start_year)) { $datestart = sprintf('%4d-%02d-%02d', - $start_year, $start_month, $start_day); + $start_year, $start_month, $start_day); $timestart = $start_hour . ':' . $start_minute . ':00'; } else { $retval .= COM_showMessageText($LANG_CAL_ADMIN[23], $LANG_CAL_ADMIN[2]); @@ -463,7 +458,7 @@ function CALENDAR_saveEvent ($eid, $title, $event_type, $url, $allday, return $retval; } - if (checkdate ($end_month, $end_day, $end_year)) { + if (checkdate($end_month, $end_day, $end_year)) { $dateend = sprintf('%4d-%02d-%02d', $end_year, $end_month, $end_day); $timeend = $end_hour . ':' . $end_minute . ':00'; } else { @@ -492,21 +487,21 @@ function CALENDAR_saveEvent ($eid, $title, $event_type, $url, $allday, // clean 'em up if ($postmode == 'html') { $description = COM_checkHTML(COM_checkWords($description), - 'calendar.edit'); + 'calendar.edit'); } else { $postmode = 'plaintext'; $description = htmlspecialchars(COM_checkWords($description)); } $description = DB_escapeString($description); - $title = DB_escapeString(strip_tags(COM_checkWords($title))); + $title = DB_escapeString(GLText::stripTags(COM_checkWords($title))); $location = DB_escapeString(COM_checkHTML(COM_checkWords($location), - 'calendar.edit')); - $address1 = DB_escapeString(strip_tags(COM_checkWords($address1))); - $address2 = DB_escapeString(strip_tags(COM_checkWords($address2))); - $city = DB_escapeString(strip_tags(COM_checkWords($city))); - $zipcode = DB_escapeString(strip_tags(COM_checkWords($zipcode))); - $event_type = DB_escapeString(strip_tags(COM_checkWords($event_type))); - $url = DB_escapeString(strip_tags($url)); + 'calendar.edit')); + $address1 = DB_escapeString(GLText::stripTags(COM_checkWords($address1))); + $address2 = DB_escapeString(GLText::stripTags(COM_checkWords($address2))); + $city = DB_escapeString(GLText::stripTags(COM_checkWords($city))); + $zipcode = DB_escapeString(GLText::stripTags(COM_checkWords($zipcode))); + $event_type = DB_escapeString(GLText::stripTags(COM_checkWords($event_type))); + $url = DB_escapeString(GLText::stripTags($url)); if ($allday == 0) { // Add 12 to make time on 24 hour clock if needed @@ -519,7 +514,7 @@ function CALENDAR_saveEvent ($eid, $title, $event_type, $url, $allday, } // Add 12 to make time on 24 hour clock if needed if ($end_ampm == 'pm' AND $end_hour <> 12) { - $end_hour = $end_hour + 12; + $end_hour = $end_hour + 12; } // If 12AM set hour to 00 if ($end_ampm == 'am' AND $end_hour == 12) { @@ -529,7 +524,7 @@ function CALENDAR_saveEvent ($eid, $title, $event_type, $url, $allday, $timeend = $end_hour . ':' . $end_minute . ':00'; } - if (!empty ($eid) AND !empty ($description) AND !empty ($title)) { + if (!empty($eid) AND !empty($description) AND !empty($title)) { if (!SEC_checkToken()) { COM_accessLog("User {$_USER['username']} tried to save event $eid and failed CSRF checks."); COM_redirect($_CONF['site_admin_url'] . '/plugins/calendar/index.php'); @@ -540,40 +535,40 @@ function CALENDAR_saveEvent ($eid, $title, $event_type, $url, $allday, $hits = 0; } - DB_delete ($_TABLES['eventsubmission'], 'eid', $eid); + DB_delete($_TABLES['eventsubmission'], 'eid', $eid); DB_save($_TABLES['events'], - 'eid,title,event_type,url,allday,datestart,dateend,timestart,' - .'timeend,location,address1,address2,city,state,zipcode,description,' - .'postmode,owner_id,group_id,perm_owner,perm_group,perm_members,' - .'perm_anon,hits', - "'$eid','$title','$event_type','$url',$allday,'$datestart'," - ."'$dateend','$timestart','$timeend','$location','$address1'," - ."'$address2','$city','$state','$zipcode','$description','$postmode'," - ."$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$hits"); - if (DB_count ($_TABLES['personal_events'], 'eid', $eid) > 0) { - $result = DB_query ("SELECT uid FROM {$_TABLES['personal_events']} " - ."WHERE eid = '{$eid}'"); - $numrows = DB_numRows ($result); + 'eid,title,event_type,url,allday,datestart,dateend,timestart,' + . 'timeend,location,address1,address2,city,state,zipcode,description,' + . 'postmode,owner_id,group_id,perm_owner,perm_group,perm_members,' + . 'perm_anon,hits', + "'$eid','$title','$event_type','$url',$allday,'$datestart'," + . "'$dateend','$timestart','$timeend','$location','$address1'," + . "'$address2','$city','$state','$zipcode','$description','$postmode'," + . "$owner_id,$group_id,$perm_owner,$perm_group,$perm_members,$perm_anon,$hits"); + if (DB_count($_TABLES['personal_events'], 'eid', $eid) > 0) { + $result = DB_query("SELECT uid FROM {$_TABLES['personal_events']} " + . "WHERE eid = '{$eid}'"); + $numrows = DB_numRows($result); for ($i = 1; $i <= $numrows; $i++) { - $P = DB_fetchArray ($result); - DB_save ($_TABLES['personal_events'], - 'eid,title,event_type,datestart,dateend,address1,address2,' - .'city,state,zipcode,allday,url,description,postmode,' - .'group_id,owner_id,perm_owner,perm_group,perm_members,' - .'perm_anon,uid,location,timestart,timeend', - "'$eid','$title','$event_type','$datestart','$dateend'," - ."'$address1','$address2','$city','$state','$zipcode'," - ."$allday,'$url','$description','$postmode',$group_id," - ."$owner_id,$perm_owner,$perm_group,$perm_members," - ."$perm_anon,{$P['uid']},'$location','$timestart','$timeend'"); + $P = DB_fetchArray($result); + DB_save($_TABLES['personal_events'], + 'eid,title,event_type,datestart,dateend,address1,address2,' + . 'city,state,zipcode,allday,url,description,postmode,' + . 'group_id,owner_id,perm_owner,perm_group,perm_members,' + . 'perm_anon,uid,location,timestart,timeend', + "'$eid','$title','$event_type','$datestart','$dateend'," + . "'$address1','$address2','$city','$state','$zipcode'," + . "$allday,'$url','$description','$postmode',$group_id," + . "$owner_id,$perm_owner,$perm_group,$perm_members," + . "$perm_anon,{$P['uid']},'$location','$timestart','$timeend'"); } } PLG_itemSaved($eid, 'calendar'); COM_rdfUpToDateCheck('calendar', $event_type, $eid); - return PLG_afterSaveSwitch ( + return PLG_afterSaveSwitch( $_CA_CONF['aftersave'], $_CONF['site_url'] . '/calendar/event.php?eid=' . $eid, 'calendar', @@ -589,35 +584,29 @@ function CALENDAR_saveEvent ($eid, $title, $event_type, $url, $allday, // MAIN -$mode = ''; -if (isset($_REQUEST['mode'])) { - $mode = $_REQUEST['mode']; -} +$mode = Geeklog\Input::request('mode', ''); if (isset($_POST['delbutton_x'])) { $mode = 'batchdeleteexec'; } -if (($mode == $LANG_ADMIN['delete']) && !empty ($LANG_ADMIN['delete'])) { - $eid = COM_applyFilter ($_REQUEST['eid']); - if (!isset ($eid) || empty ($eid) || ($eid == 0)) { - COM_errorLog ('Attempted to delete event eid=\'' . $eid . "'"); +if (($mode == $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete'])) { + $eid = Geeklog\Input::fRequest('eid'); + if (!isset($eid) || empty($eid) || ($eid == 0)) { + COM_errorLog('Attempted to delete event eid=\'' . $eid . "'"); COM_redirect($_CONF['site_admin_url'] . '/plugins/calendar/index.php'); } elseif (SEC_checkToken()) { - $type = ''; - if (isset($_POST['type'])) { - $type = COM_applyFilter($_POST['type']); - } + $type = Geeklog\Input::fPost('type', ''); $display .= CALENDAR_deleteEvent($eid, $type); } else { COM_accessLog("User {$_USER['username']} tried to illegally delete event $eid and failed CSRF checks."); COM_redirect($_CONF['site_admin_url'] . '/index.php'); } } elseif (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save'])) { - if (!isset ($_POST['allday'])) { + if (!isset($_POST['allday'])) { $_POST['allday'] = ''; } $hour_mode = 12; - if (isset($_POST['hour_mode']) && ($_POST['hour_mode'] == 24)) { + if (Geeklog\Input::post('hour_mode') == 24) { $hour_mode = 24; } if ($hour_mode == 24) { @@ -625,86 +614,89 @@ function CALENDAR_saveEvent ($eid, $title, $event_type, $url, $allday, $_POST['start_ampm'] = ''; $_POST['end_ampm'] = ''; } - $display .= CALENDAR_saveEvent (COM_applyFilter ($_POST['eid']), - $_POST['title'], $_POST['event_type'], - $_POST['url'], COM_applyFilter ($_POST['allday']), - COM_applyFilter ($_POST['start_month'], true), - COM_applyFilter ($_POST['start_day'], true), - COM_applyFilter ($_POST['start_year'], true), - COM_applyFilter ($_POST['start_hour'], true), - COM_applyFilter ($_POST['start_minute'], true), $_POST['start_ampm'], - COM_applyFilter ($_POST['end_month'], true), - COM_applyFilter ($_POST['end_day'], true), - COM_applyFilter ($_POST['end_year'], true), - COM_applyFilter ($_POST['end_hour'], true), - COM_applyFilter ($_POST['end_minute'], true), $_POST['end_ampm'], - $_POST['location'], $_POST['address1'], $_POST['address2'], - $_POST['city'], $_POST['state'], $_POST['zipcode'], - $_POST['description'], $_POST['postmode'] , - COM_applyFilter ($_POST['owner_id'], true), - COM_applyFilter ($_POST['group_id'], true), - $_POST['perm_owner'], $_POST['perm_group'], - $_POST['perm_members'], $_POST['perm_anon'], $hour_mode); -} else if ($mode == 'editsubmission') { - $id = COM_applyFilter ($_REQUEST['id']); - $result = DB_query ("SELECT * FROM {$_TABLES['eventsubmission']} WHERE eid ='$id'"); - $A = DB_fetchArray ($result); + $display .= CALENDAR_saveEvent( + Geeklog\Input::post('eid'), + Geeklog\Input::post('title'), + Geeklog\Input::post('event_type'), + Geeklog\Input::post('url'), + Geeklog\Input::fPost('allday'), + (int) Geeklog\Input::fPost('start_month'), + (int) Geeklog\Input::fPost('start_day'), + (int) Geeklog\Input::fPost('start_year'), + (int) Geeklog\Input::fPost('start_hour'), + (int) Geeklog\Input::fPost('start_minute'), + Geeklog\Input::post('start_ampm'), + (int) Geeklog\Input::fPost('end_month'), + (int) Geeklog\Input::fPost('end_day'), + (int) Geeklog\Input::fPost('end_year'), + (int) Geeklog\Input::fPost('end_hour'), + (int) Geeklog\Input::fPost('end_minute'), + Geeklog\Input::post('end_ampm'), + Geeklog\Input::post('location'), + Geeklog\Input::post('address1'), + Geeklog\Input::post('address2'), + Geeklog\Input::post('city'), + Geeklog\Input::post('state'), + Geeklog\Input::post('zipcode'), + Geeklog\Input::post('description'), + Geeklog\Input::post('postmode'), + (int) Geeklog\Input::fPost('owner_id'), + (int) Geeklog\Input::fPost('group_id'), + Geeklog\Input::post('perm_owner'), + Geeklog\Input::post('perm_group'), + Geeklog\Input::post('perm_members'), + Geeklog\Input::post('perm_anon'), + $hour_mode + ); +} elseif ($mode === 'editsubmission') { + $id = Geeklog\Input::fRequest('id'); + $id = DB_escapeString($id); + $result = DB_query("SELECT * FROM {$_TABLES['eventsubmission']} WHERE eid ='{$id}'"); + $A = DB_fetchArray($result); $A['hits'] = 0; - $display .= CALENDAR_editEvent ($mode, $A); + $display .= CALENDAR_editEvent($mode, $A); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_CAL_ADMIN[1])); -} else if ($mode == 'clone') { - $eid = COM_applyFilter ($_REQUEST['eid']); - $result = DB_query ("SELECT * FROM {$_TABLES['events']} WHERE eid ='$eid'"); - $A = DB_fetchArray ($result); +} elseif ($mode === 'clone') { + $eid = Geeklog\Input::fRequest('eid'); + $eid = DB_escapeString($eid); + $result = DB_query("SELECT * FROM {$_TABLES['events']} WHERE eid ='{$eid}'"); + $A = DB_fetchArray($result); $A['hits'] = 0; - $A['eid'] = COM_makesid (); + $A['eid'] = COM_makesid(); $A['owner_id'] = $_USER['uid']; - $display .= CALENDAR_editEvent ($mode, $A); + $display .= CALENDAR_editEvent($mode, $A); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_CAL_ADMIN[1])); -} else if ($mode == 'edit') { - $eid = ''; - if (isset ($_REQUEST['eid'])) { - $eid = COM_applyFilter ($_REQUEST['eid']); - } - if (empty ($eid)) { - $A = array (); - $A['datestart'] = ''; - $A['timestart'] = ''; - if (isset ($_REQUEST['datestart'])) { - $A['datestart'] = COM_applyFilter ($_REQUEST['datestart']); - } - if (isset ($_REQUEST['timestart'])) { - $A['timestart'] = COM_applyFilter ($_REQUEST['timestart']); - } +} elseif ($mode === 'edit') { + $eid = Geeklog\Input::fRequest('eid', ''); + if (empty($eid)) { + $A = array( + 'datestart' => Geeklog\Input::fRequest('datestart', ''), + 'timestart' => Geeklog\Input::fRequest('timestart', ''), + ); } else { - $result = DB_query ("SELECT * FROM {$_TABLES['events']} WHERE eid ='$eid'"); - $A = DB_fetchArray ($result); + $eid = DB_escapeString($eid); + $result = DB_query("SELECT * FROM {$_TABLES['events']} WHERE eid ='{$eid}'"); + $A = DB_fetchArray($result); } - $display .= CALENDAR_editEvent ($mode, $A); + $display .= CALENDAR_editEvent($mode, $A); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_CAL_ADMIN[1])); -} else if ($mode == 'batchdelete') { +} elseif ($mode === 'batchdelete') { // list_old - if (isset ($_REQUEST['msg'])) { - $display .= COM_showMessage ( - COM_applyFilter ($_REQUEST['msg'], true), - 'calendar' - ); + if (isset($_REQUEST['msg'])) { + $display .= COM_showMessage((int) Geeklog\Input::fRequest('msg'), 'calendar'); } $display .= CALENDAR_listOld(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_CAL_ADMIN[11])); -} elseif (($mode == 'batchdeleteexec') && SEC_checkToken()) { +} elseif (($mode === 'batchdeleteexec') && SEC_checkToken()) { $msg = CALENDAR_deleteOld(); $display .= COM_showMessage($msg) . CALENDAR_listOld(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_CAL_ADMIN[11])); } else { // 'cancel' or no mode at all - if (isset ($_REQUEST['msg'])) { - $display .= COM_showMessage (COM_applyFilter ($_REQUEST['msg'], - true), 'calendar'); + if (isset($_REQUEST['msg'])) { + $display .= COM_showMessage((int) Geeklog\Input::fRequest('msg'), 'calendar'); } $display .= CALENDAR_listevents(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_CAL_ADMIN[11])); } COM_output($display); - -?> diff --git a/public_html/admin/plugins/links/category.php b/public_html/admin/plugins/links/category.php index 11d72df8e..163ce5a03 100644 --- a/public_html/admin/plugins/links/category.php +++ b/public_html/admin/plugins/links/category.php @@ -353,9 +353,9 @@ function links_save_category($cid, $old_cid, $pid, $category, $description, $tid $category = COM_checkHTML(COM_checkWords($category), 'links.edit'); $category = GLText::remove4byteUtf8Chars($category); $category = DB_escapeString($category); - $pid = DB_escapeString(strip_tags($pid)); - $cid = DB_escapeString(strip_tags($cid)); - $old_cid = DB_escapeString(strip_tags($old_cid)); + $pid = DB_escapeString(GLText::stripTags($pid)); + $cid = DB_escapeString(GLText::stripTags($cid)); + $old_cid = DB_escapeString(GLText::stripTags($old_cid)); if (empty($category) || empty($description)) { return 7; @@ -529,18 +529,14 @@ function links_delete_category($cid) } // MAIN -$mode = ''; -if (isset ($_REQUEST['mode'])) { - $mode = $_REQUEST['mode']; -} - +$mode = Geeklog\Input::request('mode', ''); $root = $_LI_CONF['root']; // delete category if ((($mode == $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete'])) || ($mode == "delete")) { - $cid = ''; - if (isset($_REQUEST['cid'])) { - $cid = strip_tags($_REQUEST['cid']); + $cid = Geeklog\Input::request('cid', ''); + if (!empty($cid)) { + $cid = GLText::stripTags($cid); } if (empty($cid)) { COM_errorLog('Attempted to delete empty category'); @@ -558,13 +554,18 @@ function links_delete_category($cid) // save category } elseif (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save']) && SEC_checkToken()) { $msg = links_save_category( - $_POST['cid'], $_POST['old_cid'], - $_POST['pid'], $_POST['category'], - $_POST['description'], COM_applyFilter($_POST['tid']), - COM_applyFilter($_POST['owner_id'], true), - COM_applyFilter($_POST['group_id'], true), - $_POST['perm_owner'], $_POST['perm_group'], - $_POST['perm_members'], $_POST['perm_anon'] + Geeklog\Input::post('cid'), + Geeklog\Input::post('old_cid'), + Geeklog\Input::post('pid'), + Geeklog\Input::post('category'), + Geeklog\Input::post('description'), + Geeklog\Input::fPost('tid'), + (int) Geeklog\Input::fPost('owner_id'), + (int) Geeklog\Input::fPost('group_id'), + Geeklog\Input::post('perm_owner'), + Geeklog\Input::post('perm_group'), + Geeklog\Input::post('perm_members'), + Geeklog\Input::post('perm_anon') ); $display .= COM_showMessage($msg, 'links'); @@ -572,25 +573,17 @@ function links_delete_category($cid) $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_LINKS_ADMIN[11])); // edit category -} elseif ($mode == 'edit') { - $pid = ''; - if (isset($_GET['pid'])) { - $pid = strip_tags(COM_stripslashes($_GET['pid'])); - } - $cid = ''; - if (isset($_GET['cid'])) { - $cid = strip_tags(COM_stripslashes($_GET['cid'])); - } +} elseif ($mode === 'edit') { + $pid = GLText::stripTags(Geeklog\Input::get('pid', '')); + $cid = GLText::stripTags(Geeklog\Input::get('cid', '')); $display .= links_edit_category($cid, $pid); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_LINKS_ADMIN[56])); // nothing, so list categories } else { - if (isset ($_REQUEST['msg'])) { - $msg = COM_applyFilter($_REQUEST['msg'], true); - if ($msg > 0) { - $display .= COM_showMessage($msg, 'links'); - } + $msg = (int) Geeklog\Input::fRequest('msg', 0); + if ($msg > 0) { + $display .= COM_showMessage($msg, 'links'); } $display .= links_list_categories($root); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_LINKS_ADMIN[11])); diff --git a/public_html/admin/plugins/links/index.php b/public_html/admin/plugins/links/index.php index 846b9aff4..6c7c21185 100644 --- a/public_html/admin/plugins/links/index.php +++ b/public_html/admin/plugins/links/index.php @@ -247,13 +247,13 @@ function savelink($lid, $old_lid, $cid, $categoryDd, $url, $description, $title, $description = COM_checkHTML(COM_checkWords($description), 'links.edit'); $description = GLText::remove4byteUtf8Chars($description); $description = DB_escapeString($description); - $title = strip_tags(COM_checkWords($title)); + $title = GLText::stripTags(COM_checkWords($title)); $title = GLText::remove4byteUtf8Chars($title); $title = DB_escapeString($title); $cid = GLText::remove4byteUtf8Chars($cid); $cid = DB_escapeString($cid); - if (empty ($owner_id)) { + if (empty($owner_id)) { // this is new link from admin, set default values $owner_id = $_USER['uid']; if (isset ($_GROUPS['Links Admin'])) { @@ -293,13 +293,13 @@ function savelink($lid, $old_lid, $cid, $categoryDd, $url, $description, $title, $A = DB_fetchArray($result); $access = SEC_hasAccess( $A['owner_id'], $A['group_id'], - $A['perm_owner'], $A['perm_group'], + $A['perm_owner'], $A['perm_group'], $A['perm_members'], $A['perm_anon'] ); } else { $access = SEC_hasAccess( - $owner_id, $group_id, - $perm_owner, $perm_group, + $owner_id, $group_id, + $perm_owner, $perm_group, $perm_members, $perm_anon ); } @@ -373,22 +373,24 @@ function listlinks() $menu_arr = array( array( 'url' => $_CONF['site_admin_url'] . '/plugins/links/index.php?mode=edit', - 'text' => $LANG_LINKS_ADMIN[51] + 'text' => $LANG_LINKS_ADMIN[51], ), ); $validate = ''; if (isset($_GET['validate'])) { $token = SEC_createToken(); - $menu_arr[] = array('url' => $_CONF['site_admin_url'] . '/plugins/links/index.php', - 'text' => $LANG_LINKS_ADMIN[53]); + $menu_arr[] = array( + 'url' => $_CONF['site_admin_url'] . '/plugins/links/index.php', + 'text' => $LANG_LINKS_ADMIN[53], + ); $doValidateUrl = $_CONF['site_admin_url'] . '/plugins/links/index.php?validate=validate' . '&' . CSRF_TOKEN . '=' . $token; $doValidateText = $LANG_LINKS_ADMIN[58]; $form_arr['top'] = COM_createLink($doValidateText, $doValidateUrl); - if ($_GET['validate'] === 'enabled') { + if (Geeklog\Input::get('validate') === 'enabled') { $header_arr[] = array('text' => $LANG_LINKS_ADMIN[27], 'field' => 'beforevalidate', 'sort' => false); $validate = '?validate=enabled'; - } elseif ($_GET['validate'] === 'validate') { + } elseif (Geeklog\Input::get('validate') === 'validate') { $header_arr[] = array('text' => $LANG_LINKS_ADMIN[27], 'field' => 'dovalidate', 'sort' => false); $validate = '?validate=validate&' . CSRF_TOKEN . '=' . $token; } @@ -396,7 +398,7 @@ function listlinks() } else { $menu_arr[] = array( 'url' => $_CONF['site_admin_url'] . '/plugins/links/index.php?validate=enabled', - 'text' => $LANG_LINKS_ADMIN[26] + 'text' => $LANG_LINKS_ADMIN[26], ); $form_arr = array(); $validate_help = ''; @@ -406,15 +408,15 @@ function listlinks() $menu_arr[] = array( 'url' => $_CONF['site_admin_url'] . '/plugins/links/category.php', - 'text' => $LANG_LINKS_ADMIN[50] + 'text' => $LANG_LINKS_ADMIN[50], ); $menu_arr[] = array( 'url' => $_CONF['site_admin_url'] . '/plugins/links/category.php?mode=edit', - 'text' => $LANG_LINKS_ADMIN[52] + 'text' => $LANG_LINKS_ADMIN[52], ); $menu_arr[] = array( 'url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home'] + 'text' => $LANG_ADMIN['admin_home'], ); $retval .= COM_startBlock($LANG_LINKS_ADMIN[11], '', @@ -429,14 +431,14 @@ function listlinks() $query_arr = array( 'table' => 'links', - 'sql' => "SELECT l.lid AS lid, l.cid as cid, l.title AS title, " - . "c.category AS category, l.url AS url, l.description AS description, " - . "l.owner_id, l.group_id, l.perm_owner, l.perm_group, l.perm_members, l.perm_anon " - . "FROM {$_TABLES['links']} AS l " - . "LEFT JOIN {$_TABLES['linkcategories']} AS c " - . "ON l.cid=c.cid WHERE 1=1", - 'query_fields' => array('title', 'category', 'url', 'l.description'), - 'default_filter' => COM_getPermSQL('AND', 0, 3, 'l'), + 'sql' => "SELECT l.lid AS lid, l.cid as cid, l.title AS title, " + . "c.category AS category, l.url AS url, l.description AS description, " + . "l.owner_id, l.group_id, l.perm_owner, l.perm_group, l.perm_members, l.perm_anon " + . "FROM {$_TABLES['links']} AS l " + . "LEFT JOIN {$_TABLES['linkcategories']} AS c " + . "ON l.cid=c.cid WHERE 1=1", + 'query_fields' => array('title', 'category', 'url', 'l.description'), + 'default_filter' => COM_getPermSQL('AND', 0, 3, 'l'), ); $retval .= ADMIN_list('links', 'plugin_getListField_links', $header_arr, @@ -487,53 +489,51 @@ function deleteLink($lid, $type = '') } // MAIN -$mode = ''; -if (isset ($_REQUEST['mode'])) { - $mode = $_REQUEST['mode']; -} +$mode = Geeklog\Input::request('mode', ''); -if (($mode === $LANG_ADMIN['delete']) && !empty ($LANG_ADMIN['delete'])) { - $lid = COM_applyFilter($_POST['lid']); - if (!isset ($lid) || empty ($lid)) { // || ($lid == 0) +if (($mode === $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete'])) { + $lid = Geeklog\Input::fPost('lid'); + if (empty($lid)) { // || ($lid == 0) COM_errorLog('Attempted to delete link lid=' . $lid); COM_redirect($_CONF['site_admin_url'] . '/plugins/links/index.php'); } elseif (SEC_checkToken()) { - $type = ''; - if (isset($_POST['type'])) { - $type = COM_applyFilter($_POST['type']); - } + $type = Geeklog\Input::fPost('type', ''); $display .= deleteLink($lid, $type); } else { COM_accessLog("User {$_USER['username']} tried to illegally delete link $lid and failed CSRF checks."); COM_redirect($_CONF['site_admin_url'] . '/index.php'); } } elseif (($mode === $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save']) && SEC_checkToken()) { - $cid = ''; - if (isset($_POST['cid'])) { - $cid = $_POST['cid']; - } - $display .= savelink(COM_applyFilter($_POST['lid']), - COM_applyFilter($_POST['old_lid']), - $cid, $_POST['categorydd'], - $_POST['url'], $_POST['description'], $_POST['title'], - COM_applyFilter($_POST['hits'], true), - COM_applyFilter($_POST['owner_id'], true), - COM_applyFilter($_POST['group_id'], true), - $_POST['perm_owner'], $_POST['perm_group'], - $_POST['perm_members'], $_POST['perm_anon']); + $cid = Geeklog\Input::post('cid', ''); + $display .= savelink( + Geeklog\Input::fPost('lid'), + Geeklog\Input::fPost('old_lid'), + $cid, + Geeklog\Input::post('categorydd'), + Geeklog\Input::post('url'), + Geeklog\Input::post('description'), + Geeklog\Input::post('title'), + (int) Geeklog\Input::fPost('hits'), + (int) Geeklog\Input::fPost('owner_id'), + (int) Geeklog\Input::fPost('group_id'), + Geeklog\Input::post('perm_owner'), + Geeklog\Input::post('perm_group'), + Geeklog\Input::post('perm_members'), + Geeklog\Input::post('perm_anon') + ); } elseif ($mode === 'editsubmission') { - $display .= editlink($mode, COM_applyFilter($_GET['id'])); + $display .= editlink($mode, Geeklog\Input::fGet('id')); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_LINKS_ADMIN[1])); } elseif ($mode === 'edit') { - if (empty ($_GET['lid'])) { + if (empty($_GET['lid'])) { $display .= editlink($mode); } else { - $display .= editlink($mode, COM_applyFilter($_GET['lid'])); + $display .= editlink($mode, Geeklog\Input::fGet('id')); } $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_LINKS_ADMIN[1])); } else { // 'cancel' or no mode at all if (isset($_GET['msg'])) { - $msg = COM_applyFilter($_GET['msg'], true); + $msg = (int) Geeklog\Input::fGet('msg', 0); if ($msg > 0) { $display .= COM_showMessage($msg, 'links'); } diff --git a/public_html/admin/plugins/polls/index.php b/public_html/admin/plugins/polls/index.php index 9d4e896b4..b85a78a45 100644 --- a/public_html/admin/plugins/polls/index.php +++ b/public_html/admin/plugins/polls/index.php @@ -165,9 +165,9 @@ function savepoll($pid, $old_pid, $Q, $mainPage, $topic, $meta_description, $met $topic = COM_stripslashes($topic); $topic = COM_checkHTML($topic); - $topic_description = strip_tags(COM_stripslashes($topic_description)); - $meta_description = strip_tags(COM_stripslashes($meta_description)); - $meta_keywords = strip_tags(COM_stripslashes($meta_keywords)); + $topic_description = GLText::stripTags(COM_stripslashes($topic_description)); + $meta_description = GLText::stripTags(COM_stripslashes($meta_description)); + $meta_keywords = GLText::stripTags(COM_stripslashes($meta_keywords)); $pid = COM_sanitizeID($pid); $old_pid = COM_sanitizeID($old_pid); if (empty($pid)) { @@ -636,25 +636,15 @@ function deletePoll($pid) // MAIN $display = ''; +$mode = Geeklog\Input::fRequest('mode', ''); -$mode = ''; -if (isset($_REQUEST['mode'])) { - $mode = COM_applyFilter($_REQUEST['mode']); -} - -if ($mode == 'edit') { - $pid = ''; - if (isset($_GET['pid'])) { - $pid = COM_applyFilter($_GET['pid']); - } +if ($mode === 'edit') { + $pid = Geeklog\Input::fGet('pid', ''); $display .= editpoll($pid); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG25[5])); } elseif (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save'])) { - $pid = COM_applyFilter($_POST['pid']); - $old_pid = ''; - if (isset($_POST['old_pid'])) { - $old_pid = COM_applyFilter($_POST['old_pid']); - } + $pid = Geeklog\Input::fPost('pid'); + $old_pid = Geeklog\Input::fPost('old_pid', ''); if (empty($pid) && !empty($old_pid)) { $pid = $old_pid; } @@ -662,60 +652,50 @@ function deletePoll($pid) $old_pid = $pid; } if (!empty($pid)) { - $statuscode = 0; - if (isset($_POST['statuscode'])) { - $statuscode = COM_applyFilter($_POST['statuscode'], true); - } - $mainpage = ''; - if (isset($_POST['mainpage'])) { - $mainpage = COM_applyFilter($_POST['mainpage']); - } - $open = ''; - if (isset($_POST['open'])) { - $open = COM_applyFilter($_POST['open']); - } - $hideresults = ''; - if (isset($_POST['hideresults'])) { - $hideresults = COM_applyFilter($_POST['hideresults']); - } - $display .= savepoll($pid, $old_pid, $_POST['question'], $mainpage, - $_POST['topic'], $_POST['meta_description'], - $_POST['meta_keywords'], $statuscode, $open, - $hideresults, - COM_applyFilter($_POST['commentcode'], true), - $_POST['answer'], $_POST['votes'], $_POST['remark'], - COM_applyFilter($_POST['owner_id'], true), - COM_applyFilter($_POST['group_id'], true), - $_POST['perm_owner'], $_POST['perm_group'], - $_POST['perm_members'], $_POST['perm_anon'], - $_POST['allow_multipleanswers'], - COM_applyFilter($_POST['topic_description']), - $_POST['description']); + $statuscode = (int) Geeklog\Input::fPost('statuscode', 0); + $mainpage = Geeklog\Input::post('mainpage', ''); + $open = Geeklog\Input::fPost('open', ''); + $hideresults = Geeklog\Input::fPost('hideresults', ''); + $display .= savepoll( + $pid, $old_pid, + Geeklog\Input::post('question'), $mainpage, + Geeklog\Input::post('topic'), + Geeklog\Input::post('meta_description'), + Geeklog\Input::post('meta_keywords'), + $statuscode, $open, $hideresults, + (int) Geeklog\Input::fPost('commentcode'), + Geeklog\Input::post('answer'), + Geeklog\Input::post('votes'), + Geeklog\Input::post('remark'), + (int) Geeklog\Input::fPost('owner_id'), + (int) Geeklog\Input::fPost('group_id'), + Geeklog\Input::post('perm_owner'), + Geeklog\Input::post('perm_group'), + Geeklog\Input::post('perm_members'), + Geeklog\Input::post('perm_anon'), + Geeklog\Input::post('allow_multipleanswers'), + Geeklog\Input::fPost('topic_description'), + Geeklog\Input::post('description') + ); } else { - $display .= COM_showMessageText($LANG25[17], $LANG21[32]) - . editpoll(); + $display .= COM_showMessageText($LANG25[17], $LANG21[32]) . editpoll(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG25[5])); } } elseif (($mode == $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete'])) { - $pid = ''; - if (isset($_POST['pid'])) { - $pid = COM_applyFilter($_POST['pid']); - } + $pid = Geeklog\Input::fPost('pid', ''); if (empty($pid)) { COM_errorLog('Ignored possibly manipulated request to delete a poll.'); COM_redirect($_CONF['site_admin_url'] . '/plugins/polls/index.php'); } elseif (SEC_checkToken()) { $display .= deletePoll($pid); } else { - COM_accessLog("User {$_USER['username']} tried to illegally delete poll $pid and failed CSRF checks."); + COM_accessLog("User {$_USER['username']} tried to illegally delete poll {$pid} and failed CSRF checks."); COM_redirect($_CONF['site_admin_url'] . '/index.php'); } } else { // 'cancel' or no mode at all - if (isset($_REQUEST['msg'])) { - $msg = COM_applyFilter($_REQUEST['msg'], true); - if ($msg > 0) { - $display .= COM_showMessage($msg, 'polls'); - } + $msg = (int) Geeklog\Input::fRequest('msg', 0); + if ($msg > 0) { + $display .= COM_showMessage($msg, 'polls'); } $display .= listpolls(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG25[18])); diff --git a/public_html/admin/plugins/spamx/index.php b/public_html/admin/plugins/spamx/index.php index 594fbc6e0..a5c133dff 100644 --- a/public_html/admin/plugins/spamx/index.php +++ b/public_html/admin/plugins/spamx/index.php @@ -35,15 +35,15 @@ // +---------------------------------------------------------------------------+ /** -* Spam-X administration page -* -* @package Spam-X -* @subpackage admin -*/ + * Spam-X administration page + * + * @package Spam-X + * @subpackage admin + */ /** -* Geeklog common function library and Admin authentication -*/ + * Geeklog common function library and Admin authentication + */ require_once '../../../lib-common.php'; require_once '../../auth.inc.php'; require_once $_CONF['path_system'] . '/lib-admin.php'; @@ -67,14 +67,14 @@ /** -* Main -*/ + * Main + */ $display = ''; -$menu_arr = array ( - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) +$menu_arr = array( + array('url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home']), ); $display = COM_startBlock( @@ -100,16 +100,16 @@ $header_arr = array( array( 'text' => $LANG_SX00['plugin'], - 'field' => 'title' + 'field' => 'title', ), array( 'text' => $LANG33[30], - 'field' => 'regdate' + 'field' => 'regdate', ), array( 'text' => $LANG_SX00['action'], - 'field' => 'edit' - ) + 'field' => 'edit', + ), ); $data_arr = array(); @@ -117,8 +117,8 @@ require_once $_CONF['path'] . 'plugins/spamx/' . $file . '.Admin.class.php'; $CM = new $file; - $action = 'Edit'; - $link = $CM->linkText; + $action = 'Edit'; + $link = $CM->linkText; $regdate = '-'; if (strpos($link, 'Edit ') !== false) { @@ -134,7 +134,7 @@ 'edit' => COM_createLink( $LANG_SX00[strtolower($action)], $_CONF['site_admin_url'] . '/plugins/spamx/index.php?command=' . $file - ) + ), ); } @@ -144,12 +144,12 @@ 'edit' => COM_createLink( $LANG_SX00['view'], plugin_getdocumentationurl_spamx('index') - ) + ), ); -$display.= ADMIN_simpleList(null, $header_arr, null, $data_arr); +$display .= ADMIN_simpleList(null, $header_arr, null, $data_arr); if (isset($_REQUEST['command'])) { - $cmd = COM_applyFilter($_REQUEST['command']); + $cmd = Geeklog\Input::fRequest('command'); if (!empty($cmd) && in_array($cmd, $files)) { $CM = new $cmd; @@ -158,12 +158,9 @@ } $display .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); - $display = COM_createHTMLDocument( $display, array('pagetitle' => $LANG_SX00['plugin_name']) ); COM_output($display); - -?> diff --git a/public_html/admin/plugins/staticpages/index.php b/public_html/admin/plugins/staticpages/index.php index 5726f8c67..524fee0c8 100644 --- a/public_html/admin/plugins/staticpages/index.php +++ b/public_html/admin/plugins/staticpages/index.php @@ -137,7 +137,8 @@ function staticpageeditor_form($A) } // Add JavaScript - if ($_CONF['titletoid'] && empty($sp_id)) { + // Only use title_2_id if enabled, new staticpage or clone (basically any staticpage that does not exist yet) - $mode = 'edit', 'clone' + if ($_CONF['titletoid'] && (empty($sp_id) || $mode == 'clone')) { $_SCRIPTS->setJavaScriptFile('title_2_id', '/javascript/title_2_id.js'); $sp_template->set_var('titletoid', true); } @@ -642,10 +643,7 @@ function staticpageeditor($sp_id, $mode = '', $editor = '') } } elseif ($mode == 'edit') { // check if a new sp_id has been suggested - $sp_new_id = ''; - if (isset($_GET['sp_new_id'])) { - $sp_new_id = COM_applyFilter($_GET['sp_new_id']); - } + $sp_new_id = Geeklog\Input::fGet('sp_new_id', ''); if (empty($sp_new_id)) { $A['sp_id'] = COM_makesid(); } else { @@ -687,16 +685,16 @@ function staticpageeditor($sp_id, $mode = '', $editor = '') if (isset($A)) { if (isset($A['sp_title'])) { - $A['sp_title'] = strip_tags($A['sp_title']); + $A['sp_title'] = GLText::stripTags($A['sp_title']); } if (isset($A['sp_page_title'])) { - $A['sp_page_title'] = strip_tags($A['sp_page_title']); + $A['sp_page_title'] = GLText::stripTags($A['sp_page_title']); } if (isset($A['meta_description'])) { - $A['meta_description'] = strip_tags($A['meta_description']); + $A['meta_description'] = GLText::stripTags($A['meta_description']); } if (isset($A['meta_keywords'])) { - $A['meta_keywords'] = strip_tags($A['meta_keywords']); + $A['meta_keywords'] = GLText::stripTags($A['meta_keywords']); } $A['editor'] = $editor; @@ -791,15 +789,8 @@ function submitstaticpage($sp_id, $sp_title, $sp_page_title, $sp_content, $sp_hi } // MAIN -$mode = ''; -if (isset($_REQUEST['mode'])) { - $mode = COM_applyFilter($_REQUEST['mode']); -} -$sp_id = ''; -if (isset($_REQUEST['sp_id'])) { - $sp_id = COM_applyFilter($_REQUEST['sp_id']); -} - +$mode = Geeklog\Input::fRequest('mode', ''); +$sp_id = Geeklog\Input::fRequest('sp_id', ''); $display = ''; if (($mode == $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete']) && SEC_checkToken()) { @@ -813,15 +804,12 @@ function submitstaticpage($sp_id, $sp_title, $sp_page_title, $sp_content, $sp_hi } } elseif ($mode == 'edit') { if (isset($_GET['msg'])) { - $msg = COM_applyFilter($_GET['msg'], true); + $msg = (int) Geeklog\Input::fGet('msg', 0); if ($msg > 0) { $display .= COM_showMessage($msg, 'staticpages'); } } - $editor = ''; - if (isset($_GET['editor'])) { - $editor = COM_applyFilter($_GET['editor']); - } + $editor = Geeklog\Input::fGet('editor', ''); $display .= staticpageeditor($sp_id, $mode, $editor); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_STATIC['staticpageeditor'])); } elseif ($mode == 'clone') { @@ -853,7 +841,7 @@ function submitstaticpage($sp_id, $sp_title, $sp_page_title, $sp_content, $sp_hi } $help = ''; if (isset($_POST['sp_help'])) { - $sp_help = COM_sanitizeUrl($_POST['sp_help'], array('http', 'https')); + $sp_help = COM_sanitizeUrl(Geeklog\Input::post('sp_help'), array('http', 'https')); } if (!isset($_POST['sp_inblock'])) { $_POST['sp_inblock'] = ''; @@ -871,28 +859,46 @@ function submitstaticpage($sp_id, $sp_title, $sp_page_title, $sp_content, $sp_hi $_POST['template_flag'] = ''; } - $display .= submitstaticpage($sp_id, $_POST['sp_title'], $_POST['sp_page_title'], - $_POST['sp_content'], COM_applyFilter($_POST['sp_hits'], true), - COM_applyFilter($_POST['sp_format']), $_POST['sp_onmenu'], $_POST['sp_onhits'], $_POST['sp_onlastupdate'], - $_POST['sp_label'], COM_applyFilter($_POST['commentcode'], true), - COM_applyFilter($_POST['owner_id'], true), - COM_applyFilter($_POST['group_id'], true), $_POST['perm_owner'], - $_POST['perm_group'], $_POST['perm_members'], $_POST['perm_anon'], - $_POST['sp_php'], $_POST['sp_nf'], - COM_applyFilter($_POST['sp_old_id']), $_POST['sp_centerblock'], + $display .= submitstaticpage( + $sp_id, + Geeklog\Input::post('sp_title'), + Geeklog\Input::post('sp_page_title'), + Geeklog\Input::post('sp_content'), + (int) Geeklog\Input::fPost('sp_hits'), + Geeklog\Input::fPost('sp_format'), + Geeklog\Input::post('sp_onmenu'), + Geeklog\Input::post('sp_onhits'), + Geeklog\Input::post('sp_onlastupdate'), + Geeklog\Input::post('sp_label'), + (int) Geeklog\Input::fPost('commentcode'), + (int) Geeklog\Input::fPost('owner_id'), + (int) Geeklog\Input::fPost('group_id'), + Geeklog\Input::post('perm_owner'), + Geeklog\Input::post('perm_group'), + Geeklog\Input::post('perm_members'), + Geeklog\Input::post('perm_anon'), + Geeklog\Input::post('sp_php'), + Geeklog\Input::post('sp_nf'), + Geeklog\Input::fPost('sp_old_id'), + Geeklog\Input::post('sp_centerblock'), $sp_help, - COM_applyFilter($_POST['sp_where'], true), $_POST['sp_inblock'], - COM_applyFilter($_POST['postmode']), $_POST['meta_description'], - $_POST['meta_keywords'], $_POST['draft_flag'], $_POST['template_flag'], $_POST['template_id'], COM_applyFilter($_POST['cache_time'], true)); + (int) Geeklog\Input::fPost('sp_where'), + Geeklog\Input::post('sp_inblock'), + Geeklog\Input::fPost('postmode'), + Geeklog\Input::post('meta_description'), + Geeklog\Input::post('meta_keywords'), + Geeklog\Input::post('draft_flag'), + Geeklog\Input::post('template_flag'), + Geeklog\Input::post('template_id'), + (int) Geeklog\Input::fPost('cache_time') + ); } else { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } } else { - if (isset($_REQUEST['msg'])) { - $msg = COM_applyFilter($_REQUEST['msg'], true); - if ($msg > 0) { - $display .= COM_showMessage($msg, 'staticpages'); - } + $msg = (int) Geeklog\Input::fRequest('msg', 0); + if ($msg > 0) { + $display .= COM_showMessage($msg, 'staticpages'); } $display .= liststaticpages(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_STATIC['staticpagelist'])); diff --git a/public_html/admin/story.php b/public_html/admin/story.php index 0bb7f2846..9877ccf65 100644 --- a/public_html/admin/story.php +++ b/public_html/admin/story.php @@ -2,7 +2,7 @@ /* Reminder: always indent with 4 spaces (no tabs). */ // +---------------------------------------------------------------------------+ -// | Geeklog 1.8 | +// | Geeklog 2.1 | // +---------------------------------------------------------------------------+ // | story.php | // | | @@ -762,20 +762,18 @@ function storyeditor($sid = '', $mode = '', $errormsg = '') // Add JavaScript $_SCRIPTS->setJavaScriptFile('story_editor', '/javascript/story_editor.js'); - if ($_CONF['titletoid'] && empty($oldSid)) { + // Only use title_2_id if enabled, new story, clone or editing story submission (basically any story that does not exist yet) - $mode = 'preview', 'edit', 'editsubmission', 'clone' + if ($_CONF['titletoid'] && (empty($oldSid) || $mode == 'editsubmission' || $mode == 'clone')) { $_SCRIPTS->setJavaScriptFile('title_2_id', '/javascript/title_2_id.js'); $story_templates->set_var('titletoid', true); } $_SCRIPTS->setJavaScriptFile('postmode_control', '/javascript/postmode_control.js'); // Loads jQuery UI datepicker and timepicker-addon - $_SCRIPTS->setJavaScriptLibrary('jquery.ui.slider'); - // $_SCRIPTS->setJavaScriptLibrary('jquery.ui.button'); - $_SCRIPTS->setJavaScriptLibrary('jquery.ui.datepicker'); + $_SCRIPTS->setJavaScriptLibrary('jquery-ui'); // Require slider and date picker $_SCRIPTS->setJavaScriptLibrary('jquery-ui-i18n'); $_SCRIPTS->setJavaScriptLibrary('jquery-ui-timepicker-addon'); $_SCRIPTS->setJavaScriptLibrary('jquery-ui-timepicker-addon-i18n'); - // $_SCRIPTS->setJavaScriptLibrary('jquery-ui-slideraccess'); $_SCRIPTS->setJavaScriptFile('datetimepicker', '/javascript/datetimepicker.js'); $langCode = COM_getLangIso639Code(); @@ -884,30 +882,23 @@ function submitstory($type = '') } // MAIN -$mode = ''; -if (isset($_REQUEST['mode'])) { - $mode = COM_applyFilter($_REQUEST['mode']); -} +$mode = Geeklog\Input::fRequest('mode', ''); if (isset($_REQUEST['editopt'])) { - $editopt = COM_applyFilter($_REQUEST['editopt']); - if ($editopt == 'default') { + $editopt = Geeklog\Input::fRequest('editopt'); + if ($editopt === 'default') { $_CONF['advanced_editor'] = false; } } - $display = ''; if (($mode == $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete'])) { - $sid = COM_applyFilter($_POST['sid']); - $type = ''; - if (isset($_POST['type'])) { - $type = COM_applyFilter($_POST['type']); - } + $sid = Geeklog\Input::fPost('sid'); + $type = Geeklog\Input::fPost('type', ''); if (!isset($sid) || empty($sid)) { COM_errorLog('Attempted to delete story sid=' . $sid); COM_redirect($_CONF['site_admin_url'] . '/story.php'); - } elseif ($type == 'submission') { + } elseif ($type === 'submission') { if (TOPIC_hasMultiTopicAccess('article', $sid) < 3) { COM_accessLog("User {$_USER['username']} tried to illegally delete story submission $sid."); COM_redirect($_CONF['site_admin_url'] . '/index.php'); @@ -928,40 +919,28 @@ function submitstory($type = '') COM_redirect($_CONF['site_admin_url'] . '/index.php'); } } elseif (($mode == $LANG_ADMIN['preview']) && !empty($LANG_ADMIN['preview'])) { - $display .= storyeditor(COM_applyFilter($_POST['sid']), 'preview', '', ''); + $display .= storyeditor(Geeklog\Input::fPost('sid'), 'preview', '', ''); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG24[5])); COM_output($display); } elseif (($mode == 'edit') || ($mode == 'clone')) { - $sid = ''; - if (isset($_GET['sid'])) { - $sid = COM_applyFilter($_GET['sid']); - } + $sid = Geeklog\Input::fGet('sid', ''); $display .= storyeditor($sid, $mode, ''); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG24[5])); COM_output($display); -} else if ($mode == 'editsubmission') { - $display .= storyeditor(COM_applyFilter($_GET['id']), $mode); +} elseif ($mode == 'editsubmission') { + $display .= storyeditor(Geeklog\Input::fGet('id'), $mode); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG24[5])); COM_output($display); -} else if (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save']) && SEC_checkToken()) { +} elseif (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save']) && SEC_checkToken()) { submitstory(); } else { // 'cancel' or no mode at all - $type = ''; - if (isset($_POST['type'])) { - $type = COM_applyFilter($_POST['type']); - } - if (($mode == $LANG24[10]) && !empty($LANG24[10]) && - ($type == 'submission') - ) { + $type = Geeklog\Input::fPost('type', ''); + if (($mode == $LANG24[10]) && !empty($LANG24[10]) && ($type === 'submission')) { COM_redirect($_CONF['site_admin_url'] . '/moderation.php'); } else { $current_topic = ''; if (empty($mode)) { - if (!empty($_GET['tid'])) { - $current_topic = COM_applyFilter($_GET['tid']); - } elseif (!empty($_POST['tid'])) { - $current_topic = COM_applyFilter($_POST['tid']); - } + $current_topic = Geeklog\Input::fGetOrPost('tid', ''); } $display .= COM_showMessageFromParameter(); $display .= liststories($current_topic); @@ -969,5 +948,3 @@ function submitstory($type = '') } COM_output($display); } - -?> diff --git a/public_html/admin/syndication.php b/public_html/admin/syndication.php index f1ff4c435..996d71717 100644 --- a/public_html/admin/syndication.php +++ b/public_html/admin/syndication.php @@ -2,7 +2,7 @@ /* Reminder: always indent with 4 spaces (no tabs). */ // +---------------------------------------------------------------------------+ -// | Geeklog 1.8 | +// | Geeklog 2.1 | // +---------------------------------------------------------------------------+ // | syndication.php | // | | @@ -31,19 +31,19 @@ // +---------------------------------------------------------------------------+ /** -* Content syndication administration page: Here you can create, edit, and -* delete feeds in various formats for Geeklog and its plugins. -* -*/ + * Content syndication administration page: Here you can create, edit, and + * delete feeds in various formats for Geeklog and its plugins. + + */ /** -* Geeklog common function library -*/ + * Geeklog common function library + */ require_once '../lib-common.php'; /** -* Security check to ensure user even belongs on this page -*/ + * Security check to ensure user even belongs on this page + */ require_once 'auth.inc.php'; $display = ''; @@ -57,15 +57,14 @@ } /** -* Delete a feed's file -* -* @param string filename (without the path) of the feed -* @return void -* -*/ + * Delete a feed's file + * + * @param string filename (without the path) of the feed + * @return void + */ function deleteFeedFile($filename) { - if (! empty($filename)) { + if (!empty($filename)) { $feedfile = SYND_getFeedPath($filename); if (file_exists($feedfile)) { @unlink($feedfile); @@ -74,13 +73,12 @@ function deleteFeedFile($filename) } /** -* Toggle status of a feed from enabled to disabled and back -* -* @param array $enabledfeeds array containing ids of enabled feeds -* @param array $visiblefeeds array containing ids of visible feeds -* @return void -* -*/ + * Toggle status of a feed from enabled to disabled and back + * + * @param array $enabledfeeds array containing ids of enabled feeds + * @param array $visiblefeeds array containing ids of visible feeds + * @return void + */ function changeFeedStatus($enabledfeeds, $visiblefeeds) { global $_TABLES; @@ -91,14 +89,14 @@ function changeFeedStatus($enabledfeeds, $visiblefeeds) // disable feeds $in = implode(',', $disabled); - if (! empty($in)) { + if (!empty($in)) { $sql = "UPDATE {$_TABLES['syndication']} SET is_enabled = 0 WHERE fid IN ($in)"; DB_query($sql); } // enable feeds $in = implode(',', $enabledfeeds); - if (! empty($in)) { + if (!empty($in)) { // if we just enabled a feed, figure out which one it was $sql = "SELECT fid FROM {$_TABLES['syndication']} WHERE fid IN ($in) AND is_enabled = 0"; $result = DB_query($sql); @@ -125,32 +123,30 @@ function changeFeedStatus($enabledfeeds, $visiblefeeds) } /** -* Get a list of feed formats from the feed parser factory. -* -* @return array array of names of feed formats (and versions) -* -*/ -function find_feedFormats () + * Get a list of feed formats from the feed parser factory. + * + * @return array array of names of feed formats (and versions) + */ +function find_feedFormats() { global $_CONF; // Import the feed handling classes: require_once $_CONF['path_system'] - . '/classes/syndication/parserfactory.class.php'; + . '/classes/syndication/parserfactory.class.php'; $factory = new FeedParserFactory (); - $formats = $factory->getFeedTypes (); - sort ($formats); + $formats = $factory->getFeedTypes(); + sort($formats); return $formats; } /** -* List all feeds -* -* @return string HTML with the list of all feeds -* -*/ + * List all feeds + * + * @return string HTML with the list of all feeds + */ function listfeeds() { global $_CONF, $_TABLES, $LANG_ADMIN, $LANG33, $_IMAGE_TYPE; @@ -161,27 +157,27 @@ function listfeeds() $token = SEC_createToken(); $header_arr = array( # display 'text' and use table field 'field' - array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false), - array('text' => $LANG_ADMIN['title'], 'field' => 'title', 'sort' => true), - array('text' => $LANG_ADMIN['type'], 'field' => 'type', 'sort' => true), - array('text' => $LANG33[17], 'field' => 'format', 'sort' => true), - array('text' => $LANG33[16], 'field' => 'filename', 'sort' => true), - array('text' => $LANG_ADMIN['topic'], 'field' => 'header_tid', 'sort' => true), - array('text' => $LANG33[18], 'field' => 'updated', 'sort' => true), - array('text' => $LANG_ADMIN['enabled'], 'field' => 'is_enabled', 'sort' => true) + array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false), + array('text' => $LANG_ADMIN['title'], 'field' => 'title', 'sort' => true), + array('text' => $LANG_ADMIN['type'], 'field' => 'type', 'sort' => true), + array('text' => $LANG33[17], 'field' => 'format', 'sort' => true), + array('text' => $LANG33[16], 'field' => 'filename', 'sort' => true), + array('text' => $LANG_ADMIN['topic'], 'field' => 'header_tid', 'sort' => true), + array('text' => $LANG33[18], 'field' => 'updated', 'sort' => true), + array('text' => $LANG_ADMIN['enabled'], 'field' => 'is_enabled', 'sort' => true), ); $defsort_arr = array('field' => 'title', 'direction' => 'asc'); - $menu_arr = array ( - array('url' => $_CONF['site_admin_url'] . '/syndication.php?mode=edit', - 'text' => $LANG_ADMIN['create_new']), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + $menu_arr = array( + array('url' => $_CONF['site_admin_url'] . '/syndication.php?mode=edit', + 'text' => $LANG_ADMIN['create_new']), + array('url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home']), ); $retval .= COM_startBlock($LANG33[10], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= ADMIN_createMenu( $menu_arr, @@ -191,46 +187,45 @@ function listfeeds() $text_arr = array( 'has_extras' => true, - 'form_url' => $_CONF['site_admin_url'] . '/syndication.php' + 'form_url' => $_CONF['site_admin_url'] . '/syndication.php', ); - $query_arr = array('table' => 'syndication', - 'sql' => "SELECT *,UNIX_TIMESTAMP(updated) AS date FROM {$_TABLES['syndication']} WHERE 1=1", - 'query_fields' => array('title', 'filename'), + $query_arr = array('table' => 'syndication', + 'sql' => "SELECT *,UNIX_TIMESTAMP(updated) AS date FROM {$_TABLES['syndication']} WHERE 1=1", + 'query_fields' => array('title', 'filename'), 'default_filter' => ''); // this is a dummy variable so we know the form has been used if all feeds // should be disabled in order to disable the last one. $form_arr = array( 'top' => '', + . $token . '"' . XHTML . '>', 'bottom' => '' + . XHTML . '>', ); $retval .= ADMIN_list('syndication', 'ADMIN_getListField_syndication', - $header_arr, $text_arr, $query_arr, $defsort_arr, '', - $token, '', $form_arr); + $header_arr, $text_arr, $query_arr, $defsort_arr, '', + $token, '', $form_arr); $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); return $retval; } /** -* Display the feed editor. -* -* @param int $fid feed id (0 for new feeds) -* @param string $type type of feed, e.g. 'article' -* @return string HTML for the feed editor -* -*/ -function editfeed ($fid = 0, $type = '') + * Display the feed editor. + * + * @param int $fid feed id (0 for new feeds) + * @param string $type type of feed, e.g. 'article' + * @return string HTML for the feed editor + */ +function editfeed($fid = 0, $type = '') { global $_CONF, $_TABLES, $LANG33, $LANG_ADMIN, $MESSAGE; if ($fid > 0) { - $result = DB_query ("SELECT *,UNIX_TIMESTAMP(updated) AS date FROM {$_TABLES['syndication']} WHERE fid = '$fid'"); - $A = DB_fetchArray ($result); + $result = DB_query("SELECT *,UNIX_TIMESTAMP(updated) AS date FROM {$_TABLES['syndication']} WHERE fid = '$fid'"); + $A = DB_fetchArray($result); $fid = $A['fid']; } if ($fid == 0) { @@ -261,31 +256,31 @@ function editfeed ($fid = 0, $type = '') $token = SEC_createToken(); $feed_template = COM_newTemplate($_CONF['path_layout'] . 'admin/syndication'); - $feed_template->set_file ('editor', 'feededitor.thtml'); + $feed_template->set_file('editor', 'feededitor.thtml'); $start_block = COM_startBlock($LANG33[24], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $start_block .= SEC_getTokenExpiryNotice($token); $feed_template->set_var('start_feed_editor', $start_block); $feed_template->set_var('end_block', - COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); - - $feed_template->set_var ('lang_feedtitle', $LANG33[25]); - $feed_template->set_var ('lang_enabled', $LANG33[19]); - $feed_template->set_var ('lang_format', $LANG33[17]); - $feed_template->set_var ('lang_limits', $LANG33[26]); - $feed_template->set_var ('lang_content_length', $LANG33[27]); - $feed_template->set_var ('lang_clen_explain', $LANG33[28]); - $feed_template->set_var ('lang_description', $LANG33[29]); - $feed_template->set_var ('lang_feedlogo', $LANG33[49]); - $feed_template->set_var ('lang_feedlogo_explain', $LANG33[50]); - $feed_template->set_var ('lang_filename', $LANG33[16]); - $feed_template->set_var ('lang_updated', $LANG33[30]); - $feed_template->set_var ('lang_type', $LANG33[15]); - $feed_template->set_var ('lang_charset', $LANG33[31]); - $feed_template->set_var ('lang_language', $LANG33[32]); - $feed_template->set_var ('lang_topic', $LANG33[33]); + COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer'))); + + $feed_template->set_var('lang_feedtitle', $LANG33[25]); + $feed_template->set_var('lang_enabled', $LANG33[19]); + $feed_template->set_var('lang_format', $LANG33[17]); + $feed_template->set_var('lang_limits', $LANG33[26]); + $feed_template->set_var('lang_content_length', $LANG33[27]); + $feed_template->set_var('lang_clen_explain', $LANG33[28]); + $feed_template->set_var('lang_description', $LANG33[29]); + $feed_template->set_var('lang_feedlogo', $LANG33[49]); + $feed_template->set_var('lang_feedlogo_explain', $LANG33[50]); + $feed_template->set_var('lang_filename', $LANG33[16]); + $feed_template->set_var('lang_updated', $LANG33[30]); + $feed_template->set_var('lang_type', $LANG33[15]); + $feed_template->set_var('lang_charset', $LANG33[31]); + $feed_template->set_var('lang_language', $LANG33[32]); + $feed_template->set_var('lang_topic', $LANG33[33]); $feed_template->set_var('lang_header_topic', $LANG33[45]); $feed_template->set_var('header_topic_options', TOPIC_getTopicListSelect($A['header_tid'], 6, true)); @@ -295,27 +290,27 @@ function editfeed ($fid = 0, $type = '') $feed_template->set_var('lang_cancel', $LANG_ADMIN['cancel']); if ($A['fid'] > 0) { $delbutton = ''; + . '" name="mode"%s' . XHTML . '>'; $jsconfirm = ' onclick="return confirm(\'' . $MESSAGE[76] . '\');"'; - $feed_template->set_var ('delete_option', - sprintf ($delbutton, $jsconfirm)); - $feed_template->set_var ('delete_option_no_confirmation', - sprintf ($delbutton, '')); + $feed_template->set_var('delete_option', + sprintf($delbutton, $jsconfirm)); + $feed_template->set_var('delete_option_no_confirmation', + sprintf($delbutton, '')); $feed_template->set_var('allow_delete', true); $feed_template->set_var('lang_delete', $LANG_ADMIN['delete']); $feed_template->set_var('confirm_message', $MESSAGE[76]); } - $feed_template->set_var ('feed_id', $A['fid']); - $feed_template->set_var ('feed_title', $A['title']); - $feed_template->set_var ('feed_description', $A['description']); - $feed_template->set_var ('feed_logo', $A['feedlogo']); - $feed_template->set_var ('feed_content_length', $A['content_length']); - $feed_template->set_var ('feed_filename', $A['filename']); - $feed_template->set_var ('feed_type', $A['type']); + $feed_template->set_var('feed_id', $A['fid']); + $feed_template->set_var('feed_title', $A['title']); + $feed_template->set_var('feed_description', $A['description']); + $feed_template->set_var('feed_logo', $A['feedlogo']); + $feed_template->set_var('feed_content_length', $A['content_length']); + $feed_template->set_var('feed_filename', $A['filename']); + $feed_template->set_var('feed_type', $A['type']); $feed_template->set_var('feed_type_display', ucwords($A['type'])); - $feed_template->set_var ('feed_charset', $A['charset']); - $feed_template->set_var ('feed_language', $A['language']); + $feed_template->set_var('feed_charset', $A['charset']); + $feed_template->set_var('feed_language', $A['language']); if (($A['is_enabled'] == 1) && !empty($A['updated'])) { $nicedate = COM_getUserDateTimeFormat($A['date']); @@ -324,26 +319,26 @@ function editfeed ($fid = 0, $type = '') $feed_template->set_var('feed_updated', $LANG_ADMIN['na']); } - $formats = find_feedFormats (); + $formats = find_feedFormats(); $selection = '' . LB; - $feed_template->set_var ('feed_format', $selection); + $feed_template->set_var('feed_format', $selection); $limits = $A['limits']; $hours = false; - if (substr ($A['limits'], -1) == 'h') { - $limits = substr ($A['limits'], 0, -1); + if (substr($A['limits'], -1) == 'h') { + $limits = substr($A['limits'], 0, -1); $hours = true; } $selection = '' . LB; - $feed_template->set_var ('feed_limits', $limits); - $feed_template->set_var ('feed_limits_what', $selection); + $feed_template->set_var('feed_limits', $limits); + $feed_template->set_var('feed_limits_what', $selection); if ($A['type'] != 'article' AND $A['type'] != 'comment') { $result = DB_query("SELECT pi_enabled FROM {$_TABLES['plugins']} WHERE pi_name='{$A['type']}'"); if ($result) { $P = DB_fetchArray($result); - if($P['pi_enabled'] == 0) { - COM_redirect($_CONF['site_admin_url'].'/syndication.php?msg=80'); + if ($P['pi_enabled'] == 0) { + COM_redirect($_CONF['site_admin_url'] . '/syndication.php?msg=80'); } } } - $options = PLG_getFeedNames ($A['type']); + $options = PLG_getFeedNames($A['type']); $selection = '' . LB; - $feed_template->set_var ('feed_topic', $selection); + $feed_template->set_var('feed_topic', $selection); if ($A['is_enabled'] == 1) { - $feed_template->set_var ('is_enabled', 'checked="checked"'); + $feed_template->set_var('is_enabled', 'checked="checked"'); } else { - $feed_template->set_var ('is_enabled', ''); + $feed_template->set_var('is_enabled', ''); } $feed_template->set_var('gltoken_name', CSRF_TOKEN); $feed_template->set_var('gltoken', $token); $retval .= $feed_template->finish($feed_template->parse('output', - 'editor')); + 'editor')); + return $retval; } /** -* Create a new feed. This is an extra step to take once you have a plugin -* installed that supports the new Feed functions in the Plugin API. This -* will let you select for which plugin (or Geeklog) you're creating the feed. -* -* @return string HTML for the complete page (selection or feed editor) -* -*/ -function newfeed () + * Create a new feed. This is an extra step to take once you have a plugin + * installed that supports the new Feed functions in the Plugin API. This + * will let you select for which plugin (or Geeklog) you're creating the feed. + * + * @return string HTML for the complete page (selection or feed editor) + */ +function newfeed() { global $_CONF, $LANG33; $retval = ''; - $plugins = PLG_supportingFeeds (); + $plugins = PLG_supportingFeeds(); $selection = '' . LB; $feed_template = COM_newTemplate($_CONF['path_layout'] . 'admin/syndication'); - $feed_template->set_file ('type', 'selecttype.thtml'); + $feed_template->set_file('type', 'selecttype.thtml'); - $feed_template->set_var ('type_selection', $selection); + $feed_template->set_var('type_selection', $selection); - $feed_template->set_var ('lang_explain', $LANG33[54]); - $feed_template->set_var ('lang_go', $LANG33[1]); + $feed_template->set_var('lang_explain', $LANG33[54]); + $feed_template->set_var('lang_go', $LANG33[1]); - $retval .= COM_startBlock ($LANG33[36], '', - COM_getBlockTemplate ('_admin_block', 'header')); - $retval .= $feed_template->finish ($feed_template->parse ('output', - 'type')); - $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); + $retval .= COM_startBlock($LANG33[36], '', + COM_getBlockTemplate('_admin_block', 'header')); + $retval .= $feed_template->finish($feed_template->parse('output', + 'type')); + $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $LANG33[11])); return $retval; } /** -* Save feed. -* -* @param array $A -* @return string HTML redirect on success or feed editor + error message -* -*/ -function savefeed ($A) + * Save feed. + * + * @param array $A + * @return string HTML redirect on success or feed editor + error message + */ +function savefeed($A) { global $_CONF, $_TABLES, $LANG33; foreach ($A as $name => $value) { - $A[$name] = COM_stripslashes ($value); + $A[$name] = COM_stripslashes($value); } if (isset($A['is_enabled']) && ($A['is_enabled'] == 'on')) { @@ -467,8 +461,7 @@ function savefeed ($A) $formats = find_feedFormats(); foreach ($formats as $f) { if ($A['format'] == ($f['name'] . '-' . $f['version'])) { - switch($f['name']) - { + switch ($f['name']) { case 'Atom': if (!in_array(@$file_parts['extension'], array('atm', 'xml'))) { $file_parts['extension'] = 'xml'; @@ -493,10 +486,12 @@ function savefeed ($A) } } if (empty($A['title']) || empty($A['description']) || - empty($A['filename'])) { + empty($A['filename']) + ) { $retval = COM_showMessageText($LANG33[39], $LANG33[38]) - . editfeed ($A['fid'], $A['type']); + . editfeed($A['fid'], $A['type']); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $LANG33[38])); + return $retval; } @@ -504,15 +499,17 @@ function savefeed ($A) $C = DB_fetchArray($result); if ($C['count'] > 0) { $retval = COM_showMessageText($LANG33[51], $LANG33[52]) - . editfeed ($A['fid'], $A['type']); + . editfeed($A['fid'], $A['type']); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $LANG33[52])); + return $retval; } if ($A['limits'] <= 0) { $retval = COM_showMessageText($LANG33[40], $LANG33[38]) - . editfeed ($A['fid'], $A['type']); + . editfeed($A['fid'], $A['type']); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $LANG33[38])); + return $retval; } if ($A['limits_in'] == 1) { @@ -570,19 +567,18 @@ function savefeed ($A) } /** -* Delete a feed. -* -* @param int $fid feed id -* @return string HTML redirect -* -*/ + * Delete a feed. + * + * @param int $fid feed id + * @return string HTML redirect + */ function deletefeed($fid) { global $_CONF, $_TABLES; if ($fid > 0) { $feedfile = DB_getItem($_TABLES['syndication'], 'filename', - "fid = $fid"); + "fid = $fid"); deleteFeedFile($feedfile); DB_delete($_TABLES['syndication'], 'fid', $fid); COM_redirect($_CONF['site_admin_url'] . '/syndication.php?msg=59'); @@ -595,51 +591,31 @@ function deletefeed($fid) $display = ''; if ($_CONF['backend'] && isset($_POST['feedenabler']) && SEC_checkToken()) { - $enabledfeeds = array(); - if (isset($_POST['enabledfeeds'])) { - $enabledfeeds = $_POST['enabledfeeds']; - } - $visiblefeeds = array(); - if (isset($_POST['visiblefeeds'])) { - $visiblefeeds = $_POST['visiblefeeds']; - } + $enabledfeeds = Geeklog\Input::post('enabledfeeds', array()); + $visiblefeeds = Geeklog\Input::post('visiblefeeds', array()); changeFeedStatus($enabledfeeds, $visiblefeeds); } -$mode = ''; -if (isset($_REQUEST['mode'])) { - $mode = $_REQUEST['mode']; -} -if ($mode == 'edit') { + +$mode = Geeklog\Input::request('mode', ''); +if ($mode === 'edit') { if (empty($_REQUEST['fid'])) { - $display .= newfeed (); + $display .= newfeed(); } else { - $display .= editfeed (COM_applyFilter($_REQUEST['fid'])); + $display .= editfeed(Geeklog\Input::fRequest('fid')); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG33[24])); } -} -elseif (($mode == $LANG33[1]) && !empty($LANG33[1])) -{ - $display .= editfeed (0, COM_applyFilter($_REQUEST['type'])); +} elseif (($mode == $LANG33[1]) && !empty($LANG33[1])) { + $display .= editfeed(0, Geeklog\Input::fRequest('type')); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG33[24])); -} -elseif (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save']) && SEC_checkToken()) -{ +} elseif (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save']) && SEC_checkToken()) { $display .= savefeed($_POST); -} -elseif (($mode == $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete']) && SEC_checkToken()) { - $fid = 0; - if (isset($_POST['fid'])) { - $fid = COM_applyFilter($_POST['fid'], true); - } +} elseif (($mode == $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete']) && SEC_checkToken()) { + $fid = (int) Geeklog\Input::fPost('fid', 0); $display .= deletefeed($fid); -} -else -{ +} else { $display .= COM_showMessageFromParameter(); $display .= listfeeds(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG33[10])); } COM_output($display); - -?> diff --git a/public_html/admin/topic.php b/public_html/admin/topic.php index b39372ed8..271c9f4e8 100644 --- a/public_html/admin/topic.php +++ b/public_html/admin/topic.php @@ -2,7 +2,7 @@ /* Reminder: always indent with 4 spaces (no tabs). */ // +---------------------------------------------------------------------------+ -// | Geeklog 1.8 | +// | Geeklog 2.1 | // +---------------------------------------------------------------------------+ // | topic.php | // | | @@ -383,7 +383,7 @@ function savetopic( $duplicate_tid = false; $old_tid = ''; if (isset($_POST['old_tid'])) { - $old_tid = COM_applyFilter($_POST['old_tid']); + $old_tid = Geeklog\Input::fPost('old_tid'); if (!empty($old_tid)) { $old_tid = COM_sanitizeID($old_tid); // See if new topic id @@ -464,11 +464,11 @@ function savetopic( $imageUrl = ''; } - $topic = GLText::remove4byteUtf8Chars(strip_tags($topic)); + $topic = GLText::remove4byteUtf8Chars(GLText::stripTags($topic)); $topic = DB_escapeString($topic); - $meta_description = GLText::remove4byteUtf8Chars(strip_tags($meta_description)); + $meta_description = GLText::remove4byteUtf8Chars(GLText::stripTags($meta_description)); $meta_description = DB_escapeString($meta_description); - $meta_keywords = GLText::remove4byteUtf8Chars(strip_tags($meta_keywords)); + $meta_keywords = GLText::remove4byteUtf8Chars(GLText::stripTags($meta_keywords)); $meta_keywords = DB_escapeString($meta_keywords); if ($is_default == 'on') { @@ -922,14 +922,10 @@ function handleIconUpload($tid) // MAIN $display = ''; - -$mode = ''; -if (isset($_REQUEST['mode'])) { - $mode = $_REQUEST['mode']; -} +$mode = Geeklog\Input::request('mode', ''); if (($mode == $LANG_ADMIN['delete']) && !empty($LANG_ADMIN['delete'])) { - $tid = COM_applyFilter($_POST['tid']); + $tid = Geeklog\Input::fPost('tid'); if (!isset($tid) || empty($tid)) { COM_errorLog('Attempted to delete topic tid=' . $tid); COM_redirect($_CONF['site_admin_url'] . '/topic.php'); @@ -941,66 +937,47 @@ function handleIconUpload($tid) } } elseif (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save']) && SEC_checkToken()) { if (empty($_FILES['newicon']['name'])) { - $imageurl = COM_applyFilter($_POST['imageurl']); + $imageurl = Geeklog\Input::fPost('imageurl'); } else { - $imageurl = handleIconUpload($_POST['tid']); + $imageurl = handleIconUpload(Geeklog\Input::post('tid')); $imageurl = COM_applyFilter($imageurl); } - $is_default = ''; - if (isset($_POST['is_default'])) { - $is_default = $_POST['is_default']; - } - $is_archive = ''; - if (isset($_POST['is_archive'])) { - $is_archive = $_POST['is_archive']; - } - $inherit = ''; - if (isset($_POST['inherit'])) { - $inherit = COM_applyFilter($_POST['inherit'], true); - } - $hidden = ''; - if (isset($_POST['hidden'])) { - $hidden = COM_applyFilter($_POST['hidden'], true); - } - $parent_id = ''; - if (isset($_POST['parent_id'])) { - $parent_id = COM_applyFilter($_POST['parent_id']); - } - - $sortnum = 0; - if (isset($_POST['sortnum'])) { - $sortnum = COM_applyFilter($_POST['sortnum'], true); - } - $display .= savetopic(COM_applyFilter($_POST['tid']), $_POST['topic_name'], - $inherit, $hidden, $parent_id, - $imageurl, $_POST['meta_description'], - $_POST['meta_keywords'], $sortnum, - COM_applyFilter($_POST['limitnews'], true), - COM_applyFilter($_POST['owner_id'], true), - COM_applyFilter($_POST['group_id'], true), - $_POST['perm_owner'], $_POST['perm_group'], - $_POST['perm_members'], $_POST['perm_anon'], - $is_default, $is_archive); -} elseif ($mode == 'edit') { - $tid = ''; - if (isset($_GET['tid'])) { - $tid = COM_applyFilter($_GET['tid']); - } + + $is_default = Geeklog\Input::post('is_default', ''); + $is_archive = Geeklog\Input::post('is_archive', ''); + $inherit = (int) Geeklog\Input::fPost('inherit', 0); + $hidden = (int) Geeklog\Input::fPost('hidden', 0); + $parent_id = Geeklog\Input::fPost('parent_id'); + $sortnum = (int) Geeklog\Input::fPost('sortnum', 0); + $display .= savetopic( + Geeklog\Input::fPost('tid'), + Geeklog\Input::post('topic_name'), + $inherit, $hidden, $parent_id, $imageurl, + Geeklog\Input::post('meta_description'), + Geeklog\Input::post('meta_keywords'), + $sortnum, + (int) Geeklog\Input::fPost('limitnews'), + (int) Geeklog\Input::fPost('owner_id'), + (int) Geeklog\Input::fPost('group_id'), + (int) Geeklog\Input::post('perm_owner'), + (int) Geeklog\Input::post('perm_group'), + (int) Geeklog\Input::post('perm_members'), + (int) Geeklog\Input::post('perm_anon'), + $is_default, $is_archive + ); +} elseif ($mode === 'edit') { + $tid = Geeklog\Input::fGet('tid', ''); $display .= edittopic($tid); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG27[1])); - - -} elseif ($mode == 'change_sortnum' && SEC_checkToken()) { +} elseif ($mode === 'change_sortnum' && SEC_checkToken()) { $display .= COM_showMessageFromParameter(); - moveTopics(COM_applyFilter($_GET['tid']), COM_applyFilter($_GET['where'])); + moveTopics(Geeklog\Input::fGet('tid'), Geeklog\Input::fGet('where')); $display .= listTopics(SEC_createToken()); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG27[8])); - } else { // 'cancel' or no mode at all $display .= COM_showMessageFromParameter(); $display .= listTopics(SEC_createToken()); - $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG27[8])); } diff --git a/public_html/admin/trackback.php b/public_html/admin/trackback.php index 57c4ec2bb..a34c1c3f7 100644 --- a/public_html/admin/trackback.php +++ b/public_html/admin/trackback.php @@ -2,7 +2,7 @@ /* Reminder: always indent with 4 spaces (no tabs). */ // +---------------------------------------------------------------------------+ -// | Geeklog 1.8 | +// | Geeklog 2.1 | // +---------------------------------------------------------------------------+ // | trackback.php | // | | @@ -30,24 +30,24 @@ // +---------------------------------------------------------------------------+ /** -* Admin functions related to Trackbacks, Pingbacks, and Pings: Send Trackbacks, -* Pingbacks, and configure the list of weblog directory services to "ping" -* after an update. -* -*/ + * Admin functions related to Trackbacks, Pingbacks, and Pings: Send Trackbacks, + * Pingbacks, and configure the list of weblog directory services to "ping" + * after an update. + */ /** -* Geeklog common function library -*/ + * Geeklog common function library + */ require_once '../lib-common.php'; /** -* Security check to ensure user even belongs on this page -*/ + * Security check to ensure user even belongs on this page + */ require_once 'auth.inc.php'; if (!$_CONF['trackback_enabled'] && !$_CONF['pingback_enabled'] && - !$_CONF['ping_enabled']) { + !$_CONF['ping_enabled'] +) { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } @@ -66,32 +66,31 @@ require_once $_CONF['path_system'] . 'lib-story.php'; /** -* Display trackback comment submission form. -* -* @param string $target URL to send the trackback comment to -* @param string $url URL of our entry -* @param string $title title of our entry -* @param string $excerpt excerpt of our entry -* @param string $blog name of our site -* @return string HTML for the trackback comment editor -* -*/ -function trackback_editor ($target = '', $url = '', $title = '', $excerpt = '', $blog = '') + * Display trackback comment submission form. + * + * @param string $target URL to send the trackback comment to + * @param string $url URL of our entry + * @param string $title title of our entry + * @param string $excerpt excerpt of our entry + * @param string $blog name of our site + * @return string HTML for the trackback comment editor + */ +function trackback_editor($target = '', $url = '', $title = '', $excerpt = '', $blog = '') { global $_CONF, $LANG_TRB; $retval = ''; // show preview if we have at least the URL - if (!empty ($url)) { + if (!empty($url)) { // filter them for the preview - $p_title = TRB_filterTitle ($title); - $p_excerpt = TRB_filterExcerpt ($excerpt); - $p_blog = TRB_filterBlogname ($blog); + $p_title = TRB_filterTitle($title); + $p_excerpt = TRB_filterExcerpt($excerpt); + $p_blog = TRB_filterBlogname($blog); // MT and other weblogs will shorten the excerpt like this - if (MBYTE_strlen ($p_excerpt) > 255) { - $p_excerpt = MBYTE_substr ($p_excerpt, 0, 252) . '...'; + if (MBYTE_strlen($p_excerpt) > 255) { + $p_excerpt = MBYTE_substr($p_excerpt, 0, 252) . '...'; } $retval .= COM_startBlock($LANG_TRB['preview']); @@ -106,27 +105,27 @@ function trackback_editor ($target = '', $url = '', $title = '', $excerpt = '', $retval .= COM_endBlock(); } - if (empty ($url) && empty ($blog)) { - $blog = htmlspecialchars ($_CONF['site_name']); + if (empty($url) && empty($blog)) { + $blog = htmlspecialchars($_CONF['site_name']); } - $title = htmlspecialchars ($title); - $excerpt = htmlspecialchars ($excerpt, ENT_NOQUOTES); + $title = htmlspecialchars($title); + $excerpt = htmlspecialchars($excerpt, ENT_NOQUOTES); $retval .= COM_startBlock($LANG_TRB['editor_title'], - getHelpUrl() . '#trackback', - COM_getBlockTemplate('_admin_block', 'header')); + getHelpUrl() . '#trackback', + COM_getBlockTemplate('_admin_block', 'header')); $template = COM_newTemplate($_CONF['path_layout'] . 'admin/trackback'); $template->set_file(array('editor' => 'trackbackeditor.thtml')); $template->set_var('php_self', $_CONF['site_admin_url'] - . '/trackback.php'); + . '/trackback.php'); - if (empty ($url) || empty ($title)) { + if (empty($url) || empty($title)) { $template->set_var('lang_explain', $LANG_TRB['editor_intro_none']); } else { $template->set_var('lang_explain', - sprintf ($LANG_TRB['editor_intro'], $url, $title)); + sprintf($LANG_TRB['editor_intro'], $url, $title)); } $template->set_var('lang_trackback_url', $LANG_TRB['trackback_url']); $template->set_var('lang_entry_url', $LANG_TRB['entry_url']); @@ -146,41 +145,40 @@ function trackback_editor ($target = '', $url = '', $title = '', $excerpt = '', $template->set_var('gltoken_name', CSRF_TOKEN); $template->set_var('gltoken', SEC_createToken()); - $template->parse ('output', 'editor'); - $retval .= $template->finish ($template->get_var ('output')); + $template->parse('output', 'editor'); + $retval .= $template->finish($template->get_var('output')); - $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); + $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); return $retval; } /** -* Deletes a trackback comment. Checks if the current user has proper -* permissions first. -* -* @param int $id ID of the trackback comment to delete -* @return string HTML redirect -* -*/ -function deleteTrackbackComment ($id) + * Deletes a trackback comment. Checks if the current user has proper + * permissions first. + * + * @param int $id ID of the trackback comment to delete + * @return string HTML redirect + */ +function deleteTrackbackComment($id) { global $_TABLES; $cid = DB_escapeString($id); - $result = DB_query ("SELECT sid,type FROM {$_TABLES['trackback']} WHERE cid = '$cid'"); - list ($sid, $type) = DB_fetchArray ($result); + $result = DB_query("SELECT sid,type FROM {$_TABLES['trackback']} WHERE cid = '$cid'"); + list ($sid, $type) = DB_fetchArray($result); $url = PLG_getItemInfo($type, $sid, 'url'); - if (TRB_allowDelete ($sid, $type)) { - TRB_deleteTrackbackComment ($id); + if (TRB_allowDelete($sid, $type)) { + TRB_deleteTrackbackComment($id); if ($type == 'article') { - DB_query ("UPDATE {$_TABLES['stories']} SET trackbacks = trackbacks - 1 WHERE (sid = '$sid')"); + DB_query("UPDATE {$_TABLES['stories']} SET trackbacks = trackbacks - 1 WHERE (sid = '$sid')"); } $msg = 62; } else { $msg = 63; } - if (strpos ($url, '?') === false) { + if (strpos($url, '?') === false) { $url .= '?msg=' . $msg; } else { $url .= '&msg=' . $msg; @@ -190,27 +188,25 @@ function deleteTrackbackComment ($id) } /** -* Show an error or warning message -* -* @param string $title block title -* @param string $message the actual message -* @return string HTML for the message block -* -*/ + * Show an error or warning message + * + * @param string $title block title + * @param string $message the actual message + * @return string HTML for the message block + */ function showTrackbackMessage($title, $message) { return COM_showMessageText($message, $title); } /** -* Send a Pingback to all the links in our entry -* -* @param string $type type of entry we're advertising ('article' = story) -* @param string $id ID of that entry -* @return string pingback results -* -*/ -function sendPingbacks ($type, $id) + * Send a Pingback to all the links in our entry + * + * @param string $type type of entry we're advertising ('article' = story) + * @param string $id ID of that entry + * @return string pingback results + */ +function sendPingbacks($type, $id) { global $_CONF, $LANG_TRB; @@ -219,13 +215,13 @@ function sendPingbacks ($type, $id) list($url, $text) = PLG_getItemInfo($type, $id, 'url,description'); // extract all links from the text - preg_match_all ("/]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\/a>/i", $text, - $matches); - $numlinks = count ($matches[0]); + preg_match_all("/]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\/a>/i", $text, + $matches); + $numlinks = count($matches[0]); if ($numlinks > 0) { - $links = array (); + $links = array(); for ($i = 0; $i < $numlinks; $i++) { - if (!isset ($links[$matches[1][$i]])) { + if (!isset($links[$matches[1][$i]])) { $links[$matches[1][$i]] = $matches[2][$i]; } } @@ -238,15 +234,15 @@ function sendPingbacks ($type, $id) $counter = 1; foreach ($links as $URLtoPing => $linktext) { - $result = PNB_sendPingback ($url, $URLtoPing); + $result = PNB_sendPingback($url, $URLtoPing); $resend = ''; - if (empty ($result)) { + if (empty($result)) { $result = '' . $LANG_TRB['pingback_success'] . ''; - } else if ($result != $LANG_TRB['no_pingback_url']) { + } elseif ($result != $LANG_TRB['no_pingback_url']) { $result = '' . $result . ''; // TBD: $resend = '...'; } - $parts = parse_url ($URLtoPing); + $parts = parse_url($URLtoPing); $template->set_var('url_to_ping', $URLtoPing); $template->set_var('link_text', $linktext); @@ -254,13 +250,13 @@ function sendPingbacks ($type, $id) $template->set_var('pingback_result', $result); $template->set_var('resend', $resend); $template->set_var('alternate_row', - ($counter % 2) == 0 ? 'row-even' : 'row-odd'); + ($counter % 2) == 0 ? 'row-even' : 'row-odd'); $template->set_var('cssid', ($i % 2) + 1); - $template->parse ('pingback_results', 'item', true); + $template->parse('pingback_results', 'item', true); $counter++; } - $template->parse ('output', 'list'); - $retval .= $template->finish ($template->get_var ('output')); + $template->parse('output', 'list'); + $retval .= $template->finish($template->get_var('output')); } else { $retval = '

' . $LANG_TRB['no_links_pingback'] . '

'; @@ -269,13 +265,13 @@ function sendPingbacks ($type, $id) return $retval; } -function pingbackForm ($targetUrl = '') +function pingbackForm($targetUrl = '') { global $_CONF, $LANG_TRB; $retval = ''; $retval .= COM_startBlock($LANG_TRB['pingback_button'], getHelpUrl(), - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $template = COM_newTemplate($_CONF['path_layout'] . 'admin/trackback'); $template->set_file(array('list' => 'pingbackform.thtml')); @@ -290,53 +286,52 @@ function pingbackForm ($targetUrl = '') $template->set_var('gltoken_name', CSRF_TOKEN); $template->set_var('gltoken', SEC_createToken()); - $template->parse ('output', 'list'); - $retval .= $template->finish ($template->get_var ('output')); + $template->parse('output', 'list'); + $retval .= $template->finish($template->get_var('output')); - $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); + $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); return $retval; } /** -* Ping weblog directory services -* -* @param string $type type of entry we're advertising ('article' = story) -* @param string $id ID of that entry -* @return string result of the pings -* -*/ -function sendPings ($type, $id) + * Ping weblog directory services + * + * @param string $type type of entry we're advertising ('article' = story) + * @param string $id ID of that entry + * @return string result of the pings + */ +function sendPings($type, $id) { global $_CONF, $_TABLES, $LANG_TRB; $retval = ''; - list($itemurl,$feedurl) = PLG_getItemInfo($type, $id, 'url,feed'); + list($itemurl, $feedurl) = PLG_getItemInfo($type, $id, 'url,feed'); $template = COM_newTemplate($_CONF['path_layout'] . 'admin/trackback'); - $template->set_file (array ('list' => 'pinglist.thtml', - 'item' => 'pingitem.thtml')); + $template->set_file(array('list' => 'pinglist.thtml', + 'item' => 'pingitem.thtml')); $template->set_var('lang_resend', $LANG_TRB['resend']); $template->set_var('lang_results', $LANG_TRB['ping_results']); - $result = DB_query ("SELECT ping_url,method,name,site_url FROM {$_TABLES['pingservice']} WHERE is_enabled = 1"); - $services = DB_numRows ($result); + $result = DB_query("SELECT ping_url,method,name,site_url FROM {$_TABLES['pingservice']} WHERE is_enabled = 1"); + $services = DB_numRows($result); if ($services > 0) { for ($i = 0; $i < $services; $i++) { - $A = DB_fetchArray ($result); + $A = DB_fetchArray($result); $resend = ''; if ($A['method'] == 'weblogUpdates.ping') { - $pinged = PNB_sendPing ($A['ping_url'], $_CONF['site_name'], - $_CONF['site_url'], $itemurl); - } else if ($A['method'] == 'weblogUpdates.extendedPing') { - $pinged = PNB_sendExtendedPing ($A['ping_url'], - $_CONF['site_name'], $_CONF['site_url'], $itemurl, - $feedurl); + $pinged = PNB_sendPing($A['ping_url'], $_CONF['site_name'], + $_CONF['site_url'], $itemurl); + } elseif ($A['method'] == 'weblogUpdates.extendedPing') { + $pinged = PNB_sendExtendedPing($A['ping_url'], + $_CONF['site_name'], $_CONF['site_url'], $itemurl, + $feedurl); } else { $pinged = $LANG_TRB['unknown_method'] . ': ' . $A['method']; } - if (empty ($pinged)) { + if (empty($pinged)) { $pinged = '' . $LANG_TRB['ping_success'] . ''; } else { $pinged = '' . $pinged . ''; @@ -348,58 +343,57 @@ function sendPings ($type, $id) $template->set_var('ping_result', $pinged); $template->set_var('resend', $resend); $template->set_var('alternate_row', - (($i + 1) % 2) == 0 ? 'row-even' : 'row-odd'); + (($i + 1) % 2) == 0 ? 'row-even' : 'row-odd'); $template->set_var('cssid', ($i % 2) + 1); - $template->parse ('ping_results', 'item', true); + $template->parse('ping_results', 'item', true); } } else { $template->set_var('ping_results', '' . - $LANG_TRB['no_services'] . ''); + $LANG_TRB['no_services'] . ''); } $template->set_var('gltoken_name', CSRF_TOKEN); $template->set_var('gltoken', SEC_createToken()); $template->parse('output', 'list'); - $retval .= $template->finish ($template->get_var ('output')); + $retval .= $template->finish($template->get_var('output')); return $retval; } /** -* Prepare a list of all links in a story/item so that we can ask the user -* which one to send the trackback to. -* -* @param string $type type of entry ('article' = story, etc.) -* @param string $id ID of that entry -* @param string $text text of that entry, to get the links from -* @return string formatted list of links -* -*/ -function prepareAutodetect ($type, $id, $text) + * Prepare a list of all links in a story/item so that we can ask the user + * which one to send the trackback to. + * + * @param string $type type of entry ('article' = story, etc.) + * @param string $id ID of that entry + * @param string $text text of that entry, to get the links from + * @return string formatted list of links + */ +function prepareAutodetect($type, $id, $text) { global $_CONF, $LANG_TRB; $retval = ''; $baseurl = $_CONF['site_admin_url'] - . '/trackback.php?mode=autodetect&id=' . $id; + . '/trackback.php?mode=autodetect&id=' . $id; if ($type != 'article') { $baseurl .= '&type' . $type; } // extract all links from the text - preg_match_all ("/]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\/a>/i", $text, - $matches); - $numlinks = count ($matches[0]); + preg_match_all("/]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\/a>/i", $text, + $matches); + $numlinks = count($matches[0]); if ($numlinks == 1) { // skip the link selection when there's only one link in the story - $url = urlencode ($matches[1][0]); + $url = urlencode($matches[1][0]); $link = $baseurl .= '&url=' . $url; COM_redirect($link); } elseif ($numlinks > 0) { $template = COM_newTemplate($_CONF['path_layout'] . 'admin/trackback'); $template->set_file(array( 'list' => 'autodetectlist.thtml', - 'item' => 'autodetectitem.thtml' + 'item' => 'autodetectitem.thtml', )); $url = $_CONF['site_admin_url'] . '/trackback.php?mode=new&id=' . $id; @@ -407,22 +401,22 @@ function prepareAutodetect ($type, $id, $text) $url .= '&type=' . $type; } $template->set_var('lang_trackback_explain', - sprintf ($LANG_TRB['trackback_explain'], $url)); + sprintf($LANG_TRB['trackback_explain'], $url)); for ($i = 0; $i < $numlinks; $i++) { - $url = urlencode ($matches[1][$i]); + $url = urlencode($matches[1][$i]); $link = $baseurl .= '&url=' . $url; $template->set_var('autodetect_link', $link); $template->set_var('link_text', $matches[2][$i]); $template->set_var('link_url', $matches[1][$i]); $template->set_var('alternate_row', - (($i + 1) % 2) == 0 ? 'row-even' : 'row-odd'); + (($i + 1) % 2) == 0 ? 'row-even' : 'row-odd'); $template->set_var('cssid', ($i % 2) + 1); - $template->parse ('autodetect_items', 'item', true); + $template->parse('autodetect_items', 'item', true); } - $template->parse ('output', 'list'); - $retval .= $template->finish ($template->get_var ('output')); + $template->parse('output', 'list'); + $retval .= $template->finish($template->get_var('output')); } else { $retval .= $LANG_TRB['no_links_trackback']; } @@ -431,11 +425,10 @@ function prepareAutodetect ($type, $id, $text) } /** -* Display a list of all weblog directory services in the system -* -* @return string HTML for the list -* -*/ + * Display a list of all weblog directory services in the system + * + * @return string HTML for the list + */ function listServices() { global $LANG_ADMIN, $LANG_TRB, $_CONF, $_IMAGE_TYPE, $_TABLES; @@ -450,19 +443,19 @@ function listServices() array('text' => $LANG_TRB['service'], 'field' => 'name', 'sort' => true), array('text' => $LANG_TRB['ping_method'], 'field' => 'method', 'sort' => true), array('text' => $LANG_TRB['service_ping_url'], 'field' => 'ping_url', 'sort' => true), - array('text' => $LANG_ADMIN['enabled'], 'field' => 'is_enabled', 'sort' => false) + array('text' => $LANG_ADMIN['enabled'], 'field' => 'is_enabled', 'sort' => false), ); $defsort_arr = array('field' => 'name', 'direction' => 'asc'); - $menu_arr = array ( - array('url' => $_CONF['site_admin_url'] . '/trackback.php?mode=editservice', + $menu_arr = array( + array('url' => $_CONF['site_admin_url'] . '/trackback.php?mode=editservice', 'text' => $LANG_ADMIN['create_new']), - array('url' => $_CONF['site_admin_url'], + array('url' => $_CONF['site_admin_url'], 'text' => $LANG_ADMIN['admin_home'])); $retval .= COM_startBlock($LANG_TRB['services_headline'], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= ADMIN_createMenu( $menu_arr, @@ -473,96 +466,95 @@ function listServices() $text_arr = array( 'has_extras' => true, 'form_url' => $_CONF['site_admin_url'] . '/trackback.php', - 'help_url' => getHelpUrl() . '#ping' + 'help_url' => getHelpUrl() . '#ping', ); $query_arr = array( - 'table' => 'pingservice', - 'sql' => "SELECT * FROM {$_TABLES['pingservice']} WHERE 1=1", - 'query_fields' => array('name', 'ping_url'), + 'table' => 'pingservice', + 'sql' => "SELECT * FROM {$_TABLES['pingservice']} WHERE 1=1", + 'query_fields' => array('name', 'ping_url'), 'default_filter' => "", - 'no_data' => $LANG_TRB['no_services'] + 'no_data' => $LANG_TRB['no_services'], ); // this is a dummy variable so we know the form has been used if all services // should be disabled in order to disable the last one. $form_arr = array( 'top' => '', + . $token . '"' . XHTML . '>', 'bottom' => '' + . XHTML . '>', ); $retval .= ADMIN_list('pingservice', 'ADMIN_getListField_trackback', - $header_arr, $text_arr, $query_arr, $defsort_arr, - '', $token, '', $form_arr); + $header_arr, $text_arr, $query_arr, $defsort_arr, + '', $token, '', $form_arr); $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); if ($_CONF['trackback_enabled']) { - $retval .= freshTrackback (); + $retval .= freshTrackback(); } if ($_CONF['pingback_enabled']) { - $retval .= freshPingback (); + $retval .= freshPingback(); } return $retval; } /** -* Display weblog directory service editor -* -* @param int $pid ID of the service or 0 for new service -* @param string $msg an error message to display -* @param string $new_name name of the service -* @param string $new_site_url URL of the service's site -* @param string $new_ping_url URL to ping at the service -* @param string $new_method ping method to use -* @param int $new_enabled service is enabled (1) / disabled (0) -* @return string HTML for the editor -* -*/ -function editServiceForm ($pid, $msg = '', $new_name = '', $new_site_url = '', $new_ping_url = '', $new_method = '', $new_enabled = -1) + * Display weblog directory service editor + * + * @param int $pid ID of the service or 0 for new service + * @param string $msg an error message to display + * @param string $new_name name of the service + * @param string $new_site_url URL of the service's site + * @param string $new_ping_url URL to ping at the service + * @param string $new_method ping method to use + * @param int $new_enabled service is enabled (1) / disabled (0) + * @return string HTML for the editor + */ +function editServiceForm($pid, $msg = '', $new_name = '', $new_site_url = '', $new_ping_url = '', $new_method = '', $new_enabled = -1) { global $_CONF, $_TABLES, $LANG_TRB, $LANG_ADMIN, $MESSAGE; $retval = ''; if ($pid > 0) { - $result = DB_query ("SELECT * FROM {$_TABLES['pingservice']} WHERE pid = '$pid'"); - $A = DB_fetchArray ($result); + $result = DB_query("SELECT * FROM {$_TABLES['pingservice']} WHERE pid = '$pid'"); + $A = DB_fetchArray($result); } else { $A['is_enabled'] = 1; $A['method'] = 'weblogUpdates.ping'; } - if (!empty ($new_name)) { + if (!empty($new_name)) { $A['name'] = $new_name; } - if (!empty ($new_site_url)) { + if (!empty($new_site_url)) { $A['site_url'] = $new_site_url; } - if (!empty ($new_ping_url)) { + if (!empty($new_ping_url)) { $A['ping_url'] = $new_ping_url; } - if (!empty ($new_method)) { + if (!empty($new_method)) { $A['method'] = $new_method; } if ($new_enabled >= 0) { $A['is_enabled'] = $new_enabled; } - if (!empty ($msg)) { - $retval .= showTrackbackMessage ('Error', $msg); + if (!empty($msg)) { + $retval .= showTrackbackMessage('Error', $msg); } $token = SEC_createToken(); $retval .= COM_startBlock($LANG_TRB['edit_service'], getHelpUrl() . '#ping', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= SEC_getTokenExpiryNotice($token); $template = COM_newTemplate($_CONF['path_layout'] . 'admin/trackback'); - $template->set_file (array ('editor' => 'serviceeditor.thtml')); + $template->set_file(array('editor' => 'serviceeditor.thtml')); $template->set_var('max_url_length', 255); $template->set_var('method_ping', 'weblogUpdates.ping'); $template->set_var('method_ping_extended', 'weblogUpdates.extendedPing'); @@ -579,12 +571,12 @@ function editServiceForm ($pid, $msg = '', $new_name = '', $new_site_url = '', $ if ($pid > 0) { $delbutton = ''; + . '" name="servicemode[2]"%s' . XHTML . '>'; $jsconfirm = ' onclick="return confirm(\'' . $MESSAGE[76] . '\');"'; $template->set_var('delete_option', - sprintf ($delbutton, $jsconfirm)); + sprintf($delbutton, $jsconfirm)); $template->set_var('delete_option_no_confirmation', - sprintf ($delbutton, '')); + sprintf($delbutton, '')); $template->set_var('allow_delete', true); $template->set_var('lang_delete', $LANG_ADMIN['delete']); @@ -593,22 +585,22 @@ function editServiceForm ($pid, $msg = '', $new_name = '', $new_site_url = '', $ $template->set_var('delete_option', ''); } - if (isset ($A['pid'])) { + if (isset($A['pid'])) { $template->set_var('service_id', $A['pid']); } else { $template->set_var('service_id', ''); } - if (isset ($A['name'])) { + if (isset($A['name'])) { $template->set_var('service_name', $A['name']); } else { $template->set_var('service_name', ''); } - if (isset ($A['site_url'])) { + if (isset($A['site_url'])) { $template->set_var('service_site_url', $A['site_url']); } else { $template->set_var('service_site_url', ''); } - if (isset ($A['ping_url'])) { + if (isset($A['ping_url'])) { $template->set_var('service_ping_url', $A['ping_url']); } else { $template->set_var('service_ping_url', ''); @@ -628,28 +620,27 @@ function editServiceForm ($pid, $msg = '', $new_name = '', $new_site_url = '', $ $template->set_var('gltoken_name', CSRF_TOKEN); $template->set_var('gltoken', $token); - $template->parse ('output', 'editor'); - $retval .= $template->finish ($template->get_var ('output')); + $template->parse('output', 'editor'); + $retval .= $template->finish($template->get_var('output')); - $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); + $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $LANG_TRB['edit_service'])); return $retval; } /** -* Save information of a weblog directory service -* -* @param int $pid ID of service or 0 for new entry -* @param string $name name of the service -* @param string $site_url Homepage URL of the service -* @param string $ping_url URL to ping at the service -* @param string $method method used for the ping -* @param string $enabled 'on' when enabled -* @return string HTML redirect or service editor -* -*/ -function saveService ($pid, $name, $site_url, $ping_url, $method, $enabled) + * Save information of a weblog directory service + * + * @param int $pid ID of service or 0 for new entry + * @param string $name name of the service + * @param string $site_url Homepage URL of the service + * @param string $ping_url URL to ping at the service + * @param string $method method used for the ping + * @param string $enabled 'on' when enabled + * @return string HTML redirect or service editor + */ +function saveService($pid, $name, $site_url, $ping_url, $method, $enabled) { global $_CONF, $_TABLES, $LANG_TRB; @@ -660,56 +651,55 @@ function saveService ($pid, $name, $site_url, $ping_url, $method, $enabled) $method = 'weblogUpdates.ping'; } - $name = strip_tags (COM_stripslashes ($name)); - $site_url = strip_tags (COM_stripslashes ($site_url)); - $ping_url = strip_tags (COM_stripslashes ($ping_url)); + $name = GLText::stripTags(COM_stripslashes($name)); + $site_url = GLText::stripTags(COM_stripslashes($site_url)); + $ping_url = GLText::stripTags(COM_stripslashes($ping_url)); $errormsg = ''; - if (empty ($name)) { + if (empty($name)) { $errormsg = $LANG_TRB['error_site_name']; } else { // all URLs must start with http: or https: - $parts = explode (':', $site_url); + $parts = explode(':', $site_url); if (($parts[0] != 'http') && ($parts[0] != 'https')) { $errormsg = $LANG_TRB['error_site_url']; } else { - $parts = explode (':', $ping_url); + $parts = explode(':', $ping_url); if (($parts[0] != 'http') && ($parts[0] != 'https')) { $errormsg = $LANG_TRB['error_ping_url']; } } } - if (!empty ($errormsg)) { - return editServiceForm ($pid, $errormsg, $name, $site_url, $ping_url, - $method, $enabled); + if (!empty($errormsg)) { + return editServiceForm($pid, $errormsg, $name, $site_url, $ping_url, + $method, $enabled); } - $name = DB_escapeString($name); + $name = DB_escapeString($name); $site_url = DB_escapeString($site_url); $ping_url = DB_escapeString($ping_url); if ($pid > 0) { - DB_save ($_TABLES['pingservice'], - 'pid,name,site_url,ping_url,method,is_enabled', - "'$pid','$name','$site_url','$ping_url','$method','$enabled'"); + DB_save($_TABLES['pingservice'], + 'pid,name,site_url,ping_url,method,is_enabled', + "'$pid','$name','$site_url','$ping_url','$method','$enabled'"); } else { DB_save($_TABLES['pingservice'], - 'name,site_url,ping_url,method,is_enabled', - "'$name','$site_url','$ping_url','$method','$enabled'"); + 'name,site_url,ping_url,method,is_enabled', + "'$name','$site_url','$ping_url','$method','$enabled'"); } COM_redirect($_CONF['site_admin_url'] . '/trackback.php?mode=listservice&msg=65'); } /** -* Toggle status of a ping service from enabled to disabled and back -* -* @param array $enabledservices array containing ids of enabled services -* @param array $visibleservices array containing ids of visible services -* @return void -* -*/ + * Toggle status of a ping service from enabled to disabled and back + * + * @param array $enabledservices array containing ids of enabled services + * @param array $visibleservices array containing ids of visible services + * @return void + */ function changeServiceStatus($enabledservices, $visibleservices) { global $_TABLES; @@ -718,24 +708,23 @@ function changeServiceStatus($enabledservices, $visibleservices) // disable services $in = implode(',', $disabled); - if (! empty($in)) { + if (!empty($in)) { $sql = "UPDATE {$_TABLES['pingservice']} SET is_enabled = 0 WHERE pid IN ($in)"; DB_query($sql); } // enable services $in = implode(',', $enabledservices); - if (! empty($in)) { + if (!empty($in)) { $sql = "UPDATE {$_TABLES['pingservice']} SET is_enabled = 1 WHERE pid IN ($in)"; DB_query($sql); } } /** -* Display a note about how trackbacks are supposed to be used -* -*/ -function freshTrackback () + * Display a note about how trackbacks are supposed to be used + */ +function freshTrackback() { global $_CONF, $LANG_TRB; @@ -744,18 +733,17 @@ function freshTrackback () $freshurl = $_CONF['site_admin_url'] . '/trackback.php?mode=fresh'; $retval .= COM_startBlock($LANG_TRB['trackback'], getHelpUrl(), - COM_getBlockTemplate('_admin_block', 'header')); - $retval .= sprintf ($LANG_TRB['trackback_note'], $freshurl); + COM_getBlockTemplate('_admin_block', 'header')); + $retval .= sprintf($LANG_TRB['trackback_note'], $freshurl); $retval .= COM_endBlock(); return $retval; } /** -* Display a note about how pingbacks are supposed to be used -* -*/ -function freshPingback () + * Display a note about how pingbacks are supposed to be used + */ +function freshPingback() { global $_CONF, $LANG_TRB; @@ -764,7 +752,7 @@ function freshPingback () $freshurl = $_CONF['site_admin_url'] . '/trackback.php?mode=freepb'; $retval .= COM_startBlock($LANG_TRB['pingback'], getHelpUrl(), - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= sprintf($LANG_TRB['pingback_note'], $freshurl); $retval .= COM_endBlock(); @@ -772,11 +760,10 @@ function freshPingback () } /** -* Get URL of the help file (trackback.html) -* -* @return string full URL of trackback.html -* -*/ + * Get URL of the help file (trackback.html) + * + * @return string full URL of trackback.html + */ function getHelpUrl() { global $_CONF; @@ -799,185 +786,162 @@ function getHelpUrl() $display = ''; $mode = ''; if ($_CONF['ping_enabled'] && isset($_POST['serviceChanger']) && SEC_checkToken()) { - $enabledservices = array(); - if (isset($_POST['enabledservices'])) { - $enabledservices = $_POST['enabledservices']; - } - $visibleservices = array(); - if (isset($_POST['visibleservices'])) { - $visibleservices = $_POST['visibleservices']; - } + $enabledservices = Geeklog\Input::post('enabledservices', array()); + $visibleservices = Geeklog\Input::post('visibleservices', array()); changeServiceStatus($enabledservices, $visibleservices); } -if (isset ($_POST['mode']) && is_array ($_POST['mode'])) { - $mode = $_POST['mode']; - if (isset ($mode[0])) { +if (isset($_POST['mode']) && is_array($_POST['mode'])) { + $mode = Geeklog\Input::post('mode'); + if (isset($mode[0])) { $mode = 'send'; - } else if (isset ($mode[1])) { + } elseif (isset($mode[1])) { $mode = 'preview'; - } else if (isset ($mode[2])) { + } elseif (isset($mode[2])) { $mode = 'sendpingback'; } else { $mode = ''; } -} else if (isset ($_POST['servicemode']) && is_array ($_POST['servicemode'])) { - $mode = $_POST['servicemode']; - if (isset ($mode[0])) { +} elseif (isset($_POST['servicemode']) && is_array($_POST['servicemode'])) { + $mode = Geeklog\Input::post('servicemode'); + if (isset($mode[0])) { $mode = 'saveservice'; - } else if (isset ($mode[2])) { + } elseif (isset($mode[2])) { $mode = 'deleteservice'; } else { // $mode[1], Cancel $mode = ''; } } else { if (isset($_REQUEST['mode'])) { - $mode = COM_applyFilter ($_REQUEST['mode']); + $mode = Geeklog\Input::fRequest('mode'); } - } // sanity check for modes, depending on enabled features ... -if (!$_CONF['ping_enabled']) { - if (($mode == 'deleteservice') || ($mode == 'saveservice') || - ($mode == 'editservice')) { - $mode = ''; - } +if (!$_CONF['ping_enabled'] && in_array($mode, array('deleteservice', 'saveservice', 'editservice'))) { + $mode = ''; } -if (!$_CONF['trackback_enabled']) { - if (($mode == 'send') || ($mode == 'new') || ($mode == 'pretrackback') || - ($mode == 'autodetect') || ($mode == 'preview')) { - $mode = ''; - } +if (!$_CONF['trackback_enabled'] && + in_array($mode, array('send', 'new', 'pretrackback', 'autodetect', 'preview')) +) { + $mode = ''; } -if (!$_CONF['pingback_enabled']) { - if ($mode == 'pingback') { - $mode = ''; - } +if (!$_CONF['pingback_enabled'] && ($mode === 'pingback')) { + $mode = ''; } -if (!$_CONF['trackback_enabled'] && !$_CONF['pingback_enabled']) { - if ($mode == 'delete') { - $mode = ''; - } +if (!$_CONF['trackback_enabled'] && !$_CONF['pingback_enabled'] && ($mode === 'delete')) { + $mode = ''; } // default action depends on which features are enabled ... -if (empty ($mode)) { +if (empty($mode)) { if ($_CONF['ping_enabled']) { $mode = 'listservice'; - } else if ($_CONF['trackback_enabled']) { + } elseif ($_CONF['trackback_enabled']) { $mode = 'fresh'; - } else if ($_CONF['pinback_enabled']) { + } elseif ($_CONF['pinback_enabled']) { $mode = 'freepb'; } } -if (($mode == 'delete') && SEC_checkToken()) { - $cid = COM_applyFilter($_REQUEST['cid'], true); +if (($mode === 'delete') && SEC_checkToken()) { + $cid = (int) Geeklog\Input::fRequest('cid'); if ($cid > 0) { $display = deleteTrackbackComment($cid); } else { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } -} elseif ($mode == 'send') { - $target = COM_applyFilter ($_POST['target']); - $url = COM_applyFilter ($_POST['url']); - $title = COM_stripslashes ($_POST['title']); - $excerpt = COM_stripslashes ($_POST['excerpt']); - $blog = COM_stripslashes ($_POST['blog_name']); - - if (empty ($target)) { - $display .= showTrackbackMessage ($LANG_TRB['target_missing'], - $LANG_TRB['target_required']); - $display .= trackback_editor ($target, $url, $title, $excerpt, $blog); - } else if (empty ($url)) { - $display .= showTrackbackMessage ($LANG_TRB['url_missing'], - $LANG_TRB['url_required']); - $display .= trackback_editor ($target, $url, $title, $excerpt, $blog); +} elseif ($mode === 'send') { + $target = Geeklog\Input::fPost('target'); + $url = Geeklog\Input::fPost('url'); + $title = Geeklog\Input::post('title'); + $excerpt = Geeklog\Input::post('excerpt'); + $blog = Geeklog\Input::post('blog_name'); + if (empty($target)) { + $display .= showTrackbackMessage($LANG_TRB['target_missing'], + $LANG_TRB['target_required']); + $display .= trackback_editor($target, $url, $title, $excerpt, $blog); + } elseif (empty($url)) { + $display .= showTrackbackMessage($LANG_TRB['url_missing'], + $LANG_TRB['url_required']); + $display .= trackback_editor($target, $url, $title, $excerpt, $blog); } elseif (SEC_checkToken()) { // prepare for send - $send_title = TRB_filterTitle ($title); - $send_excerpt = TRB_filterExcerpt ($excerpt); - $send_blog = TRB_filterBlogname ($blog); - - $result = TRB_sendTrackbackPing ($target, $url, $send_title, - $send_excerpt, $send_blog); + $send_title = TRB_filterTitle($title); + $send_excerpt = TRB_filterExcerpt($excerpt); + $send_blog = TRB_filterBlogname($blog); + $result = TRB_sendTrackbackPing($target, $url, $send_title, $send_excerpt, $send_blog); if ($result === true) { - $display .= COM_showMessage (64); - $display .= trackback_editor (); + $display .= COM_showMessage(64); + $display .= trackback_editor(); } else { $message = '

' . $LANG_TRB['send_error_details'] - . '' - . htmlspecialchars ($result) . '

'; + . '' + . htmlspecialchars($result) . '

'; $display .= showTrackbackMessage($LANG_TRB['send_error'], $message); // display editor with the same contents again - $display .= trackback_editor ($target, $url, $title, $excerpt, $blog); + $display .= trackback_editor($target, $url, $title, $excerpt, $blog); } } $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_TRB['trackback'])); -} else if ($mode == 'new') { - $type = COM_applyFilter ($_REQUEST['type']); - if (empty ($type)) { +} elseif ($mode === 'new') { + $type = Geeklog\Input::fRequest('type'); + if (empty($type)) { $type = 'article'; } - $id = COM_applyFilter ($_REQUEST['id']); - if (!empty ($id)) { - list($url, $title, $excerpt) = PLG_getItemInfo($type, $id, - 'url,title,excerpt'); - $excerpt = trim (strip_tags ($excerpt)); - $blog = TRB_filterBlogname ($_CONF['site_name']); - - $display .= trackback_editor ($target, $url, $title, $excerpt, $blog); + $id = Geeklog\Input::fRequest('id'); + if (!empty($id)) { + list($url, $title, $excerpt) = PLG_getItemInfo($type, $id, 'url,title,excerpt'); + $excerpt = trim(GLText::stripTags($excerpt)); + $blog = TRB_filterBlogname($_CONF['site_name']); + + $display .= trackback_editor($target, $url, $title, $excerpt, $blog); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_TRB['trackback'])); } else { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } -} elseif ($mode == 'pingback') { - $type = COM_applyFilter ($_REQUEST['type']); - if (empty ($type)) { +} elseif ($mode === 'pingback') { + $type = Geeklog\Input::fRequest('type'); + if (empty($type)) { $type = 'article'; } - $id = COM_applyFilter ($_REQUEST['id']); - if (!empty ($id)) { - $display .= COM_startBlock ($LANG_TRB['pingback_results']) - . sendPingbacks ($type, $id) - . COM_endBlock (); + $id = Geeklog\Input::fRequest('id'); + if (!empty($id)) { + $display .= COM_startBlock($LANG_TRB['pingback_results']) + . sendPingbacks($type, $id) + . COM_endBlock(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_TRB['pingback'])); } else { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } -} elseif ($mode == 'sendall') { - $id = COM_applyFilter ($_REQUEST['id']); - if (empty ($id)) { +} elseif ($mode === 'sendall') { + $id = Geeklog\Input::fRequest('id'); + if (empty($id)) { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } - $type = ''; - if (isset ($_REQUEST['type'])) { - $type = COM_applyFilter ($_REQUEST['type']); - } - if (empty ($type)) { + $type = Geeklog\Input::fRequest('type', ''); + if (empty($type)) { $type = 'article'; } - $pingback_sent = isset ($_REQUEST['pingback_sent']); - $ping_sent = isset ($_REQUEST['ping_sent']); - $trackback_sent = isset ($_REQUEST['trackback_sent']); + $pingback_sent = isset($_REQUEST['pingback_sent']); + $ping_sent = isset($_REQUEST['ping_sent']); + $trackback_sent = isset($_REQUEST['trackback_sent']); $pingresult = ''; - if (isset ($_POST['what']) && is_array ($_POST['what'])) { - $what = $_POST['what']; - if (isset ($what[0])) { // Pingback - $pingresult = sendPingbacks ($type, $id); + if (isset($_POST['what']) && is_array($_POST['what'])) { + $what = Geeklog\Input::post('what'); + if (isset($what[0])) { // Pingback + $pingresult = sendPingbacks($type, $id); $pingback_sent = true; - } else if (isset ($what[1])) { // Ping - $pingresult = sendPings ($type, $id); + } elseif (isset($what[1])) { // Ping + $pingresult = sendPings($type, $id); $ping_sent = true; - } else if (isset ($what[2])) { // Trackback - $url = $_CONF['site_admin_url'] - . '/trackback.php?mode=pretrackback&id=' . $id; - if ($type != 'article') { + } elseif (isset($what[2])) { // Trackback + $url = $_CONF['site_admin_url'] . '/trackback.php?mode=pretrackback&id=' . $id; + if ($type !== 'article') { $url .= '&type=' . $type; } COM_redirect($url); @@ -986,26 +950,22 @@ function getHelpUrl() $title = PLG_getItemInfo($type, $id, 'title'); - $display .= COM_startBlock (sprintf ($LANG_TRB['send_pings_for'], $title)); + $display .= COM_startBlock(sprintf($LANG_TRB['send_pings_for'], $title)); $template = COM_newTemplate($_CONF['path_layout'] . 'admin/trackback'); - $template->set_file (array ('form' => 'pingform.thtml')); - $template->set_var('php_self', $_CONF['site_admin_url'] - . '/trackback.php'); + $template->set_file(array('form' => 'pingform.thtml')); + $template->set_var('php_self', $_CONF['site_admin_url'] . '/trackback.php'); $template->set_var('lang_may_take_a_while', $LANG_TRB['may_take_a_while']); $template->set_var('lang_ping_explain', $LANG_TRB['ping_all_explain']); - $template->set_var('ping_results', $pingresult); if ($_CONF['pingback_enabled']) { if (!$pingback_sent) { - $template->set_var('lang_pingback_button', - $LANG_TRB['pingback_button']); - $template->set_var('lang_pingback_short', - $LANG_TRB['pingback_short']); + $template->set_var('lang_pingback_button', $LANG_TRB['pingback_button']); + $template->set_var('lang_pingback_short', $LANG_TRB['pingback_short']); $button = ''; + . $LANG_TRB['pingback_button'] . '" class="uk-form">' + . $LANG_TRB['pingback_button'] . ''; $template->set_var('pingback_button', $button); } } else { @@ -1016,8 +976,8 @@ function getHelpUrl() $template->set_var('lang_ping_button', $LANG_TRB['ping_button']); $template->set_var('lang_ping_short', $LANG_TRB['ping_short']); $button = ''; + . $LANG_TRB['ping_button'] . '" class="uk-form">' + . $LANG_TRB['ping_button'] . ''; $template->set_var('ping_button', $button); } } else { @@ -1025,13 +985,11 @@ function getHelpUrl() } if ($_CONF['trackback_enabled']) { if (!$trackback_sent) { - $template->set_var('lang_trackback_button', - $LANG_TRB['trackback_button']); - $template->set_var('lang_trackback_short', - $LANG_TRB['trackback_short']); + $template->set_var('lang_trackback_button', $LANG_TRB['trackback_button']); + $template->set_var('lang_trackback_short', $LANG_TRB['trackback_short']); $button = ''; + . $LANG_TRB['trackback_button'] . '" class="uk-form">' + . $LANG_TRB['trackback_button'] . ''; $template->set_var('trackback_button', $button); } } else { @@ -1053,165 +1011,138 @@ function getHelpUrl() $hidden .= ''; $template->set_var('hidden_input_fields', $hidden); - $template->parse ('output', 'form'); - $display .= $template->finish ($template->get_var ('output')); + $template->parse('output', 'form'); + $display .= $template->finish($template->get_var('output')); - $display .= COM_endBlock (); + $display .= COM_endBlock(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_TRB['send_pings'])); -} else if ($mode == 'pretrackback') { - $id = COM_applyFilter ($_REQUEST['id']); - if (empty ($id)) { +} elseif ($mode === 'pretrackback') { + $id = Geeklog\Input::fRequest('id'); + if (empty($id)) { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } - $type = ''; - if (isset ($_REQUEST['type'])) { - $type = COM_applyFilter ($_REQUEST['type']); - } - if (empty ($type)) { + $type = Geeklog\Input::fRequest('type'); + if (empty($type)) { $type = 'article'; } $fulltext = PLG_getItemInfo($type, $id, 'description'); $display .= COM_startBlock($LANG_TRB['select_url'], - getHelpUrl() . '#trackback') - . prepareAutodetect($type, $id, $fulltext) - . COM_endBlock(); + getHelpUrl() . '#trackback') + . prepareAutodetect($type, $id, $fulltext) + . COM_endBlock(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_TRB['trackback'])); -} else if ($mode == 'autodetect') { - $id = COM_applyFilter ($_REQUEST['id']); - $url = $_REQUEST['url']; - if (empty ($id) || empty ($url)) { +} elseif ($mode === 'autodetect') { + $id = Geeklog\Input::fRequest('id'); + $url = Geeklog\Input::request('url'); + if (empty($id) || empty($url)) { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } - $type = ''; - if (isset ($_REQUEST['type'])) { - $type = COM_applyFilter ($_REQUEST['type']); - } - if (empty ($type)) { + + $type = Geeklog\Input::fRequest('type'); + if (empty($type)) { $type = 'article'; } - $trackbackUrl = TRB_detectTrackbackUrl ($url); + $trackbackUrl = TRB_detectTrackbackUrl($url); - list($url, $title, $excerpt) = PLG_getItemInfo($type, $id, - 'url,title,excerpt'); - $excerpt = trim (strip_tags ($excerpt)); - $blog = TRB_filterBlogname ($_CONF['site_name']); + list($url, $title, $excerpt) = PLG_getItemInfo($type, $id, 'url,title,excerpt'); + $excerpt = trim(GLText::stripTags($excerpt)); + $blog = TRB_filterBlogname($_CONF['site_name']); if ($trackbackUrl === false) { - $display .= showTrackbackMessage ($LANG_TRB['not_found'], - $LANG_TRB['autodetect_failed']); + $display .= showTrackbackMessage($LANG_TRB['not_found'], $LANG_TRB['autodetect_failed']); } - $display .= trackback_editor ($trackbackUrl, $url, $title, $excerpt, $blog); + $display .= trackback_editor($trackbackUrl, $url, $title, $excerpt, $blog); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_TRB['trackback'])); -} else if (($mode == 'fresh') || ($mode == 'preview')) { +} elseif (($mode === 'fresh') || ($mode === 'preview')) { $display .= COM_showMessageFromParameter(); - $target = ''; - if (isset ($_REQUEST['target'])) { - $target = COM_applyFilter ($_REQUEST['target']); - } - $url = ''; - if (isset ($_REQUEST['url'])) { - $url = COM_applyFilter ($_REQUEST['url']); - } - $title = ''; - if (isset ($_REQUEST['title'])) { - $title = COM_stripslashes ($_REQUEST['title']); - } - $excerpt = ''; - if (isset ($_REQUEST['excerpt'])) { - $excerpt = COM_stripslashes ($_REQUEST['excerpt']); - } - $blog = ''; - if (isset ($_REQUEST['blog_name'])) { - $blog = COM_stripslashes ($_REQUEST['blog_name']); - } + $target = Geeklog\Input::fRequest('target', ''); + $url = Geeklog\Input::fRequest('url', ''); + $title = Geeklog\Input::fRequest('title', ''); + $excerpt = Geeklog\Input::request('excerpt', ''); + $blog = Geeklog\Input::request('blog_name', ''); - if (isset ($_REQUEST['id']) && isset ($_REQUEST['type'])) { - $id = COM_applyFilter ($_REQUEST['id']); - $type = COM_applyFilter ($_REQUEST['type']); - if (!empty ($id) && !empty ($type)) { - list($newurl, $newtitle, $newexcerpt) = - PLG_getItemInfo($type, $id, 'url,title,excerpt'); - $newexcerpt = trim (strip_tags ($newexcerpt)); + if (isset($_REQUEST['id'], $_REQUEST['type'])) { + $id = Geeklog\Input::fRequest('id', ''); + $type = Geeklog\Input::fRequest('type', ''); + if (!empty($id) && !empty($type)) { + list($newurl, $newtitle, $newexcerpt) = PLG_getItemInfo($type, $id, 'url,title,excerpt'); + $newexcerpt = trim(GLText::stripTags($newexcerpt)); - if (empty ($url) && !empty ($newurl)) { + if (empty($url) && !empty($newurl)) { $url = $newurl; } - if (empty ($title) && !empty ($newtitle)) { + if (empty($title) && !empty($newtitle)) { $title = $newtitle; } - if (empty ($newexcerpt) && !empty ($newexcerpt)) { + if (empty($newexcerpt) && !empty($newexcerpt)) { $excerpt = $newexcerpt; } - if (empty ($blog)) { - $blog = TRB_filterBlogname ($_CONF['site_name']); + if (empty($blog)) { + $blog = TRB_filterBlogname($_CONF['site_name']); } } } - if (($mode == 'preview') && empty ($url)) { - $display .= showTrackbackMessage ($LANG_TRB['url_missing'], - $LANG_TRB['url_required']); + if (($mode === 'preview') && empty($url)) { + $display .= showTrackbackMessage($LANG_TRB['url_missing'], $LANG_TRB['url_required']); } - $display .= trackback_editor ($target, $url, $title, $excerpt, $blog); + $display .= trackback_editor($target, $url, $title, $excerpt, $blog); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_TRB['trackback'])); -} elseif (($mode == 'deleteservice') && SEC_checkToken()) { - $pid = COM_applyFilter ($_POST['service_id'], true); +} elseif (($mode === 'deleteservice') && SEC_checkToken()) { + $pid = (int) Geeklog\Input::fPost('service_id', 0); if ($pid > 0) { DB_delete($_TABLES['pingservice'], 'pid', $pid); COM_redirect($_CONF['site_admin_url'] . '/trackback.php?mode=listservice&msg=66'); } else { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } -} elseif (($mode == 'saveservice') && SEC_checkToken()) { - $is_enabled = ''; - if (isset($_POST['is_enabled'])) { - $is_enabled = $_POST['is_enabled']; - } - $display .= saveService(COM_applyFilter($_POST['service_id'], true), - $_POST['service_name'], $_POST['service_site_url'], - $_POST['service_ping_url'], $_POST['method'], - $is_enabled); -} else if ($mode == 'editservice') { - $service_id = 0; - if (isset ($_GET['service_id'])) { - $service_id = COM_applyFilter ($_GET['service_id'], true); - } - $pid = COM_applyFilter ($service_id, true); +} elseif (($mode === 'saveservice') && SEC_checkToken()) { + $is_enabled = Geeklog\Input::post('is_enabled', ''); + $display .= saveService( + (int) Geeklog\Input::fPost('service_id'), + Geeklog\Input::post('service_name'), + Geeklog\Input::post('service_site_url'), + Geeklog\Input::post('service_ping_url'), + Geeklog\Input::post('method'), + $is_enabled + ); +} elseif ($mode === 'editservice') { + $service_id = (int) Geeklog\Input::fGet('service_id', 0); + $pid = COM_applyFilter($service_id, true); - $display .= editServiceForm ($pid); -} else if ($mode == 'listservice') { + $display .= editServiceForm($pid); +} elseif ($mode === 'listservice') { $display .= COM_showMessageFromParameter(); $display .= listServices(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_TRB['services_headline'])); -} else if ($mode == 'freepb') { +} elseif ($mode === 'freepb') { $display .= COM_showMessageFromParameter(); - $display .= pingbackForm (); + $display .= pingbackForm(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_TRB['pingback'])); -} else if ($mode == 'sendpingback') { - $target = COM_applyFilter ($_POST['target']); - if (empty ($target)) { - $display .= showTrackbackMessage ($LANG_TRB['pbtarget_missing'], - $LANG_TRB['pbtarget_required']); +} elseif ($mode === 'sendpingback') { + $target = Geeklog\Input::fPost('target'); + if (empty($target)) { + $display .= showTrackbackMessage($LANG_TRB['pbtarget_missing'], $LANG_TRB['pbtarget_required']); } elseif (SEC_checkToken()) { - $result = PNB_sendPingback ($_CONF['site_url'], $target); - if (empty ($result)) { - $display .= COM_showMessage (74); + $result = PNB_sendPingback($_CONF['site_url'], $target); + if (empty($result)) { + $display .= COM_showMessage(74); $target = ''; } else { $message = '

' . $LANG_TRB['pb_error_details'] . '' - . '' - . htmlspecialchars ($result) . '

'; - $display .= showTrackbackMessage ($LANG_TRB['send_error'], $message); + . '' + . htmlspecialchars($result) . '

'; + $display .= showTrackbackMessage($LANG_TRB['send_error'], $message); } } - $display .= pingbackForm ($target); + $display .= pingbackForm($target); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_TRB['pingback'])); } else { COM_redirect($_CONF['site_admin_url'] . '/index.php'); diff --git a/public_html/admin/user.php b/public_html/admin/user.php index 03b704b6c..249b2363d 100644 --- a/public_html/admin/user.php +++ b/public_html/admin/user.php @@ -2,7 +2,7 @@ /* Reminder: always indent with 4 spaces (no tabs). */ // +---------------------------------------------------------------------------+ -// | Geeklog 1.8 | +// | Geeklog 2.1 | // +---------------------------------------------------------------------------+ // | user.php | // | | @@ -34,24 +34,23 @@ // +---------------------------------------------------------------------------+ /** -* User administration: Manage users (create, delete, import) and their -* group membership. -* -*/ + * User administration: Manage users (create, delete, import) and their + * group membership. + */ /** -* Geeklog common function library -*/ + * Geeklog common function library + */ require_once '../lib-common.php'; /** -* Security check to ensure user even belongs on this page -*/ + * Security check to ensure user even belongs on this page + */ require_once 'auth.inc.php'; /** -* User-related functions -*/ + * User-related functions + */ require_once $_CONF['path_system'] . 'lib-user.php'; // Set this to true to get various debug messages from this script @@ -69,13 +68,12 @@ } /** -* Shows the user edit form -* -* @param int $uid User to edit -* @param int $msg Error message to display -* @return string HTML for user edit form -* -*/ + * Shows the user edit form + * + * @param int $uid User to edit + * @param int $msg Error message to display + * @return string HTML for user edit form + */ function edituser($uid = '', $msg = '') { global $_CONF, $_TABLES, $_USER, $LANG28, $LANG_ACCESS, $LANG_ADMIN, @@ -90,9 +88,9 @@ function edituser($uid = '', $msg = '') } if (!empty ($msg) && !empty ($uid) && ($uid > 1)) { - // an error occured while editing a user - if it was a new account, + // an error occurred while editing a user - if it was a new account, // don't bother trying to read the user's data from the database ... - $cnt = DB_count ($_TABLES['users'], 'uid', $uid); + $cnt = DB_count($_TABLES['users'], 'uid', $uid); if ($cnt == 0) { $uid = ''; } @@ -105,17 +103,18 @@ function edituser($uid = '', $msg = '') COM_redirect($_CONF['site_admin_url'] . '/user.php'); } - if (SEC_inGroup('Root',$uid) AND !SEC_inGroup('Root')) { + if (SEC_inGroup('Root', $uid) && !SEC_inGroup('Root')) { // the current admin user isn't Root but is trying to change // a root account. Deny them and log it. $retval .= COM_showMessageText($LANG_ACCESS['editrootmsg'], - $LANG28[1]); + $LANG28[1]); COM_accessLog("User {$_USER['username']} tried to edit a Root account with insufficient privileges."); + return $retval; } $curtime = COM_getUserDateTimeFormat($A['regdate']); - $lastlogin = DB_getItem ($_TABLES['userinfo'], 'lastlogin', "uid = '$uid'"); - $lasttime = COM_getUserDateTimeFormat ($lastlogin); + $lastlogin = DB_getItem($_TABLES['userinfo'], 'lastlogin', "uid = '$uid'"); + $lasttime = COM_getUserDateTimeFormat($lastlogin); } else { $A['uid'] = ''; $uid = ''; @@ -127,16 +126,16 @@ function edituser($uid = '', $msg = '') // POST data can override, in case there was an error while editing a user if (isset($_POST['username'])) { - $A['username'] = strip_tags($_POST['username']); + $A['username'] = GLText::stripTags($_POST['username']); } if (isset($_POST['fullname'])) { - $A['fullname'] = strip_tags($_POST['fullname']); + $A['fullname'] = GLText::stripTags($_POST['fullname']); } if (isset($_POST['email'])) { - $A['email'] = strip_tags($_POST['email']); + $A['email'] = GLText::stripTags($_POST['email']); } if (isset($_POST['homepage'])) { - $A['homepage'] = strip_tags($_POST['homepage']); + $A['homepage'] = GLText::stripTags($_POST['homepage']); } if (isset($_POST['userstatus'])) { $A['status'] = COM_applyFilter($_POST['userstatus'], true); @@ -145,22 +144,22 @@ function edituser($uid = '', $msg = '') $token = SEC_createToken(); $retval .= COM_startBlock($LANG28[1], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= SEC_getTokenExpiryNotice($token); $user_templates = COM_newTemplate($_CONF['path_layout'] . 'admin/user'); - $user_templates->set_file (array ('form' => 'edituser.thtml', - 'password' => 'password.thtml', - 'groupedit' => 'groupedit.thtml')); + $user_templates->set_file(array('form' => 'edituser.thtml', + 'password' => 'password.thtml', + 'groupedit' => 'groupedit.thtml')); $user_templates->set_var('lang_save', $LANG_ADMIN['save']); if (!empty($uid) && ($A['uid'] != $_USER['uid']) && SEC_hasRights('user.delete')) { $delbutton = ''; + . '" name="mode"%s' . XHTML . '>'; $jsconfirm = ' onclick="return confirm(\'' . $MESSAGE[76] . '\');"'; - $user_templates->set_var ('delete_option', - sprintf ($delbutton, $jsconfirm)); - $user_templates->set_var ('delete_option_no_confirmation', - sprintf ($delbutton, '')); + $user_templates->set_var('delete_option', + sprintf($delbutton, $jsconfirm)); + $user_templates->set_var('delete_option_no_confirmation', + sprintf($delbutton, '')); $user_templates->set_var('allow_delete', true); $user_templates->set_var('lang_delete', $LANG_ADMIN['delete']); @@ -170,9 +169,9 @@ function edituser($uid = '', $msg = '') $user_templates->set_var('lang_userid', $LANG28[2]); if (empty ($A['uid'])) { - $user_templates->set_var ('user_id', $LANG_ADMIN['na']); + $user_templates->set_var('user_id', $LANG_ADMIN['na']); } else { - $user_templates->set_var ('user_id', $A['uid']); + $user_templates->set_var('user_id', $A['uid']); } $user_templates->set_var('lang_regdate', $LANG28[14]); $user_templates->set_var('regdate_timestamp', $curtime[1]); @@ -184,7 +183,7 @@ function edituser($uid = '', $msg = '') $user_templates->set_var('user_lastlogin', $lasttime[0]); } $user_templates->set_var('lang_username', $LANG28[3]); - if (isset ($A['username'])) { + if (isset($A['username'])) { $user_templates->set_var('username', $A['username']); } else { $user_templates->set_var('username', ''); @@ -192,63 +191,63 @@ function edituser($uid = '', $msg = '') $remoteservice = ''; if ($_CONF['show_servicename']) { - if (! empty($A['remoteservice'])) { + if (!empty($A['remoteservice'])) { $remoteservice = '@' . $A['remoteservice']; } } $user_templates->set_var('remoteservice', $remoteservice); if ($_CONF['allow_user_photo'] && ($A['uid'] > 0)) { - $photo = USER_getPhoto ($A['uid'], $A['photo'], $A['email'], -1); - $user_templates->set_var ('user_photo', $photo); + $photo = USER_getPhoto($A['uid'], $A['photo'], $A['email'], -1); + $user_templates->set_var('user_photo', $photo); if (empty ($A['photo'])) { - $user_templates->set_var ('lang_delete_photo', ''); - $user_templates->set_var ('delete_photo_option', ''); + $user_templates->set_var('lang_delete_photo', ''); + $user_templates->set_var('delete_photo_option', ''); } else { - $user_templates->set_var ('lang_delete_photo', $LANG28[28]); - $user_templates->set_var ('delete_photo_option', - ''); + $user_templates->set_var('lang_delete_photo', $LANG28[28]); + $user_templates->set_var('delete_photo_option', + ''); } } else { - $user_templates->set_var ('user_photo', ''); - $user_templates->set_var ('lang_delete_photo', ''); - $user_templates->set_var ('delete_photo_option', ''); + $user_templates->set_var('user_photo', ''); + $user_templates->set_var('lang_delete_photo', ''); + $user_templates->set_var('delete_photo_option', ''); } $user_templates->set_var('lang_fullname', $LANG28[4]); - if (isset ($A['fullname'])) { - $user_templates->set_var ('user_fullname', - htmlspecialchars ($A['fullname'])); + if (isset($A['fullname'])) { + $user_templates->set_var('user_fullname', + htmlspecialchars($A['fullname'])); } else { - $user_templates->set_var ('user_fullname', ''); + $user_templates->set_var('user_fullname', ''); } if (empty($A['remoteservice'])) { $user_templates->set_var('lang_password', $LANG28[5]); $user_templates->set_var('lang_password_conf', $LANG28[39]); - $user_templates->parse ('password_option', 'password', true); + $user_templates->parse('password_option', 'password', true); } else { - $user_templates->set_var ('password_option', ''); + $user_templates->set_var('password_option', ''); } $user_templates->set_var('lang_emailaddress', $LANG28[7]); - if (isset ($A['email'])) { + if (isset($A['email'])) { $user_templates->set_var('user_email', htmlspecialchars($A['email'])); } else { $user_templates->set_var('user_email', ''); } $user_templates->set_var('lang_homepage', $LANG28[8]); - if (isset ($A['homepage'])) { - $user_templates->set_var ('user_homepage', - htmlspecialchars ($A['homepage'])); + if (isset($A['homepage'])) { + $user_templates->set_var('user_homepage', + htmlspecialchars($A['homepage'])); } else { - $user_templates->set_var ('user_homepage', ''); + $user_templates->set_var('user_homepage', ''); } $user_templates->set_var('do_not_use_spaces', ''); $statusarray = array(USER_ACCOUNT_AWAITING_ACTIVATION => $LANG28[43], - USER_ACCOUNT_ACTIVE => $LANG28[45] - ); + USER_ACCOUNT_ACTIVE => $LANG28[45], + ); $allow_ban = true; @@ -282,7 +281,7 @@ function edituser($uid = '', $msg = '') $statusselect .= '>' . $value . '' . LB; } $statusselect .= ''; + . $A['status'] . '"' . XHTML . '>'; $user_templates->set_var('user_status', $statusselect); $user_templates->set_var('lang_user_status', $LANG28[46]); @@ -296,11 +295,11 @@ function edituser($uid = '', $msg = '') if (SEC_hasRights('group.assign')) { $user_templates->set_var('lang_securitygroups', - $LANG_ACCESS['securitygroups']); + $LANG_ACCESS['securitygroups']); $user_templates->set_var('lang_groupinstructions', - $LANG_ACCESS['securitygroupsmsg']); + $LANG_ACCESS['securitygroupsmsg']); - if (! empty($uid)) { + if (!empty($uid)) { $usergroups = SEC_getUserGroups($uid); if (is_array($usergroups) && !empty($uid)) { $selected = implode(' ', $usergroups); @@ -309,10 +308,10 @@ function edituser($uid = '', $msg = '') } } else { $selected = DB_getItem($_TABLES['groups'], 'grp_id', - "grp_name = 'All Users'") - . ' '; + "grp_name = 'All Users'") + . ' '; $selected .= DB_getItem($_TABLES['groups'], 'grp_id', - "grp_name = 'Logged-in Users'"); + "grp_name = 'Logged-in Users'"); // add default groups, if any $result = DB_query("SELECT grp_id FROM {$_TABLES['groups']} WHERE grp_default = 1"); @@ -331,40 +330,40 @@ function edituser($uid = '', $msg = '') $thisUsersGroups = SEC_getUserGroups(); $remoteGroup = DB_getItem($_TABLES['groups'], 'grp_id', - "grp_name = 'Remote Users'"); - if (! empty($remoteGroup)) { + "grp_name = 'Remote Users'"); + if (!empty($remoteGroup)) { $thisUsersGroups[] = $remoteGroup; } - $whereGroups = 'grp_id IN (' . implode (',', $thisUsersGroups) . ')'; + $whereGroups = 'grp_id IN (' . implode(',', $thisUsersGroups) . ')'; $header_arr = array( - array('text' => $LANG28[86], 'field' => 'checkbox', 'sort' => false), - array('text' => $LANG_ACCESS['groupname'], 'field' => 'grp_name', 'sort' => true), - array('text' => $LANG_ACCESS['description'], 'field' => 'grp_descr', 'sort' => true) + array('text' => $LANG28[86], 'field' => 'checkbox', 'sort' => false), + array('text' => $LANG_ACCESS['groupname'], 'field' => 'grp_name', 'sort' => true), + array('text' => $LANG_ACCESS['description'], 'field' => 'grp_descr', 'sort' => true), ); $defsort_arr = array('field' => 'grp_name', 'direction' => 'asc'); $form_url = $_CONF['site_admin_url'] - . '/user.php?mode=edit&uid=' . $uid; + . '/user.php?mode=edit&uid=' . $uid; $text_arr = array('has_menu' => false, - 'title' => '', 'instructions' => '', - 'icon' => '', 'form_url' => $form_url, - 'inline' => true + 'title' => '', 'instructions' => '', + 'icon' => '', 'form_url' => $form_url, + 'inline' => true, ); $sql = "SELECT grp_id, grp_name, grp_descr FROM {$_TABLES['groups']} WHERE " . $whereGroups; - $query_arr = array('table' => 'groups', - 'sql' => $sql, - 'query_fields' => array('grp_name'), + $query_arr = array('table' => 'groups', + 'sql' => $sql, + 'query_fields' => array('grp_name'), 'default_filter' => '', - 'query' => '', - 'query_limit' => 0 + 'query' => '', + 'query_limit' => 0, ); $groupoptions = ADMIN_list('usergroups', - 'ADMIN_getListField_usergroups', - $header_arr, $text_arr, $query_arr, - $defsort_arr, '', explode(' ', $selected)); + 'ADMIN_getListField_usergroups', + $header_arr, $text_arr, $query_arr, + $defsort_arr, '', explode(' ', $selected)); $user_templates->set_var('group_options', $groupoptions); $user_templates->parse('group_edit', 'groupedit', true); @@ -372,13 +371,13 @@ function edituser($uid = '', $msg = '') // user doesn't have the rights to edit a user's groups so set to -1 // so we know not to handle the groups array when we save $user_templates->set_var('group_edit', - ''); + ''); } $user_templates->set_var('gltoken_name', CSRF_TOKEN); $user_templates->set_var('gltoken', $token); $user_templates->parse('output', 'form'); $retval .= $user_templates->finish($user_templates->get_var('output')); - $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); + $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); return $retval; } @@ -400,35 +399,36 @@ function listusers() } $header_arr = array( # display 'text' and use table field 'field' - array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false), - array('text' => $LANG28[37], 'field' => $_TABLES['users'] . '.uid', 'sort' => true), - array('text' => $LANG28[3], 'field' => 'username', 'sort' => true), - array('text' => $LANG28[4], 'field' => 'fullname', 'sort' => true), - array('text' => $login_text, 'field' => $login_field, 'sort' => true), - array('text' => $LANG28[7], 'field' => 'email', 'sort' => true) + array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false), + array('text' => $LANG28[37], 'field' => $_TABLES['users'] . '.uid', 'sort' => true), + array('text' => $LANG28[3], 'field' => 'username', 'sort' => true), + array('text' => $LANG28[4], 'field' => 'fullname', 'sort' => true), + array('text' => $login_text, 'field' => $login_field, 'sort' => true), + array('text' => $LANG28[7], 'field' => 'email', 'sort' => true), ); if ($_CONF['user_login_method']['openid'] || - $_CONF['user_login_method']['3rdparty']) { + $_CONF['user_login_method']['3rdparty'] + ) { $header_arr[] = array('text' => $LANG04[121], 'field' => 'remoteservice', 'sort' => true); } $defsort_arr = array('field' => $_TABLES['users'] . '.uid', 'direction' => 'ASC'); - $menu_arr = array ( - array('url' => $_CONF['site_admin_url'] . '/user.php?mode=edit', + $menu_arr = array( + array('url' => $_CONF['site_admin_url'] . '/user.php?mode=edit', 'text' => $LANG_ADMIN['create_new']), - array('url' => $_CONF['site_admin_url'] . '/user.php?mode=importform', + array('url' => $_CONF['site_admin_url'] . '/user.php?mode=importform', 'text' => $LANG28[23]), - array('url' => $_CONF['site_admin_url'] . '/user.php?mode=batchdelete', + array('url' => $_CONF['site_admin_url'] . '/user.php?mode=batchdelete', 'text' => $LANG28[54]), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + array('url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home']), ); $retval .= COM_startBlock($LANG28[11], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= ADMIN_createMenu( $menu_arr, @@ -439,49 +439,49 @@ function listusers() $text_arr = array( 'has_extras' => true, 'form_url' => $_CONF['site_admin_url'] . '/user.php', - 'help_url' => '' + 'help_url' => '', ); - $join_userinfo = ''; + $join_userinfo = ''; $select_userinfo = ''; if ($_CONF['lastlogin']) { $join_userinfo .= "LEFT JOIN {$_TABLES['userinfo']} ON {$_TABLES['users']}.uid={$_TABLES['userinfo']}.uid "; $select_userinfo .= ",lastlogin"; } if ($_CONF['user_login_method']['openid'] || - $_CONF['user_login_method']['3rdparty']) { + $_CONF['user_login_method']['3rdparty'] + ) { $select_userinfo .= ',remoteservice'; } $sql = "SELECT {$_TABLES['users']}.uid,username,fullname,email,photo,status,regdate$select_userinfo " - . "FROM {$_TABLES['users']} $join_userinfo WHERE 1=1"; + . "FROM {$_TABLES['users']} $join_userinfo WHERE 1=1"; - $query_arr = array('table' => 'users', - 'sql' => $sql, - 'query_fields' => array('username', 'email', 'fullname', 'homepage'), + $query_arr = array('table' => 'users', + 'sql' => $sql, + 'query_fields' => array('username', 'email', 'fullname', 'homepage'), 'default_filter' => "AND {$_TABLES['users']}.uid > 1"); $retval .= ADMIN_list('user', 'ADMIN_getListField_users', $header_arr, - $text_arr, $query_arr, $defsort_arr); + $text_arr, $query_arr, $defsort_arr); $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); return $retval; } /** -* Saves user to the database -* -* @param int $uid user id -* @param string $usernmae (short) username -* @param string $fullname user's full name -* @param string $email user's email address -* @param string $regdate date the user registered with the site -* @param string $homepage user's homepage URL -* @param array $groups groups the user belongs to -* @param string $delete_photo delete user's photo if == 'on' -* @return string HTML redirect or error message -* -*/ -function saveusers ($uid, $username, $fullname, $passwd, $passwd_conf, $email, $regdate, $homepage, $groups, $delete_photo = '', $userstatus=3, $oldstatus=3) + * Saves user to the database + * + * @param int $uid user id + * @param string $usernmae (short) username + * @param string $fullname user's full name + * @param string $email user's email address + * @param string $regdate date the user registered with the site + * @param string $homepage user's homepage URL + * @param array $groups groups the user belongs to + * @param string $delete_photo delete user's photo if == 'on' + * @return string HTML redirect or error message + */ +function saveusers($uid, $username, $fullname, $passwd, $passwd_conf, $email, $regdate, $homepage, $groups, $delete_photo = '', $userstatus = 3, $oldstatus = 3) { global $_CONF, $_TABLES, $_USER, $LANG28, $_USER_VERBOSE; @@ -495,15 +495,16 @@ function saveusers ($uid, $username, $fullname, $passwd, $passwd_conf, $email, $ $service = DB_getItem($_TABLES['users'], 'remoteservice', "uid = $uid"); // If remote service then assume blank password - if (! empty($service)) { + if (!empty($service)) { $passwd = ''; $passwd_conf = ''; } $passwd_changed = true; if (empty($service) && - SEC_encryptUserPassword($passwd, $uid) === 0 && - $passwd_conf === '') { + SEC_encryptUserPassword($passwd, $uid) === 0 && + $passwd_conf === '' + ) { $passwd_changed = false; } @@ -532,28 +533,28 @@ function saveusers ($uid, $username, $fullname, $passwd, $passwd_conf, $email, $ $uname = DB_escapeString($username); if (empty ($uid)) { - $ucount = DB_getItem ($_TABLES['users'], 'COUNT(*)', - "username = '$uname'"); + $ucount = DB_getItem($_TABLES['users'], 'COUNT(*)', + "username = '$uname'"); } else { - if (! empty($service)) { + if (!empty($service)) { $uservice = DB_escapeString($service); - $ucount = DB_getItem ($_TABLES['users'], 'COUNT(*)', - "username = '$uname' AND uid <> $uid AND remoteservice = '$uservice'"); + $ucount = DB_getItem($_TABLES['users'], 'COUNT(*)', + "username = '$uname' AND uid <> $uid AND remoteservice = '$uservice'"); } else { - $ucount = DB_getItem ($_TABLES['users'], 'COUNT(*)', - "username = '$uname' AND uid <> $uid AND (remoteservice = '' OR remoteservice IS NULL)"); + $ucount = DB_getItem($_TABLES['users'], 'COUNT(*)', + "username = '$uname' AND uid <> $uid AND (remoteservice = '' OR remoteservice IS NULL)"); } } if ($ucount > 0) { // Admin just changed a user's username to one that already exists - return edituser ($uid, 51); + return edituser($uid, 51); } $emailaddr = DB_escapeString($email); $exclude_remote = " AND (remoteservice IS NULL OR remoteservice = '')"; if (empty($uid)) { $ucount = DB_getItem($_TABLES['users'], 'COUNT(*)', - "email = '$emailaddr'" . $exclude_remote); + "email = '$emailaddr'" . $exclude_remote); } else { $old_email = DB_getItem($_TABLES['users'], 'email', "uid = '$uid'"); if ($old_email == $email) { @@ -561,8 +562,8 @@ function saveusers ($uid, $username, $fullname, $passwd, $passwd_conf, $email, $ $ucount = 0; } else { $ucount = DB_getItem($_TABLES['users'], 'COUNT(*)', - "email = '$emailaddr' AND uid <> $uid" - . $exclude_remote); + "email = '$emailaddr' AND uid <> $uid" + . $exclude_remote); } } if ($ucount > 0) { @@ -571,13 +572,15 @@ function saveusers ($uid, $username, $fullname, $passwd, $passwd_conf, $email, $ } if ($_CONF['custom_registration'] && - function_exists('CUSTOM_userCheck')) { + function_exists('CUSTOM_userCheck') + ) { $ret = CUSTOM_userCheck($username, $email); - if (! empty($ret)) { + if (!empty($ret)) { // need a numeric return value - otherwise use default message - if (! is_numeric($ret['number'])) { + if (!is_numeric($ret['number'])) { $ret['number'] = 400; } + return edituser($uid, $ret['number']); } } @@ -588,32 +591,34 @@ function_exists('CUSTOM_userCheck')) { $passwd = SEC_generateRandomPassword(); } - $uid = USER_createAccount ($username, $email, $passwd, $fullname, - $homepage); + $uid = USER_createAccount($username, $email, $passwd, $fullname, + $homepage); if ($uid > 1) { DB_query("UPDATE {$_TABLES['users']} SET status = $userstatus WHERE uid = $uid"); } } else { $fullname = DB_escapeString($fullname); $homepage = DB_escapeString($homepage); - $curphoto = DB_getItem($_TABLES['users'],'photo',"uid = $uid"); + $curphoto = DB_getItem($_TABLES['users'], 'photo', "uid = $uid"); if (!empty ($curphoto) && ($delete_photo == 'on')) { - USER_deletePhoto ($curphoto); + USER_deletePhoto($curphoto); $curphoto = ''; } if (($_CONF['allow_user_photo'] == 1) && !empty ($curphoto)) { - $curusername = DB_getItem ($_TABLES['users'], 'username', - "uid = $uid"); + $curusername = DB_getItem($_TABLES['users'], 'username', + "uid = $uid"); if ($curusername != $username) { // user has been renamed - rename the photo, too - $newphoto = preg_replace ('/' . $curusername . '/', - $username, $curphoto, 1); + $newphoto = preg_replace('/' . $curusername . '/', + $username, $curphoto, 1); $imgpath = $_CONF['path_images'] . 'userphotos/'; - if (@rename ($imgpath . $curphoto, - $imgpath . $newphoto) === false) { - $retval .= COM_errorLog ('Could not rename userphoto "' - . $curphoto . '" to "' . $newphoto . '".'); + if (@rename($imgpath . $curphoto, + $imgpath . $newphoto) === false + ) { + $retval .= COM_errorLog('Could not rename userphoto "' + . $curphoto . '" to "' . $newphoto . '".'); + return $retval; } $curphoto = $newphoto; @@ -628,9 +633,10 @@ function_exists('CUSTOM_userCheck')) { if ($_CONF['custom_registration'] AND (function_exists('CUSTOM_userSave'))) { CUSTOM_userSave($uid); } - if( ($_CONF['usersubmission'] == 1) && ($oldstatus == USER_ACCOUNT_AWAITING_APPROVAL) - && ($userstatus == USER_ACCOUNT_ACTIVE) ) { - USER_createAndSendPassword ($username, $email, $uid); + if (($_CONF['usersubmission'] == 1) && ($oldstatus == USER_ACCOUNT_AWAITING_APPROVAL) + && ($userstatus == USER_ACCOUNT_ACTIVE) + ) { + USER_createAndSendPassword($username, $email, $uid); } if ($userstatus == USER_ACCOUNT_DISABLED) { SESS_endUserSession($uid); @@ -640,9 +646,9 @@ function_exists('CUSTOM_userCheck')) { // check that the user is allowed to change group assignments if (is_array($groups) && SEC_hasRights('group.assign')) { - if (! SEC_inGroup('Root')) { + if (!SEC_inGroup('Root')) { $rootgrp = DB_getItem($_TABLES['groups'], 'grp_id', - "grp_name = 'Root'"); + "grp_name = 'Root'"); if (in_array($rootgrp, $groups)) { COM_accessLog("User {$_USER['username']} ({$_USER['uid']}) just tried to give Root permissions to user $username."); COM_redirect($_CONF['site_admin_url'] . '/index.php'); @@ -652,31 +658,31 @@ function_exists('CUSTOM_userCheck')) { // make sure the Remote Users group is in $groups if (SEC_inGroup('Remote Users', $uid)) { $remUsers = DB_getItem($_TABLES['groups'], 'grp_id', - "grp_name = 'Remote Users'"); - if (! in_array($remUsers, $groups)) { + "grp_name = 'Remote Users'"); + if (!in_array($remUsers, $groups)) { $groups[] = $remUsers; } } if ($_USER_VERBOSE) { - COM_errorLog("deleting all group_assignments for user $uid/$username",1); + COM_errorLog("deleting all group_assignments for user $uid/$username", 1); } // remove user from all groups that the User Admin is a member of $UserAdminGroups = SEC_getUserGroups(); $whereGroup = 'ug_main_grp_id IN (' - . implode (',', $UserAdminGroups) . ')'; + . implode(',', $UserAdminGroups) . ')'; DB_query("DELETE FROM {$_TABLES['group_assignments']} WHERE (ug_uid = $uid) AND " . $whereGroup); // make sure to add user to All Users and Logged-in Users groups $allUsers = DB_getItem($_TABLES['groups'], 'grp_id', - "grp_name = 'All Users'"); - if (! in_array($allUsers, $groups)) { + "grp_name = 'All Users'"); + if (!in_array($allUsers, $groups)) { $groups[] = $allUsers; } $logUsers = DB_getItem($_TABLES['groups'], 'grp_id', - "grp_name = 'Logged-in Users'"); - if (! in_array($logUsers, $groups)) { + "grp_name = 'Logged-in Users'"); + if (!in_array($logUsers, $groups)) { $groups[] = $logUsers; } @@ -684,7 +690,7 @@ function_exists('CUSTOM_userCheck')) { if (in_array($userGroup, $UserAdminGroups)) { if ($_USER_VERBOSE) { COM_errorLog("adding group_assignment " . $userGroup - . " for $username", 1); + . " for $username", 1); } $sql = "INSERT INTO {$_TABLES['group_assignments']} (ug_main_grp_id, ug_uid) VALUES ($userGroup, $uid)"; DB_query($sql); @@ -693,20 +699,20 @@ function_exists('CUSTOM_userCheck')) { } if ($userChanged) { - PLG_userInfoChanged ($uid); + PLG_userInfoChanged($uid); } $errors = DB_error(); if (empty($errors)) { - echo PLG_afterSaveSwitch ( + echo PLG_afterSaveSwitch( $_CONF['aftersave_user'], "{$_CONF['site_url']}/users.php?mode=profile&uid=$uid", 'user', 21 ); } else { - $retval .= COM_errorLog ('Error in saveusers in ' - . $_CONF['site_admin_url'] . '/user.php'); + $retval .= COM_errorLog('Error in saveusers in ' + . $_CONF['site_admin_url'] . '/user.php'); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $LANG28[22])); echo $retval; exit; @@ -714,7 +720,8 @@ function_exists('CUSTOM_userCheck')) { } else { $retval .= COM_showMessageText($LANG28[10]); if (!empty($uid) && ($uid > 1) && - DB_count($_TABLES['users'], 'uid', $uid) > 0) { + DB_count($_TABLES['users'], 'uid', $uid) > 0 + ) { $retval .= edituser($uid); } else { $retval .= edituser(); @@ -732,38 +739,36 @@ function_exists('CUSTOM_userCheck')) { } /** -* This function allows the batch deletion of users that are inactive -* It shows the form that will filter user that will be deleted -* -* @return string HTML Form -*/ + * This function allows the batch deletion of users that are inactive + * It shows the form that will filter user that will be deleted + * + * @return string HTML Form + */ function batchdelete() { global $_CONF, $_TABLES, $LANG_ADMIN, $LANG01, $LANG28, $_IMAGE_TYPE; $retval = ''; - if (! $_CONF['lastlogin']) { - $retval .= '

'. $_LANG28[55] . '

'; + if (!$_CONF['lastlogin']) { + $retval .= '

' . $LANG28[55] . '

'; + return $retval; } require_once $_CONF['path_system'] . 'lib-admin.php'; - $usr_type = ''; - if (isset($_REQUEST['usr_type'])) { - $usr_type = COM_applyFilter($_REQUEST['usr_type']); - } - if (! in_array($usr_type, array('phantom', 'short', 'old', 'recent'))) { + $usr_type = Geeklog\Input::fRequest('usr_type', ''); + if (!in_array($usr_type, array('phantom', 'short', 'old', 'recent'))) { $usr_type = 'phantom'; } $usr_time_arr = array(); // default values, in months - $usr_time_arr['phantom'] = 2; - $usr_time_arr['short'] = 6; - $usr_time_arr['old'] = 24; - $usr_time_arr['recent'] = 1; + $usr_time_arr['phantom'] = 2; + $usr_time_arr['short'] = 6; + $usr_time_arr['old'] = 24; + $usr_time_arr['recent'] = 1; $usr_time = ''; if (isset($_REQUEST['usr_time'])) { @@ -786,17 +791,17 @@ function batchdelete() array('sel' => 'phantom', 'desc' => $LANG28[57], 'txt1' => $LANG28[60], 'txt2' => $LANG28[61]), array('sel' => 'short', 'desc' => $LANG28[58], 'txt1' => $LANG28[62], 'txt2' => $LANG28[63]), array('sel' => 'old', 'desc' => $LANG28[59], 'txt1' => $LANG28[64], 'txt2' => $LANG28[65]), - array('sel' => 'recent', 'desc' => $LANG28[74], 'txt1' => $LANG28[75], 'txt2' => $LANG28[76]) + array('sel' => 'recent', 'desc' => $LANG28[74], 'txt1' => $LANG28[75], 'txt2' => $LANG28[76]), ); $user_templates = COM_newTemplate($_CONF['path_layout'] . 'admin/user'); - $user_templates->set_file (array ('form' => 'batchdelete.thtml', - 'options' => 'batchdelete_options.thtml', - 'reminder' => 'reminder.thtml')); - $user_templates->set_var ('usr_type', $usr_type); - $user_templates->set_var ('usr_time', $usr_time); - $user_templates->set_var ('lang_instruction', $LANG28[56]); - $user_templates->set_var ('lang_updatelist', $LANG28[66]); + $user_templates->set_file(array('form' => 'batchdelete.thtml', + 'options' => 'batchdelete_options.thtml', + 'reminder' => 'reminder.thtml')); + $user_templates->set_var('usr_type', $usr_type); + $user_templates->set_var('usr_time', $usr_time); + $user_templates->set_var('lang_instruction', $LANG28[56]); + $user_templates->set_var('lang_updatelist', $LANG28[66]); $num_opts = count($opt_arr); for ($i = 0; $i < $num_opts; $i++) { @@ -804,21 +809,21 @@ function batchdelete() if ($usr_type == $opt_arr[$i]['sel']) { $selector = ' checked="checked"'; } - $user_templates->set_var ('sel_id', $opt_arr[$i]['sel']); - $user_templates->set_var ('selector', $selector); - $user_templates->set_var ('lang_description', $opt_arr[$i]['desc']); - $user_templates->set_var ('lang_text_start', $opt_arr[$i]['txt1']); - $user_templates->set_var ('lang_text_end', $opt_arr[$i]['txt2']); - $user_templates->set_var ('id_value', $usr_time_arr[$opt_arr[$i]['sel']]); + $user_templates->set_var('sel_id', $opt_arr[$i]['sel']); + $user_templates->set_var('selector', $selector); + $user_templates->set_var('lang_description', $opt_arr[$i]['desc']); + $user_templates->set_var('lang_text_start', $opt_arr[$i]['txt1']); + $user_templates->set_var('lang_text_end', $opt_arr[$i]['txt2']); + $user_templates->set_var('id_value', $usr_time_arr[$opt_arr[$i]['sel']]); $user_templates->parse('options_list', 'options', true); } $user_templates->parse('form', 'form'); $desc = $user_templates->finish($user_templates->get_var('form')); $header_arr = array( # display 'text' and use table field 'field' - array('text' => $LANG28[37], 'field' => $_TABLES['users'] . '.uid', 'sort' => true), - array('text' => $LANG28[3], 'field' => 'username', 'sort' => true), - array('text' => $LANG28[4], 'field' => 'fullname', 'sort' => true) + array('text' => $LANG28[37], 'field' => $_TABLES['users'] . '.uid', 'sort' => true), + array('text' => $LANG28[3], 'field' => 'username', 'sort' => true), + array('text' => $LANG28[4], 'field' => 'fullname', 'sort' => true), ); switch ($usr_type) { @@ -837,7 +842,7 @@ function batchdelete() $header_arr[] = array('text' => $LANG28[69], 'field' => 'offline_months', 'sort' => true); $list_sql = ", (lastlogin - UNIX_TIMESTAMP(regdate)) AS online_hours, (UNIX_TIMESTAMP() - lastlogin) AS offline_months"; $filter_sql = "lastlogin > CAST(0 AS CHAR) AND lastlogin - UNIX_TIMESTAMP(regdate) < 86400 " - . "AND UNIX_TIMESTAMP() - lastlogin > " . ($usr_time * 2592000) . " AND"; + . "AND UNIX_TIMESTAMP() - lastlogin > " . ($usr_time * 2592000) . " AND"; $sort = 'lastlogin'; break; case 'old': @@ -858,13 +863,13 @@ function batchdelete() $header_arr[] = array('text' => $LANG28[7], 'field' => 'email', 'sort' => true); $header_arr[] = array('text' => $LANG28[87], 'field' => 'num_reminders', 'sort' => true); - $menu_arr = array ( - array('url' => $_CONF['site_admin_url'] . '/user.php', - 'text' => $LANG28[11]), - array('url' => $_CONF['site_admin_url'] . '/user.php?mode=importform', - 'text' => $LANG28[23]), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + $menu_arr = array( + array('url' => $_CONF['site_admin_url'] . '/user.php', + 'text' => $LANG28[11]), + array('url' => $_CONF['site_admin_url'] . '/user.php?mode=importform', + 'text' => $LANG28[23]), + array('url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home']), ); $text_arr = array('has_menu' => true, @@ -873,7 +878,7 @@ function batchdelete() 'instructions' => $desc, 'icon' => $_CONF['layout_url'] . '/images/icons/user.' . $_IMAGE_TYPE, 'form_url' => $_CONF['site_admin_url'] . "/user.php?mode=batchdelete&usr_type=$usr_type&usr_time=$usr_time", - 'help_url' => '' + 'help_url' => '', ); $defsort_arr = array('field' => $sort, @@ -883,27 +888,27 @@ function batchdelete() $select_userinfo = ", lastlogin as lastlogin_short $list_sql "; $sql = "SELECT {$_TABLES['users']}.uid,username,fullname,email,photo,status,regdate,num_reminders$select_userinfo " - . "FROM {$_TABLES['users']} $join_userinfo WHERE 1=1"; + . "FROM {$_TABLES['users']} $join_userinfo WHERE 1=1"; - $query_arr = array ( - 'table' => 'users', - 'sql' => $sql, - 'query_fields' => array('username', 'email', 'fullname'), - 'default_filter' => "AND $filter_sql {$_TABLES['users']}.uid > 1" + $query_arr = array( + 'table' => 'users', + 'sql' => $sql, + 'query_fields' => array('username', 'email', 'fullname'), + 'default_filter' => "AND $filter_sql {$_TABLES['users']}.uid > 1", ); $listoptions = array('chkdelete' => true, 'chkfield' => 'uid'); - $menu_arr = array ( - array('url' => $_CONF['site_admin_url'] . '/user.php', + $menu_arr = array( + array('url' => $_CONF['site_admin_url'] . '/user.php', 'text' => $LANG28[11]), - array('url' => $_CONF['site_admin_url'] . '/user.php?mode=importform', + array('url' => $_CONF['site_admin_url'] . '/user.php?mode=importform', 'text' => $LANG28[23]), - array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + array('url' => $_CONF['site_admin_url'], + 'text' => $LANG_ADMIN['admin_home']), ); $retval .= COM_startBlock($LANG28[54], '', - COM_getBlockTemplate('_admin_block', 'header')); + COM_getBlockTemplate('_admin_block', 'header')); $retval .= ADMIN_createMenu( $menu_arr, @@ -918,40 +923,35 @@ function batchdelete() $form_arr['top'] = $user_templates->finish($user_templates->get_var('test')); $token = SEC_createToken(); $form_arr['bottom'] = ""; + . "\" value=\"{$token}\"" . XHTML . ">"; $retval .= ADMIN_list('user', 'ADMIN_getListField_users', $header_arr, - $text_arr, $query_arr, $defsort_arr, '', '', - $listoptions, $form_arr); + $text_arr, $query_arr, $defsort_arr, '', '', + $listoptions, $form_arr); $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); return $retval; } /** -* This function deletes the users selected in the batchdeletelist function -* -* @return string HTML with success or error message -* -*/ + * This function deletes the users selected in the batchdeletelist function + * + * @return string HTML with success or error message + */ function batchdeleteexec() { global $_CONF, $LANG28; $msg = ''; - $user_list = array(); - if (isset($_POST['delitem'])) { - $user_list = $_POST['delitem']; - } - if (count($user_list) == 0) { + $user_list = Geeklog\Input::fPost('delitem', array()); + if (count($user_list) === 0) { $msg = $LANG28[72] . ''; } $c = 0; - if (isset($user_list) AND is_array($user_list)) { - foreach($user_list as $delitem) { - $delitem = COM_applyFilter($delitem); - if (!USER_deleteAccount ($delitem)) { + if (!empty($user_list) && is_array($user_list)) { + foreach ($user_list as $delitem) { + if (!USER_deleteAccount($delitem)) { $msg .= "{$LANG28[2]} $delitem {$LANG28[70]}\n"; } else { $c++; // count the deleted users @@ -969,42 +969,38 @@ function batchdeleteexec() /** -* This function used to send out reminders to users to access the site or account may be deleted -* -* @return string HTML with success or error message -* -*/ + * This function used to send out reminders to users to access the site or account may be deleted + * + * @return string HTML with success or error message + */ function batchreminders() { global $_CONF, $_TABLES, $LANG04, $LANG28; $msg = ''; - $user_list = array(); - if (isset($_POST['delitem'])) { - $user_list = $_POST['delitem']; - } + $user_list = Geeklog\Input::fPost('delitem', array()); - if (count($user_list) == 0) { + if (count($user_list) === 0) { $msg = $LANG28[79] . ''; } $c = 0; - if (isset($_POST['delitem']) AND is_array($_POST['delitem'])) { - foreach($_POST['delitem'] as $delitem) { - $userid = COM_applyFilter($delitem); - $useremail = DB_getItem ($_TABLES['users'], 'email', "uid = '$userid'"); - $username = DB_getItem ($_TABLES['users'], 'username', "uid = '$userid'"); - $lastlogin = DB_getItem ($_TABLES['userinfo'], 'lastlogin', "uid = '$userid'"); - $lasttime = COM_getUserDateTimeFormat ($lastlogin); - if (file_exists ($_CONF['path_data'] . 'reminder_email.txt')) { + if (!empty($user_list) && is_array($user_list)) { + foreach ($user_list as $delitem) { + $userid = (int) $delitem; + $useremail = DB_getItem($_TABLES['users'], 'email', "uid = '{$userid}'"); + $username = DB_getItem($_TABLES['users'], 'username', "uid = '{$userid}'"); + $lastlogin = DB_getItem($_TABLES['userinfo'], 'lastlogin', "uid = '{$userid}'"); + $lasttime = COM_getUserDateTimeFormat($lastlogin); + if (file_exists($_CONF['path_data'] . 'reminder_email.txt')) { $template = COM_newTemplate($_CONF['path_data']); - $template->set_file (array ('mail' => 'reminder_email.txt')); - $template->set_var ('site_name', $_CONF['site_name']); - $template->set_var ('site_slogan', $_CONF['site_slogan']); - $template->set_var ('lang_username', $LANG04[2]); - $template->set_var ('username', $username); - $template->set_var ('name', COM_getDisplayName ($uid)); - $template->set_var ('lastlogin', $lasttime[0]); + $template->set_file(array('mail' => 'reminder_email.txt')); + $template->set_var('site_name', $_CONF['site_name']); + $template->set_var('site_slogan', $_CONF['site_slogan']); + $template->set_var('lang_username', $LANG04[2]); + $template->set_var('username', $username); + $template->set_var('name', COM_getDisplayName($userid)); + $template->set_var('lastlogin', $lasttime[0]); $template->parse('output', 'mail'); $mailtext = $template->finish($template->get_var('output')); @@ -1016,7 +1012,7 @@ function batchreminders() } $mailtext .= sprintf($LANG28[84], $username) . "\n"; $mailtext .= sprintf($LANG28[85], $_CONF['site_url'] - . '/users.php?mode=getpassword') . "\n\n"; + . '/users.php?mode=getpassword') . "\n\n"; } $subject = sprintf($LANG28[81], $_CONF['site_name']); @@ -1027,7 +1023,7 @@ function batchreminders() $mailfrom = $_CONF['site_mail']; } - if (COM_mail ($useremail, $subject, $mailtext, $mailfrom)) { + if (COM_mail($useremail, $subject, $mailtext, $mailfrom)) { DB_query("UPDATE {$_TABLES['users']} SET num_reminders=num_reminders+1 WHERE uid=$userid"); $c++; } else { @@ -1046,17 +1042,15 @@ function batchreminders() /** -* This function allows the administrator to import batches of users -* -* TODO: This function should first display the users that are to be imported, -* together with the invalid users and the reason of invalidity. Each valid line -* should have a checkbox that allows selection of final to be imported users. -* After clicking an extra button, the actual import should take place. This will -* prevent problems in case the list formatting is incorrect. -* -* @return string HTML with success or error message -* -*/ + * This function allows the administrator to import batches of users + * TODO: This function should first display the users that are to be imported, + * together with the invalid users and the reason of invalidity. Each valid line + * should have a checkbox that allows selection of final to be imported users. + * After clicking an extra button, the actual import should take place. This will + * prevent problems in case the list formatting is incorrect. + * + * @return string HTML with success or error message + */ function importusers() { global $_CONF, $_TABLES, $LANG04, $LANG28; @@ -1074,9 +1068,9 @@ function importusers() require_once $_CONF['path_system'] . 'classes/upload.class.php'; $upload = new Upload (); - $upload->setPath ($_CONF['path_data']); - $upload->setAllowedMimeTypes (array ('text/plain' => '.txt')); - $upload->setFileNames ('user_import_file.txt'); + $upload->setPath($_CONF['path_data']); + $upload->setAllowedMimeTypes(array('text/plain' => '.txt')); + $upload->setFileNames('user_import_file.txt'); if ($upload->uploadFiles()) { // Good, file got uploaded, now install everything $thefile = current($_FILES); @@ -1092,93 +1086,92 @@ function importusers() return $retval; } - $users = file ($filename); + $users = file($filename); - $retval .= COM_startBlock ($LANG28[31], '', - COM_getBlockTemplate ('_admin_block', 'header')); + $retval .= COM_startBlock($LANG28[31], '', + COM_getBlockTemplate('_admin_block', 'header')); // Following variables track import processing statistics $successes = 0; $failures = 0; foreach ($users as $line) { - $line = rtrim ($line); + $line = rtrim($line); if (empty ($line)) { continue; } - list ($full_name, $u_name, $email) = explode ("\t", $line); + list ($full_name, $u_name, $email) = explode("\t", $line); - $full_name = strip_tags ($full_name); - $u_name = COM_applyFilter ($u_name); - $email = COM_applyFilter ($email); + $full_name = GLText::stripTags($full_name); + $u_name = COM_applyFilter($u_name); + $email = COM_applyFilter($email); if ($verbose_import) { - $retval .="Working on username=$u_name, fullname=$full_name, and email=$email\n"; - COM_errorLog ("Working on username=$u_name, fullname=$full_name, and email=$email",1); + $retval .= "Working on username=$u_name, fullname=$full_name, and email=$email\n"; + COM_errorLog("Working on username=$u_name, fullname=$full_name, and email=$email", 1); } // prepare for database - $userName = trim ($u_name); - $fullName = trim ($full_name); - $emailAddr = trim ($email); + $userName = trim($u_name); + $fullName = trim($full_name); + $emailAddr = trim($email); - if (COM_isEmail ($email)) { + if (COM_isEmail($email)) { // email is valid form - $ucount = DB_count ($_TABLES['users'], 'username', - DB_escapeString($userName)); - $ecount = DB_count ($_TABLES['users'], 'email', - DB_escapeString($emailAddr)); + $ucount = DB_count($_TABLES['users'], 'username', + DB_escapeString($userName)); + $ecount = DB_count($_TABLES['users'], 'email', + DB_escapeString($emailAddr)); if (($ucount == 0) && ($ecount == 0)) { // user doesn't already exist - pass in optional true for $batchimport parm - $uid = USER_createAccount ($userName, $emailAddr, '', - $fullName,'','','',true); + $uid = USER_createAccount($userName, $emailAddr, '', + $fullName, '', '', '', true); - $result = USER_createAndSendPassword ($userName, $emailAddr, $uid); + $result = USER_createAndSendPassword($userName, $emailAddr, $uid); if ($result) { $successes++; if ($verbose_import) { $retval .= " Account for $u_name created successfully.\n"; - COM_errorLog("Account for $u_name created successfully",1); + COM_errorLog("Account for $u_name created successfully", 1); } } else { // user creation failed $retval .= "ERROR: There was a problem creating the account for $u_name.\n"; - COM_errorLog("ERROR: here was a problem creating the account for $u_name.",1); + COM_errorLog("ERROR: here was a problem creating the account for $u_name.", 1); } } else { if ($verbose_import) { $retval .= "$u_name or $email already exists, account not created.\n"; // user already exists - COM_errorLog("$u_name,$email: username or email already exists, account not created",1); + COM_errorLog("$u_name,$email: username or email already exists, account not created", 1); } $failures++; } // end if $ucount == 0 && ecount == 0 } else { if ($verbose_import) { $retval .= "$email is not a valid email address, account not created\n"; // malformed email - COM_errorLog("$email is not a valid email address, account not created",1); + COM_errorLog("$email is not a valid email address, account not created", 1); } $failures++; } // end if COM_isEmail($email) } // end foreach - unlink ($filename); + unlink($filename); - $retval .= '

' . sprintf ($LANG28[32], $successes, $failures); + $retval .= '

' . sprintf($LANG28[32], $successes, $failures); - $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); + $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $LANG28[24])); return $retval; } /** -* Display "batch add" (import) form -* -* @return string HTML for import form -* -*/ + * Display "batch add" (import) form + * + * @return string HTML for import form + */ function display_batchAddform() { global $_CONF, $LANG28, $LANG_ADMIN, $_IMAGE_TYPE; @@ -1188,8 +1181,8 @@ function display_batchAddform() $retval = ''; $token = SEC_createToken(); - $retval .= COM_startBlock ($LANG28[24], '', - COM_getBlockTemplate ('_admin_block', 'header')); + $retval .= COM_startBlock($LANG28[24], '', + COM_getBlockTemplate('_admin_block', 'header')); $menu_arr = array( array('url' => $_CONF['site_admin_url'] . '/user.php', @@ -1197,7 +1190,7 @@ function display_batchAddform() array('url' => $_CONF['site_admin_url'] . '/user.php?mode=batchdelete', 'text' => $LANG28[54]), array('url' => $_CONF['site_admin_url'], - 'text' => $LANG_ADMIN['admin_home']) + 'text' => $LANG_ADMIN['admin_home']), ); $desc = '

' . $LANG28[25] . '

'; @@ -1205,33 +1198,32 @@ function display_batchAddform() $retval .= ADMIN_createMenu($menu_arr, $desc, $icon); $retval .= '
' - . $LANG28[29] - . ': ' - . '' - . '
' . LB; - - $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); + . '/user.php" method="post" enctype="multipart/form-data">
' + . $LANG28[29] + . ': ' + . '' + . '
' . LB; + + $retval .= COM_endBlock(COM_getBlockTemplate('_admin_block', 'footer')); $retval = COM_createHTMLDocument($retval, array('pagetitle' => $LANG28[24])); return $retval; } /** -* Delete a user -* -* @param int $uid id of user to delete -* @return string HTML redirect -* -*/ -function deleteUser ($uid) + * Delete a user + * + * @param int $uid id of user to delete + * @return string HTML redirect + */ +function deleteUser($uid) { global $_CONF; - if (!USER_deleteAccount ($uid)) { + if (!USER_deleteAccount($uid)) { COM_redirect($_CONF['site_admin_url'] . '/user.php'); } @@ -1239,25 +1231,22 @@ function deleteUser ($uid) } // MAIN -$mode = ''; -if (isset($_REQUEST['mode'])) { - $mode = $_REQUEST['mode']; -} +$mode = Geeklog\Input::request('mode', ''); if (isset($_POST['delbutton_x'])) { $mode = 'batchdeleteexec'; } -if (isset ($_REQUEST['order'])) { - $order = COM_applyFilter ($_REQUEST['order'],true); +if (isset($_REQUEST['order'])) { + $order = (int) Geeklog\Input::fRequest('order'); } -if (isset ($_GET['direction'])) { - $direction = COM_applyFilter ($_GET['direction']); +if (isset($_GET['direction'])) { + $direction = Geeklog\Input::fGet('direction'); } if (($mode == $LANG_ADMIN['delete']) && !empty ($LANG_ADMIN['delete'])) { // delete - $uid = COM_applyFilter($_POST['uid'], true); + $uid = (int) Geeklog\Input::fPost('uid'); if ($uid <= 1) { COM_errorLog('Attempted to delete user uid=' . $uid); COM_redirect($_CONF['site_admin_url'] . '/user.php'); @@ -1268,62 +1257,56 @@ function deleteUser ($uid) COM_redirect($_CONF['site_admin_url'] . '/index.php'); } } elseif (($mode == $LANG_ADMIN['save']) && !empty($LANG_ADMIN['save']) && SEC_checkToken()) { // save - $delphoto = ''; - if (isset ($_POST['delete_photo'])) { - $delphoto = $_POST['delete_photo']; - } - if (!isset ($_POST['oldstatus'])) { + $delphoto = Geeklog\Input::post('delete_photo', ''); + if (!isset($_POST['oldstatus'])) { $_POST['oldstatus'] = USER_ACCOUNT_ACTIVE; } - if (!isset ($_POST['userstatus'])) { + if (!isset($_POST['userstatus'])) { $_POST['userstatus'] = USER_ACCOUNT_ACTIVE; } - $uid = COM_applyFilter($_POST['uid'], true); + + $uid = (int) Geeklog\Input::fPost('uid'); if ($uid == 1) { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } else { - $passwd = ''; - if (isset($_POST['passwd'])) { - $passwd = $_POST['passwd']; - } - $passwd_conf = ''; - if (isset($_POST['passwd_conf'])) { - $passwd_conf = $_POST['passwd_conf']; - } - $display = saveusers($uid, $_POST['username'], $_POST['fullname'], - $passwd, $passwd_conf, $_POST['email'], $_POST['regdate'], - $_POST['homepage'], $_POST['groups'], $delphoto, - $_POST['userstatus'], $_POST['oldstatus']); + $passwd = Geeklog\Input::post('passwd', ''); + $passwd_conf = Geeklog\Input::post('passwd_conf', ''); + $display = saveusers( + $uid, + Geeklog\Input::post('username'), + Geeklog\Input::post('fullname'), + $passwd, $passwd_conf, + Geeklog\Input::post('email'), + Geeklog\Input::post('regdate'), + Geeklog\Input::post('homepage'), + Geeklog\Input::post('groups'), $delphoto, + Geeklog\Input::post('userstatus'), + Geeklog\Input::post('oldstatus') + ); if (!empty($display)) { $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG28[22])); } } -} elseif ($mode == 'edit') { - $msg = ''; - if (isset($_GET['msg'])) { - $msg = COM_applyFilter($_GET['msg'], true); - } - $uid = ''; - if (isset($_GET['uid'])) { - $uid = COM_applyFilter($_GET['uid'], true); - } +} elseif ($mode === 'edit') { + $msg = Geeklog\Input::fGet('msg', ''); + $uid = (int) Geeklog\Input::fGet('uid', 0); if ($uid == 1) { COM_redirect($_CONF['site_admin_url'] . '/index.php'); } $display .= edituser($uid, $msg); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG28[1])); -} elseif (($mode == 'import') && SEC_checkToken()) { +} elseif (($mode === 'import') && SEC_checkToken()) { $display .= importusers(); -} elseif ($mode == 'importform') { +} elseif ($mode === 'importform') { $display .= display_batchAddform(); -} elseif ($mode == 'batchdelete') { +} elseif ($mode === 'batchdelete') { $display .= batchdelete(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG28[54])); } elseif (($mode == $LANG28[78]) && !empty($LANG28[78]) && SEC_checkToken()) { $msg = batchreminders(); $display .= COM_showMessage($msg) . batchdelete(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG28[11])); -} elseif (($mode == 'batchdeleteexec') && SEC_checkToken()) { +} elseif (($mode === 'batchdeleteexec') && SEC_checkToken()) { $msg = batchdeleteexec(); $display .= COM_showMessage($msg) . batchdelete(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG28[11])); @@ -1334,5 +1317,3 @@ function deleteUser ($uid) } COM_output($display); - -?> diff --git a/public_html/article.php b/public_html/article.php index 3629677d5..3067b3f4f 100644 --- a/public_html/article.php +++ b/public_html/article.php @@ -33,17 +33,17 @@ // +---------------------------------------------------------------------------+ /** -* This page is responsible for showing a single article in different modes which -* may, or may not, include the comments attached -* -* @author Jason Whittenburg -* @author Tony Bibbbs, tony AT tonybibbs DOT com -* @author Vincent Furia, vinny01 AT users DOT sourceforge DOT net -*/ + * This page is responsible for showing a single article in different modes which + * may, or may not, include the comments attached + * + * @author Jason Whittenburg + * @author Tony Bibbbs, tony AT tonybibbs DOT com + * @author Vincent Furia, vinny01 AT users DOT sourceforge DOT net + */ /** -* Geeklog common function library -*/ + * Geeklog common function library + */ require_once 'lib-common.php'; require_once $_CONF['path_system'] . 'lib-story.php'; require_once $_CONF['path_system'] . 'lib-comment.php'; @@ -61,55 +61,29 @@ CMT_updateCommentcodes(); $display = ''; -$order = ''; -$query = ''; -$reply = ''; -$page = 0; -$mode = ''; -if (isset($_POST['mode'])) { - $mode = COM_applyFilter($_POST['mode']); -} elseif (isset($_POST['format'])) { - $mode = COM_applyFilter($_POST['format']); -} +$mode = Geeklog\Input::fPost('mode', Geeklog\Input::fPost('format', '')); + if (!empty($mode)) { - if (isset($_POST['story'])) { - $sid = COM_applyFilter($_POST['story']); - } - if (isset($_POST['order'])) { - $order = COM_applyFilter($_POST['order']); - } - if (isset($_POST['query'])) { - $query = $_POST['query']; - } - if (isset($_POST['reply'])) { - $reply = COM_applyFilter($_POST['reply']); - } - if (isset($_POST['cpage'])) { - $page = COM_applyFilter($_POST['cpage'], true); - } + $sid = Geeklog\Input::fPost('story', ''); + $order = Geeklog\Input::fPost('order', ''); + $query = Geeklog\Input::post('query', ''); + $reply = Geeklog\Input::fPost('reply', ''); + $page = (int) Geeklog\Input::fPost('cpage', 0); } else { - COM_setArgNames (array('story', 'mode')); + COM_setArgNames(array('story', 'mode')); $sid = COM_applyFilter(COM_getArgument('story')); $mode = COM_applyFilter(COM_getArgument('mode')); - if (isset($_GET['order'])) { - $order = COM_applyFilter($_GET['order']); - } - if (isset($_GET['query'])) { - $query = $_GET['query']; - } - if (isset($_GET['reply'])) { - $reply = COM_applyFilter($_GET['reply']); - } - if (isset($_GET['cpage'])) { - $page = COM_applyFilter($_GET['cpage'], true); - } + $order = Geeklog\Input::fGet('order', ''); + $query = Geeklog\Input::get('query', ''); + $reply = Geeklog\Input::fGet('reply', ''); + $page = (int) Geeklog\Input::fGet('cpage', 0); } if (!empty($_REQUEST['sid'])) { - $sid = COM_applyFilter($_REQUEST['sid']); + $sid = Geeklog\Input::fRequest('sid'); } if (empty($sid) && !empty($_POST['cmt_sid'])) { - $sid = COM_applyFilter($_POST['cmt_sid']); + $sid = Geeklog\Input::fPost('cmt_sid'); } if (empty($sid)) { COM_handle404(); @@ -129,10 +103,12 @@ $args = array( 'sid' => $sid, - 'mode' => 'view' + 'mode' => 'view', ); $output = STORY_LOADED_OK; + $svc_msg = array(); + $output = array(); $result = PLG_invokeService('story', 'get', $args, $output, $svc_msg); if ($result == PLG_RET_OK) { @@ -153,24 +129,24 @@ if ($output == STORY_PERMISSION_DENIED) { $display = COM_showMessageText($LANG_ACCESS['storydenialmsg'], $LANG_ACCESS['accessdenied']); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_ACCESS['accessdenied'])); - } elseif ($output == STORY_INVALID_SID ) { + } elseif ($output == STORY_INVALID_SID) { COM_handle404(); } elseif (($mode === 'print') && ($_CONF['hideprintericon'] == 0)) { $story_template = COM_newTemplate($_CONF['path_layout'] . 'article'); $story_template->set_file('article', 'printable.thtml'); if (XHTML != '') { $story_template->set_var('xmlns', - ' xmlns="http://www.w3.org/1999/xhtml"'); + ' xmlns="http://www.w3.org/1999/xhtml"'); } $story_template->set_var('direction', $LANG_DIRECTION); $story_template->set_var('page_title', $story->DisplayElements('page_title')); $story_template->set_var('story_title', - $story->DisplayElements('title')); + $story->DisplayElements('title')); header('Content-Type: text/html; charset=' . COM_getCharset()); header('X-XSS-Protection: 1; mode=block'); header('X-Content-Type-Options: nosniff'); - if (! empty($_CONF['frame_options'])) { + if (!empty($_CONF['frame_options'])) { header('X-FRAME-OPTIONS: ' . $_CONF['frame_options']); } @@ -182,17 +158,17 @@ $story_template->set_var('author', $authorname); $story_template->set_var('story_author', $authorname); $story_template->set_var('story_author_username', - $story->DisplayElements('username')); + $story->DisplayElements('username')); } $introtext = $story->DisplayElements('introtext'); - $bodytext = $story->DisplayElements('bodytext'); + $bodytext = $story->DisplayElements('bodytext'); if (empty($bodytext)) { $fulltext = $introtext; $fulltext_no_br = $introtext; } else { $fulltext = $introtext . '' - . $bodytext; + . $bodytext; $fulltext_no_br = $introtext . ' ' . $bodytext; } if ($story->DisplayElements('postmode') == 'plaintext') { @@ -203,7 +179,7 @@ } $story_template->set_var('story_introtext', $introtext); - $story_template->set_var('story_bodytext', $bodytext); + $story_template->set_var('story_bodytext', $bodytext); $story_template->set_var('story_text', $fulltext); $story_template->set_var('story_text_no_br', $fulltext_no_br); @@ -211,7 +187,7 @@ $story_template->set_var('site_slogan', $_CONF['site_slogan']); $story_template->set_var('story_id', $story->getSid()); $articleUrl = COM_buildUrl($_CONF['site_url'] - . '/article.php?story=' . $story->getSid()); + . '/article.php?story=' . $story->getSid()); if ($story->DisplayElements('commentcode') >= 0) { $commentsUrl = $articleUrl . '#comments'; $comments = $story->DisplayElements('comments'); @@ -219,22 +195,22 @@ $story_template->set_var('story_comments', $numComments); $story_template->set_var('comments_url', $commentsUrl); $story_template->set_var('comments_text', - $numComments . ' ' . $LANG01[3]); + $numComments . ' ' . $LANG01[3]); $story_template->set_var('comments_count', $numComments); $story_template->set_var('lang_comments', $LANG01[3]); $comments_with_count = sprintf($LANG01[121], $numComments); if ($comments > 0) { $comments_with_count = COM_createLink($comments_with_count, - $commentsUrl); + $commentsUrl); } $story_template->set_var('comments_with_count', - $comments_with_count); + $comments_with_count); } $story_template->set_var('lang_full_article', $LANG08[33]); $story_template->set_var('article_url', $articleUrl); $printable = COM_buildUrl($_CONF['site_url'] . '/article.php?story=' - . $story->getSid() . '&mode=print'); + . $story->getSid() . '&mode=print'); $story_template->set_var('printable_url', $printable); COM_setLangIdAndAttribute($story_template); @@ -244,39 +220,39 @@ } else { // Set page title $pagetitle = $story->DisplayElements('page_title'); - if(empty($pagetitle)) { + if (empty($pagetitle)) { $pagetitle = $story->DisplayElements('title'); } $headercode = ''; $permalink = COM_buildUrl($_CONF['site_url'] . '/article.php?story=' - . $story->getSid()); + . $story->getSid()); $headercode .= ''; + . XHTML . '>'; // Meta Tags if ($_CONF['meta_tags'] > 0) { $headercode .= LB . PLG_getMetaTags( - 'article', $story->getSid(), - array( - array( - 'name' => 'description', - 'content' => $story->DisplayElements('meta_description') - ), + 'article', $story->getSid(), array( - 'name' => 'keywords', - 'content' => $story->DisplayElements('meta_keywords') + array( + 'name' => 'description', + 'content' => $story->DisplayElements('meta_description'), + ), + array( + 'name' => 'keywords', + 'content' => $story->DisplayElements('meta_keywords'), + ), ) - ) - ); + ); } if ($story->DisplayElements('trackbackcode') == 0) { if ($_CONF['trackback_enabled']) { $trackbackurl = TRB_makeTrackbackUrl($story->getSid()); $headercode .= LB . '' . LB; + . TRB_trackbackRdf($permalink, $pagetitle, $trackbackurl) + . LB . '-->' . LB; } if ($_CONF['pingback_enabled']) { header('X-Pingback: ' . $_CONF['site_url'] . '/pingback.php'); @@ -284,12 +260,9 @@ } if (isset($_GET['msg'])) { - $msg = COM_applyFilter($_GET['msg'], true); + $msg = (int) Geeklog\Input::fGet('msg'); if ($msg > 0) { - $plugin = ''; - if (isset($_GET['plugin'])) { - $plugin = COM_applyFilter($_GET['plugin']); - } + $plugin = Geeklog\Input::fGet('plugin', ''); $display .= COM_showMessage($msg, $plugin); } } @@ -301,23 +274,24 @@ // Display whats related $story_template = COM_newTemplate($_CONF['path_layout'] . 'article'); - $story_template->set_file('article','article.thtml'); + $story_template->set_file('article', 'article.thtml'); $story_template->set_var('story_id', $story->getSid()); $story_template->set_var('story_title', $pagetitle); $story_options = array(); if (($_CONF['hideemailicon'] == 0) && (!COM_isAnonUser() || (($_CONF['loginrequired'] == 0) && - ($_CONF['emailstoryloginrequired'] == 0)))) { + ($_CONF['emailstoryloginrequired'] == 0))) + ) { $emailUrl = $_CONF['site_url'] . '/profiles.php?sid=' . $story->getSid() - . '&what=emailstory'; + . '&what=emailstory'; $story_options[] = COM_createLink($LANG11[2], $emailUrl); $story_template->set_var('email_story_url', $emailUrl); $story_template->set_var('lang_email_story', $LANG11[2]); $story_template->set_var('lang_email_story_alt', $LANG01[64]); } $printUrl = COM_buildUrl($_CONF['site_url'] - . '/article.php?story=' . $story->getSid() . '&mode=print'); + . '/article.php?story=' . $story->getSid() . '&mode=print'); if ($_CONF['hideprintericon'] == 0) { $story_options[] = COM_createLink($LANG11[3], $printUrl, array('rel' => 'nofollow')); $story_template->set_var('print_story_url', $printUrl); @@ -338,15 +312,16 @@ $feedClass .= '-rtl'; } $story_options[] = COM_createLink($feedTitle, $feedUrl, - array('type' => $feedType, - 'class' => $feedClass)); + array('type' => $feedType, + 'class' => $feedClass)); } } if (($_CONF['trackback_enabled'] || $_CONF['pingback_enabled'] || $_CONF['ping_enabled']) && SEC_hasRights('story.ping') && - ($story->displayElements('draft_flag') == 0) && - ($story->displayElements('day') < time ()) && - ($story->displayElements('perm_anon') != 0)) { + ($story->displayElements('draft_flag') == 0) && + ($story->displayElements('day') < time()) && + ($story->displayElements('perm_anon') != 0) + ) { // also check permissions for the topic $topic_anon = DB_getItem($_TABLES['topics'], 'perm_anon', @@ -355,33 +330,34 @@ // check special case: no link when Trackbacks are disabled for this // story AND pinging weblog directories is disabled if (($topic_anon != 0) && - (($story->displayElements('trackbackcode') >= 0) || - $_CONF['ping_enabled'])) { + (($story->displayElements('trackbackcode') >= 0) || + $_CONF['ping_enabled']) + ) { $url = $_CONF['site_admin_url'] - . '/trackback.php?mode=sendall&id=' . $story->getSid(); + . '/trackback.php?mode=sendall&id=' . $story->getSid(); $story_options[] = COM_createLink($LANG_TRB['send_trackback'], - $url); + $url); } } - /* - if (true) { // can subscribe - $commentSubscribeURL = ''; - $story_options[] = COM_createLink('Nubbies', $commentSubscribeURL, array('rel' => 'nofollow')); - $story_template->set_var('comment_subscribe_url', $commentSubscribeURL); - $story_template->set_var('lang_comment_subscribe', 'Nubbies'); - } - */ + /* + if (true) { // can subscribe + $commentSubscribeURL = ''; + $story_options[] = COM_createLink('Nubbies', $commentSubscribeURL, array('rel' => 'nofollow')); + $story_template->set_var('comment_subscribe_url', $commentSubscribeURL); + $story_template->set_var('lang_comment_subscribe', 'Nubbies'); + } + */ $related = STORY_whatsRelated($story->displayElements('related'), - $story->displayElements('uid'), - $story->getSid()); + $story->displayElements('uid'), + $story->getSid()); if (!empty($related)) { $related = COM_startBlock($LANG11[1], '', - COM_getBlockTemplate('whats_related_block', 'header')) + COM_getBlockTemplate('whats_related_block', 'header')) . $related . COM_endBlock(COM_getBlockTemplate('whats_related_block', 'footer')); } - if (count ($story_options) > 0) { + if (count($story_options) > 0) { $optionsblock = COM_startBlock($LANG11[4], '', COM_getBlockTemplate('story_options_block', 'header')) . COM_makeList($story_options, 'list-story-options') @@ -393,16 +369,16 @@ $story_template->set_var('whats_related', $related); $story_template->set_var('story_options', $optionsblock); $story_template->set_var('whats_related_story_options', - $related . $optionsblock); + $related . $optionsblock); // Another option here could be to figure out if story is first on page $tmpl = $_CONF['showfirstasfeatured'] ? 'featuredstorytext.thtml' : ''; $story_template->set_var('formatted_article', - STORY_renderArticle($story, 'n', $tmpl, $query)); + STORY_renderArticle($story, 'n', $tmpl, $query)); // display comments or not? if ($_CONF['allow_page_breaks'] == 1) { - if (!is_numeric($mode)){ + if (!is_numeric($mode)) { $story_page = 1; } else { $story_page = $mode; @@ -418,10 +394,10 @@ if ($page_break_count > 1) { $conf = $_CONF['page_break_comments']; if ( - ($conf ==='all') || - (($conf ==='first') && ($story_page == 1)) || - (($conf === 'last') && ($page_break_count == $story_page)) - ) { + ($conf === 'all') || + (($conf === 'first') && ($story_page == 1)) || + (($conf === 'last') && ($page_break_count == $story_page)) + ) { $show_comments = true; } else { $show_comments = false; @@ -437,29 +413,31 @@ if (($story->displayElements('commentcode') >= 0) && $show_comments) { $delete_option = (SEC_hasRights('story.edit') && ($story->getAccess() == 3)); $story_template->set_var('commentbar', - CMT_userComments($story->getSid(), $story->displayElements('title'), 'article', - $order, $mode, 0, $page, false, $delete_option, $story->displayElements('commentcode'))); + CMT_userComments($story->getSid(), $story->displayElements('title'), 'article', + $order, $mode, 0, $page, false, $delete_option, $story->displayElements('commentcode'))); } if ($_CONF['trackback_enabled'] && ($story->displayElements('trackbackcode') >= 0) && - $show_comments) { - if (SEC_hasRights ('story.ping')) { + $show_comments + ) { + if (SEC_hasRights('story.ping')) { if (($story->displayElements('draft_flag') == 0) && - ($story->displayElements('day') < time ())) { + ($story->displayElements('day') < time()) + ) { $url = $_CONF['site_admin_url'] - . '/trackback.php?mode=sendall&id=' . $story->getSid(); + . '/trackback.php?mode=sendall&id=' . $story->getSid(); $story_template->set_var('send_trackback_link', COM_createLink($LANG_TRB['send_trackback'], $url)); $story_template->set_var('send_trackback_url', $url); $story_template->set_var('lang_send_trackback_text', - $LANG_TRB['send_trackback']); + $LANG_TRB['send_trackback']); } } $permalink = COM_buildUrl($_CONF['site_url'] - . '/article.php?story=' . $story->getSid()); + . '/article.php?story=' . $story->getSid()); $story_template->set_var('trackback', - TRB_renderTrackbackComments($story->getSID(), 'article', - $story->displayElements('title'), $permalink)); + TRB_renderTrackbackComments($story->getSID(), 'article', + $story->displayElements('title'), $permalink)); } else { $story_template->set_var('trackback', ''); } @@ -472,7 +450,7 @@ array( 'pagetitle' => $pagetitle, 'breadcrumbs' => $breadcrumbs, - 'headercode' => $headercode + 'headercode' => $headercode, ) ); } diff --git a/public_html/calendar/event.php b/public_html/calendar/event.php index 075376e29..42c353d05 100644 --- a/public_html/calendar/event.php +++ b/public_html/calendar/event.php @@ -42,27 +42,25 @@ require_once $_CONF['path_system'] . 'classes/calendar.class.php'; /** -* Adds an event to the user's calendar -* -* The user has asked that an event be added to their personal -* calendar. Show a confirmation screen. -* -* @param string $eid event ID to add to user's calendar -* @return string HTML for confirmation form -* -*/ -function adduserevent ($eid) + * Adds an event to the user's calendar + * The user has asked that an event be added to their personal + * calendar. Show a confirmation screen. + * + * @param string $eid event ID to add to user's calendar + * @return string HTML for confirmation form + */ +function adduserevent($eid) { global $_CONF, $_TABLES, $LANG_CAL_1; $retval = ''; - $eventsql = "SELECT * FROM {$_TABLES['events']} WHERE eid='$eid'" . COM_getPermSql ('AND'); + $eventsql = "SELECT * FROM {$_TABLES['events']} WHERE eid='$eid'" . COM_getPermSql('AND'); $result = DB_query($eventsql); $nrows = DB_numRows($result); if ($nrows == 1) { - $retval .= COM_startBlock (sprintf ($LANG_CAL_1[11], - COM_getDisplayName())); + $retval .= COM_startBlock(sprintf($LANG_CAL_1[11], + COM_getDisplayName())); $A = DB_fetchArray($result); $cal_template = COM_newTemplate(CTL_plugin_templatePath('calendar')); $cal_template->set_file(array('addevent' => 'addevent.thtml')); @@ -72,7 +70,7 @@ function adduserevent ($eid) $event_title = stripslashes($A['title']); if (!empty($A['url']) && ($A['url'] != 'http://')) { $event_title_and_url = COM_createLink($event_title, $A['url'], - array('class' => 'url')); + array('class' => 'url')); $cal_template->set_var('event_url', $A['url']); $cal_template->set_var('event_begin_anchortag', ''); @@ -98,27 +96,27 @@ function adduserevent ($eid) $cal_template->set_var('event_end', strftime($_CONF['shortdate'], $theend[1])); } - $cal_template->set_var('lang_where',$LANG_CAL_1[4]); + $cal_template->set_var('lang_where', $LANG_CAL_1[4]); $location = stripslashes($A['location']) . '' - . stripslashes ($A['address1']) . '' - . stripslashes ($A['address2']) . '' - . stripslashes ($A['city']) - . ', ' . stripslashes($A['state']) . ' ' . $A['zipcode']; + . stripslashes($A['address1']) . '' + . stripslashes($A['address2']) . '' + . stripslashes($A['city']) + . ', ' . stripslashes($A['state']) . ' ' . $A['zipcode']; $cal_template->set_var('event_location', $location); $cal_template->set_var('lang_description', $LANG_CAL_1[5]); - $description = stripslashes ($A['description']); + $description = stripslashes($A['description']); if (empty($A['postmode']) || ($A['postmode'] == 'plaintext')) { $description = COM_nl2br($description); } - $cal_template->set_var ('event_description', - PLG_replaceTags ($description)); + $cal_template->set_var('event_description', + PLG_replaceTags($description)); $cal_template->set_var('event_id', $eid); $cal_template->set_var('lang_addtomycalendar', $LANG_CAL_1[9]); $cal_template->set_var('gltoken_name', CSRF_TOKEN); $cal_template->set_var('gltoken', SEC_createToken()); $cal_template->parse('output', 'addevent'); $retval .= $cal_template->finish($cal_template->get_var('output')); - $retval .= COM_endBlock (); + $retval .= COM_endBlock(); } else { $retval .= COM_showMessage(23); } @@ -127,33 +125,32 @@ function adduserevent ($eid) } /** -* Save an event to user's personal calendar -* -* User has seen the confirmation screen and they still wants to -* add this event to their calendar. Actually save it now. -* -* @param string $eid ID of event to save -*/ -function saveuserevent ($eid) + * Save an event to user's personal calendar + * User has seen the confirmation screen and they still wants to + * add this event to their calendar. Actually save it now. + * + * @param string $eid ID of event to save + */ +function saveuserevent($eid) { global $_CONF, $_TABLES, $_USER; - if (! COM_isAnonUser()) { + if (!COM_isAnonUser()) { // Try to delete the event first in case it has already been added - DB_query ("DELETE FROM {$_TABLES['personal_events']} WHERE uid={$_USER['uid']} AND eid='$eid'"); + DB_query("DELETE FROM {$_TABLES['personal_events']} WHERE uid={$_USER['uid']} AND eid='$eid'"); - $result = DB_query ("SELECT eid FROM {$_TABLES['events']} WHERE (eid = '$eid')" . COM_getPermSql ('AND')); - if (DB_numRows ($result) == 1) { + $result = DB_query("SELECT eid FROM {$_TABLES['events']} WHERE (eid = '$eid')" . COM_getPermSql('AND')); + if (DB_numRows($result) == 1) { $savesql = "INSERT INTO {$_TABLES['personal_events']} " - . "(eid,uid,title,event_type,datestart,dateend,timestart,timeend,allday,location,address1,address2,city,state," - . "zipcode,url,description,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon) SELECT eid," - . $_USER['uid'] . ",title,event_type,datestart,dateend,timestart,timeend,allday,location,address1,address2," - . "city,state,zipcode,url,description,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon FROM " - . "{$_TABLES['events']} WHERE eid = '{$eid}'"; + . "(eid,uid,title,event_type,datestart,dateend,timestart,timeend,allday,location,address1,address2,city,state," + . "zipcode,url,description,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon) SELECT eid," + . $_USER['uid'] . ",title,event_type,datestart,dateend,timestart,timeend,allday,location,address1,address2," + . "city,state,zipcode,url,description,group_id,owner_id,perm_owner,perm_group,perm_members,perm_anon FROM " + . "{$_TABLES['events']} WHERE eid = '{$eid}'"; - DB_query ($savesql); + DB_query($savesql); COM_redirect($_CONF['site_url'] . '/calendar/index.php?mode=personal&msg=24'); } } @@ -162,25 +159,24 @@ function saveuserevent ($eid) } /** -* Allows user to edit a personal calendar event -* -* @param array $A Record to display -* @return string HTML for event editor -* -*/ -function editpersonalevent ($A) + * Allows user to edit a personal calendar event + * + * @param array $A Record to display + * @return string HTML for event editor + */ +function editpersonalevent($A) { global $_CONF, $_CA_CONF, $LANG_CAL_1; $cal_templates = COM_newTemplate(CTL_plugin_templatePath('calendar')); - $cal_templates->set_file('form','editpersonalevent.thtml'); + $cal_templates->set_file('form', 'editpersonalevent.thtml'); - $cal_templates->set_var ('lang_title', $LANG_CAL_1[28]); - $title = stripslashes ($A['title']); - $title = str_replace ('{', '{', $title); - $title = str_replace ('}', '}', $title); - $title = str_replace ('"', '"', $title); - $cal_templates->set_var ('event_title', $title); + $cal_templates->set_var('lang_title', $LANG_CAL_1[28]); + $title = stripslashes($A['title']); + $title = str_replace('{', '{', $title); + $title = str_replace('}', '}', $title); + $title = str_replace('"', '"', $title); + $cal_templates->set_var('event_title', $title); $cal_templates->set_var('lang_eventtype', $LANG_CAL_1[37]); $type_options = CALENDAR_eventTypeList($A['event_type']); @@ -191,92 +187,92 @@ function editpersonalevent ($A) $cal_templates->set_var('lang_starttime', $LANG_CAL_1[30]); $A['startdate'] = $A['datestart'] . ' ' . $A['timestart']; - $start_month = date ('n', strtotime ($A['startdate'])); - $month_options = COM_getMonthFormOptions ($start_month); - $cal_templates->set_var ('startmonth_options', $month_options); + $start_month = date('n', strtotime($A['startdate'])); + $month_options = COM_getMonthFormOptions($start_month); + $cal_templates->set_var('startmonth_options', $month_options); - $start_day = date ('j', strtotime ($A['startdate'])); - $day_options = COM_getDayFormOptions ($start_day); + $start_day = date('j', strtotime($A['startdate'])); + $day_options = COM_getDayFormOptions($start_day); $cal_templates->set_var('startday_options', $day_options); - $start_year = date ('Y', strtotime ($A['startdate'])); - $year_options = COM_getYearFormOptions ($start_year); + $start_year = date('Y', strtotime($A['startdate'])); + $year_options = COM_getYearFormOptions($start_year); $cal_templates->set_var('startyear_options', $year_options); - if (isset ($_CA_CONF['hour_mode']) && ($_CA_CONF['hour_mode'] == 24)) { - $start_hour = date ('H', strtotime ($A['startdate'])); - $hour_options = COM_getHourFormOptions ($start_hour, 24); - $cal_templates->set_var ('starthour_options', $hour_options); + if (isset($_CA_CONF['hour_mode']) && ($_CA_CONF['hour_mode'] == 24)) { + $start_hour = date('H', strtotime($A['startdate'])); + $hour_options = COM_getHourFormOptions($start_hour, 24); + $cal_templates->set_var('starthour_options', $hour_options); } else { - $start_hour = date ('g', strtotime ($A['startdate'])); - $hour_options = COM_getHourFormOptions ($start_hour); - $cal_templates->set_var ('starthour_options', $hour_options); + $start_hour = date('g', strtotime($A['startdate'])); + $hour_options = COM_getHourFormOptions($start_hour); + $cal_templates->set_var('starthour_options', $hour_options); } - $startmin = intval (date ('i', strtotime ($A['startdate'])) / 15) * 15; - $cal_templates->set_var ('startminute_options', - COM_getMinuteFormOptions ($startmin, 15)); + $startmin = intval(date('i', strtotime($A['startdate'])) / 15) * 15; + $cal_templates->set_var('startminute_options', + COM_getMinuteFormOptions($startmin, 15)); - $ampm = date ('a', strtotime ($A['startdate'])); - $cal_templates->set_var ('startampm_selection', - COM_getAmPmFormSelection ('startampm_selection', $ampm)); + $ampm = date('a', strtotime($A['startdate'])); + $cal_templates->set_var('startampm_selection', + COM_getAmPmFormSelection('startampm_selection', $ampm)); // Handle end date/time $cal_templates->set_var('lang_enddate', $LANG_CAL_1[18]); $cal_templates->set_var('lang_endtime', $LANG_CAL_1[29]); $A['enddate'] = $A['dateend'] . ' ' . $A['timeend']; - $end_month = date ('n', strtotime ($A['enddate'])); - $month_options = COM_getMonthFormOptions ($end_month); - $cal_templates->set_var ('endmonth_options', $month_options); + $end_month = date('n', strtotime($A['enddate'])); + $month_options = COM_getMonthFormOptions($end_month); + $cal_templates->set_var('endmonth_options', $month_options); - $end_day = date ('j', strtotime ($A['enddate'])); - $day_options = COM_getDayFormOptions ($end_day); - $cal_templates->set_var ('endday_options', $day_options); + $end_day = date('j', strtotime($A['enddate'])); + $day_options = COM_getDayFormOptions($end_day); + $cal_templates->set_var('endday_options', $day_options); - $end_year = date ('Y', strtotime ($A['enddate'])); - $year_options = COM_getYearFormOptions ($end_year); - $cal_templates->set_var ('endyear_options', $year_options); + $end_year = date('Y', strtotime($A['enddate'])); + $year_options = COM_getYearFormOptions($end_year); + $cal_templates->set_var('endyear_options', $year_options); - if (isset ($_CA_CONF['hour_mode']) && ($_CA_CONF['hour_mode'] == 24)) { - $end_hour = date ('H', strtotime ($A['enddate'])); - $hour_options = COM_getHourFormOptions ($end_hour, 24); - $cal_templates->set_var ('endhour_options', $hour_options); + if (isset($_CA_CONF['hour_mode']) && ($_CA_CONF['hour_mode'] == 24)) { + $end_hour = date('H', strtotime($A['enddate'])); + $hour_options = COM_getHourFormOptions($end_hour, 24); + $cal_templates->set_var('endhour_options', $hour_options); } else { - $end_hour = date ('g', strtotime ($A['enddate'])); - $hour_options = COM_getHourFormOptions ($end_hour); - $cal_templates->set_var ('endhour_options', $hour_options); + $end_hour = date('g', strtotime($A['enddate'])); + $hour_options = COM_getHourFormOptions($end_hour); + $cal_templates->set_var('endhour_options', $hour_options); } - $endmin = intval (date ('i', strtotime ($A['enddate'])) / 15) * 15; - $cal_templates->set_var ('endminute_options', - COM_getMinuteFormOptions ($endmin, 15)); + $endmin = intval(date('i', strtotime($A['enddate'])) / 15) * 15; + $cal_templates->set_var('endminute_options', + COM_getMinuteFormOptions($endmin, 15)); - $ampm = date ('a', strtotime ($A['enddate'])); - $cal_templates->set_var ('endampm_selection', - COM_getAmPmFormSelection ('endampm_selection', $ampm)); + $ampm = date('a', strtotime($A['enddate'])); + $cal_templates->set_var('endampm_selection', + COM_getAmPmFormSelection('endampm_selection', $ampm)); - $cal_templates->set_var ('lang_alldayevent', $LANG_CAL_1[31]); + $cal_templates->set_var('lang_alldayevent', $LANG_CAL_1[31]); if ($A['allday'] == 1) { - $cal_templates->set_var ('allday_checked', 'checked="checked"'); + $cal_templates->set_var('allday_checked', 'checked="checked"'); } else { - $cal_templates->set_var ('allday_checked', ''); + $cal_templates->set_var('allday_checked', ''); } - $cal_templates->set_var('lang_location',$LANG_CAL_1[39]); - $cal_templates->set_var('event_location', stripslashes ($A['location'])); + $cal_templates->set_var('lang_location', $LANG_CAL_1[39]); + $cal_templates->set_var('event_location', stripslashes($A['location'])); $cal_templates->set_var('lang_addressline1', $LANG_CAL_1[32]); - $cal_templates->set_var('event_address1', stripslashes ($A['address1'])); + $cal_templates->set_var('event_address1', stripslashes($A['address1'])); $cal_templates->set_var('lang_addressline2', $LANG_CAL_1[33]); - $cal_templates->set_var('event_address2', stripslashes ($A['address2'])); + $cal_templates->set_var('event_address2', stripslashes($A['address2'])); $cal_templates->set_var('lang_city', $LANG_CAL_1[34]); - $cal_templates->set_var('event_city', stripslashes ($A['city'])); + $cal_templates->set_var('event_city', stripslashes($A['city'])); $cal_templates->set_var('lang_state', $LANG_CAL_1[35]); $cal_templates->set_var('state_options', ''); - $cal_templates->set_var('event_state', stripslashes ($A['state'])); + $cal_templates->set_var('event_state', stripslashes($A['state'])); $cal_templates->set_var('lang_zipcode', $LANG_CAL_1[36]); $cal_templates->set_var('event_zipcode', $A['zipcode']); @@ -286,433 +282,400 @@ function editpersonalevent ($A) $cal_templates->set_var('lang_description', $LANG_CAL_1[5]); $cal_templates->set_var('event_description', - COM_nl2br(stripslashes($A['description']))); + COM_nl2br(stripslashes($A['description']))); $cal_templates->set_var('lang_htmlnotallowed', $LANG_CAL_1[44]); $cal_templates->set_var('lang_submit', $LANG_CAL_1[45]); $cal_templates->set_var('lang_delete', $LANG_CAL_1[51]); $cal_templates->set_var('eid', $A['eid']); $cal_templates->set_var('uid', $A['uid']); - if (isset ($_CA_CONF['hour_mode']) && ($_CA_CONF['hour_mode'] == 24)) { - $cal_templates->set_var ('hour_mode', 24); + if (isset($_CA_CONF['hour_mode']) && ($_CA_CONF['hour_mode'] == 24)) { + $cal_templates->set_var('hour_mode', 24); } else { - $cal_templates->set_var ('hour_mode', 12); + $cal_templates->set_var('hour_mode', 12); } $cal_templates->set_var('gltoken_name', CSRF_TOKEN); $cal_templates->set_var('gltoken', SEC_createToken()); - return $cal_templates->parse ('output', 'form'); + return $cal_templates->parse('output', 'form'); } /** -* Set localised day and month names. -* -* @param object $aCalendar reference(!) to a Calendar object -* -*/ -function setCalendarLanguage (&$aCalendar) + * Set localised day and month names. + * + * @param object $aCalendar reference(!) to a Calendar object + */ +function setCalendarLanguage(&$aCalendar) { global $LANG_WEEK, $LANG_MONTH, $LANG_CAL_2; - $lang_days = array ('sunday' => $LANG_WEEK[1], - 'monday' => $LANG_WEEK[2], - 'tuesday' => $LANG_WEEK[3], - 'wednesday' => $LANG_WEEK[4], - 'thursday' => $LANG_WEEK[5], - 'friday' => $LANG_WEEK[6], - 'saturday' => $LANG_WEEK[7]); - $lang_months = array ('january' => $LANG_MONTH[1], - 'february' => $LANG_MONTH[2], - 'march' => $LANG_MONTH[3], - 'april' => $LANG_MONTH[4], - 'may' => $LANG_MONTH[5], - 'june' => $LANG_MONTH[6], - 'july' => $LANG_MONTH[7], - 'august' => $LANG_MONTH[8], - 'september' => $LANG_MONTH[9], - 'october' => $LANG_MONTH[10], - 'november' => $LANG_MONTH[11], - 'december' => $LANG_MONTH[12]); - $aCalendar->setLanguage ($lang_days, $lang_months); + $lang_days = array('sunday' => $LANG_WEEK[1], + 'monday' => $LANG_WEEK[2], + 'tuesday' => $LANG_WEEK[3], + 'wednesday' => $LANG_WEEK[4], + 'thursday' => $LANG_WEEK[5], + 'friday' => $LANG_WEEK[6], + 'saturday' => $LANG_WEEK[7]); + $lang_months = array('january' => $LANG_MONTH[1], + 'february' => $LANG_MONTH[2], + 'march' => $LANG_MONTH[3], + 'april' => $LANG_MONTH[4], + 'may' => $LANG_MONTH[5], + 'june' => $LANG_MONTH[6], + 'july' => $LANG_MONTH[7], + 'august' => $LANG_MONTH[8], + 'september' => $LANG_MONTH[9], + 'october' => $LANG_MONTH[10], + 'november' => $LANG_MONTH[11], + 'december' => $LANG_MONTH[12]); + $aCalendar->setLanguage($lang_days, $lang_months); } // MAIN - $display = ''; - -$action = ''; -if (isset ($_REQUEST['action'])) { - $action = COM_applyFilter ($_REQUEST['action']); -} +$action = Geeklog\Input::fRequest('action', ''); switch ($action) { -case 'addevent': - if (($_CA_CONF['personalcalendars'] == 1) && !COM_isAnonUser()) { - $eid = COM_applyFilter ($_GET['eid']); - if (!empty ($eid)) { - $display .= adduserevent ($eid); + case 'addevent': + if (($_CA_CONF['personalcalendars'] == 1) && !COM_isAnonUser()) { + $eid = Geeklog\Input::fGet('eid'); + if (!empty($eid)) { + $display .= adduserevent($eid); + } else { + $display .= COM_showMessage(23); + } + $display = COM_createHTMLDocument($display); } else { - $display .= COM_showMessage (23); + COM_redirect($_CONF['site_url'] . '/index.php'); } - $display = COM_createHTMLDocument($display); - } else { - COM_redirect($_CONF['site_url'] . '/index.php'); - } - break; + break; -case 'saveuserevent': - if (($_CA_CONF['personalcalendars'] == 1) && SEC_checkToken()) { - $eid = COM_applyFilter ($_POST['eid']); - if (!empty ($eid)) { - $display .= saveuserevent ($eid); + case 'saveuserevent': + if (($_CA_CONF['personalcalendars'] == 1) && SEC_checkToken()) { + $eid = Geeklog\Input::fPost('eid'); + if (!empty($eid)) { + $display .= saveuserevent($eid); + } else { + $display .= COM_showMessage(23); + $display = COM_createHTMLDocument($display); + } } else { - $display .= COM_showMessage (23); - $display = COM_createHTMLDocument($display); + COM_redirect($_CONF['site_url'] . '/index.php'); } - } else { - COM_redirect($_CONF['site_url'] . '/index.php'); - } - break; + break; -case $LANG_CAL_1[45]: // save edited personal event - if (!empty($LANG_CAL_1[45]) && ($_CA_CONF['personalcalendars'] == 1) && + case $LANG_CAL_1[45]: // save edited personal event + if (!empty($LANG_CAL_1[45]) && ($_CA_CONF['personalcalendars'] == 1) && !COM_isAnonUser() && - (isset ($_POST['calendar_type']) && - ($_POST['calendar_type'] == 'personal')) && SEC_checkToken()) { - $display = plugin_savesubmission_calendar ($_POST); - } else { - COM_redirect($_CONF['site_url'] . '/index.php'); - } - break; - -case 'deleteevent': -case $LANG_CAL_1[51]: - if (($_CA_CONF['personalcalendars'] == 1) && SEC_checkToken()) { - $eid = COM_applyFilter ($_REQUEST['eid']); - if (!empty($eid) && !COM_isAnonUser()) { - DB_query("DELETE FROM {$_TABLES['personal_events']} WHERE uid={$_USER['uid']} AND eid='$eid'"); - COM_redirect($_CONF['site_url'] . '/calendar/index.php?mode=personal&msg=26'); + (Geeklog\Input::post('calendar_type') === 'personal') && SEC_checkToken() + ) { + $display = plugin_savesubmission_calendar($_POST); } else { COM_redirect($_CONF['site_url'] . '/index.php'); } - } else { - COM_redirect($_CONF['site_url'] . '/index.php'); - } - break; - -case 'edit': - if ($_CA_CONF['personalcalendars'] == 1) { - $eid = COM_applyFilter ($_GET['eid']); - if (!empty($eid) && !COM_isAnonUser()) { - $result = DB_query ("SELECT * FROM {$_TABLES['personal_events']} WHERE (eid = '$eid') AND (uid = {$_USER['uid']})"); - if (DB_numRows ($result) == 1) { - $A = DB_fetchArray ($result); - $display .= COM_startBlock ($LANG_CAL_2[38]) - . editpersonalevent ($A) - . COM_endBlock (); - $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_CAL_2[38])); + break; + + case 'deleteevent': + case $LANG_CAL_1[51]: + if (($_CA_CONF['personalcalendars'] == 1) && SEC_checkToken()) { + $eid = Geeklog\Input::fRequest('eid'); + if (!empty($eid) && !COM_isAnonUser()) { + DB_query("DELETE FROM {$_TABLES['personal_events']} WHERE uid={$_USER['uid']} AND eid='$eid'"); + COM_redirect($_CONF['site_url'] . '/calendar/index.php?mode=personal&msg=26'); } else { COM_redirect($_CONF['site_url'] . '/index.php'); } } else { COM_redirect($_CONF['site_url'] . '/index.php'); } - } else { - COM_redirect($_CONF['site_url'] . '/index.php'); - } - break; - -default: - $mode = ''; - if (isset ($_GET['mode'])) { - $mode = COM_applyFilter ($_GET['mode']); - } - $eid = ''; - if (isset ($_GET['eid'])) { - $eid = COM_applyFilter ($_GET['eid']); - } - $query = ''; - if (isset($_GET['query'])) { - $query = COM_applyFilter($_GET['query']); - } - if (!empty ($eid)) { - if (($mode == 'personal') && ($_CA_CONF['personalcalendars'] == 1) && - !COM_isAnonUser()) { - $datesql = "SELECT * FROM {$_TABLES['personal_events']} " - . "WHERE (eid = '$eid') AND (uid = {$_USER['uid']})"; - $pagetitle = $LANG_CAL_2[28] . ' ' . COM_getDisplayName(); - } else { - $datesql = "SELECT * FROM {$_TABLES['events']} WHERE eid = '$eid'"; - if (strpos ($LANG_CAL_2[9], '%') === false) { - $pagetitle = $LANG_CAL_2[9]; + break; + + case 'edit': + if ($_CA_CONF['personalcalendars'] == 1) { + $eid = Geeklog\Input::fGet('eid'); + if (!empty($eid) && !COM_isAnonUser()) { + $result = DB_query("SELECT * FROM {$_TABLES['personal_events']} WHERE (eid = '$eid') AND (uid = {$_USER['uid']})"); + if (DB_numRows($result) == 1) { + $A = DB_fetchArray($result); + $display .= COM_startBlock($LANG_CAL_2[38]) + . editpersonalevent($A) + . COM_endBlock(); + $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_CAL_2[38])); + } else { + COM_redirect($_CONF['site_url'] . '/index.php'); + } } else { - $pagetitle = sprintf ($LANG_CAL_2[9], $_CONF['site_name']); + COM_redirect($_CONF['site_url'] . '/index.php'); } - DB_query ("UPDATE {$_TABLES['events']} SET hits = hits + 1 WHERE eid = '$eid'"); + } else { + COM_redirect($_CONF['site_url'] . '/index.php'); } + break; + + default: + $mode = Geeklog\Input::fGet('mode', ''); + $eid = Geeklog\Input::fGet('eid', ''); + $query = Geeklog\Input::fGet('query', ''); + if (!empty($eid)) { + if (($mode === 'personal') && ($_CA_CONF['personalcalendars'] == 1) && !COM_isAnonUser()) { + $datesql = "SELECT * FROM {$_TABLES['personal_events']} " + . "WHERE (eid = '$eid') AND (uid = {$_USER['uid']})"; + $pagetitle = $LANG_CAL_2[28] . ' ' . COM_getDisplayName(); + } else { + $datesql = "SELECT * FROM {$_TABLES['events']} WHERE eid = '$eid'"; + if (strpos($LANG_CAL_2[9], '%') === false) { + $pagetitle = $LANG_CAL_2[9]; + } else { + $pagetitle = sprintf($LANG_CAL_2[9], $_CONF['site_name']); + } + DB_query("UPDATE {$_TABLES['events']} SET hits = hits + 1 WHERE eid = '$eid'"); + } - if (isset($_GET['msg'])) { - $msg = COM_applyFilter($_GET['msg'], true); - if ($msg > 0) { - $display .= COM_showMessage($msg, 'calendar'); + if (isset($_GET['msg'])) { + $msg = (int) Geeklog\Input::fGet('msg', 0); + if ($msg > 0) { + $display .= COM_showMessage($msg, 'calendar'); + } } - } - $display .= COM_startBlock($pagetitle); + $display .= COM_startBlock($pagetitle); - } else { - $year = 0; - if (isset ($_GET['year'])) { - $year = COM_applyFilter ($_GET['year'], true); - } - $month = 0; - if (isset ($_GET['month'])) { - $month = COM_applyFilter ($_GET['month'], true); - } - $day = 0; - if (isset ($_GET['day'])) { - $day = COM_applyFilter ($_GET['day'], true); - } - if (($year == 0) || ($month == 0) || ($day == 0)) { - $year = date ('Y'); - $month = date ('n'); - $day = date ('j'); - } + } else { + $year = (int) Geeklog\Input::fGet('year', 0); + $month = (int) Geeklog\Input::fGet('month', 0); + $day = (int) Geeklog\Input::fGet('day', 0); + if (($year == 0) || ($month == 0) || ($day == 0)) { + $currentTime = time(); + $year = date('Y', $currentTime); + $month = date('n', $currentTime); + $day = date('j', $currentTime); + } - $pagetitle = $LANG_CAL_2[10] . ' ' . strftime ($_CONF['shortdate'], - mktime (0, 0, 0, $month, $day, $year)); - $display .= COM_startBlock ($pagetitle); + $pagetitle = $LANG_CAL_2[10] . ' ' . strftime($_CONF['shortdate'], + mktime(0, 0, 0, $month, $day, $year)); + $display .= COM_startBlock($pagetitle); - $thedate = sprintf ('%4d-%02d-%02d', $year, $month, $day); - $datesql = "SELECT * FROM {$_TABLES['events']} " - . "WHERE \"$thedate\" BETWEEN DATE_FORMAT(datestart,'%Y-%m-%d') " - . "and DATE_FORMAT(dateend,'%Y-%m-%d') " - . "ORDER BY datestart ASC,timestart ASC,title"; - } - $cal_templates = COM_newTemplate(CTL_plugin_templatePath('calendar')); - $cal_templates->set_file (array ( + $thedate = sprintf('%4d-%02d-%02d', $year, $month, $day); + $datesql = "SELECT * FROM {$_TABLES['events']} " + . "WHERE \"$thedate\" BETWEEN DATE_FORMAT(datestart,'%Y-%m-%d') " + . "AND DATE_FORMAT(dateend,'%Y-%m-%d') " + . "ORDER BY datestart ASC,timestart ASC,title"; + } + $cal_templates = COM_newTemplate(CTL_plugin_templatePath('calendar')); + $cal_templates->set_file(array( 'events' => 'events.thtml', 'details' => 'eventdetails.thtml', - 'addremove' => 'addremoveevent.thtml' - )); + 'addremove' => 'addremoveevent.thtml', + )); - $cal_templates->set_var ('lang_addevent', $LANG_CAL_1[6]); - $cal_templates->set_var ('lang_backtocalendar', $LANG_CAL_1[15]); - if ($mode == 'personal') { - $cal_templates->set_var ('calendar_mode', '?mode=personal'); - } else { - $cal_templates->set_var ('calendar_mode', ''); - } + $cal_templates->set_var('lang_addevent', $LANG_CAL_1[6]); + $cal_templates->set_var('lang_backtocalendar', $LANG_CAL_1[15]); + if ($mode === 'personal') { + $cal_templates->set_var('calendar_mode', '?mode=personal'); + } else { + $cal_templates->set_var('calendar_mode', ''); + } - $result = DB_query($datesql); - $nrows = DB_numRows($result); - if ($nrows == 0) { - $cal_templates->set_var('lang_month',''); - $cal_templates->set_var('event_year',''); - $cal_templates->set_var('event_details',''); - $cal_templates->parse('output','events'); - $display .= $cal_templates->finish($cal_templates->get_var('output')); - $display .= $LANG_CAL_1[2]; - } else { - $cal = new Calendar(); - setCalendarLanguage ($cal); - - $currentmonth = ''; - for ($i = 0; $i < $nrows; $i++) { - $A = DB_fetchArray($result); - if (SEC_hasAccess($A['owner_id'],$A['group_id'],$A['perm_owner'], - $A['perm_group'],$A['perm_members'],$A['perm_anon']) > 0) { - - if (strftime('%B',strtotime($A['datestart'])) != $currentmonth) { - $str_month = $cal->getMonthName(strftime('%m',strtotime($A['datestart']))); - $cal_templates->set_var('lang_month', $str_month); - $cal_templates->set_var('event_year', strftime('%Y',strtotime($A['datestart']))); - $currentmonth = strftime('%B',strtotime($A['datestart'])); - } + $result = DB_query($datesql); + $nrows = DB_numRows($result); + if ($nrows == 0) { + $cal_templates->set_var('lang_month', ''); + $cal_templates->set_var('event_year', ''); + $cal_templates->set_var('event_details', ''); + $cal_templates->parse('output', 'events'); + $display .= $cal_templates->finish($cal_templates->get_var('output')); + $display .= $LANG_CAL_1[2]; + } else { + $cal = new Calendar(); + setCalendarLanguage($cal); + + $currentmonth = ''; + for ($i = 0; $i < $nrows; $i++) { + $A = DB_fetchArray($result); + if (SEC_hasAccess($A['owner_id'], $A['group_id'], $A['perm_owner'], + $A['perm_group'], $A['perm_members'], $A['perm_anon']) > 0 + ) { + + if (strftime('%B', strtotime($A['datestart'])) != $currentmonth) { + $str_month = $cal->getMonthName(strftime('%m', strtotime($A['datestart']))); + $cal_templates->set_var('lang_month', $str_month); + $cal_templates->set_var('event_year', strftime('%Y', strtotime($A['datestart']))); + $currentmonth = strftime('%B', strtotime($A['datestart'])); + } - $event_title = stripslashes($A['title']); - if (!empty($A['url'])) { - $event_title_and_url = COM_createLink($event_title, - $A['url'], array('class' => 'url')); - $cal_templates->set_var('event_url', $A['url']); - $cal_templates->set_var('event_begin_anchortag', - ''); - $cal_templates->set_var('event_end_anchortag', ''); - } else { - $event_title_and_url = $event_title; - $cal_templates->set_var('event_url', ''); - $cal_templates->set_var('event_begin_anchortag', ''); - $cal_templates->set_var('event_end_anchortag', ''); - } - $cal_templates->set_var('event_title', $event_title_and_url); - $cal_templates->set_var('event_title_only', $event_title); - - if (($_CA_CONF['personalcalendars'] == 1) - && !COM_isAnonUser()) { - $tmpresult = DB_query("SELECT * FROM {$_TABLES['personal_events']} WHERE eid='{$A['eid']}' AND uid={$_USER['uid']}"); - $tmpnrows = DB_numRows($tmpresult); - if ($tmpnrows > 0) { - $token = SEC_createToken(); - $addremovelink = $_CONF['site_url'] - . '/calendar/event.php?eid=' . $A['eid'] - . '&mode=personal&action=deleteevent&' - . CSRF_TOKEN . '=' . $token; - $addremovetxt = $LANG_CAL_1[10]; + $event_title = stripslashes($A['title']); + if (!empty($A['url'])) { + $event_title_and_url = COM_createLink($event_title, + $A['url'], array('class' => 'url')); + $cal_templates->set_var('event_url', $A['url']); + $cal_templates->set_var('event_begin_anchortag', + ''); + $cal_templates->set_var('event_end_anchortag', ''); } else { - $addremovelink = $_CONF['site_url'] - . '/calendar/event.php?eid=' . $A['eid'] - . '&mode=personal&action=addevent'; - $addremovetxt = $LANG_CAL_1[9]; + $event_title_and_url = $event_title; + $cal_templates->set_var('event_url', ''); + $cal_templates->set_var('event_begin_anchortag', ''); + $cal_templates->set_var('event_end_anchortag', ''); } - $cal_templates->set_var('lang_addremovefromcal', - COM_createLink($addremovetxt, $addremovelink)); - $cal_templates->parse('addremove_event','addremove'); - } - $cal_templates->set_var('lang_when', $LANG_CAL_1[3]); - if ($A['allday'] == 0) { - $thedatetime = COM_getUserDateTimeFormat ($A['datestart'] . - ' ' . $A['timestart']); - $cal_templates->set_var ('event_start', $thedatetime[0]); - - if ($A['datestart'] == $A['dateend']) { - $thedatetime[0] = strftime ($_CONF['timeonly'], - strtotime ($A['dateend'] . ' ' . $A['timeend'])); - } else { - $thedatetime = COM_getUserDateTimeFormat ($A['dateend'] - . ' ' . $A['timeend']); + $cal_templates->set_var('event_title', $event_title_and_url); + $cal_templates->set_var('event_title_only', $event_title); + + if (($_CA_CONF['personalcalendars'] == 1) && !COM_isAnonUser()) { + $tmpresult = DB_query("SELECT * FROM {$_TABLES['personal_events']} WHERE eid='{$A['eid']}' AND uid={$_USER['uid']}"); + $tmpnrows = DB_numRows($tmpresult); + if ($tmpnrows > 0) { + $token = SEC_createToken(); + $addremovelink = $_CONF['site_url'] + . '/calendar/event.php?eid=' . $A['eid'] + . '&mode=personal&action=deleteevent&' + . CSRF_TOKEN . '=' . $token; + $addremovetxt = $LANG_CAL_1[10]; + } else { + $addremovelink = $_CONF['site_url'] + . '/calendar/event.php?eid=' . $A['eid'] + . '&mode=personal&action=addevent'; + $addremovetxt = $LANG_CAL_1[9]; + } + $cal_templates->set_var('lang_addremovefromcal', + COM_createLink($addremovetxt, $addremovelink)); + $cal_templates->parse('addremove_event', 'addremove'); } - $cal_templates->set_var ('event_end', $thedatetime[0]); - } else if ($A['allday'] == 1 AND $A['datestart'] <> $A['dateend']) { - $thedatetime1 = strftime ('%A, ' . $_CONF['shortdate'], - strtotime ($A['datestart'])); - $cal_templates->set_var ('event_start', $thedatetime1); - $thedatetime2 = strftime ('%A, ' . $_CONF['shortdate'], - strtotime ($A['dateend'])); - $cal_templates->set_var ('event_end', $thedatetime2 - . ' ' . $LANG_CAL_2[26]); - } else { - $thedatetime = strftime ('%A, ' . $_CONF['shortdate'], - strtotime ($A['datestart'])); - $cal_templates->set_var ('event_start', $thedatetime); - $cal_templates->set_var ('event_end', $LANG_CAL_2[26]); - } - - // set the location variables - $cal_templates->set_var ('lang_where', $LANG_CAL_1[4]); - $cal_templates->set_var ('event_location', - stripslashes ($A['location'])); - $cal_templates->set_var ('event_address1', - stripslashes ($A['address1'])); - $cal_templates->set_var ('event_address2', - stripslashes ($A['address2'])); - $cal_templates->set_var ('event_zip', $A['zipcode']); - $cal_templates->set_var ('event_city', - stripslashes ($A['city'])); - $cal_templates->set_var ('event_state_only', $A['state']); - if (empty ($A['state']) || ($A['state'] == '--')) { - $cal_templates->set_var ('event_state', ''); - $cal_templates->set_var ('event_state_name', ''); - $cal_templates->set_var ('event_state_name_only', ''); - } else { - $cal_templates->set_var ('event_state', ', ' . $A['state']); - $cal_templates->set_var ('event_state_name', $A['state']); - $cal_templates->set_var ('event_state_name_only', - $A['state']); - } - - // now figure out which of the {brX} variables to set ... - $hasCityEtc = (!empty ($A['city']) || !empty ($A['zip']) || - !empty ($A['state'])); - if (empty ($A['location']) && empty ($A['address1']) && - empty ($A['address2']) && !$hasCityEtc) { - $cal_templates->set_var ('br0', ''); - $cal_templates->set_var ('br1', ''); - $cal_templates->set_var ('br2', ''); - } else { - if (empty ($A['location']) || (empty ($A['address1']) && - empty ($A['address2']) && !$hasCityEtc)) { - $cal_templates->set_var ('br0', ''); + $cal_templates->set_var('lang_when', $LANG_CAL_1[3]); + if ($A['allday'] == 0) { + $thedatetime = COM_getUserDateTimeFormat($A['datestart'] . ' ' . $A['timestart']); + $cal_templates->set_var('event_start', $thedatetime[0]); + + if ($A['datestart'] == $A['dateend']) { + $thedatetime = COM_getUserDateTimeFormat(strtotime($A['dateend'] . ' ' . $A['timeend']), 'timeonly'); + } else { + $thedatetime = COM_getUserDateTimeFormat(strtotime($A['dateend'] . ' ' . $A['timeend']), 'date'); + } + $cal_templates->set_var('event_end', $thedatetime[0]); + } elseif ($A['allday'] == 1 && $A['datestart'] != $A['dateend']) { + $thedatetime1 = strftime('%A, ' . $_CONF['shortdate'], strtotime($A['datestart'])); + $cal_templates->set_var('event_start', $thedatetime1); + $thedatetime2 = strftime('%A, ' . $_CONF['shortdate'], strtotime($A['dateend'])); + $cal_templates->set_var('event_end', $thedatetime2 . ' ' . $LANG_CAL_2[26]); } else { - $cal_templates->set_var ('br0', ''); + $thedatetime = strftime('%A, ' . $_CONF['shortdate'], strtotime($A['datestart'])); + $cal_templates->set_var('event_start', $thedatetime); + $cal_templates->set_var('event_end', $LANG_CAL_2[26]); } - if (empty ($A['address1']) || (empty ($A['address2']) && - !$hasCityEtc)) { - $cal_templates->set_var ('br1', ''); + + // set the location variables + $cal_templates->set_var('lang_where', $LANG_CAL_1[4]); + $cal_templates->set_var('event_location', stripslashes($A['location'])); + $cal_templates->set_var('event_address1', stripslashes($A['address1'])); + $cal_templates->set_var('event_address2', stripslashes($A['address2'])); + $cal_templates->set_var('event_zip', $A['zipcode']); + $cal_templates->set_var('event_city', stripslashes($A['city'])); + $cal_templates->set_var('event_state_only', $A['state']); + if (empty($A['state']) || ($A['state'] === '--')) { + $cal_templates->set_var('event_state', ''); + $cal_templates->set_var('event_state_name', ''); + $cal_templates->set_var('event_state_name_only', ''); } else { - $cal_templates->set_var ('br1', ''); + $cal_templates->set_var('event_state', ', ' . $A['state']); + $cal_templates->set_var('event_state_name', $A['state']); + $cal_templates->set_var('event_state_name_only', + $A['state']); } - if (empty ($A['address2']) || !$hasCityEtc) { - $cal_templates->set_var ('br2', ''); + + // now figure out which of the {brX} variables to set ... + $hasCityEtc = (!empty($A['city']) || !empty($A['zip']) || + !empty($A['state'])); + if (empty($A['location']) && empty($A['address1']) && + empty($A['address2']) && !$hasCityEtc + ) { + $cal_templates->set_var('br0', ''); + $cal_templates->set_var('br1', ''); + $cal_templates->set_var('br2', ''); } else { - $cal_templates->set_var ('br2', ''); + if (empty($A['location']) || (empty($A['address1']) && + empty($A['address2']) && !$hasCityEtc) + ) { + $cal_templates->set_var('br0', ''); + } else { + $cal_templates->set_var('br0', ''); + } + if (empty($A['address1']) || (empty($A['address2']) && + !$hasCityEtc) + ) { + $cal_templates->set_var('br1', ''); + } else { + $cal_templates->set_var('br1', ''); + } + if (empty($A['address2']) || !$hasCityEtc) { + $cal_templates->set_var('br2', ''); + } else { + $cal_templates->set_var('br2', ''); + } } - } - $cal_templates->set_var('lang_description', $LANG_CAL_1[5]); - $description = stripslashes($A['description']); - if (empty($A['postmode']) || ($A['postmode'] == 'plaintext')) { - $description = COM_nl2br($description); - } - $description = PLG_replaceTags($description); - if (!empty($query)) { - $description = COM_highlightQuery($description, $query); - } - $cal_templates->set_var ('event_description', $description); - $cal_templates->set_var ('lang_event_type', $LANG_CAL_1[37]); - $cal_templates->set_var ('event_type', $A['event_type']); - - if ($mode == 'personal') { - $editurl = $_CONF['site_url'] - . '/calendar/event.php?action=edit' . '&eid=' - . $A['eid']; - $cal_templates->set_var('event_edit', + $cal_templates->set_var('lang_description', $LANG_CAL_1[5]); + $description = stripslashes($A['description']); + if (empty($A['postmode']) || ($A['postmode'] == 'plaintext')) { + $description = COM_nl2br($description); + } + $description = PLG_replaceTags($description); + if (!empty($query)) { + $description = COM_highlightQuery($description, $query); + } + $cal_templates->set_var('event_description', $description); + $cal_templates->set_var('lang_event_type', $LANG_CAL_1[37]); + $cal_templates->set_var('event_type', $A['event_type']); + + if ($mode == 'personal') { + $editurl = $_CONF['site_url'] + . '/calendar/event.php?action=edit' . '&eid=' + . $A['eid']; + $cal_templates->set_var('event_edit', COM_createLink($LANG01[4], $editurl)); - $img = '' . $LANG01[4] . ''; - $cal_templates->set_var('edit_icon', + $img = '' . $LANG01[4] . ''; + $cal_templates->set_var('edit_icon', COM_createLink($img, $editurl)); - } else if ((SEC_hasAccess ($A['owner_id'], $A['group_id'], - $A['perm_owner'], $A['perm_group'], $A['perm_members'], - $A['perm_anon']) == 3) && SEC_hasRights ('calendar.edit')) { - $editurl = $_CONF['site_admin_url'] - . '/plugins/calendar/index.php?mode=edit&eid=' - . $A['eid']; - $cal_templates->set_var('event_edit', + } elseif ((SEC_hasAccess($A['owner_id'], $A['group_id'], + $A['perm_owner'], $A['perm_group'], $A['perm_members'], + $A['perm_anon']) == 3) && SEC_hasRights('calendar.edit') + ) { + $editurl = $_CONF['site_admin_url'] + . '/plugins/calendar/index.php?mode=edit&eid=' + . $A['eid']; + $cal_templates->set_var('event_edit', COM_createLink($LANG01[4], $editurl)); - $img = '' . $LANG01[4] . ''; - $cal_templates->set_var('edit_icon', + $img = '' . $LANG01[4] . ''; + $cal_templates->set_var('edit_icon', COM_createLink($img, $editurl)); - $cal_templates->set_var('hits_admin', - COM_numberFormat($A['hits'])); - $cal_templates->set_var('lang_hits_admin', $LANG10[30]); - } else { - $cal_templates->set_var('event_edit', ''); - $cal_templates->set_var('edit_icon', ''); - } - if ($mode == 'personal') { - // personal events don't have a hits counter - $cal_templates->set_var('lang_hits', ''); - $cal_templates->set_var('hits', ''); - } else { - $cal_templates->set_var('lang_hits', $LANG10[30]); - $cal_templates->set_var('hits', COM_numberFormat($A['hits'])); + $cal_templates->set_var('hits_admin', + COM_numberFormat($A['hits'])); + $cal_templates->set_var('lang_hits_admin', $LANG10[30]); + } else { + $cal_templates->set_var('event_edit', ''); + $cal_templates->set_var('edit_icon', ''); + } + if ($mode == 'personal') { + // personal events don't have a hits counter + $cal_templates->set_var('lang_hits', ''); + $cal_templates->set_var('hits', ''); + } else { + $cal_templates->set_var('lang_hits', $LANG10[30]); + $cal_templates->set_var('hits', COM_numberFormat($A['hits'])); + } + $cal_templates->parse('event_details', 'details', true); } - $cal_templates->parse ('event_details', 'details', true); } - } - $cal_templates->parse ('output', 'events'); - $display .= $cal_templates->finish ($cal_templates->get_var ('output')); - } + $cal_templates->parse('output', 'events'); + $display .= $cal_templates->finish($cal_templates->get_var('output')); + } - $display .= COM_endBlock(); - $display = COM_createHTMLDocument($display, array('pagetitle' => $pagetitle)); + $display .= COM_endBlock(); + $display = COM_createHTMLDocument($display, array('pagetitle' => $pagetitle)); } // end switch COM_output($display); - -?> diff --git a/public_html/calendar/index.php b/public_html/calendar/index.php index 9d9ccb2ae..65ac11abc 100644 --- a/public_html/calendar/index.php +++ b/public_html/calendar/index.php @@ -64,41 +64,40 @@ function getDayViewData($result, $cur_time = '') } // Initialize array - $hourcols = array(); - for ($i = 0; $i <= 23; $i++) { - $hourcols[$i] = 0; - } + $hourCols = array_fill(0, 24, 0); // Get data and increment counters - $thedata = array(); - $nrows = DB_numRows($result); + $theData = array(); + $numRows = DB_numRows($result); - $alldaydata = array(); - for ($i = 1; $i <= $nrows; $i++) { + $allDayData = array(); + for ($i = 1; $i <= $numRows; $i++) { $A = DB_fetchArray($result); - if ($A['allday'] == 1 OR (($A['datestart'] < date('Y-m-d', $cur_time)) AND ($A['dateend'] > date('Y-m-d', $cur_time)))) { + if (($A['allday'] == 1) || + (($A['datestart'] < date('Y-m-d', $cur_time)) && ($A['dateend'] > date('Y-m-d', $cur_time))) + ) { // This is an all day event - $alldaydata[$i] = $A; + $allDayData[$i] = $A; } else { // This is an event with start/end times - if ($A['datestart'] < date('Y-m-d', $cur_time) AND $A['dateend'] >= date('Y-m-d', $cur_time)) { - $starthour = '00'; + if (($A['datestart'] < date('Y-m-d', $cur_time)) && ($A['dateend'] >= date('Y-m-d', $cur_time))) { + $startHour = '00'; } else { - $starthour = date('G', strtotime($A['datestart'] . ' ' . $A['timestart'])); + $startHour = date('G', strtotime($A['datestart'] . ' ' . $A['timestart'])); } - $endhour = date('G', strtotime($A['dateend'] . ' ' . $A['timeend'])); + $endHour = date('G', strtotime($A['dateend'] . ' ' . $A['timeend'])); if (date('i', strtotime($A['dateend'] . ' ' . $A['timeend'])) == '00') { - $endhour = $endhour - 1; + $endHour = $endHour - 1; } - $hourcols[$starthour] = $hourcols[$starthour] + 1; - if ($hourcols[$starthour] > $max) { - $max = $hourcols[$starthour]; + $hourCols[$startHour] = $hourCols[$startHour] + 1; + if ($hourCols[$startHour] > $max) { + $max = $hourCols[$startHour]; } - $thedata[$i] = $A; + $theData[$i] = $A; } } - return array($hourcols, $thedata, $max, $alldaydata); + return array($hourCols, $theData, $max, $allDayData); } /** @@ -140,7 +139,7 @@ function setCalendarLanguage($aCalendar) * Returns an abbreviated day's name * * @param int $day 1 = Sunday, 2 = Monday, ... - * @return string abbreviated day's name (2 characters) + * @return string abbreviated day's name (2 characters) */ function shortDaysName($day) { @@ -186,7 +185,7 @@ function addMode($mode, $more = true) { $retval = ''; - if (!empty ($mode)) { + if (!empty($mode)) { $retval .= 'mode=' . $mode; if ($more) { $retval .= '&'; @@ -204,7 +203,7 @@ function addMode($mode, $more = true) * @param string $mode 'personal' for personal events * @param array $A event permissions and id * @param string $token security token - * @return string link or empty string + * @return string link or empty string */ function getDeleteImageLink($mode, $A, $token) { @@ -250,60 +249,67 @@ function getSmallCalendar($m, $y, $mode = '') global $_CONF; $retval = ''; - $mycal = new Calendar(); - setCalendarLanguage($mycal); - $mycal->setCalendarMatrix($m, $y); + $myCal = new Calendar(); + setCalendarLanguage($myCal); + $myCal->setCalendarMatrix($m, $y); - if (!empty ($mode)) { + if (!empty($mode)) { $mode = '&mode=' . $mode; } - $retval .= '' . LB + $retval .= '
' . PHP_EOL . '' . makeDaysHeadline() . LB; + . '' . makeDaysHeadline() . PHP_EOL; for ($i = 1; $i <= 6; $i++) { if ($i % 2 == 0) { - $tr = '' . LB; + $tr = '' . PHP_EOL; } else { - $tr = '' . LB; + $tr = '' . PHP_EOL; } $tr_sent = false; for ($j = 1; $j <= 7; $j++) { - $curday = $mycal->getDayData($i, $j); + $currentDay = $myCal->getDayData($i, $j); if (!$tr_sent) { - if (empty ($curday)) { - $retval .= '' . LB; + if (empty($currentDay)) { + $retval .= '' . PHP_EOL; } else { $retval .= $tr; } $tr_sent = true; } $retval .= '' . LB; + $retval .= '' . PHP_EOL; } - $retval .= '' . LB; + $retval .= '' . PHP_EOL; } - $retval .= '
' - . COM_createLink($mycal->getMonthName($m), $_CONF['site_url'] + . COM_createLink($myCal->getMonthName($m), $_CONF['site_url'] . '/calendar/index.php?month=' . $m . '&year=' . $y . $mode) - . '
daynumber; + $retval .= $currentDay->daynumber; } else { $retval .= ' class="smallcal-day-empty"> '; } - $retval .= '
' . LB; + $retval .= '' . PHP_EOL; return $retval; } /** * Builds Quick Add form + * + * @param Template $tpl + * @param int $month + * @param int $day + * @param int $year + * @param string $token + * @return Template */ function getQuickAdd($tpl, $month, $day, $year, $token) { @@ -313,28 +319,23 @@ function getQuickAdd($tpl, $month, $day, $year, $token) $tpl->set_var('day_options', COM_getDayFormOptions($day)); $tpl->set_var('year_options', COM_getYearFormOptions($year)); - $cur_hour = date('H', time()); - if ($cur_hour >= 12) { - $ampm = 'pm'; - } else { - $ampm = 'am'; - } - $cur_hour_24 = $cur_hour % 24; - if ($cur_hour > 12) { - $cur_hour = $cur_hour - 12; - } elseif ($cur_hour == 0) { - $cur_hour = 12; + $currentHour = date('H', time()); + $amPm = ($currentHour >= 12) ? 'pm' : 'am'; + $currentHour24 = $currentHour % 24; + if ($currentHour > 12) { + $currentHour = $currentHour - 12; + } elseif ($currentHour == 0) { + $currentHour = 12; } + if (isset($_CA_CONF['hour_mode']) && ($_CA_CONF['hour_mode'] == 24)) { $tpl->set_var('hour_mode', 24); - $tpl->set_var('hour_options', - COM_getHourFormOptions($cur_hour_24, 24)); + $tpl->set_var('hour_options', COM_getHourFormOptions($currentHour24, 24)); } else { $tpl->set_var('hour_mode', 12); - $tpl->set_var('hour_options', COM_getHourFormOptions($cur_hour)); + $tpl->set_var('hour_options', COM_getHourFormOptions($currentHour)); } - $tpl->set_var('startampm_selection', - COM_getAmPmFormSelection('start_ampm', $ampm)); + $tpl->set_var('startampm_selection', COM_getAmPmFormSelection('start_ampm', $amPm)); $cur_min = intval(date('i') / 15) * 15; $tpl->set_var('minute_options', COM_getMinuteFormOptions($cur_min, 15)); @@ -353,6 +354,11 @@ function getQuickAdd($tpl, $month, $day, $year, $token) /** * Returns timestamp for the prior sunday of a given day + * + * @param int $month + * @param int $day + * @param int $year + * @return array */ function getPriorSunday($month, $day, $year) { @@ -367,27 +373,19 @@ function getPriorSunday($month, $day, $year) } // MAIN -$mode = ''; -if (isset ($_REQUEST['mode'])) { - $mode = COM_applyFilter($_REQUEST['mode']); -} - -if ($mode != 'personal' && $mode != 'quickadd') { +$mode = Geeklog\Input::fRequest('mode', ''); +if ($mode !== 'personal' && $mode !== 'quickadd') { $mode = ''; } -if ($mode == 'personal') { - $pagetitle = $LANG_CAL_1[42]; -} else { - $pagetitle = $LANG_CAL_1[41]; -} +$pagetitle = ($mode === 'personal') ? $LANG_CAL_1[42] : $LANG_CAL_1[41]; // Set mode back to master if user refreshes screen after their session expires -if (($mode == 'personal') && COM_isAnonUser()) { +if (($mode === 'personal') && COM_isAnonUser()) { $mode = ''; } -if ($mode == 'personal' AND $_CA_CONF['personalcalendars'] == 0) { +if ($mode === 'personal' && $_CA_CONF['personalcalendars'] == 0) { // User is trying to use the personal calendar feature even though it isn't // turned on. $display .= $LANG_CAL_2[37]; @@ -399,39 +397,23 @@ function getPriorSunday($month, $day, $year) // after this point, we can safely assume that if $mode == 'personal', // the current user is actually allowed to use this personal calendar -$msg = 0; -if (isset ($_REQUEST['msg'])) { - $msg = COM_applyFilter($_REQUEST['msg'], true); -} +$msg = (int) Geeklog\Input::fRequest('msg', 0); if ($msg > 0) { $display .= COM_showMessage($msg, 'calendar'); } -$view = ''; -if (isset ($_REQUEST['view'])) { - $view = COM_applyFilter($_REQUEST['view']); -} - +$view = Geeklog\Input::fRequest('view', ''); if (!in_array($view, array('month', 'week', 'day', 'addentry', 'savepersonal'))) { $view = ''; } -$year = 0; -if (isset ($_REQUEST['year'])) { - $year = COM_applyFilter($_REQUEST['year'], true); -} -$month = 0; -if (isset ($_REQUEST['month'])) { - $month = COM_applyFilter($_REQUEST['month'], true); -} -$day = 0; -if (isset ($_REQUEST['day'])) { - $day = COM_applyFilter($_REQUEST['day'], true); -} +$year = (int) Geeklog\Input::fRequest('year', 0); +$month = (int) Geeklog\Input::fRequest('month', 0); +$day = (int) Geeklog\Input::fRequest('day', 0); $token = ''; -if ((($view == 'day') || ($view == 'week')) && - (($mode == 'personal') || SEC_hasRights('calendar.edit')) +if ((($view === 'day') || ($view === 'week')) && + (($mode === 'personal') || SEC_hasRights('calendar.edit')) ) { $token = SEC_createToken(); } @@ -439,23 +421,24 @@ function getPriorSunday($month, $day, $year) // Create new calendar object $cal = new Calendar(); -if ($view == 'week' AND (empty($month) AND empty($day) AND empty($year))) { +if (($view === 'week') && (empty($month) && empty($day) && empty($year))) { list($month, $day, $year) = getPriorSunday(date('m', time()), date('j', time()), date('Y', time())); } else { // Get current month - $currentmonth = date('m', time()); + $currentTimestamp = time(); + $currentmonth = date('m', $currentTimestamp); if (empty($month)) { $month = $currentmonth; } // Get current year - $currentyear = date('Y', time()); + $currentYear = date('Y', $currentTimestamp); if (empty($year)) { - $year = $currentyear; + $year = $currentYear; } // Get current day - $currentday = date('j', time()); + $currentday = date('j', $currentTimestamp); if (empty($day)) { $day = $currentday; } @@ -487,10 +470,12 @@ function getPriorSunday($month, $day, $year) switch ($view) { case 'day': $cal_templates = COM_newTemplate(CTL_plugin_templatePath('calendar', 'dayview')); - $cal_templates->set_file(array('column' => 'column.thtml', - 'event' => 'singleevent.thtml', - 'dayview' => 'dayview.thtml', - 'quickadd' => 'quickaddform.thtml')); + $cal_templates->set_file(array( + 'column' => 'column.thtml', + 'event' => 'singleevent.thtml', + 'dayview' => 'dayview.thtml', + 'quickadd' => 'quickaddform.thtml', + )); $cal_templates->set_var('mode', $mode); $cal_templates->set_var('lang_day', $LANG_CAL_2[39]); $cal_templates->set_var('lang_week', $LANG_CAL_2[40]); @@ -512,7 +497,7 @@ function getPriorSunday($month, $day, $year) $cal_templates->set_var('nextyear', strftime('%Y', $nextstamp)); $cal_templates->set_var('currentday', strftime('%A, %x', mktime(0, 0, 0, $month, $day, $year))); - if ($mode == 'personal') { + if ($mode === 'personal') { $cal_templates->set_var('calendar_title', '[' . $LANG_CAL_2[28] . ' ' . COM_getDisplayName()); $cal_templates->set_var('calendar_toggle', '| ' . COM_createLink($LANG_CAL_2[11], $_CONF['site_url'] @@ -520,7 +505,7 @@ function getPriorSunday($month, $day, $year) ); } else { $cal_templates->set_var('calendar_title', '[' . $_CONF['site_name'] . ' ' . $LANG_CAL_2[29]); - if (!COM_isAnonUser() AND $_CA_CONF['personalcalendars'] == 1) { + if (!COM_isAnonUser() && $_CA_CONF['personalcalendars'] == 1) { $cal_templates->set_var('calendar_toggle', '| ' . COM_createLink($LANG_CAL_2[12], $_CONF['site_url'] . "/calendar/index.php?mode=personal&view=day&month=$month&day=$day&year=$year") . ']' @@ -529,9 +514,12 @@ function getPriorSunday($month, $day, $year) $cal_templates->set_var('calendar_toggle', ']'); } } - $thedate = COM_getUserDateTimeFormat(mktime(0, 0, 0, $month, $day, $year)); - $cal_templates->set_var('week_num', strftime('%V', $thedate[1])); - if ($mode == 'personal') { + + // Set week number + $theDate = COM_getUserDateTimeFormat(mktime(0, 0, 0, $month, $day, $year)); + $cal_templates->set_var('week_num', strftime('%V', $theDate[1])); + + if ($mode === 'personal') { $calsql = "SELECT eid,title,datestart,dateend,timestart,timeend,allday,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['personal_events']} " . "WHERE (uid = {$_USER['uid']}) " . "AND ((allday=1 AND datestart = '$year-$month-$day') " @@ -548,26 +536,25 @@ function getPriorSunday($month, $day, $year) . " ORDER BY datestart,timestart"; } $result = DB_query($calsql); - $nrows = DB_numRows($result); - list($hourcols, $thedata, $max, $alldaydata) = getDayViewData($result); + $numRows = DB_numRows($result); + list($hourCols, $theData, $max, $allDayData) = getDayViewData($result); // Get all day events - $alldaycount = count($alldaydata); - if ($alldaycount > 0) { - for ($i = 1; $i <= $alldaycount; $i++) { - $A = current($alldaydata); - $cal_templates->set_var('delete_imagelink', - getDeleteImageLink($mode, $A, $token)); + $allDayCount = count($allDayData); + if ($allDayCount > 0) { + for ($i = 1; $i <= $allDayCount; $i++) { + $A = current($allDayData); + $cal_templates->set_var('delete_imagelink', getDeleteImageLink($mode, $A, $token)); $cal_templates->set_var('event_time', $LANG_CAL_2[26]); $cal_templates->set_var('eid', $A['eid']); $cal_templates->set_var('event_title', stripslashes($A['title'])); - if ($i < $alldaycount) { + if ($i < $allDayCount) { $cal_templates->set_var('br', ''); } else { $cal_templates->set_var('br', ''); } $cal_templates->parse('allday_events', 'event', true); - next($alldaydata); + next($allDayData); } } else { $cal_templates->set_var('allday_events', ' '); @@ -576,21 +563,18 @@ function getPriorSunday($month, $day, $year) //$cal_templates->set_var('first_colspan', $maxcols); //$cal_templates->set_var('title_colspan', $maxcols + 1); for ($i = 0; $i <= 23; $i++) { - $numevents = $hourcols[$i]; - if ($numevents > 0) { + $numEvents = $hourCols[$i]; + if ($numEvents > 0) { // $colsleft = $maxcols; - for ($j = 1; $j <= $numevents; $j++) { - $A = current($thedata); - $cal_templates->set_var('event_time', - strftime($_CONF['timeonly'], strtotime($A['datestart'] - . ' ' . $A['timestart'])) . '-' - . strftime($_CONF['timeonly'], strtotime($A['dateend'] - . ' ' . $A['timeend']))); - $cal_templates->set_var('delete_imagelink', - getDeleteImageLink($mode, $A, $token)); + for ($j = 1; $j <= $numEvents; $j++) { + $A = current($theData); + list($startTime,) = COM_getUserDateTimeFormat(strtotime($A['datestart'] . ' ' . $A['timestart']), 'timeonly'); + list($endTime,) = COM_getUserDateTimeFormat(strtotime($A['dateend'] . ' ' . $A['timeend']), 'timeonly'); + $cal_templates->set_var('event_time', $startTime . '-' . $endTime); + $cal_templates->set_var('delete_imagelink', getDeleteImageLink($mode, $A, $token)); $cal_templates->set_var('eid', $A['eid']); $cal_templates->set_var('event_title', stripslashes($A['title'])); - if ($j < $numevents) { + if ($j < $numEvents) { $cal_templates->set_var('br', ''); } else { $cal_templates->set_var('br', ''); @@ -598,17 +582,18 @@ function getPriorSunday($month, $day, $year) $cal_templates->parse('event_entry', 'event', ($j == 1) ? false : true); // $colsleft = $colsleft - 1; - next($thedata); + next($theData); } } else { $cal_templates->set_var('event_entry', ' '); } - $cal_templates->set_var($i . '_hour', - strftime($_CONF['timeonly'], mktime($i, 0))); + + list($time,) = COM_getUserDateTimeFormat(mktime($i, 0), 'timeonly'); + $cal_templates->set_var($i . '_hour', $time); $cal_templates->parse($i . '_cols', 'column', true); } - if ($mode == 'personal') { + if ($mode === 'personal') { $cal_templates = getQuickAdd($cal_templates, $month, $day, $year, $token); } else { $cal_templates->set_var('quickadd_form', ''); @@ -619,12 +604,14 @@ function getPriorSunday($month, $day, $year) case 'week': $cal_templates = COM_newTemplate(CTL_plugin_templatePath('calendar')); - $cal_templates->set_file(array('week' => 'weekview/weekview.thtml', - 'events' => 'weekview/events.thtml', - 'quickadd' => 'dayview/quickaddform.thtml')); + $cal_templates->set_file(array( + 'week' => 'weekview/weekview.thtml', + 'events' => 'weekview/events.thtml', + 'quickadd' => 'dayview/quickaddform.thtml', + )); $cal_templates->set_var('mode', $mode); $cal_templates->set_var('lang_week', $LANG_CAL_2[27]); - if ($mode == 'personal') { + if ($mode === 'personal') { $cal_templates->set_var('calendar_title', '[' . $LANG_CAL_2[28] . ' ' . COM_getDisplayName()); $cal_templates->set_var('calendar_toggle', '| ' . COM_createLink($LANG_CAL_2[11], $_CONF['site_url'] @@ -632,7 +619,7 @@ function getPriorSunday($month, $day, $year) ); } else { $cal_templates->set_var('calendar_title', '[' . $_CONF['site_name'] . ' ' . $LANG_CAL_2[29]); - if (!COM_isAnonUser() AND $_CA_CONF['personalcalendars'] == 1) { + if (!COM_isAnonUser() && $_CA_CONF['personalcalendars'] == 1) { $cal_templates->set_var('calendar_toggle', '| ' . COM_createLink($LANG_CAL_2[12], $_CONF['site_url'] . "/calendar/index.php?mode=personal&view=week&month=$month&day=$day&year=$year") . ']' @@ -663,7 +650,7 @@ function getPriorSunday($month, $day, $year) $time_day7 = mktime(0, 0, 0, $month, $day + 7, $year); $start_mname = strftime('%B', $time_day1); // Check for Windows to find and replace the %e - if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { $eday = strftime('%#d', $time_day7); } else { $eday = strftime('%e', $time_day7); @@ -684,25 +671,25 @@ function getPriorSunday($month, $day, $year) $end_ynum = strftime('%Y', $time_day6); $date_range = $start_mname . ' ' . $day; } - if ($year <> $end_ynum) { + if ($year != $end_ynum) { $date_range .= ', ' . $year . ' - '; } else { $date_range .= ' - '; } - if ($start_mname <> $end_mname) { + if ($start_mname != $end_mname) { $date_range .= $end_mname . ' ' . $eday . ', ' . $end_ynum; } else { $date_range .= $eday . ', ' . $end_ynum; } $cal_templates->set_var('date_range', $date_range); - if ($_CONF['week_start'] == 'Mon') { + if ($_CONF['week_start'] === 'Mon') { $thedate = COM_getUserDateTimeFormat(mktime(0, 0, 0, $month, $day + 1, $year)); } else { $thedate = COM_getUserDateTimeFormat(mktime(0, 0, 0, $month, $day, $year)); } $cal_templates->set_var('week_num', $thedate[1]); for ($i = 1; $i <= 7; $i++) { - if ($_CONF['week_start'] == 'Mon') { + if ($_CONF['week_start'] === 'Mon') { $dayname = (date('w', $thedate[1]) == 0) ? $cal->getDayName(7) : $cal->getDayName(date('w', $thedate[1])); @@ -723,7 +710,7 @@ function getPriorSunday($month, $day, $year) $_CONF['site_url'] . '/calendar/index.php?' . addMode($mode) . "view=day&day$daynum&month=$monthnum&year=$yearnum") ); - if ($mode == 'personal') { + if ($mode === 'personal') { $add_str = $LANG_CAL_2[8]; } else { $add_str = $LANG_CAL_2[42]; @@ -733,14 +720,14 @@ function getPriorSunday($month, $day, $year) COM_createLink($add_str, $_CONF['site_url'] . '/submit.php?type=calendar&' . addMode($mode) . "day=$daynum&month=$monthnum&year=$yearnum") ); - if ($mode == 'personal') { + if ($mode === 'personal') { $calsql = "SELECT eid,title,datestart,dateend,timestart,timeend,allday,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['personal_events']} WHERE (uid = {$_USER['uid']}) AND ((allday=1 AND datestart = \"$yearnum-$monthnum-$daynum\") OR (datestart >= \"$yearnum-$monthnum-$daynum 00:00:00\" AND datestart <= \"$yearnum-$monthnum-$daynum 23:59:59\") OR (dateend >= \"$yearnum-$monthnum-$daynum 00:00:00\" AND dateend <= \"$yearnum-$monthnum-$daynum 23:59:59\") OR (\"$yearnum-$monthnum-$daynum\" BETWEEN datestart AND dateend)) ORDER BY datestart,timestart"; } else { $calsql = "SELECT eid,title,datestart,dateend,timestart,timeend,allday,owner_id,group_id,perm_owner,perm_group,perm_members,perm_anon FROM {$_TABLES['events']} WHERE ((allday=1 AND datestart = \"$yearnum-$monthnum-$daynum\") OR (datestart >= \"$yearnum-$monthnum-$daynum 00:00:00\" AND datestart <= \"$yearnum-$monthnum-$daynum 23:59:59\") OR (dateend >= \"$yearnum-$monthnum-$daynum 00:00:00\" AND dateend <= \"$yearnum-$monthnum-$daynum 23:59:59\") OR (\"$yearnum-$monthnum-$daynum\" BETWEEN datestart AND dateend))" . COM_getPermSql('AND') . " ORDER BY datestart,timestart"; } $result = DB_query($calsql); - $nrows = DB_numRows($result); - for ($j = 1; $j <= $nrows; $j++) { + $numRows = DB_numRows($result); + for ($j = 1; $j <= $numRows; $j++) { $A = DB_fetchArray($result); if ($A['allday'] == 1) { $cal_templates->set_var('event_starttime', $LANG_CAL_2[26]); @@ -752,12 +739,12 @@ function getPriorSunday($month, $day, $year) $startmonth = date('n', $startstamp); $endday = date('d', $endstamp); $endmonth = date('n', $endstamp); - if (($startmonth == $monthnum && $daynum > $startday) OR ($startmonth <> $monthnum)) { + if (($startmonth == $monthnum && $daynum > $startday) || ($startmonth != $monthnum)) { $starttime = date('n/j g:i a', $startstamp); } else { $starttime = date('g:i a', $startstamp); } - if (($endmonth == $monthnum && $daynum < $endday) OR ($endmonth <> $monthnum)) { + if (($endmonth == $monthnum && $daynum < $endday) || ($endmonth != $monthnum)) { $endtime = date('n/j g:i a', $endstamp); } else { $endtime = date('g:i a', $endstamp); @@ -775,7 +762,7 @@ function getPriorSunday($month, $day, $year) getDeleteImageLink($mode, $A, $token)); $cal_templates->parse('events_day' . $i, 'events', true); } - if ($nrows == 0) { + if ($numRows == 0) { $cal_templates->set_var('event_starttime', ' '); $cal_templates->set_var('event_endtime', ''); $cal_templates->set_var('event_title_and_link', ''); @@ -837,7 +824,7 @@ function getPriorSunday($month, $day, $year) $cal_templates->set_var('cal_nextmo_num', $nextmonth); $cal_templates->set_var('cal_nextyr_num', $nextyear); - if ($_CONF['week_start'] == 'Mon') { + if ($_CONF['week_start'] === 'Mon') { $cal_templates->set_var('lang_sunday', $LANG_WEEK[2]); $cal_templates->set_var('lang_monday', $LANG_WEEK[3]); $cal_templates->set_var('lang_tuesday', $LANG_WEEK[4]); @@ -856,51 +843,84 @@ function getPriorSunday($month, $day, $year) } $cal_templates->set_var('lang_january', $LANG_MONTH[1]); - if ($month == 1) $cal_templates->set_var('selected_jan', 'selected="selected"'); + if ($month == 1) { + $cal_templates->set_var('selected_jan', 'selected="selected"'); + } + $cal_templates->set_var('lang_february', $LANG_MONTH[2]); - if ($month == 2) $cal_templates->set_var('selected_feb', 'selected="selected"'); + if ($month == 2) { + $cal_templates->set_var('selected_feb', 'selected="selected"'); + } + $cal_templates->set_var('lang_march', $LANG_MONTH[3]); - if ($month == 3) $cal_templates->set_var('selected_mar', 'selected="selected"'); + if ($month == 3) { + $cal_templates->set_var('selected_mar', 'selected="selected"'); + } + $cal_templates->set_var('lang_april', $LANG_MONTH[4]); - if ($month == 4) $cal_templates->set_var('selected_apr', 'selected="selected"'); + if ($month == 4) { + $cal_templates->set_var('selected_apr', 'selected="selected"'); + } + $cal_templates->set_var('lang_may', $LANG_MONTH[5]); - if ($month == 5) $cal_templates->set_var('selected_may', 'selected="selected"'); + if ($month == 5) { + $cal_templates->set_var('selected_may', 'selected="selected"'); + } + $cal_templates->set_var('lang_june', $LANG_MONTH[6]); - if ($month == 6) $cal_templates->set_var('selected_jun', 'selected="selected"'); + if ($month == 6) { + $cal_templates->set_var('selected_jun', 'selected="selected"'); + } + $cal_templates->set_var('lang_july', $LANG_MONTH[7]); - if ($month == 7) $cal_templates->set_var('selected_jul', 'selected="selected"'); + if ($month == 7) { + $cal_templates->set_var('selected_jul', 'selected="selected"'); + } + $cal_templates->set_var('lang_august', $LANG_MONTH[8]); - if ($month == 8) $cal_templates->set_var('selected_aug', 'selected="selected"'); + if ($month == 8) { + $cal_templates->set_var('selected_aug', 'selected="selected"'); + } + $cal_templates->set_var('lang_september', $LANG_MONTH[9]); - if ($month == 9) $cal_templates->set_var('selected_sep', 'selected="selected"'); + if ($month == 9) { + $cal_templates->set_var('selected_sep', 'selected="selected"'); + } + $cal_templates->set_var('lang_october', $LANG_MONTH[10]); - if ($month == 10) $cal_templates->set_var('selected_oct', 'selected="selected"'); + if ($month == 10) { + $cal_templates->set_var('selected_oct', 'selected="selected"'); + } + $cal_templates->set_var('lang_november', $LANG_MONTH[11]); - if ($month == 11) $cal_templates->set_var('selected_nov', 'selected="selected"'); + if ($month == 11) { + $cal_templates->set_var('selected_nov', 'selected="selected"'); + } + $cal_templates->set_var('lang_december', $LANG_MONTH[12]); - if ($month == 12) $cal_templates->set_var('selected_dec', 'selected="selected"'); + if ($month == 12) { + $cal_templates->set_var('selected_dec', 'selected="selected"'); + } $cal_templates->set_var('lang_day', $LANG_CAL_2[39]); $cal_templates->set_var('lang_week', $LANG_CAL_2[40]); $cal_templates->set_var('lang_month', $LANG_CAL_2[41]); - if ($mode == 'personal') { - $cal_templates->set_var('calendar_title', - $LANG_CAL_2[28] . ' ' . COM_getDisplayName()); + if ($mode === 'personal') { + $cal_templates->set_var('calendar_title', $LANG_CAL_2[28] . ' ' . COM_getDisplayName()); } else { - $cal_templates->set_var('calendar_title', - $_CONF['site_name'] . ' ' . $LANG_CAL_2[29]); + $cal_templates->set_var('calendar_title', $_CONF['site_name'] . ' ' . $LANG_CAL_2[29]); } - $yroptions = ''; - for ($y = $currentyear - 5; $y <= $currentyear + 5; $y++) { - $yroptions .= '' . LB; } - $cal_templates->set_var('year_options', $yroptions); + $cal_templates->set_var('year_options', $yearOptions); for ($i = 1; $i <= 6; $i++) { $wday = ''; @@ -911,13 +931,13 @@ function getPriorSunday($month, $day, $year) if (empty($wday)) { $wday = $curday->daynumber; } - if (($currentyear > $year) OR - ($currentmonth > $month && $currentyear == $year) OR - ($currentmonth == $month && $currentday > $curday->daynumber && $currentyear == $year) + if (($currentYear > $year) || + ($currentmonth > $month && $currentYear == $year) || + ($currentmonth == $month && $currentday > $curday->daynumber && $currentYear == $year) ) { $cal_templates->set_var('cal_day_style', 'cal-oldday'); } else { - if ($currentyear == $year && $currentmonth == $month && $currentday == $curday->daynumber) { + if ($currentYear == $year && $currentmonth == $month && $currentday == $curday->daynumber) { $cal_templates->set_var('cal_day_style', 'cal-today'); } else { $cal_templates->set_var('cal_day_style', 'cal-futureday'); @@ -940,7 +960,7 @@ function getPriorSunday($month, $day, $year) $month = '0' . $month; } - if ($mode == 'personal') { + if ($mode === 'personal') { $calsql_tbl = $_TABLES['personal_events']; $calsql_filt = "AND (uid = {$_USER['uid']})"; } else { @@ -979,7 +999,6 @@ function getPriorSunday($month, $day, $year) } $cal_templates->set_var('event_anchortags', $entries); - } else { if ($q2_numrows < 4) { for ($t = 0; $t < (4 - $q2_numrows); $t++) { @@ -1022,7 +1041,7 @@ function getPriorSunday($month, $day, $year) // check if we need to render the following week at all if ($i < 6) { $data = $cal->getDayData($i + 1, 1); - if (empty ($data)) { + if (empty($data)) { break; } } @@ -1040,14 +1059,13 @@ function getPriorSunday($month, $day, $year) } } - $cal_templates->set_var('lang_cal_curmo', $LANG_MONTH[$currentmonth + 0]); $cal_templates->set_var('cal_curmo_num', $currentmonth); - $cal_templates->set_var('cal_curyr_num', $currentyear); + $cal_templates->set_var('cal_curyr_num', $currentYear); $cal_templates->set_var('lang_cal_displaymo', $LANG_MONTH[$month + 0]); $cal_templates->set_var('cal_displaymo_num', $month); $cal_templates->set_var('cal_displayyr_num', $year); - if ($mode == 'personal') { + if ($mode === 'personal') { $cal_templates->set_var('lang_addevent', $LANG_CAL_2[8]); $cal_templates->set_var('addevent_formurl', '/calendar/index.php'); } else { @@ -1060,7 +1078,6 @@ function getPriorSunday($month, $day, $year) $display = COM_createHTMLDocument($display, array('pagetitle' => $pagetitle)); break; - } // end switch COM_output($display); diff --git a/public_html/comment.php b/public_html/comment.php index 8d5256938..59a26c599 100644 --- a/public_html/comment.php +++ b/public_html/comment.php @@ -35,15 +35,14 @@ // +---------------------------------------------------------------------------+ /** -* This file is responsible for letting user enter a comment and saving the -* comments to the DB. All comment display stuff is in lib-common.php -* -* @author Jason Whittenburg -* @author Tony Bibbs, tonyAT tonybibbs DOT com -* @author Vincent Furia, vinny01 AT users DOT sourceforge DOT net -* @author Jared Wenerd, wenerd87 AT gmail DOT com -* -*/ + * This file is responsible for letting user enter a comment and saving the + * comments to the DB. All comment display stuff is in lib-common.php + * + * @author Jason Whittenburg + * @author Tony Bibbs, tonyAT tonybibbs DOT com + * @author Vincent Furia, vinny01 AT users DOT sourceforge DOT net + * @author Jared Wenerd, wenerd87 AT gmail DOT com + */ global $_CONF; @@ -67,10 +66,6 @@ $_REQUEST['mode'] = ''; } -$mode = ''; -if (!empty($_REQUEST['mode'])) { - $mode = COM_applyFilter($_REQUEST['mode']); -} - +$mode = Geeklog\Input::fRequest('mode', ''); $display .= CMT_handleComment($mode); COM_output($display); diff --git a/public_html/directory.php b/public_html/directory.php index 1871771e8..6cc972bd2 100644 --- a/public_html/directory.php +++ b/public_html/directory.php @@ -40,7 +40,7 @@ $conf_list_current_month = false; // name of this script -define('THIS_SCRIPT', 'directory.php'); +define('THIS_SCRIPT', basename(__FILE__)); $display = ''; @@ -63,21 +63,25 @@ * @param int $month Month * @param int $year Year * @return int Number of days in that month - * @todo Bug: Will fail from 2038 onwards ... - * "The last day of any given month can be expressed as the "0" day - * of the next month", http://www.php.net/manual/en/function.mktime.php */ function DIR_lastDayOfMonth($month, $year) { - $month++; - if ($month > 12) { - $month = 1; - $year++; - } + $month = (int) $month; + $year = (int) $year; - $lastDay = mktime(0, 0, 0, $month, 0, $year); + if (in_array($month, array(1, 3, 5, 7, 8, 10, 12))) { + $retval = 31; + } elseif (in_array($month, array(4, 6, 9, 11))) { + $retval = 30; + } else { + $retval = 28; - return intval(strftime('%d', $lastDay)); + if ((($year % 4) === 0) && ((($year % 100) !== 0) || (($year % 400) === 0))) { + $retval = 29; + } + } + + return $retval; } /** @@ -90,17 +94,17 @@ function DIR_lastDayOfMonth($month, $year) */ function DIR_topicList($dir_topic = 'all', $year = 0, $month = 0) { - global $_CONF, $LANG21; - - $retval = '
' . LB; - $retval .= '' . LB; - $retval .= '' . LB; - $retval .= '' . LB; - $retval .= '
' . LB; + global $_CONF; + + $retval = '
' . PHP_EOL + . '' . PHP_EOL + . '' . PHP_EOL + . '' . PHP_EOL + . '
' . PHP_EOL; return $retval; } @@ -118,16 +122,21 @@ function DIR_monthLink($dir_topic, $year, $month, $count) { global $_CONF, $LANG_MONTH; - $retval = $LANG_MONTH[$month] . ' (' . COM_numberFormat($count) . ')' . LB; + $retval = $LANG_MONTH[$month] . ' (' . COM_numberFormat($count) . ')' . PHP_EOL; if ($count > 0) { - $month_url = COM_buildURL($_CONF['site_url'] . '/' - . THIS_SCRIPT . '?topic=' . urlencode($dir_topic) . '&year=' - . $year . '&month=' . $month); + $month_url = COM_buildURL( + $_CONF['site_url'] . '/' . THIS_SCRIPT . '?' + . http_build_query(array( + 'topic' => $dir_topic, + 'year' => $year, + 'month' => $month, + )) + ); $retval = COM_createLink($retval, $month_url); } - $retval .= LB; + $retval .= PHP_EOL; return $retval; } @@ -146,6 +155,8 @@ function DIR_navBar($dir_topic, $year, $month = 0) $retval = ''; + $prevMonth = $nextMonth = $month; + if ($month == 0) { $prevYear = $year - 1; $nextYear = $year + 1; @@ -183,11 +194,17 @@ function DIR_navBar($dir_topic, $year, $month = 0) } if ($prevYear > 0) { - $url = $_CONF['site_url'] . '/' . THIS_SCRIPT . '?topic=' - . urlencode($dir_topic) . '&year=' . $prevYear; + $args = array( + 'topic' => $dir_topic, + 'year' => $prevYear, + ); + if ($month > 0) { - $url .= '&month=' . $prevMonth; + $args['month'] = $prevMonth; } + $url = COM_buildURL( + $_CONF['site_url'] . '/' . THIS_SCRIPT . '?' . http_build_query($args) + ); $retval .= COM_createLink($LANG05[6], COM_buildURL($url)); } else { $retval .= $LANG05[6]; @@ -195,9 +212,11 @@ function DIR_navBar($dir_topic, $year, $month = 0) $retval .= ' | '; - $url = $_CONF['site_url'] . '/' . THIS_SCRIPT; + $url = COM_buildURL($_CONF['site_url'] . '/' . THIS_SCRIPT); if ($dir_topic !== 'all') { - $url = COM_buildURL($url . '?topic=' . urlencode($dir_topic)); + $url = COM_buildURL( + $_CONF['site_url'] . '/' . THIS_SCRIPT . '?' . http_build_query(array('topic' => $dir_topic)) + ); } $retval .= COM_createLink($LANG_DIR['nav_top'], $url); @@ -205,11 +224,19 @@ function DIR_navBar($dir_topic, $year, $month = 0) $retval .= ' | '; if ($nextYear > 0) { - $url = $_CONF['site_url'] . '/' . THIS_SCRIPT . '?topic=' - . urlencode($dir_topic) . '&year=' . $nextYear; + $args = array( + 'topic' => $dir_topic, + 'year' => $nextYear, + ); + if ($month > 0) { - $url .= '&month=' . $nextMonth; + $args['month'] = $nextMonth; } + + $url = COM_buildURL( + $_CONF['site_url'] . '/' . THIS_SCRIPT . '?' . http_build_query($args) + ); + $retval .= COM_createLink($LANG05[5], COM_buildURL($url)); } else { $retval .= $LANG05[5]; @@ -280,16 +307,15 @@ function DIR_displayMonth($template, $dir_topic, $year, $month) if (TEMPLATE_EXISTS) { $template->set_var('section_title', $day); - $retval .= $template->parse('title', 'section-title') . LB; + $retval .= $template->parse('title', 'section-title') . PHP_EOL; } else { - $retval .= '

' . $day . '

' . LB; + $retval .= '

' . $day . '

' . PHP_EOL; } $mday = $A['mday']; } - $url = COM_buildURL($_CONF['site_url'] . '/article.php?story=' - . $A['sid']); + $url = COM_buildURL($_CONF['site_url'] . '/article.php?story=' . $A['sid']); $entries[] = COM_createLink(stripslashes($A['title']), $url); } @@ -298,13 +324,13 @@ function DIR_displayMonth($template, $dir_topic, $year, $month) } } else { if (TEMPLATE_EXISTS) { - $retval .= $template->parse('message', 'no-articles') . LB; + $retval .= $template->parse('message', 'no-articles') . PHP_EOL; } else { - $retval .= '

' . $LANG_DIR['no_articles'] . '

' . LB; + $retval .= '

' . $LANG_DIR['no_articles'] . '

' . PHP_EOL; } } - $retval .= LB; + $retval .= PHP_EOL; return $retval; } @@ -319,7 +345,7 @@ function DIR_displayMonth($template, $dir_topic, $year, $month) */ function DIR_displayYear($template, $dir_topic, $year) { - global $_CONF, $_TABLES, $LANG_MONTH, $LANG_DIR; + global $_TABLES, $LANG_DIR; $retval = ''; @@ -330,13 +356,13 @@ function DIR_displayYear($template, $dir_topic, $year) $start = sprintf('%04d-01-01 00:00:00', $year); $end = sprintf('%04d-12-31 23:59:59', $year); - $monthsql = array(); - $monthsql['mysql'] = "SELECT DISTINCT MONTH(s.date) AS month, COUNT(DISTINCT s.sid) AS count + $monthSql = array(); + $monthSql['mysql'] = "SELECT MONTH(s.date) AS month, COUNT(DISTINCT s.sid) AS cnt FROM {$_TABLES['stories']} s, {$_TABLES['topic_assignments']} ta WHERE (s.date >= '$start') AND (s.date <= '$end') AND (s.draft_flag = 0) AND (s.date <= NOW()) AND ta.type = 'article' AND ta.id = s.sid "; - $monthsql['pgsql'] = "SELECT EXTRACT(Month from date) AS month,COUNT(DISTINCT sid) AS count + $monthSql['pgsql'] = "SELECT EXTRACT(Month from date) AS month,COUNT(DISTINCT sid) AS cnt FROM {$_TABLES['stories']} , {$_TABLES['topic_assignments']} ta WHERE (date >= '$start') AND (date <= '$end') AND (draft_flag = 0) AND (date <= NOW()) AND ta.type = 'article' AND ta.id = sid "; @@ -344,53 +370,54 @@ function DIR_displayYear($template, $dir_topic, $year) if ($dir_topic !== 'all') { // Retrieve list of inherited topics $tid_list = TOPIC_getChildList($dir_topic); - $monthsql['mysql'] .= " AND (ta.tid IN({$tid_list}) AND (ta.inherit = 1 OR (ta.inherit = 0 AND ta.tid = '{$dir_topic}')))"; - $monthsql['pgsql'] .= " AND (ta.tid IN({$tid_list}) AND (ta.inherit = 1 OR (ta.inherit = 0 AND ta.tid = '{$dir_topic}')))"; + $dir_topic_escaped = DB_escapeString($dir_topic); + $monthSql['mysql'] .= " AND (ta.tid IN({$tid_list}) AND (ta.inherit = 1 OR (ta.inherit = 0 AND ta.tid = '{$dir_topic_escaped}')))"; + $monthSql['pgsql'] .= " AND (ta.tid IN({$tid_list}) AND (ta.inherit = 1 OR (ta.inherit = 0 AND ta.tid = '{$dir_topic_escaped}')))"; } else { - $monthsql['mysql'] .= COM_getTopicSQL('AND', 0, 'ta'); - $monthsql['pgsql'] .= COM_getTopicSQL('AND', 0, 'ta'); + $monthSql['mysql'] .= COM_getTopicSQL('AND', 0, 'ta'); + $monthSql['pgsql'] .= COM_getTopicSQL('AND', 0, 'ta'); } - $monthsql['mysql'] .= COM_getPermSql('AND') . COM_getLangSQL('sid', 'AND') . " GROUP BY month, date ORDER BY date ASC"; - $monthsql['pgsql'] .= COM_getPermSql('AND') . COM_getLangSQL('sid', 'AND') . " GROUP BY month, date ORDER BY DATE ASC"; + $monthSql['mysql'] .= COM_getPermSql('AND') . COM_getLangSQL('sid', 'AND') . " GROUP BY month ORDER BY date ASC"; + $monthSql['pgsql'] .= COM_getPermSql('AND') . COM_getLangSQL('sid', 'AND') . " GROUP BY month ORDER BY DATE ASC"; - $mresult = DB_query($monthsql); - $nummonths = DB_numRows($mresult); + $mResult = DB_query($monthSql); + $numMonths = DB_numRows($mResult); - if ($nummonths > 0) { + if ($numMonths > 0) { $items = array(); - $lastm = 1; - for ($j = 0; $j < $nummonths; $j++) { - $M = DB_fetchArray($mresult); + $lastMonth = 1; + for ($j = 0; $j < $numMonths; $j++) { + $M = DB_fetchArray($mResult); - for (; $lastm < $M['month']; $lastm++) { - $items[] = DIR_monthLink($dir_topic, $year, $lastm, 0); + for (; $lastMonth < $M['month']; $lastMonth++) { + $items[] = DIR_monthLink($dir_topic, $year, $lastMonth, 0); } - $lastm = $M['month'] + 1; + $lastMonth = $M['month'] + 1; - $items[] = DIR_monthLink($dir_topic, $year, $M['month'], $M['count']); + $items[] = DIR_monthLink($dir_topic, $year, $M['month'], $M['cnt']); } if ($year == $currentYear) { - $fillm = $currentMonth; + $fillMonth = $currentMonth; } else { - $fillm = 12; + $fillMonth = 12; } - if ($lastm <= $fillm) { - for (; $lastm <= $fillm; $lastm++) { - $items[] = DIR_monthLink($dir_topic, $year, $lastm, 0); + if ($lastMonth <= $fillMonth) { + for (; $lastMonth <= $fillMonth; $lastMonth++) { + $items[] = DIR_monthLink($dir_topic, $year, $lastMonth, 0); } } $retval .= COM_makeList($items); } else { if (TEMPLATE_EXISTS) { - $retval .= $template->parse('message', 'no-articles') . LB; + $retval .= $template->parse('message', 'no-articles') . PHP_EOL; } else { - $retval .= '

' . $LANG_DIR['no_articles'] . '

' . LB; + $retval .= '

' . $LANG_DIR['no_articles'] . '

' . PHP_EOL; } } - $retval .= LB; + $retval .= PHP_EOL; return $retval; } @@ -403,7 +430,7 @@ function DIR_displayYear($template, $dir_topic, $year) * * @param Template $template reference of the template * @param string $dir_topic current topic - * @return string list of all the years in the db + * @return string list of all the years in the db */ function DIR_displayAll($template, $dir_topic) { @@ -411,43 +438,46 @@ function DIR_displayAll($template, $dir_topic) $retval = ''; - $yearsql = array(); - $yearsql['mysql'] = "SELECT DISTINCT YEAR(date) AS year, date + $yearSql = array( + 'mysql' => + "SELECT DISTINCT YEAR(date) AS year FROM {$_TABLES['stories']}, {$_TABLES['topic_assignments']} ta WHERE (draft_flag = 0) AND (date <= NOW()) - AND ta.type = 'article' AND ta.id = sid - " . COM_getTopicSQL('AND', 0, 'ta') . COM_getPermSql('AND') . COM_getLangSQL('sid', 'AND'); + AND ta.type = 'article' AND ta.id = sid " + . COM_getTopicSQL('AND', 0, 'ta') . COM_getPermSql('AND') . COM_getLangSQL('sid', 'AND') + . " GROUP BY year ORDER BY date DESC", - $yearsql['pgsql'] = "SELECT EXTRACT(YEAR from date) AS year + 'pgsql' => + "SELECT EXTRACT(YEAR from date) AS year FROM {$_TABLES['stories']}, {$_TABLES['topic_assignments']} ta WHERE (draft_flag = 0) AND (date <= NOW()) - AND ta.type = 'article' AND ta.id = sid - " . COM_getTopicSQL('AND', 0, 'ta') . COM_getPermSql('AND') . COM_getLangSQL('sid', 'AND'); - - $ySql = array(); - $ySql['mysql'] = $yearsql['mysql'] . " GROUP BY year, date ORDER BY date DESC"; - $ySql['pgsql'] = $yearsql['pgsql'] . " GROUP BY year, date ORDER BY year DESC"; + AND ta.type = 'article' AND ta.id = sid " + . COM_getTopicSQL('AND', 0, 'ta') . COM_getPermSql('AND') . COM_getLangSQL('sid', 'AND') + . " GROUP BY year ORDER BY year DESC", + ); + $yResult = DB_query($yearSql); + $years = array(); - $yResult = DB_query($ySql); - $numYears = DB_numRows($yResult); - if ($numYears > 0) { - for ($i = 0; $i < $numYears; $i++) { - $Y = DB_fetchArray($yResult); + while (($A = DB_fetchArray($yResult, false))) { + $years[] = $A['year']; + } + if (count($years) > 0) { + foreach ($years as $year) { if (TEMPLATE_EXISTS) { - $template->set_var('section_title', $Y['year']); - $retval .= $template->parse('title', 'section-title') . LB; + $template->set_var('section_title', $year); + $retval .= $template->parse('title', 'section-title') . PHP_EOL; } else { - $retval .= '

' . $Y['year'] . '

' . LB; + $retval .= '

' . $year . '

' . PHP_EOL; } - $retval .= DIR_displayYear($template, $dir_topic, $Y['year']); + $retval .= DIR_displayYear($template, $dir_topic, $year); } } else { if (TEMPLATE_EXISTS) { - $retval .= $template->parse('message', 'no-articles') . LB; + $retval .= $template->parse('message', 'no-articles') . PHP_EOL; } else { - $retval .= '

' . $LANG_DIR['no_articles'] . '

' . LB; + $retval .= '

' . $LANG_DIR['no_articles'] . '

' . PHP_EOL; } } @@ -467,33 +497,40 @@ function DIR_canonicalLink($dir_topic, $year = 0, $month = 0) global $_CONF; $script = $_CONF['site_url'] . '/' . THIS_SCRIPT; + $args = array( + 'topic' => $dir_topic, + ); - $tp = '?topic=' . urlencode($dir_topic); - $parts = ''; if (($year != 0) && ($month != 0)) { - $parts .= "&year=$year&month=$month"; + $args['year'] = $year; + $args['month'] = $month; } elseif ($year != 0) { - $parts .= "&year=$year"; + $args['year'] = $year; } elseif ($dir_topic === 'all') { - $tp = ''; + unset($args['topic']); + } + + if (count($args) > 0) { + $url = COM_buildURL($script . '?' . http_build_query($args)); + } else { + $url = COM_buildURL($script); } - $url = COM_buildURL($script . $tp . $parts); - return '' . LB; + return '' . PHP_EOL; } // MAIN $display = ''; -if (isset($_POST['topic']) && isset($_POST['year']) && isset($_POST['month'])) { - $dir_topic = $_POST['topic']; - $year = $_POST['year']; - $month = $_POST['month']; +if (isset($_POST['topic'], $_POST['year'], $_POST['month'])) { + $dir_topic = \Geeklog\Input::post('topic'); + $year = (int) \Geeklog\Input::post('year'); + $month = (int) \Geeklog\Input::post('month'); } else { COM_setArgNames(array('topic', 'year', 'month')); $dir_topic = COM_getArgument('topic'); - $year = COM_getArgument('year'); - $month = COM_getArgument('month'); + $year = (int) COM_getArgument('year'); + $month = (int) COM_getArgument('month'); } $dir_topic = COM_applyFilter($dir_topic); @@ -502,15 +539,16 @@ function DIR_canonicalLink($dir_topic, $year = 0, $month = 0) } // Topic stuff already set in lib-common but need to double check if URL_Write is_a enabled -//Set topic for rest of site +// Set topic for rest of site if ($dir_topic === 'all') { $topic = ''; } else { $topic = $dir_topic; } + // See if user has access to view topic. if ($topic != '') { - $test_topic = DB_getItem($_TABLES['topics'], 'tid', "tid = '$topic' " . COM_getPermSQL('AND')); + $test_topic = DB_getItem($_TABLES['topics'], 'tid', "tid = '" . DB_escapeString($topic) . "' " . COM_getPermSQL('AND')); if (strtolower($topic) !== strtolower($test_topic)) { $topic = ''; $dir_topic = 'all'; @@ -520,7 +558,6 @@ function DIR_canonicalLink($dir_topic, $year = 0, $month = 0) } } -$year = COM_applyFilter($year, true); if ($year < 0) { $year = 0; } @@ -531,8 +568,7 @@ function DIR_canonicalLink($dir_topic, $year = 0, $month = 0) $dir_topicName = ''; if ($dir_topic !== 'all') { - $dir_topicName = DB_getItem($_TABLES['topics'], 'topic', - "tid = '" . DB_escapeString($dir_topic) . "'"); + $dir_topicName = DB_getItem($_TABLES['topics'], 'topic', "tid = '" . DB_escapeString($dir_topic) . "'"); } $template = null; @@ -545,18 +581,17 @@ function DIR_canonicalLink($dir_topic, $year = 0, $month = 0) } if (($year != 0) && ($month != 0)) { - $title = sprintf($LANG_DIR['title_month_year'], - $LANG_MONTH[$month], $year); + $title = sprintf($LANG_DIR['title_month_year'], $LANG_MONTH[$month], $year); if ($dir_topic !== 'all') { $title .= ': ' . $dir_topicName; } + $headerCode = DIR_canonicalLink($dir_topic, $year, $month); $directory = DIR_displayMonth($template, $dir_topic, $year, $month); $page_navigation = DIR_navBar($dir_topic, $year, $month); $block_title = $LANG_MONTH[$month] . ' ' . $year; $val_year = $year; $val_month = $month; - } elseif ($year != 0) { $title = sprintf($LANG_DIR['title_year'], $year); if ($dir_topic !== 'all') { @@ -568,7 +603,6 @@ function DIR_canonicalLink($dir_topic, $year = 0, $month = 0) $block_title = $year; $val_year = $year; $val_month = 0; - } else { $title = $LANG_DIR['title']; if ($dir_topic !== 'all') { @@ -612,11 +646,11 @@ function DIR_canonicalLink($dir_topic, $year = 0, $month = 0) $template->parse('output', 't_directory'); $display .= $template->finish($template->get_var('output')); } else { - $display .= COM_startBlock($block_title); - $display .= DIR_topicList($dir_topic, $val_year, $val_month) . LB; - $display .= $directory; - $display .= '' . LB; - $display .= COM_endBlock(); + $display .= COM_startBlock($block_title) + . DIR_topicList($dir_topic, $val_year, $val_month) . PHP_EOL + . $directory + . '' . PHP_EOL + . COM_endBlock(); } $display = COM_createHTMLDocument( diff --git a/public_html/docs/english/changes.html b/public_html/docs/english/changes.html index 1e2180e7d..a35c8ac85 100644 --- a/public_html/docs/english/changes.html +++ b/public_html/docs/english/changes.html @@ -19,9 +19,17 @@

Changes

Geeklog 2.1.2

-

Geeklog 2.1.2 major new feature is

+

Geeklog 2.1.2 major new features include a number of new administration tools along with the support of URL Routing and detecting a mobile user.

-

This Geeklog release no longer supports Microsoft SQL Server (mssql).

+

The Geeklog minimum requirements have changed slightly since, Geeklog now supports PHP 7 and the default settings for MySQL 5.7. The minimum requirements are:

+ +
    +
  • PHP 5.3.3 or higher
  • +
  • MySQL 4.1.2 or higher (MySQL 5 recommended)
  • +
  • Postgresql 9.1.7 or later
  • +
+ +

This Geeklog release no longer supports Microsoft SQL Server (mssql). The Professional and Professional CSS themes also have been removed. Geeklog ships with jQuery v3.1.1, jQuery UI v1.12.1, CKEditor v4.6.1, UIkit v2.27.2, Filemanager v2.2.0, and OAuth class v1.152.

Major New Features and Improvements

@@ -38,8 +46,14 @@

Major New Features and Improvements

  • Added a new config option $_CONF['gravatar_identicon'] to specify a default gravatar icon type (bug #579)
  • Added ability for Geeklog to detect device type (mobile or computer) of visitor. This can be used by blocks to display only for a certain device type
  • Blocks can display based on visitor device type
  • -
  • Template variable {device_movile} added which returns true if viewing device is considered mobile (phone and tablet)
  • -
  • Remove PEAR settings. PEAR libraries are now managed by way of composer
  • +
  • Template variable {device_mobile} added which returns true if viewing device is considered mobile (phone and tablet)
  • +
  • Remove PEAR settings. PEAR libraries are now managed by way of composer
  • +
  • New Denim Curve theme which is a child theme of Denim and based on the look of the Modern Curve theme
  • +
  • New Geeklog Database backup which now works without using an external program
  • +
  • Improved Geeklog Install process which now includes upgrade messages
  • +
  • Support for MySQL databases which use a 4 byte character set (utf8mb4_xxx_ci)
  • +
  • COM_switchLocaleSettings now overrides $_CONF['meta_description'],$_CONF['meta_keywords'], $_CONF['site_name'], $_CONF['owner_name'], and $_CONF['site_slogan'].
  • +
  • Updates to a number of libraries including Pear, Uikit, OAuth, jQuery, and jQuery UI
  • Numerous bug and security fixes.
  • diff --git a/public_html/docs/english/support.html b/public_html/docs/english/support.html index f2092a7c3..f7f6fdea9 100644 --- a/public_html/docs/english/support.html +++ b/public_html/docs/english/support.html @@ -97,8 +97,6 @@

    Donations

    International Support

    -

    geeklog.info - Geeklog-Support in Deutsch

    -

    GeeklogPolska - Geeklog support po Polsku

    Geeklog Japanese - Geeklog support in Japanese

    diff --git a/public_html/docs/history b/public_html/docs/history index 17af0b943..03a4bcfb4 100644 --- a/public_html/docs/history +++ b/public_html/docs/history @@ -4,6 +4,13 @@ Geeklog History/Changes: Not Released (2.1.2) ------------ +- [Feature] Added description, multiple answers per question to the Poll Plugin [Mystralkk] +- [Feature] New "Related Articles Section" to the article view [Mystralkk] +- [Feature] Added Language override feature [Mystralkk] +- [Feature] Added an Admin page for comments maintenance [Mystralkk] +- [Feature] Added URL-routing feature which enables you to use public_html/index.php as a pseudo-front controller [Mystralkk] +- [Feature] Added new modules for the Spam-X plugin Dirk +- [Feature] Added an ability to change article template file with the topic [Mystralkk] - [Feature] Added GitHub OAuth Login [Tom] - [Feature] Added $_CONF['theme_oauth_icons'] option to allow theme to use own OAuth icons [Tom] - [Feature] Added autotag to display blocks [Tom] @@ -13,7 +20,23 @@ Not Released (2.1.2) - [Feature] Template variable {device_movile} added which returns true if viewing device is considered mobile (phone and tablet) [Tom] - [Feature] Geeklog Database Backup now works without using a external program to backup. [Tom] - [Feature] Individual static pages can now have hits and last update date not displayed. [Tom] +- [Feature] Re-factored Geeklog install. [Mystralkk] +- [Feature] Upgrade Messages added to Geeklog install. [Tom] +- [Feature] Geeklog Install files can now be deleted on successful install or upgrade. [Mystralkk] +- [Feature] Support PHP 7. [Mystralkk] +- [Feature] Support default settings of MySQL 5.7. [Mystralkk] +- [Feature] Further integration of UIkit into the Denim theme. [Dengen] +- [Feature] New Denim Curve them which replicates the older Modern Curve theme. The Denim Curve theme is a child theme of the Denim theme. [Dengen] +- [Feature] Admin Environment Check now checks database version. [Tom] - [Update] Dropped MSSQL support [Mystralkk] +- [Update] Removed Professional and Professional CSS themes [Tom] +- [Update] UIkit framework to version 2.27.2 [Dengen] +- [Update] jQuery to version 3.1.1 and jQuery UI to version 1.12.1. [Tom] +- [Update] CKEditor to version 4.6.1 [Tom] +- [Update] OAuth class to version 1.152 [Tom] +- [Bug] Geeklog can now handle emoji icons and 4-byte characters. They can either be removed from the input or saved (depending on website setup) [Mystralkk] +- [Bug] Daily Digest URLs in articles are converted into absolute URLs. [Mystralkk] +- [Bug] Topic Ids and Names reduced to 75 characters to support utf8mb4_xxx_ci MySQL character sets. [Tom] December 9, 2015 (2.1.1) ------------ diff --git a/public_html/docs/japanese/changes.html b/public_html/docs/japanese/changes.html index f4bf07be6..85bfc3162 100644 --- a/public_html/docs/japanese/changes.html +++ b/public_html/docs/japanese/changes.html @@ -1,45 +1,68 @@ - - + + 澶夋洿鐐 | Geeklog銉夈偔銉ャ儭銉炽儓 - - + + -

    Geeklog Documentation

    +

    Geeklog Documentation

    澶夋洿灞ユ

    -

    銇撱伄銉夈偔銉ャ儭銉炽儓銇с伅鏈銈傞噸瑕併仾澶夋洿鐐广倓鐩伀銇ゃ亸澶夋洿鐐广倰绨℃綌銇鏄庛仐銇︺亜銇俱仚銆傚鏇村饱姝淬伄瑭崇窗銇儶銈广儓銇澶夋洿瑭崇窗灞ユ銈掋仈瑕с亸銇犮仌銇勩docs/changed-files銇伅銆佸墠鍥炪儶銉兗銈逛互鏉ュ鏇淬仌銈屻仧銉曘偂銈ゃ儷銇竴瑕с亴銇傘倞銇俱仚銆

    +

    銇撱伄銉夈偔銉ャ儭銉炽儓銇с伅鏈銈傞噸瑕併仾澶夋洿鐐广倓鐩伀銇ゃ亸澶夋洿鐐广倰绨℃綌銇鏄庛仐銇︺亜銇俱仚銆傚鏇村饱姝淬伄瑭崇窗銇儶銈广儓銇澶夋洿瑭崇窗灞ユ銈掋仈瑕с亸銇犮仌銇勩docs/changed-files銇伅銆佸墠鍥炪儶銉兗銈逛互鏉ュ鏇淬仌銈屻仧銉曘偂銈ゃ儷銇竴瑕с亴銇傘倞銇俱仚銆 +

    Geeklog 2.1.2

    Geeklog 2.1.2銇富瑕併仾鏂版鑳

    -

    浠婂洖銇嬨倝Microsoft SQL Server (mssql)銈掋偟銉濄兗銉堛仐銇亸銇倞銇俱仐銇熴.

    +

    Geeklog 2.1.2銇富瑕併仾鏂版鑳姐伀銇乁RL銉兗銉嗐偅銉炽偘銈勩儮銉愩偆銉儲銉笺偠銉笺伄妞滃嚭銈点儩銉笺儓銇仼銇鏁般伄鏂般仧銇鐞嗐儎銉笺儷銈掑惈銈撱仹銇勩伨銇欍

    + +

    Geeklog銇疨HP 7銇∕ySQL 5.7銇儑銉曘偐銉儓瑷畾銈掋偟銉濄兗銉堛仚銈嬨倛銇嗐伀銇仯銇熴仧銈併併偡銈广儐銉犺浠躲亴灏戙仐澶夈倧銈娿伨銇椼仧銆 + 銈枫偣銉嗐儬瑕佷欢:

    + +
      +
    • PHP 5.3.3浠ラ檷
    • +
    • MySQL 4.1.2浠ラ檷(MySQL 5鎺ㄥエ)
    • +
    • Postgresql 9.1.7浠ラ檷
    • +
    + +

    銇撱伄銉愩兗銈搞儳銉炽亱銈塎icrosoft SQL Server (mssql)銈掋偟銉濄兗銉堛仐銇亸銇倞銇俱仐銇熴侾rofessional銉嗐兗銉炪仺Professional CSS銉嗐兗銉炪倐鍓婇櫎銇曘倢銇俱仐銇熴

    涓昏銇柊姗熻兘銇ㄦ敼鍠勭偣

      -
    • Added description, multiple answers per question to the Poll Plugin (code provided by Ivy, feature request #629)
    • -
    • Added "Related Articles Section" to the article view (code provided by Andreas, feature request #444)
    • -
    • Added Language override feature (feature request #669)
    • -
    • Added an admin page for comments (feature request #586)
    • -
    • Now install files are (optionally) deleted on successful install or upgrade (feature request #635)
    • -
    • Added URL-routing feature which enables you to use public_html/index.php as a pseudo-front controller (feature requests #211, #326)
    • -
    • Added new modules for the Spam-X plugin (feature request #585, files provided by Dirk Haun)
    • -
    • Added an ability to change article template file with the topic (feature request #275, code provided by @hostellerie)
    • -
    • Added the ability to search poll comments (feature request #394)
    • -
    • Added a new config option $_CONF['gravatar_identicon'] to specify a default gravatar icon type (bug #579)
    • -
    • Added ability for Geeklog to detect device type (mobile or computer) of visitor. This can be used by blocks to display only for a certain device type
    • -
    • Blocks can display based on visitor device type
    • -
    • Template variable {device_movile} added which returns true if viewing device is considered mobile (phone and tablet)
    • -
    • Remove PEAR settings. PEAR libraries are now managed by way of composer
    • -
    • Numerous bug and security fixes.
    • +
    • 銈€兂銈便兗銉(polls)銉椼儵銈般偆銉炽伀description銇ㄨ鏁伴伕鎶炲彲鑳姐仾鍥炵瓟銈掕拷鍔犮仐銇俱仐銇熴(銈炽兗銉夋彁渚 Ivy, feature request #629) +
    • +
    • 銆岄枹閫fс伄銇傘倠瑷樹簨銆嶃伄銈汇偗銈枫儳銉炽倰瑷樹簨銇儦銉笺偢銇拷鍔犮仐銇俱仐銇熴(銈炽兗銉夋彁渚 Andreas, feature request #444)
    • +
    • 瑷瑾炪偑銉笺儛銉笺儵銈ゃ儔姗熻兘銈掕拷鍔犮仐銇俱仐銇熴(feature request #669)
    • +
    • 銈炽儭銉炽儓绠$悊銉氥兗銈搞倰杩藉姞銇椼伨銇椼仧銆(feature request #586)
    • +
    • 銈ゃ兂銈广儓銉笺儷銉汇偄銉冦儣銈般儸銉笺儔鎴愬姛寰屻伀銆併偆銉炽偣銉堛兗銉伀浣跨敤銇椼仧銉曘偂銈ゃ儷銈(銈儣銈枫儳銉炽仹)鍓婇櫎銇欍倠銈堛亞銇仐銇俱仐銇熴(feature request #635)
    • +
    • public_html/index.php銈掔枒浼笺儠銉兂銉堛偝銉炽儓銉兗銉┿兗銇ㄣ仐銇︿娇銇嗐亾銇ㄣ倰鍙兘銇仚銈 URL銉兗銉嗐偅銉炽偘姗熻兘銈掕拷鍔犮仐銇俱仐銇熴(feature + requests #211, #326) +
    • +
    • Spam-X銉椼儵銈般偆銉炽伀鏂拌銉€偢銉ャ兗銉倰杩藉姞銇椼伨銇椼仧銆(銉曘偂銈ゃ儷鎻愪緵 Dirk Haun, feature request #585)
    • +
    • 瑭遍銇斻仺銇浜嬨儐銉炽儣銉兗銉堛倰澶夋洿銇欍倠姗熻兘銈掕拷鍔犮仐銇俱仐銇熴(銈炽兗銉夋彁渚 @hostellerie, feature request #275)
    • +
    • 銈€兂銈便兗銉(polls)銇偝銉°兂銉堛倰妞滅储銇欍倠姗熻兘銈掕拷鍔犮仐銇俱仐銇熴(feature request #394)
    • +
    • 銉囥儠銈┿儷銉堛伄gravatar銈€偆銈炽兂銇ó椤炪倰鎸囧畾銇欍倠鏂般仐銇勮ō瀹氥偑銉椼偡銉с兂($_CONF['gravatar_identicon'])銈掕拷鍔犮仐銇俱仐銇熴(bug #579)
    • +
    • 銈点偆銉堣í鍟忚呫伄銉囥儛銈ゃ偣銈裤偆銉(mobile 銇 computer)銇嬨倰妞滃嚭銇欍倠姗熻兘銈扜eeklog銇拷鍔犮仐銇俱仐銇熴 + 鐗瑰畾銇儑銉愩偆銈广偪銈ゃ儣銇銇椼仸銉栥儹銉冦偗銈掕〃绀恒仚銈嬨仧銈併伀浣裤亞銇撱仺銇屻仹銇嶃伨銇欍
    • +
    • 銈点偆銉堣í鍟忚呫伄銉囥儛銈ゃ偣銇屻儮銉愩偆銉(銈广優銉笺儓銉曘偐銉炽仺銈裤儢銉儍銉)銇с亗銈嬨仺鎬濄倧銈屻倠鍫村悎銆乼rue銈掕繑銇欍儐銉炽儣銉兗銉堝鏁 {device_mobile} 銈掕拷鍔犮仐銇俱仐銇熴
    • +
    • PEAR 銇ō瀹氥倰鍓婇櫎銇椼伨銇椼仧銆侾EAR 銉┿偆銉栥儵銉兗銈 composer 銇х鐞嗐仚銈嬨倛銇嗐伀銇椼伨銇椼仧銆
    • +
    • 鏂般仐銇 Denim Curve 銉嗐兗銉炪伅 Denim 銉嗐兗銉炪伄瀛愩儐銉笺優銇с丮odern Curve 銉嗐兗銉炪伄澶栬銈掑厓銇仐銇︺亜銇俱仚銆
    • +
    • 澶栭儴銉椼儹銈般儵銉犮倰浣裤倧銇氥伀姗熻兘銇欍倠鏂般仐銇勩儑銉笺偪銉欍兗銈广儛銉冦偗銈€儍銉楁鑳姐倰杩藉姞銇椼伨銇椼仧銆(MySQL銇伩)
    • +
    • 銈ゃ兂銈广儓銉笺儵銉笺倰鏀硅壇銇椼併偄銉冦儣銈般儸銉笺儔銇殯銇儭銉冦偦銉笺偢銈掕〃绀恒仚銈嬨倛銇嗐伀銇椼伨銇椼仧銆
    • +
    • COM_switchLocaleSettings 銇$_CONF['meta_description'],$_CONF['meta_keywords'], $_CONF['site_name'], $_CONF['owner_name'], $_CONF['site_slogan']銇浉銇嶆彌銇堛倰銈点儩銉笺儓銇欍倠銈堛亞銇仾銈娿伨銇椼仧銆
    • +
    • UTF-8銇4銉愩偆銉堟枃瀛椼偦銉冦儓(utf8mb4_xxx_ci)銈掍娇鐢ㄣ仚銈婱ySQL銈掋偟銉濄兗銉堛仚銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • +
    • Pear, Uikit, OAuth, jQuery, jQuery UI銈掋伅銇樸倎銇ㄣ仐銇﹀鏁般伄銉┿偆銉栥儵銉兗銈掓洿鏂般仐銇俱仐銇熴
    • +
    • 澶氭暟銇儛銈颁慨姝c仺銈汇偔銉ャ儶銉嗐偅銇枹銇欍倠銉愩偘銈掍慨姝c仐銇俱仐銇熴
    @@ -47,14 +70,15 @@

    Geeklog 2.1.1

    Geeklog 2.1.1 銇富銇柊姗熻兘銇疷Ikit銉曘儸銉笺儬銉兗銈倰杩藉姞銇椼仧銇撱仺銇с仚銆傘亾銈屻伅銆 "銈广償銉笺儑銈c兗銇у挤鍔涖仾銈︺偋銉栥偆銉炽偪銉曘偋銉笺偣闁嬬櫤銇仧銈併伄銆佽唤閲忋亱銇ゆ閫犵殑銇儠銉兂銉堛偍銉炽儔銉曘儸銉笺儬銉兗銈"銇с仚銆

    -

    浠婂洖銇瓽eeklog銇儶銉兗銈广伅銆乯Query v1.11.3, jQuery UI v1.11.4, CKEditor v4.5.4, UIkit v2.24.0, Filemanager v2.2.0, 銇濄仐銇 OAuth class v1.411銈掑悓姊便仐銇︺亜銇俱仚銆

    +

    浠婂洖銇瓽eeklog銇儶銉兗銈广伅銆乯Query v1.11.3, jQuery UI v1.11.4, CKEditor v4.5.4, UIkit v2.24.0, Filemanager v2.2.0, 銇濄仐銇 OAuth + class v1.411銈掑悓姊便仐銇︺亜銇俱仚銆

    鏂版鑳姐仺鏀瑰杽鐐

      -
    • UIkit framework version 2.24.0 銈 Geeklog鏈綋銇拷鍔犮仐銇俱仐銇熴
    • -
    • 銉椼儵銈般偆銉炽伀銆併優銉儊銉椼儷銉嗐兗銉炪儐銉炽儣銉兗銉堛倰銈点儩銉笺儓銇椼伨銇椼仧銆
    • -
    • 澶氭暟銇儛銈般倓銈汇偔銉ャ儶銉嗐偅銉曘偅銉冦偗銈广倰琛屻亜銇俱仐銇熴
    • +
    • UIkit framework version 2.24.0 銈 Geeklog鏈綋銇拷鍔犮仐銇俱仐銇熴
    • +
    • 銉椼儵銈般偆銉炽伀銆併優銉儊銉椼儷銉嗐兗銉炪儐銉炽儣銉兗銉堛倰銈点儩銉笺儓銇椼伨銇椼仧銆
    • +
    • 澶氭暟銇儛銈般倓銈汇偔銉ャ儶銉嗐偅銉曘偅銉冦偗銈广倰琛屻亜銇俱仐銇熴

    Geeklog 2.1.0

    @@ -66,24 +90,27 @@

    Geeklog 2.1.0

    鏂版鑳姐仺鏀瑰杽鐐

      -
    • Joe Mucchiello銇倛銇c仸闁嬬櫤銇曘倢銇烥eeklog銈儶銈搞儕銉伄Caching Template Library銈掕拷鍔犮
    • -
    • 銉囥儠銈┿儷銉堛儐銉笺優姗熻兘銈掋偟銉濄兗銉堛
    • -
    • 銉栥儹銉冦偗銆侀潤鐨勩儦銉笺偢銆佽浜嬨伀瀵俱仐銇ache姗熻兘銇岃拷鍔犮仌銈屻伨銇椼仧銆
    • -
    • 瑷樹簨銇殠灞ゆ閫犮伄Cache姗熻兘杩藉姞銇倛銈嬮珮閫熷寲銆
    • -
    • OAuth 銉偘銈ゃ兂銈掕拷鍔 (Google, Microsoft, Yahoo)銆
    • -
    • 銈€儔銉愩兂銈广儓銈ㄣ儑銈c偪銉笺倰杩藉姞銇椼倓銇欍亜銇椼亸銇裤倰杩藉姞銆
    • -
    • CKEditor 4.3.2銇屻儑銉曘偐銉儓銇偄銉夈儛銉炽偣銉堛偍銉囥偅銈裤兗銇
    • -
    • 澶氳█瑾炪偡銈广儐銉犮伄銉囥儛銉冦偘銆
    • -
    • 銉曘偂銈ゃ儷銉炪儘銉笺偢銉c兗銈掕拷鍔犮
    • +
    • Joe Mucchiello銇倛銇c仸闁嬬櫤銇曘倢銇烥eeklog銈儶銈搞儕銉伄Caching Template Library銈掕拷鍔犮
    • +
    • 銉囥儠銈┿儷銉堛儐銉笺優姗熻兘銈掋偟銉濄兗銉堛
    • +
    • 銉栥儹銉冦偗銆侀潤鐨勩儦銉笺偢銆佽浜嬨伀瀵俱仐銇ache姗熻兘銇岃拷鍔犮仌銈屻伨銇椼仧銆
    • +
    • 瑷樹簨銇殠灞ゆ閫犮伄Cache姗熻兘杩藉姞銇倛銈嬮珮閫熷寲銆
    • +
    • OAuth 銉偘銈ゃ兂銈掕拷鍔 (Google, Microsoft, Yahoo)銆
    • +
    • 銈€儔銉愩兂銈广儓銈ㄣ儑銈c偪銉笺倰杩藉姞銇椼倓銇欍亜銇椼亸銇裤倰杩藉姞銆
    • +
    • CKEditor 4.3.2銇屻儑銉曘偐銉儓銇偄銉夈儛銉炽偣銉堛偍銉囥偅銈裤兗銇
    • +
    • 澶氳█瑾炪偡銈广儐銉犮伄銉囥儛銉冦偘銆
    • +
    • 銉曘偂銈ゃ儷銉炪儘銉笺偢銉c兗銈掕拷鍔犮

    Geeklog 2.0.0

    -

    娉ㄦ剰: Geeklog 2.0.0銇┍椤屻倰鐣般仾銈嬫柟娉曘仹绠$悊銇椼仸銇勩伨銇欍傝浜嬨仺銉栥儹銉冦偗銇搞伄瑭遍銇壊銈婂綋銇︺伅銆併儑銉笺偪銉欍兗銈广伄灏傜敤銇儐銉笺儢銉伀淇濆瓨銇欍倠銈堛亞銇仾銈娿伨銇椼仧銆傘亾銈屻伅瑷樹簨銇ㄣ儢銉儍銈伄銉嗐兗銉栥儷銈掑皯銇楀鏇淬仐銇熴亾銇ㄣ倰鎰忓懗銇椼伨銇欍傘儢銉儍銈倰鐩存帴澶夋洿銇椼仧銈娿佷腑澶儢銉儍銈倰鎸併仯銇熴儣銉┿偘銈ゃ兂銇疓eeklog 2.0.0銇ㄤ簰鎻涙с亴銇亜銇嬨倐銇椼倢銇俱仜銈撱傘偄銉冦儣銈般儸銉笺儔銇欍倠鍓嶃伀銆併偆銉炽偣銉堛兗銉仐銇︺亜銈嬨儣銉┿偘銈ゃ兂銇簰鎻涙с亴銇傘倠銇嬨仼銇嗐亱纰鸿獚銇椼仸銇忋仩銇曘亜銆傘倐銇椾簰鎻涙с亴銇亸銆併仢銈屻仹銈傘偄銉冦儣銈般儸銉笺儔銇椼仧銇勫牬鍚堛伅銉椼儵銈般偆銉炽倰鐒″姽銇仐銇︺亸銇犮仌銇勩侴eeklog 2.0.0銇儶銉兗銈广伄寰屻併伝銇ㄣ倱銇┿伄銉椼儵銈般偆銉炽伄浣滄垚鑰呫亴銇欍亹銇獹eeklog 2.0.0銈掋偟銉濄兗銉堛仚銈嬨倛銇嗐伀銉椼儵銈般偆銉炽倰銈€儍銉椼偘銉兗銉夈仚銈嬨倛銇嗐伀鏈熷緟銇椼仸銇勩伨銇欍

    +

    娉ㄦ剰: Geeklog + 2.0.0銇┍椤屻倰鐣般仾銈嬫柟娉曘仹绠$悊銇椼仸銇勩伨銇欍傝浜嬨仺銉栥儹銉冦偗銇搞伄瑭遍銇壊銈婂綋銇︺伅銆併儑銉笺偪銉欍兗銈广伄灏傜敤銇儐銉笺儢銉伀淇濆瓨銇欍倠銈堛亞銇仾銈娿伨銇椼仧銆傘亾銈屻伅瑷樹簨銇ㄣ儢銉儍銈伄銉嗐兗銉栥儷銈掑皯銇楀鏇淬仐銇熴亾銇ㄣ倰鎰忓懗銇椼伨銇欍傘儢銉儍銈倰鐩存帴澶夋洿銇椼仧銈娿佷腑澶儢銉儍銈倰鎸併仯銇熴儣銉┿偘銈ゃ兂銇疓eeklog + 2.0.0銇ㄤ簰鎻涙с亴銇亜銇嬨倐銇椼倢銇俱仜銈撱傘偄銉冦儣銈般儸銉笺儔銇欍倠鍓嶃伀銆併偆銉炽偣銉堛兗銉仐銇︺亜銈嬨儣銉┿偘銈ゃ兂銇簰鎻涙с亴銇傘倠銇嬨仼銇嗐亱纰鸿獚銇椼仸銇忋仩銇曘亜銆傘倐銇椾簰鎻涙с亴銇亸銆併仢銈屻仹銈傘偄銉冦儣銈般儸銉笺儔銇椼仧銇勫牬鍚堛伅銉椼儵銈般偆銉炽倰鐒″姽銇仐銇︺亸銇犮仌銇勩侴eeklog + 2.0.0銇儶銉兗銈广伄寰屻併伝銇ㄣ倱銇┿伄銉椼儵銈般偆銉炽伄浣滄垚鑰呫亴銇欍亹銇獹eeklog 2.0.0銈掋偟銉濄兗銉堛仚銈嬨倛銇嗐伀銉椼儵銈般偆銉炽倰銈€儍銉椼偘銉兗銉夈仚銈嬨倛銇嗐伀鏈熷緟銇椼仸銇勩伨銇欍

    銇俱仧銆併儐銉笺優銇偍銉炽偢銉炽倐鏇存柊銇椼伨銇椼仧銆侴eeklog 2.0.0銇с伅銆佷互鍓嶃伀鐗瑰畾銇儴鍒嗘瘞銇伅銇亸銆併仚銇广仸銈掍竴搴︺伀鐢熸垚銇欍倠鏂般仐銇勯枹鏁般倰灏庡叆銇椼仸銇勩伨銇欍 -銇撱伄鏂般仐銇勯枹鏁般倰琛ㄧず銇娇鐢ㄣ仚銈嬨倛銇嗐伀鏇存柊銇椼仧銉嗐兗銉炪仺銉椼儵銈般偆銉炽仩銇戙亴銆併亾銇柊銇椼亜姗熻兘銇倛銈婫eeklog銇ㄣ儐銉笺優銇搞伄鎭╂伒銈掑彈銇戙倠銇撱仺銇屻仹銇嶃伨銇欍 + 銇撱伄鏂般仐銇勯枹鏁般倰琛ㄧず銇娇鐢ㄣ仚銈嬨倛銇嗐伀鏇存柊銇椼仧銉嗐兗銉炪仺銉椼儵銈般偆銉炽仩銇戙亴銆併亾銇柊銇椼亜姗熻兘銇倛銈婫eeklog銇ㄣ儐銉笺優銇搞伄鎭╂伒銈掑彈銇戙倠銇撱仺銇屻仹銇嶃伨銇欍

    銇撱伄Geeklog銇痡Query 1.9.1銆乯Query UI 1.10.1銇‵CKeditor 2.6.9銈掑悓姊便仐銇︺亜銇俱仚銆

    @@ -91,17 +118,16 @@

    Geeklog 2.0.0

    鏂版鑳姐仺鏀瑰杽鐐

      -
    • 銉戙偣銉兗銉夈伄銉忋儍銈枫儱鍑︾悊銇挤搴︺倰鏀瑰杽銇椼伨銇椼仧銆
    • -
    • 瑭遍銇瓙銇┍椤屻倰鎸併仸銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • -
    • 瑷樹簨銆併儢銉儍銈佷粬銇儣銉┿偘銈ゃ兂銇偑銉栥偢銈с偗銉堛倰瑜囨暟銇┍椤屻仺闁總浠樸亼銈夈倢銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • -
    • 瑭遍銇儜銉炽亸銇氥儶銈广儓銈掋偟銉濄兗銉堛仐銇俱仐銇熴
    • -
    • Geeklog銇偆銉炽偣銉堛兗銉伀銉偣銈儱銉笺儎銉笺儷銈掑惈銈併伨銇椼仧銆
    • -
    • MySQLi銇偟銉濄兗銉堛倰杩藉姞銇椼伨銇椼仧銆
    • -
    • Spam-X銇幉绀烘澘銇偣銉戙儬闃叉銇ㄣ偣銉戙儬銉兂銈(鏁)妞滆銇儮銈搞儱銉笺儷銈掕拷鍔犮仐銇俱仐銇熴
    • -
    • 銉偣銉濄兂銈枫儢WEB銉囥偠銈ゃ兂銉嗐兗銉炪孌enim銆嶃倰杩藉姞銇椼伨銇椼仧銆
    • -
    • 銉嗐兗銉炪孧odern Curve銆嶃倰杩藉姞銇椼伨銇椼仧銆
    • -
    • 瑷樹簨銇ㄥ悓銇樸儦銉笺偢銇с偝銉°兂銉堛仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • - +
    • 銉戙偣銉兗銉夈伄銉忋儍銈枫儱鍑︾悊銇挤搴︺倰鏀瑰杽銇椼伨銇椼仧銆
    • +
    • 瑭遍銇瓙銇┍椤屻倰鎸併仸銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • +
    • 瑷樹簨銆併儢銉儍銈佷粬銇儣銉┿偘銈ゃ兂銇偑銉栥偢銈с偗銉堛倰瑜囨暟銇┍椤屻仺闁總浠樸亼銈夈倢銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • +
    • 瑭遍銇儜銉炽亸銇氥儶銈广儓銈掋偟銉濄兗銉堛仐銇俱仐銇熴
    • +
    • Geeklog銇偆銉炽偣銉堛兗銉伀銉偣銈儱銉笺儎銉笺儷銈掑惈銈併伨銇椼仧銆
    • +
    • MySQLi銇偟銉濄兗銉堛倰杩藉姞銇椼伨銇椼仧銆
    • +
    • Spam-X銇幉绀烘澘銇偣銉戙儬闃叉銇ㄣ偣銉戙儬銉兂銈(鏁)妞滆銇儮銈搞儱銉笺儷銈掕拷鍔犮仐銇俱仐銇熴
    • +
    • 銉偣銉濄兂銈枫儢WEB銉囥偠銈ゃ兂銉嗐兗銉 Denim 銈掕拷鍔犮仐銇俱仐銇熴
    • +
    • 銉嗐兗銉 Modern Curve 銈掕拷鍔犮仐銇俱仐銇熴
    • +
    • 瑷樹簨銇ㄥ悓銇樸儦銉笺偢銇с偝銉°兂銉堛仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    @@ -109,90 +135,101 @@

    Geeklog 1.8.2sr1

    銇撱伄銉儶銉笺偣銇互涓嬨伄銈汇偔銉ャ儶銉嗐偅銉笺伄鍟忛銈掍慨姝:

      -
    • High-Tech Bridge Security Research Lab 銇 XSS銇屻偒銉兂銉銉笺儣銉┿偘銈ゃ兂銇甤alendar_type parameter銇瓨鍦ㄣ仚銈嬨亾銇ㄣ倰鍫卞憡銇椼伨銇椼仧(瑷宠ɑ銆銇撱倢銇即銇勩佹棩鏈獮鐗堛仹銇偒銉兂銉銉糺p銉椼儵銈般偆銉炽倐鍚屾銇绛栥仐銇俱仐銇熴)(HTB23143)銆
    • -
    • Trustwave Spiderlabs 銇併偆銉炽偣銉堛兗銉儣銉偘銉┿儬銆併偝銉炽儠銈c偖銉ャ儸銉笺偡銉с兂銆併偄銉炽偙銉笺儓銉椼儵銈般偆銉炽伄绠$悊鐢婚潰銆佽┍椤屻伄绠$悊鐢婚潰銇玐SS銇屽瓨鍦ㄣ仚銈嬨亾銇ㄣ倰鍫卞憡銇椼伨銇椼仧銆 (TWSL2013-001).
    • +
    • High-Tech Bridge Security Research Lab 銇 XSS銇屻偒銉兂銉銉笺儣銉┿偘銈ゃ兂銇甤alendar_type + parameter銇瓨鍦ㄣ仚銈嬨亾銇ㄣ倰鍫卞憡銇椼伨銇椼仧(瑷宠ɑ銆銇撱倢銇即銇勩佹棩鏈獮鐗堛仹銇偒銉兂銉銉糺p銉椼儵銈般偆銉炽倐鍚屾銇绛栥仐銇俱仐銇熴)(HTB23143)銆 +
    • +
    • Trustwave Spiderlabs 銇併偆銉炽偣銉堛兗銉儣銉偘銉┿儬銆併偝銉炽儠銈c偖銉ャ儸銉笺偡銉с兂銆併偄銉炽偙銉笺儓銉椼儵銈般偆銉炽伄绠$悊鐢婚潰銆佽┍椤屻伄绠$悊鐢婚潰銇玐SS銇屽瓨鍦ㄣ仚銈嬨亾銇ㄣ倰鍫卞憡銇椼伨銇椼仧銆 (TWSL2013-001).

    銇濄伄浠栥伄淇:

      -
    • Twitter OAuth 銉偘銈ゃ兂銇甌witter API銈抳ersion 1.1銇垏銈婃浛銇堛伨銇椼仧銆
    • +
    • Twitter OAuth 銉偘銈ゃ兂銇甌witter API銈抳ersion 1.1銇垏銈婃浛銇堛伨銇椼仧銆

    Geeklog 1.8.2

    Geeklog 1.8.2銇儭銉炽儐銉娿兂銈广儶銉兗銈广仹, 涓汇伀 MySQL 5.5瀵惧繙銇═witter OAuth銉偘銈ゃ兂銇笉鍏峰悎瀵惧繙銇ㄨ嫢骞层伄淇銈掕銇勩伨銇椼仧銆 -銉囥兗銈裤儥銉笺偣銆併儐銉笺優銆佽█瑾炪儠銈°偆銉伅浣曘倐澶夋洿銇仾銇勩伄銇с偨銉笺偣銇疆銇嶆彌銇堛仩銇戙仹澶т笀澶仹銇欍

    + 銉囥兗銈裤儥銉笺偣銆併儐銉笺優銆佽█瑾炪儠銈°偆銉伅浣曘倐澶夋洿銇仾銇勩伄銇с偨銉笺偣銇疆銇嶆彌銇堛仩銇戙仹澶т笀澶仹銇欍

    銉愩偘淇

      -
    • MySQL 5.5瀵惧繙銈掕銇勩伨銇椼仧(upgrade, database backup)銆傘亾銈屻伀銈堛倞瀵惧繙銇欍倠MySQL銇渶灏忋儛銉笺偢銉с兂銇痸ersion 4.1.2銇ㄣ仾銈娿伨銇椼仧銆
    • -
    • Twitter OAuth銉偘銈ゃ兂銇笉鍏峰悎銈掍慨姝c仐銇俱仐銇熴
    • +
    • MySQL 5.5瀵惧繙銈掕銇勩伨銇椼仧(upgrade, database backup)銆傘亾銈屻伀銈堛倞瀵惧繙銇欍倠MySQL銇渶灏忋儛銉笺偢銉с兂銇痸ersion 4.1.2銇ㄣ仾銈娿伨銇椼仧銆
    • +
    • Twitter OAuth銉偘銈ゃ兂銇笉鍏峰悎銈掍慨姝c仐銇俱仐銇熴

    Geeklog 1.8.1

    Geeklog 1.8.1 銇儭銉炽儐銉娿兂銈广儶銉兗銈广仹銇傘倞銆併仚銇广仸銇瓽eeklog 1.8.0銉︺兗銈躲兗銇 -銈€儍銉椼偘銉兗銉夈倰鎺ㄥエ銇椼伨銇欍 -銉囥兗銈裤儥銉笺偣銆併儐銉炽儣銉兗銉堛佽█瑾炪儠銈°偆銉伀澶夋洿銇仾銇(瑷瑾炪伀銈堛仯銇︺伅 -銉°兂銉嗐儕銉炽偣銇屻亗銈娿伨銇)銆併偄銉冦儣銈般儸銉笺儔銇啊鍗樸仹銇欍

    + 銈€儍銉椼偘銉兗銉夈倰鎺ㄥエ銇椼伨銇欍 + 銉囥兗銈裤儥銉笺偣銆併儐銉炽儣銉兗銉堛佽█瑾炪儠銈°偆銉伀澶夋洿銇仾銇(瑷瑾炪伀銈堛仯銇︺伅 + 銉°兂銉嗐儕銉炽偣銇屻亗銈娿伨銇)銆併偄銉冦儣銈般儸銉笺儔銇啊鍗樸仹銇欍

    浠婂洖銇瓽eeklog銇甹Query銇1.6.3銇偄銉冦儣銈般儸銉笺儔銇椼仸銇勩伨銇欍

    銉愩偘淇

      -
    • 鎯呭牨銇紡娲┿倰淇: -
        -
      • "rootdebug"銈儣銈枫儳銉炽倰鏈夊姽銇仐銇︺亜銈嬨仺銇嶃伀銆丱Auth銇偝銉炽偡銉ャ兗銉炪兓銈兗銇ㄣ偝銉炽偡銉ャ兗銉炪兗銉汇偡銉笺偗銉儍銉堛倐鏇搞亶鍑恒仌銈屻仸銇勩伨銇椼仧銆傘亾銈屻亱銈夈伅銆佸鏁般伄鏇搞亶鍑恒仐銇亾銈屻倝銈掑惈銈併仸琛ㄧず銇椼仧銇勫牬鍚堛伅rootdebug銇偑銉椼偡銉с兂銇拷鍔犮仹"force"銈掕ō瀹氥仐銇亼銈屻伆銇倞銇俱仜銈撱
      • -
      • MS SQL銇儔銉┿偆銉愩兗銇垵鏈熺姸鎱嬨仹瑭崇窗銇猄QL銈ㄣ儵銉笺儭銉冦偦銉笺偢銈掕〃绀恒仐銇︺亜銇俱仐銇熴
      • -
    • -
    • Geeklog 1.8.0銇с伅[code]銇 - [raw] 銈裤偘銇屻偝銉炽儐銉炽儎銈掗仼鍒囥伀鍥為伩銇с亶銇亱銇c仧涓嶅叿鍚堛倰淇銇椼伨銇椼仧銆
    • -
    • 銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽仹閰嶅垪銇绱犮伄杩藉姞銇ㄥ墛闄ゃ仹璧枫亶銇︺亜銇熴併亜銇忋仱銇嬨伄鍟忛銈掍慨姝c仐銇俱仐銇熴
    • -
    • 绠$悊鑰呫亴銉︺兗銈躲兗绠$悊鐢婚潰銇с併偍銉┿兗鐧虹敓鏅傘倐澶夋洿鍐呭銈掑け銈忋仾銇勩倛銇嗐伀銇椼伨銇椼仧銆
    • -
    • 瑷樹簨銇儣銉儞銉ャ兗銇с佺敾鍍忋亴琛ㄧず銇曘倢銇亜涓嶅叿鍚堛倰淇銇椼伨銇椼仧(瑷樹簨绶ㄩ泦鏅)銆
    • -
    • 銉椼儵銈般偆銉炽伅銆plugin_getFooter()闁㈡暟銇$_SCRIPTS銇屼娇銇堛倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • PHP 5.4銇鍛娿伀瀵惧繙銇椼伨銇椼仧銆
    • +
    • 鎯呭牨銇紡娲┿倰淇: +
        +
      • "rootdebug"銈儣銈枫儳銉炽倰鏈夊姽銇仐銇︺亜銈嬨仺銇嶃伀銆丱Auth銇偝銉炽偡銉ャ兗銉炪兓銈兗銇ㄣ偝銉炽偡銉ャ兗銉炪兗銉汇偡銉笺偗銉儍銉堛倐鏇搞亶鍑恒仌銈屻仸銇勩伨銇椼仧銆傘亾銈屻亱銈夈伅銆佸鏁般伄鏇搞亶鍑恒仐銇亾銈屻倝銈掑惈銈併仸琛ㄧず銇椼仧銇勫牬鍚堛伅rootdebug銇偑銉椼偡銉с兂銇拷鍔犮仹"force"銈掕ō瀹氥仐銇亼銈屻伆銇倞銇俱仜銈撱 +
      • +
      • MS SQL銇儔銉┿偆銉愩兗銇垵鏈熺姸鎱嬨仹瑭崇窗銇猄QL銈ㄣ儵銉笺儭銉冦偦銉笺偢銈掕〃绀恒仐銇︺亜銇俱仐銇熴
      • +
      +
    • +
    • Geeklog 1.8.0銇с伅[code]銇 + [raw] 銈裤偘銇屻偝銉炽儐銉炽儎銈掗仼鍒囥伀鍥為伩銇с亶銇亱銇c仧涓嶅叿鍚堛倰淇銇椼伨銇椼仧銆 +
    • +
    • 銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽仹閰嶅垪銇绱犮伄杩藉姞銇ㄥ墛闄ゃ仹璧枫亶銇︺亜銇熴併亜銇忋仱銇嬨伄鍟忛銈掍慨姝c仐銇俱仐銇熴
    • +
    • 绠$悊鑰呫亴銉︺兗銈躲兗绠$悊鐢婚潰銇с併偍銉┿兗鐧虹敓鏅傘倐澶夋洿鍐呭銈掑け銈忋仾銇勩倛銇嗐伀銇椼伨銇椼仧銆
    • +
    • 瑷樹簨銇儣銉儞銉ャ兗銇с佺敾鍍忋亴琛ㄧず銇曘倢銇亜涓嶅叿鍚堛倰淇銇椼伨銇椼仧(瑷樹簨绶ㄩ泦鏅)銆
    • +
    • 銉椼儵銈般偆銉炽伅銆plugin_getFooter()闁㈡暟銇$_SCRIPTS銇屼娇銇堛倠銈堛亞銇仾銈娿伨銇椼仧銆
    • +
    • PHP 5.4銇鍛娿伀瀵惧繙銇椼伨銇椼仧銆

    Geeklog 1.8.0

    娉ㄦ剰: Geeklog 1.8.0銇PHP 5.2.0 -銇傘倠銇勩伅銇濄倢浠ラ檷銇儛銉笺偢銉с兂銈掕姹傘仐銇俱仚銆傘倧銇熴仐銇熴仭銇竴瀹氭湡闁撱丳HP 4銈掋偟銉濄兗銉堛仚銈Geeklog 1.7.2銈掓彁渚涖仐銇俱仚銇屻丳HP 5.2銇俱仧銇仢銈屼互闄嶃伀銇с亶銈嬨仩銇戙伅銈勩亸鍒囥倞鏇裤亪銇︺亸銇犮仌銇勩

    + 銇傘倠銇勩伅銇濄倢浠ラ檷銇儛銉笺偢銉с兂銈掕姹傘仐銇俱仚銆傘倧銇熴仐銇熴仭銇竴瀹氭湡闁撱丳HP 4銈掋偟銉濄兗銉堛仚銈Geeklog 1.7.2銈掓彁渚涖仐銇俱仚銇屻丳HP 5.2銇俱仧銇仢銈屼互闄嶃伀銇с亶銈嬨仩銇戙伅銈勩亸鍒囥倞鏇裤亪銇︺亸銇犮仌銇勩

    瑭崇窗銇丟eeklog銉涖兗銉犮儦銉笺偢銇銈€儕銈︺兂銈銈掑弬鐓с仐銇︺亸銇犮仌銇勩

    鏂版鑳姐仺鏀瑰杽鐐

      -
    • 銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽伅銆佸叆鍔涖儊銈с儍銈鑳姐仺妞滅储姗熻兘銈掕拷鍔犮仐銇俱仐銇熴傘亾銈屻伅 - 2010 Google Summer of Code銉椼儹銈搞偋銈儓銇亰銇戙倠Akeda Bagus銇曘倱銇垚鏋溿仹銇欍
    • -
    • Geeklog銈点偆銉堛伀Facebook銈凾witter, LinkedIn銇偄銈偊銉炽儓銈掑埄鐢ㄣ仐銇︺儹銈般偆銉炽仹銇嶃倠 +
    • 銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽伅銆佸叆鍔涖儊銈с儍銈鑳姐仺妞滅储姗熻兘銈掕拷鍔犮仐銇俱仐銇熴傘亾銈屻伅 + 2010 Google Summer of Code銉椼儹銈搞偋銈儓銇亰銇戙倠Akeda Bagus銇曘倱銇垚鏋溿仹銇欍 +
    • +
    • Geeklog銈点偆銉堛伀Facebook銈凾witter, LinkedIn銇偄銈偊銉炽儓銈掑埄鐢ㄣ仐銇︺儹銈般偆銉炽仹銇嶃倠 OAuth銈点儩銉笺儓姗熻兘銈掕拷鍔犮仐銇俱仐銇熴傘亾銈屻伅銆丟eeklog Japan銇 - Hiroshi Sakuramoto (Hiroron) 銇曘倱銇枊鐧恒倰鍏冦伀銇椼仸銇勩伨銇欍
    • -
    • 銉囥儠銈┿儷銉堛儐銉笺優銇偄銈ゃ偝銉炽亴杩藉姞銇曘倢銇俱仐銇熴(taken from the Tango, Gnome, and Humanity - icon themes).
    • -
    • Geeklog銇滃叕寮忊滼avaScript library銇ㄣ仐銇jQuery銈掓惌杓夈仐銇俱仐銇熴
    • -
    • 鑷嫊銈裤偘銇儜銉笺儫銉冦偡銉с兂銇ㄣ儑銈c偣銈儶銉椼偡銉с兂姗熻兘銇岃拷鍔犮仌銈屻伨銇椼仧銆(tooltip).
    • -
    • 銉椼儵銈般偆銉崇鐞嗙敾闈€亴鏀归犮仌銈屻併儣銉┿偘銈ゃ兂銇儹銉笺儔闋嗐伄瑷畾銇с亶銇俱仚銆 - 銇俱仧銆佷粬銇儣銉┿偘銈ゃ兂銇搞伄 渚濆瓨銉併偋銉冦偗銈掕拷鍔犮仐銇俱仐銇熴
    • + Hiroshi Sakuramoto (Hiroron) 銇曘倱銇枊鐧恒倰鍏冦伀銇椼仸銇勩伨銇欍 + +
    • 銉囥儠銈┿儷銉堛儐銉笺優銇偄銈ゃ偝銉炽亴杩藉姞銇曘倢銇俱仐銇熴(taken from the Tango, Gnome, and Humanity + icon themes). +
    • +
    • Geeklog銇滃叕寮忊滼avaScript library銇ㄣ仐銇jQuery銈掓惌杓夈仐銇俱仐銇熴
    • +
    • 鑷嫊銈裤偘銇儜銉笺儫銉冦偡銉с兂銇ㄣ儑銈c偣銈儶銉椼偡銉с兂姗熻兘銇岃拷鍔犮仌銈屻伨銇椼仧銆(tooltip).
    • +
    • 銉椼儵銈般偆銉崇鐞嗙敾闈€亴鏀归犮仌銈屻併儣銉┿偘銈ゃ兂銇儹銉笺儔闋嗐伄瑷畾銇с亶銇俱仚銆 + 銇俱仧銆佷粬銇儣銉┿偘銈ゃ兂銇搞伄 渚濆瓨銉併偋銉冦偗銈掕拷鍔犮仐銇俱仐銇熴 +

    Geeklog 1.7.2

    -

    娉ㄦ剰: Geeklog 1.7.2銇疨HP 4銇у嫊浣溿仚銈嬫渶寰屻伄Geeklog銇儛銉笺偢銉с兂銇с仚銆傚繀瑕併仾鍫村悎銇併亾銇儛銉笺偢銉с兂銇偦銈儱銉儐銈d慨姝c倰2012骞淬伨銇ф彁渚涖仐銇俱仚銆傛柊銇椼亜姗熻兘銇疓eeklog 1.8.0銇ㄣ仢銈屼互闄嶃伀銇犮亼杩藉姞銇椼併亾銈屻倝銇柊銇椼亜銉儶銉笺偣銇渶浣庛仹銈侾HP 5.2.0銇屽嫊浣溿伀蹇呰銇с仚銆傝┏绱般伅geeklog.net銇銈€儕銈︺兂銈銈掑弬鐓с仐銇︺亸銇犮仌銇勩

    +

    娉ㄦ剰: Geeklog 1.7.2銇疨HP 4銇у嫊浣溿仚銈嬫渶寰屻伄Geeklog銇儛銉笺偢銉с兂銇с仚銆傚繀瑕併仾鍫村悎銇併亾銇儛銉笺偢銉с兂銇偦銈儱銉儐銈d慨姝c倰2012骞淬伨銇ф彁渚涖仐銇俱仚銆傛柊銇椼亜姗熻兘銇疓eeklog + 1.8.0銇ㄣ仢銈屼互闄嶃伀銇犮亼杩藉姞銇椼併亾銈屻倝銇柊銇椼亜銉儶銉笺偣銇渶浣庛仹銈侾HP 5.2.0銇屽嫊浣溿伀蹇呰銇с仚銆傝┏绱般伅geeklog.net銇銈€儕銈︺兂銈銈掑弬鐓с仐銇︺亸銇犮仌銇勩

    銉愩偘淇

      -
    • PostgreSQL銇偟銉濄兗銉堛倰淇銇椼伨銇椼仧銆(Postgres銇儑銉笺偪銉欍兗銈广倰鍏辨湁銇欍倠瑜囨暟銇瓽eeklog銇偆銉炽偣銈裤兂銈广乨bSave闁㈡暟銆併偍銉┿兗鍫卞憡銆丳HP 4銇簰鎻涙)
    • -
    • 瑷樹簨銇甀D銈掑鏇淬仐銇熴仺銇嶃伀[imageX]銈裤偘銇疆銇嶆彌銇堛倰淇銇椼伨銇椼仧銆
    • -
    • 闈欑殑銉氥兗銈搞儣銉┿偘銈ゃ兂銇甈HP 4銇簰鎻涙с伄鍟忛銈掍慨姝c仐銇俱仐銇熴
    • +
    • PostgreSQL銇偟銉濄兗銉堛倰淇銇椼伨銇椼仧銆(Postgres銇儑銉笺偪銉欍兗銈广倰鍏辨湁銇欍倠瑜囨暟銇瓽eeklog銇偆銉炽偣銈裤兂銈广乨bSave闁㈡暟銆併偍銉┿兗鍫卞憡銆丳HP 4銇簰鎻涙)
    • +
    • 瑷樹簨銇甀D銈掑鏇淬仐銇熴仺銇嶃伀[imageX]銈裤偘銇疆銇嶆彌銇堛倰淇銇椼伨銇椼仧銆
    • +
    • 闈欑殑銉氥兗銈搞儣銉┿偘銈ゃ兂銇甈HP 4銇簰鎻涙с伄鍟忛銈掍慨姝c仐銇俱仐銇熴
    @@ -206,21 +243,22 @@

    Geeklog 1.7.1

    鏂版鑳姐仺鏀瑰杽鐐

      -
    • 闈欑殑銉氥兗銈搞伄銈炽兂銉嗐兂銉勩倰浠栥伄闈欑殑銉氥兗銈搞伄銉嗐兂銉椼儸銉笺儓銇ō瀹氥仹銇嶃倠銈堛亞銇仐銇俱仐銇熴
    • -
    • 銉嗐兗銉炪伀瀵俱仐銇︺併儢銉儍銈伄闁嬪銇ㄧ祩浜嗐仹銆佺嫭鑷伄琛ㄧず闁㈡暟銈掔敤鎰忋仐銇俱仐銇熴
    • -
    • 銉嗐兗銉炪伄澶夋洿鐐銈傚弬鐓с仐銇︺亸銇犮仌銇勩
    • +
    • 闈欑殑銉氥兗銈搞伄銈炽兂銉嗐兂銉勩倰浠栥伄闈欑殑銉氥兗銈搞伄銉嗐兂銉椼儸銉笺儓銇ō瀹氥仹銇嶃倠銈堛亞銇仐銇俱仐銇熴
    • +
    • 銉嗐兗銉炪伀瀵俱仐銇︺併儢銉儍銈伄闁嬪銇ㄧ祩浜嗐仹銆佺嫭鑷伄琛ㄧず闁㈡暟銈掔敤鎰忋仐銇俱仐銇熴
    • +
    • 銉嗐兗銉炪伄澶夋洿鐐銈傚弬鐓с仐銇︺亸銇犮仌銇勩

    銉愩偘銉曘偅銉冦偗銈

      -
    • Geeklog 1.7.0銇亰銇勩仸銆併儣銉┿偘銈ゃ兂銇搞伄銈炽儭銉炽儓鎶曠ǹ銇с偪銈ゃ儣銈ㄣ儵銉笺亴銇傘倞銇俱仐銇熴 - 銇濄伄銇熴倎銆佽┎褰撱儣銉┿偘銈ゃ兂銇偝銉°兂銉堛仺銇椼仸瑾嶈瓨銇曘倢銇俱仜銈撱仹銇椼仧銆
    • -
    • 銈点偆銉堛伄銈€儔銉愩兂銈广儓銈ㄣ儑銈c偪銉笺伄銉€兗銉夈倰涓嶅彲銇仐銇熷牬鍚堛倐銆併儲銉笺偠銉兼瘞銇儮銉笺儔銈掓畫銇椼伨銇椼仧銆
    • -
    • 銉炪偆銈€偒銈︺兂銉堛伄"Show & Hide Boxes"銈掍慨姝c仐銇俱仐銇熴
    • -
    • 銉栥儹銉冦偗鍐呫伄涓嫭寮с亴銈ㄣ偣銈便兗銉椼仌銈屻仸銇椼伨銇c仸銇熴仺銇堛伆JavaScript code銇屽嫊浣溿仐銇亸銇倠鍟忛銇屻亗銈娿丟eeklog 1.7.0銇с伄澶夋洿銈掓埢銇椼伨銇椼仧銆 -
    • -
    • 1.7.0 銇COM_refresh()銇殯銇獵ontent-Type header銈掗併倠銈堛亞銇仚銈嬨仺銈炽兂銉曘儶銈儓銇欍倠 銇仹鍏冦伀鎴汇仐銇俱仐銇熴(渚 Forum)
    • +
    • Geeklog 1.7.0銇亰銇勩仸銆併儣銉┿偘銈ゃ兂銇搞伄銈炽儭銉炽儓鎶曠ǹ銇с偪銈ゃ儣銈ㄣ儵銉笺亴銇傘倞銇俱仐銇熴 + 銇濄伄銇熴倎銆佽┎褰撱儣銉┿偘銈ゃ兂銇偝銉°兂銉堛仺銇椼仸瑾嶈瓨銇曘倢銇俱仜銈撱仹銇椼仧銆 +
    • +
    • 銈点偆銉堛伄銈€儔銉愩兂銈广儓銈ㄣ儑銈c偪銉笺伄銉€兗銉夈倰涓嶅彲銇仐銇熷牬鍚堛倐銆併儲銉笺偠銉兼瘞銇儮銉笺儔銈掓畫銇椼伨銇椼仧銆
    • +
    • 銉炪偆銈€偒銈︺兂銉堛伄"Show & Hide Boxes"銈掍慨姝c仐銇俱仐銇熴
    • +
    • 銉栥儹銉冦偗鍐呫伄涓嫭寮с亴銈ㄣ偣銈便兗銉椼仌銈屻仸銇椼伨銇c仸銇熴仺銇堛伆JavaScript code銇屽嫊浣溿仐銇亸銇倠鍟忛銇屻亗銈娿丟eeklog 1.7.0銇с伄澶夋洿銈掓埢銇椼伨銇椼仧銆 +
    • +
    • 1.7.0 銇COM_refresh()銇殯銇獵ontent-Type header銈掗併倠銈堛亞銇仚銈嬨仺銈炽兂銉曘儶銈儓銇欍倠 銇仹鍏冦伀鎴汇仐銇俱仐銇熴(渚 Forum)

    Geeklog 1.7.0

    @@ -228,27 +266,33 @@

    Geeklog 1.7.0

    鏂版鑳姐仺鏀瑰杽鐐

      -
    • Geeklog銇佹柊銇熴伀 PostgreSQL 銉囥兗銈裤儥銉笺偣銈掋偟銉濄兗銉堛仐銇俱仚銆傘亾銇鑳姐伅 Google Summer of Code 2009銇с丼tan Palatnik 銇倛銈婇枊鐧恒仌銈屻伨銇椼仧銆
    • -
    • 銈汇偔銉ャ儶銉嗐偅銉笺儓銉笺偗銉 (CSRF銉椼儹銉嗐偗銈枫儳銉) 銇屾湡闄愬垏銈屻伀銇仯銇熴仺銇嶃併儲銉笺偠銉笺伅鍐嶈獚瑷銇с亶銇俱仚銆 - 鍐嶈獚瑷笺仹鎴愬姛銇欍倢銇般佺法闆嗗唴瀹广倰澶便亞銇撱仺銇亸鎿嶄綔銈掔稒缍氥仹銇嶃伨銇欍
    • -
    • Root銉︺兗銈躲兗銇仩銇戦伕鎶炪亴瑷卞彲銇曘倢銇︺亜銇烪TML 銉曘偅銉偪銉笺伄銈广偔銉冦儣銇併偄銈偦銈规ī銇ㄣ仐銇︾嫭绔嬨仐銇俱仐銇熴
    • -
    • 銉囥儠銈┿儷銉堛偘銉兗銉椼亴杩藉姞銇曘倢銇俱仐銇熴傛柊瑕忋儲銉笺偠銉笺伅銆併儑銉曘偐銉儓銈般儷銉笺儣銇渶鍒濄亱銈夊睘銇椼伨銇欍
    • -
    • 銉椼儵銈般偆銉炽伄銈炽儭銉炽儓銇屻佹柊鐫銉栥儹銉冦偗銇ㄣ儲銉笺偠銉笺伄銉椼儹銉曘偂銈ゃ儷銇〃绀恒仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆(鏂般仐銇凱lugin API 闁㈡暟 - 銉椼儵銈般偆銉炽伄澶夋洿銇屽繀瑕)銆
    • -
    • 瑾嶈銇屽繀瑕併仾銉氥兗銈搞伄琛ㄧず銇伅銆併儹銈般偆銉炽儠銈┿兗銉犮亴琛ㄧず銇曘倢銇俱仚銆
    • -
    • 銈€儔銉愩兂銈广儓銈ㄣ儑銈c偪銉笺亴鏈夊姽銇偟銈ゃ儓銇с伅銆併儲銉笺偠銉笺亴銉炪偆銈€偒銈︺兂銉堛伄瑷畾銇ф湁鍔广伀銇欍倠銇嬬劇鍔广伀銇欍倠銇嬮伕銇广倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • 瑷樹簨銈炽償銉笺偑銉椼偡銉с兂銇岃拷鍔犮仌銈屻伨銇椼仧銆(闈欑殑銉氥兗銈搞儣銉┿偘銈ゃ兂銈勩偒銉兂銉銉笺儣銉┿偘銈ゃ兂銇倛銇嗐伀)
    • -
    • 鏂般仐銇忚嚜鍕曘偪銈 [user:] 銇屾彁渚涖仌銈屻伨銇椼仧銆傘儲銉笺偠銉笺儣銉儠銈°偆銉伕銇儶銉炽偗銇屻仹銇嶃伨銇欍
    • +
    • Geeklog銇佹柊銇熴伀 PostgreSQL 銉囥兗銈裤儥銉笺偣銈掋偟銉濄兗銉堛仐銇俱仚銆傘亾銇鑳姐伅 Google Summer of Code 2009銇с丼tan Palatnik + 銇倛銈婇枊鐧恒仌銈屻伨銇椼仧銆 +
    • +
    • 銈汇偔銉ャ儶銉嗐偅銉笺儓銉笺偗銉 (CSRF銉椼儹銉嗐偗銈枫儳銉) 銇屾湡闄愬垏銈屻伀銇仯銇熴仺銇嶃併儲銉笺偠銉笺伅鍐嶈獚瑷銇с亶銇俱仚銆 + 鍐嶈獚瑷笺仹鎴愬姛銇欍倢銇般佺法闆嗗唴瀹广倰澶便亞銇撱仺銇亸鎿嶄綔銈掔稒缍氥仹銇嶃伨銇欍 +
    • +
    • Root銉︺兗銈躲兗銇仩銇戦伕鎶炪亴瑷卞彲銇曘倢銇︺亜銇烪TML 銉曘偅銉偪銉笺伄銈广偔銉冦儣銇併偄銈偦銈规ī銇ㄣ仐銇︾嫭绔嬨仐銇俱仐銇熴
    • +
    • 銉囥儠銈┿儷銉堛偘銉兗銉椼亴杩藉姞銇曘倢銇俱仐銇熴傛柊瑕忋儲銉笺偠銉笺伅銆併儑銉曘偐銉儓銈般儷銉笺儣銇渶鍒濄亱銈夊睘銇椼伨銇欍
    • +
    • 銉椼儵銈般偆銉炽伄銈炽儭銉炽儓銇屻佹柊鐫銉栥儹銉冦偗銇ㄣ儲銉笺偠銉笺伄銉椼儹銉曘偂銈ゃ儷銇〃绀恒仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆(鏂般仐銇凱lugin API 闁㈡暟 - 銉椼儵銈般偆銉炽伄澶夋洿銇屽繀瑕)銆
    • +
    • 瑾嶈銇屽繀瑕併仾銉氥兗銈搞伄琛ㄧず銇伅銆併儹銈般偆銉炽儠銈┿兗銉犮亴琛ㄧず銇曘倢銇俱仚銆
    • +
    • 銈€儔銉愩兂銈广儓銈ㄣ儑銈c偪銉笺亴鏈夊姽銇偟銈ゃ儓銇с伅銆併儲銉笺偠銉笺亴銉炪偆銈€偒銈︺兂銉堛伄瑷畾銇ф湁鍔广伀銇欍倠銇嬬劇鍔广伀銇欍倠銇嬮伕銇广倠銈堛亞銇仾銈娿伨銇椼仧銆
    • +
    • 瑷樹簨銈炽償銉笺偑銉椼偡銉с兂銇岃拷鍔犮仌銈屻伨銇椼仧銆(闈欑殑銉氥兗銈搞儣銉┿偘銈ゃ兂銈勩偒銉兂銉銉笺儣銉┿偘銈ゃ兂銇倛銇嗐伀)
    • +
    • 鏂般仐銇忚嚜鍕曘偪銈 [user:] 銇屾彁渚涖仌銈屻伨銇椼仧銆傘儲銉笺偠銉笺儣銉儠銈°偆銉伕銇儶銉炽偗銇屻仹銇嶃伨銇欍

    銇濄伄浠栥伄澶夋洿

      -
    • Security: 鑷嫊銉偘銈ゃ兂姗熻兘銇緸鏇告敾鎾冦伀銈堛倠鑴嗗急鎬с倰淇銇椼伨銇椼仧銆 - 銇撱伄鏄急鎬с伅鍏冦呫丯ine Situations銈般儷銉笺儣銇瓸ookoo姘忋亱銈夊牨鍛娿仌銈屻仧銈傘伄銇с仚銆
    • -
    • Geeklog銇甈HP銇∕ySQL銇偡銈广儐銉犳潯浠躲伅銆 PHP 4.4.0 - 銇 MySQL 4.0.18銇紩銇嶄笂銇掋倝銈屻伨銇椼仧銆
    • -
    • FCKeditor 2.6.6 銇偄銉冦儣銈般儸銉笺儔銇椼仸鍚屾⒈銇椼伨銇椼仧銆
    • -
    • theme changes銈傚弬鐓с仐銇︺亸銇犮仌銇勩
    • +
    • Security: 鑷嫊銉偘銈ゃ兂姗熻兘銇緸鏇告敾鎾冦伀銈堛倠鑴嗗急鎬с倰淇銇椼伨銇椼仧銆 + 銇撱伄鏄急鎬с伅鍏冦呫丯ine Situations銈般儷銉笺儣銇瓸ookoo姘忋亱銈夊牨鍛娿仌銈屻仧銈傘伄銇с仚銆 +
    • +
    • Geeklog銇甈HP銇∕ySQL銇偡銈广儐銉犳潯浠躲伅銆 PHP 4.4.0 + 銇 MySQL 4.0.18銇紩銇嶄笂銇掋倝銈屻伨銇椼仧銆 +
    • +
    • FCKeditor 2.6.6 銇偄銉冦儣銈般儸銉笺儔銇椼仸鍚屾⒈銇椼伨銇椼仧銆
    • +
    • theme changes銈傚弬鐓с仐銇︺亸銇犮仌銇勩

    銇撱伄銉儶銉笺偣銈傘伨銇烥oogle Summer of Code 2010銇鐢熴仧銇°伄銇熴亸銇曘倱銇儜銉冦儊銇ㄩ枊鐧恒倰鍚倱銇с亜銇俱仚銆傘亗銈娿亴銇ㄣ亞銇斻仏銇勩伨銇欙紒

    @@ -268,18 +312,25 @@

    Geeklog 1.6.1

    鏂版鑳姐仺鏀瑰杽鐐

      -
    • 銉°偆銉炽儦銉笺偢銆佽浜嬨佽┍椤屻侀潤鐨勩儦銉笺偢銆併偄銉炽偙銉笺儓銇<meta name="description">銈裤偘銇<meta name="keywors">銈裤偘銈掓寚瀹氥仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆傛绱€偍銉炽偢銉炽伄涓伀銇併亾銈屻倝銇儭銈裤偪銈般倰浣跨敤銇椼仾銇銈傘伄銈傘亗銈娿伨銇欍
    • -
    • (銆岃┎褰撱仚銈嬭┍椤屻伀銇伩琛ㄧず銇欍倠銆嶃亴鎸囧畾銇曘倢銇熻浜嬨伀闁€仐銇︺伅)瑭遍銇斻仺銇敞鐩浜嬨倰1銇ゃ仛銇ゆ寚瀹氥仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • 瑷樹簨銇腑銇仼鑷嫊銈裤偘銇屼娇鐢ㄣ仹銇嶃倠銇ㄣ亾銈嶃仾銈夈仼銇撱伀銇с倐銈€兂銈便兗銉堛倰鍩嬨倎杈笺倎銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • -
    • 銈ゃ兂銈广儓銉笺儷銈广偗銉儣銉堛伄绉昏銈儣銈枫儳銉炽倰鏃㈠瓨銇儑銉笺偪銉欍兗銈广伀銈傞仼鐢ㄣ仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧(銇ゃ伨銈娿乁RL銈勩儜銈广倰瑷畾銇楃洿銇欍仧銈併伀銉銉炽儣銇椼仧銉囥兗銈裤儥銉笺偣銈掕銇胯炯銈蹇呰銇亗銈娿伨銇涖倱銆)銆
    • -
    • 銉囥兗銈裤儥銉笺偣銉愩儍銈偄銉冦儣銇鐞嗚呫儜銉嶃儷銇с併儑銉笺偪銉欍兗銈广倰鏈閬╁寲銇椼併儐銉笺儢銉倰InnoDB銇鎻涖仚銈嬨偑銉椼偡銉с兂銇屻偟銉濄兗銉堛仌銈屻伨銇椼仧(MySQL銇伩)銆
    • -
    • 銈裤偆銉犮偩銉笺兂銇偟銉濄兗銉銈掓敼鍠勩仐銇︺併儲銉笺偠銉笺伅鐙嚜銇偪銈ゃ儬銈俱兗銉炽倰瀹熼殯銇ō瀹氥仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • 灏忚妯°仾銈汇偔銉ャ儶銉嗐偅銇挤鍖: +
    • 銉°偆銉炽儦銉笺偢銆佽浜嬨佽┍椤屻侀潤鐨勩儦銉笺偢銆併偄銉炽偙銉笺儓銇<meta name="description">銈裤偘銇<meta name="keywords">銈裤偘銈掓寚瀹氥仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆傛绱€偍銉炽偢銉炽伄涓伀銇併亾銈屻倝銇儭銈裤偪銈般倰浣跨敤銇椼仾銇銈傘伄銈傘亗銈娿伨銇欍 +
    • +
    • (銆岃┎褰撱仚銈嬭┍椤屻伀銇伩琛ㄧず銇欍倠銆嶃亴鎸囧畾銇曘倢銇熻浜嬨伀闁€仐銇︺伅)瑭遍銇斻仺銇敞鐩浜嬨倰1銇ゃ仛銇ゆ寚瀹氥仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • +
    • 瑷樹簨銇腑銇仼鑷嫊銈裤偘銇屼娇鐢ㄣ仹銇嶃倠銇ㄣ亾銈嶃仾銈夈仼銇撱伀銇с倐銈€兂銈便兗銉堛倰鍩嬨倎杈笺倎銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • +
    • 銈ゃ兂銈广儓銉笺儷銈广偗銉儣銉堛伄绉昏銈儣銈枫儳銉炽倰鏃㈠瓨銇儑銉笺偪銉欍兗銈广伀銈傞仼鐢ㄣ仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧(銇ゃ伨銈娿乁RL銈勩儜銈广倰瑷畾銇楃洿銇欍仧銈併伀銉銉炽儣銇椼仧銉囥兗銈裤儥銉笺偣銈掕銇胯炯銈蹇呰銇亗銈娿伨銇涖倱銆)銆
    • +
    • 銉囥兗銈裤儥銉笺偣銉愩儍銈偄銉冦儣銇鐞嗚呫儜銉嶃儷銇с併儑銉笺偪銉欍兗銈广倰鏈閬╁寲銇椼併儐銉笺儢銉倰InnoDB銇鎻涖仚銈嬨偑銉椼偡銉с兂銇屻偟銉濄兗銉堛仌銈屻伨銇椼仧(MySQL銇伩)銆
    • +
    • 銈裤偆銉犮偩銉笺兂銇偟銉濄兗銉銈掓敼鍠勩仐銇︺併儲銉笺偠銉笺伅鐙嚜銇偪銈ゃ儬銈俱兗銉炽倰瀹熼殯銇ō瀹氥仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆 +
    • +
    • 灏忚妯°仾銈汇偔銉ャ儶銉嗐偅銇挤鍖:
        -
      • (銈汇儍銈枫儳銉炽伄銈儍銈兗銇倛銇嗐仾)銆岄噸瑕併仾銆嶃偗銉冦偔銉笺伅銆佷粖寰屻伅HttpOnly銉曘儵銈般倰銈汇儍銉堛仐銇︿綔鎴愩仌銈屻倠銈堛亞銇仾銈娿伨銇椼仧銆傘亾銈屻伀銈堛倞銆併亾銇儠銉┿偘銈掋偟銉濄兗銉堛仐銇熴儢銉┿偊銈躲兗銇с併亗銈嬬ó銇甔SS(銈儹銈广偟銈ゃ儓銉汇偣銈儶銉椼儐銈c兂銈)鏀绘拑銇槻姝€仹銇嶃倠銇с仐銈囥亞銆
      • -
      • 銉嗐兂銉椼儸銉笺儓銇偍銉┿兗銇併仢銇儐銉炽儣銉兗銉堛伄銉戙偣銈掕銇涖仸銇椼伨銇嗕唬銈忋倞銇妯欐簴銇偍銉┿兗銉忋兂銉夈儵銈掑懠銇冲嚭銇欍倛銇嗐伀銇倞銇俱仐銇熴
      • -
      • Spam-X銇亜銇忋仱銇嬨伄銈儵銈广伄銉曘偂銈ゃ儷銇с佺洿鎺ャ偄銈偦銈广仚銈(瑷虫敞: 瀹熼殯銇嫊浣溿仐銇︺亜銇亱銇c仧)闃叉銇嚘鐞嗐倰淇銇椼伨銇椼仧銆
      • -
    • +
    • + (銈汇儍銈枫儳銉炽伄銈儍銈兗銇倛銇嗐仾)銆岄噸瑕併仾銆嶃偗銉冦偔銉笺伅銆佷粖寰屻伅HttpOnly銉曘儵銈般倰銈汇儍銉堛仐銇︿綔鎴愩仌銈屻倠銈堛亞銇仾銈娿伨銇椼仧銆傘亾銈屻伀銈堛倞銆併亾銇儠銉┿偘銈掋偟銉濄兗銉堛仐銇熴儢銉┿偊銈躲兗銇с併亗銈嬬ó銇甔SS(銈儹銈广偟銈ゃ儓銉汇偣銈儶銉椼儐銈c兂銈)鏀绘拑銇槻姝€仹銇嶃倠銇с仐銈囥亞銆 +
    • +
    • 銉嗐兂銉椼儸銉笺儓銇偍銉┿兗銇併仢銇儐銉炽儣銉兗銉堛伄銉戙偣銈掕銇涖仸銇椼伨銇嗕唬銈忋倞銇妯欐簴銇偍銉┿兗銉忋兂銉夈儵銈掑懠銇冲嚭銇欍倛銇嗐伀銇倞銇俱仐銇熴 +
    • +
    • Spam-X銇亜銇忋仱銇嬨伄銈儵銈广伄銉曘偂銈ゃ儷銇с佺洿鎺ャ偄銈偦銈广仚銈(瑷虫敞: 瀹熼殯銇嫊浣溿仐銇︺亜銇亱銇c仧)闃叉銇嚘鐞嗐倰淇銇椼伨銇椼仧銆
    • +
    +

    銉嗐兗銉炪伄澶夋洿銇竴瑕с倐浣点仜銇︺仈瑕т笅銇曘亜銆

    @@ -287,31 +338,33 @@

    鏂版鑳姐仺鏀瑰杽鐐

    銉愩偘淇

      -
    • 涓瀹氥伄鏈熸棩銇岀祵閬庛仐銇熷緦銇с佽嚜鍕曠殑銇瑷樹簨銇銇欍倠銈炽儭銉炽儓銇彈浠樸倰绲備簡銇欍倠姗熻兘銇儛銈般倰淇銇椼伨銇椼仧銆傘亾銇儛銈般伄銇熴倎銇偝銉°兂銉堛伄鍙椾粯銇岀祩浜嗐仐銇熻浜嬨仹鍐嶃伋銈炽儭銉炽儓銈掑彈銇戜粯銇戙倠銈堛亞銇仚銈嬨伀銇佹銇甋QL銈炽優銉炽儔銈掍娇鐢ㄣ仐銇俱仚:
      - UPDATE gl_stories SET commentcode = 0, comment_expire = 0 WHERE commentcode = 1;
    • -
    • 銈炽儭銉炽儓銇姇绋块枔闅斿埗闄愩亴鐒¤銇曘倢銇︺亜銇俱仐銇熴
    • -
    • 浠栥伄銈般儷銉笺儣銇櫥閷层仹銇嶃仾銇勩仺銇勩亞銈般儷銉笺儣銉汇偍銉囥偅銈裤兗銇儛銈般倰淇銇椼伨銇椼仧銆(銇撱伄鍟忛銇疓eeklog 1.6.0銇仩銇戝瓨鍦ㄣ仐銇俱仐銇熴)
    • -
    • 妞滅储銇亰銇戙倠銇勩亸銇ゃ亱銇鏁淬仺銉炪偆銉娿兗銇慨姝c倰琛屻亜銇俱仐銇熴 (PHP 4銈炽兂銉戙儊銉撱儶銉嗐偅銇仼)
    • -
    • Geeklog 1.6.0(鏂拌銈ゃ兂銈广儓銉笺儷銇伩)銇с伅銆侀潤鐨勩儦銉笺偢銉椼儵銈般偆銉炽伄绠$悊鑰呫偘銉兗銉椼亴闁撻仌銇c仧鍚嶅墠銇仾銇c仸銇勩伨銇椼仧銆.
    • +
    • 涓瀹氥伄鏈熸棩銇岀祵閬庛仐銇熷緦銇с佽嚜鍕曠殑銇瑷樹簨銇銇欍倠銈炽儭銉炽儓銇彈浠樸倰绲備簡銇欍倠姗熻兘銇儛銈般倰淇銇椼伨銇椼仧銆傘亾銇儛銈般伄銇熴倎銇偝銉°兂銉堛伄鍙椾粯銇岀祩浜嗐仐銇熻浜嬨仹鍐嶃伋銈炽儭銉炽儓銈掑彈銇戜粯銇戙倠銈堛亞銇仚銈嬨伀銇佹銇甋QL銈炽優銉炽儔銈掍娇鐢ㄣ仐銇俱仚:
      + UPDATE gl_stories SET commentcode = 0, comment_expire = 0 WHERE commentcode = + 1;
    • +
    • 銈炽儭銉炽儓銇姇绋块枔闅斿埗闄愩亴鐒¤銇曘倢銇︺亜銇俱仐銇熴
    • +
    • 浠栥伄銈般儷銉笺儣銇櫥閷层仹銇嶃仾銇勩仺銇勩亞銈般儷銉笺儣銉汇偍銉囥偅銈裤兗銇儛銈般倰淇銇椼伨銇椼仧銆(銇撱伄鍟忛銇疓eeklog 1.6.0銇仩銇戝瓨鍦ㄣ仐銇俱仐銇熴)
    • +
    • 妞滅储銇亰銇戙倠銇勩亸銇ゃ亱銇鏁淬仺銉炪偆銉娿兗銇慨姝c倰琛屻亜銇俱仐銇熴 (PHP 4銈炽兂銉戙儊銉撱儶銉嗐偅銇仼)
    • +
    • Geeklog 1.6.0(鏂拌銈ゃ兂銈广儓銉笺儷銇伩)銇с伅銆侀潤鐨勩儦銉笺偢銉椼儵銈般偆銉炽伄绠$悊鑰呫偘銉兗銉椼亴闁撻仌銇c仧鍚嶅墠銇仾銇c仸銇勩伨銇椼仧銆.

    Geeklog 1.6.0sr2

    銇撱伄銉儶銉笺偣銇с伅浠ヤ笅銇偦銈儱銉儐銈e绛栥倰琛屻亜銇俱仐銇:

      -
    • 涓嶆硶銇换鎰忋伄銉曘偂銈ゃ儷銈扚CKeditor銈掍粙銇椼仸銈€儍銉椼儹銉笺儔鍙兘銇с仐銇熴
      - 銈€儍銉椼儹銉笺儔銇曘倢銈嬨儠銈°偆銉伅FCKeditor銇儠銈c儷銈裤兗銈掗氶亷銇椼仾銇戙倢銇般仾銈夈仾銇勩仧銈併併偣銈儶銉椼儓銈掋偄銉冦儣銉兗銉夈仚銈嬨亾銇ㄣ伅涓嶅彲鑳姐仹銇椼仧銆(寰撱仯銇︺丟eeklog銇偟銈ゃ儓銇ㄣ仐銇︺伄鏁村悎鎬с亴澹娿仌銈屻倠銇ㄣ亜銇c仧鍗遍櫤鎬с伅銇傘倞銇俱仜銈撱仹銇椼仧銆) - 銇椼亱銇椼仾銇屻倝銆併優銉偊銈с偄銇疆銇嶅牬銇ㄣ仐銇︿娇鐢ㄣ仌銈屻仸銇勩仧銇ㄣ亜銇嗗牨鍛娿亴銇傘倞銇俱仐銇熴
      - 浠婂洖銇偄銉冦儣銉囥兗銉堛仹銇疐CKeditor銈掔劇鍔广仺銇椼仸銇勩倠銇嬨併偛銈广儓銉︺兗銈躲兗銇牬鍚堛伀銇偄銉冦儣銉兗銉夈伄姗熻兘銈掍娇鐢ㄣ仹銇嶃仾銇勩倛銇嗐伀銇椼伨銇椼仧銆
      - 銇俱仧銆併偄銉笺偒銈ゃ儢褰㈠紡銇儠銈°偆銉伄銈€儍銉椼儹銉笺儔銈傝ū鍙仐銇俱仜銈撱
      - 銇曘倝銇丗CKeditor銈掍娇銇c仸銉曘偂銈ゃ儷銈掋偄銉冦儣銉兗銉夈仚銈嬨伀銇佷綍銈夈亱銇岀法闆嗐嶃伄妯╅檺銇屽繀瑕併仹銇欍(銇撱倢銇竴鏅傜殑銇蹇溿仹銇欍傚皢鏉ャ伄Geeklog銇儛銉笺偢銉с兂銇с伅銆屻偄銉冦儣銉兗銉夈嶃仺銇勩亞鐙珛銇椼仧妯╅檺銈掓帯鐢ㄣ仚銈嬩簣瀹氥仹銇)銆
    • +
    • 涓嶆硶銇换鎰忋伄銉曘偂銈ゃ儷銈扚CKeditor銈掍粙銇椼仸銈€儍銉椼儹銉笺儔鍙兘銇с仐銇熴
      + 銈€儍銉椼儹銉笺儔銇曘倢銈嬨儠銈°偆銉伅FCKeditor銇儠銈c儷銈裤兗銈掗氶亷銇椼仾銇戙倢銇般仾銈夈仾銇勩仧銈併併偣銈儶銉椼儓銈掋偄銉冦儣銉兗銉夈仚銈嬨亾銇ㄣ伅涓嶅彲鑳姐仹銇椼仧銆(寰撱仯銇︺丟eeklog銇偟銈ゃ儓銇ㄣ仐銇︺伄鏁村悎鎬с亴澹娿仌銈屻倠銇ㄣ亜銇c仧鍗遍櫤鎬с伅銇傘倞銇俱仜銈撱仹銇椼仧銆) + 銇椼亱銇椼仾銇屻倝銆併優銉偊銈с偄銇疆銇嶅牬銇ㄣ仐銇︿娇鐢ㄣ仌銈屻仸銇勩仧銇ㄣ亜銇嗗牨鍛娿亴銇傘倞銇俱仐銇熴
      + 浠婂洖銇偄銉冦儣銉囥兗銉堛仹銇疐CKeditor銈掔劇鍔广仺銇椼仸銇勩倠銇嬨併偛銈广儓銉︺兗銈躲兗銇牬鍚堛伀銇偄銉冦儣銉兗銉夈伄姗熻兘銈掍娇鐢ㄣ仹銇嶃仾銇勩倛銇嗐伀銇椼伨銇椼仧銆
      + 銇俱仧銆併偄銉笺偒銈ゃ儢褰㈠紡銇儠銈°偆銉伄銈€儍銉椼儹銉笺儔銈傝ū鍙仐銇俱仜銈撱
      + 銇曘倝銇丗CKeditor銈掍娇銇c仸銉曘偂銈ゃ儷銈掋偄銉冦儣銉兗銉夈仚銈嬨伀銇佷綍銈夈亱銇岀法闆嗐嶃伄妯╅檺銇屽繀瑕併仹銇欍(銇撱倢銇竴鏅傜殑銇蹇溿仹銇欍傚皢鏉ャ伄Geeklog銇儛銉笺偢銉с兂銇с伅銆屻偄銉冦儣銉兗銉夈嶃仺銇勩亞鐙珛銇椼仧妯╅檺銈掓帯鐢ㄣ仚銈嬩簣瀹氥仹銇)銆 +

    銇濄伄浠栥伄淇:

      -
    • InnoDB銉嗐兗銉栥儷銈掍娇鐢ㄣ仐銇︺偆銉炽偣銉堛兗銉仚銈嬫檪銇晱椤屻倰淇銇椼伨銇椼仧銆
    • -
    • 瑷樹簨銇偝銉°兂銉堛偝銉笺儔銇儠銈c兗銉儔銈掕嚜鍕曟洿鏂般仚銈嬨仺銇嶃伄(鎮敤銇曘倢銈嬨亾銇ㄣ伄銇亜)SQL銈ㄣ儵銉笺倰淇銇椼伨銇椼仧銆
    • -
    • 銉兂銈儣銉┿偘銈ゃ兂(links)銇惈銇俱倢銈嬮枔閬曘仯銇熼枹鏁板悕銈掍慨姝c仐銇俱仐銇熴
    • +
    • InnoDB銉嗐兗銉栥儷銈掍娇鐢ㄣ仐銇︺偆銉炽偣銉堛兗銉仚銈嬫檪銇晱椤屻倰淇銇椼伨銇椼仧銆
    • +
    • 瑷樹簨銇偝銉°兂銉堛偝銉笺儔銇儠銈c兗銉儔銈掕嚜鍕曟洿鏂般仚銈嬨仺銇嶃伄(鎮敤銇曘倢銈嬨亾銇ㄣ伄銇亜)SQL銈ㄣ儵銉笺倰淇銇椼伨銇椼仧銆
    • +
    • 銉兂銈儣銉┿偘銈ゃ兂(links)銇惈銇俱倢銈嬮枔閬曘仯銇熼枹鏁板悕銈掍慨姝c仐銇俱仐銇熴
    @@ -321,13 +374,14 @@

    Geeklog 1.6.0sr1

    1. Gerendi Sandor Attila姘忋亱銈夈併儭銉笺儷閫佷俊銇娿倛銇宠浜嬨倰鍙嬩汉銇儭銉笺儷銇ч併倠銉°兗銉儠銈┿兗銉犮伀XSS銇屽瓨鍦ㄣ仚銈嬨仺鍫卞憡銇屻亗銈娿伨銇椼仧銆
    2. 瑷樹簨銈掔煡浜恒伀銉°兗銉仹閫佷俊銇欍倠姗熻兘銇岃浜嬨伄銉戙兗銉熴儍銈枫儳銉炽倰鐒¤銇椼仸銇勩伨銇椼仧銆 - 銇撱伄銇熴倎銆侀柌瑕с仹銇嶃仾銇勮浜嬨伨銇с儭銉笺儷銇ч佷俊鍙兘銇с仐銇熴
    3. + 銇撱伄銇熴倎銆侀柌瑕с仹銇嶃仾銇勮浜嬨伨銇с儭銉笺儷銇ч佷俊鍙兘銇с仐銇熴 +

    銇濄伄浠:

      -
    • 瑷樹簨鎶曠ǹ銈儱銉笺亴OFF銇姸鎱嬨仹銆佽浜嬨倰鎶曠ǹ銇欍倠銇ㄣ亶銇甋QL銈ㄣ儵銉笺倰淇銇椼伨銇椼仧銆
    • -
    • 瀛樺湪銇椼仾銇COM_outputMessageAndAbort闁㈡暟銈掑懠銇冲嚭銇椼仸銇勩仧鍟忛銈掍慨姝c仐銇俱仐銇熴
    • +
    • 瑷樹簨鎶曠ǹ銈儱銉笺亴OFF銇姸鎱嬨仹銆佽浜嬨倰鎶曠ǹ銇欍倠銇ㄣ亶銇甋QL銈ㄣ儵銉笺倰淇銇椼伨銇椼仧銆
    • +
    • 瀛樺湪銇椼仾銇COM_outputMessageAndAbort闁㈡暟銈掑懠銇冲嚭銇椼仸銇勩仧鍟忛銈掍慨姝c仐銇俱仐銇熴
    @@ -338,21 +392,27 @@

    Summer of Code銇垚鏋

    銇撱伄銉儶銉笺偣銇伅銆丟oogle Summer of Code 2008銇枔銇疅瑁呫仌銈屻仧銈炽兗銉夈倰鍙栥倞杈笺倱銇с亜銇俱仚:

      -
    • 銈点偆銉堢Щ琛屻伄銈点儩銉笺儓銇ㄣ倛銈婄啊鍗樸仾銉椼儵銈般偆銉炽伄銈ゃ兂銈广儓銉笺儷 (闁嬬櫤鑰: Matt West姘)
    • -
    • 妞滅储姗熻兘銇敼鍠 (闁嬬櫤鑰: Sami Barakat姘)
    • -
    • 銈炽儭銉炽儓銇壙瑾嶃仺绶ㄩ泦銇鑳 (闁嬬櫤鑰: Jared Wenerd姘)
    • +
    • 銈点偆銉堢Щ琛屻伄銈点儩銉笺儓銇ㄣ倛銈婄啊鍗樸仾銉椼儵銈般偆銉炽伄銈ゃ兂銈广儓銉笺儷 (闁嬬櫤鑰: Matt West姘)
    • +
    • 妞滅储姗熻兘銇敼鍠 (闁嬬櫤鑰: Sami Barakat姘)
    • +
    • 銈炽儭銉炽儓銇壙瑾嶃仺绶ㄩ泦銇鑳 (闁嬬櫤鑰: Jared Wenerd姘)

    銇濄伄浠栥伄澶夋洿

      -
    • Geeklog銇従鍦≒HP 4.3.0浠ラ檷銈掋偟銉濄兗銉堛仐銇︺亜銇俱仚銇屻丳HP闁嬬櫤銉併兗銉犮伅2008骞8鏈堛伀銇疨HP 4銇偟銉濄兗銉堛倰绲備簡銇椼仸銇勩伨銇欍侾HP 4銇eeklog銈掓椿鐢ㄣ仐銇︺亜銈嬨儲銉笺偠銉笺伅銆併仹銇嶃倠銇犮亼銇倓銇廝HP 5銇搞伄銈€儍銉椼偘銉兗銉夈倰妞滆◣銇椼仸銇忋仩銇曘亜銆
    • -
    • FCKeditor銈2.6.4.1銈掑悓姊便仐銇俱仐銇熴
    • -
    • 鏂般仐銇勩儣銉┿偘銈ゃ兂銆XMLSitemap銆嶃倰鍚屾⒈銇椼伨銇椼仧銆傘亾銇儣銉┿偘銈ゃ兂銇併仚銇广仸銇富瑕併仾妞滅储銈ㄣ兂銈搞兂銇屻偟銉濄兗銉堛仐銇︺亜銈XML銇偟銈ゃ儓銉炪儍銉椼兓銉曘偂銈ゃ儷銈掕嚜鍕曠敓鎴愩仐銇俱仚銆傘儣銉┿偘銈ゃ兂銇痬ystral-kk姘忊汇伀銈堛倞闁嬬櫤銇曘倢銇俱仐銇熴
      -(鈥昏ǔ鑰呰ɑ锛欸eeklog Japan銈炽偄闁嬬櫤鑰呫仹銇欍)
    • -
    • 銇勩亸銇ゃ亱銇鏂般仐銇勩儣銉┿偘銈ゃ兂API銇鑳銇岃拷鍔犮仌銈屻仸銆佹棦瀛樸伄銉椼儵銈般偆銉矨PI銈傛嫛寮点仌銈屻仸銇俱仐銇熴
    • -
    • 浠栥伄瑷瑾炪伀缈昏ǔ銇с亶銈嬨倛銇嗐伀銆佸惈銈併仸銇勩倠銉夈偔銉ャ儭銉炽儓銇牬鎵銈docs/english銇Щ鍕曘仐銇俱仐銇熴侴eeklog銇腑銇儔銈儱銉°兂銉堛伕銇儶銉炽偗銇嚜鍕曠殑銇併仢銇仺銇嶃伀鍒╃敤銇椼仸銇勩倠瑷瑾炪伀蹇溿仒銇熴儶銉炽偗銇ㄣ仾銈娿伨銇欍(閬╁垏銇炕瑷炽亴銇裤仱銇嬨倝銇亼銈屻伆銆佽嫳瑾炪伄銉夈偔銉ャ儭銉炽儓銈掕〃绀恒仐銇俱仚銆)
    • -
    • 鏂般仐銇勬鑳姐伄銈点儩銉笺儓銇ㄣ儸銈ゃ偄銈︺儓銇笉鏁村悎銈掍慨姝c仚銈嬨仧銈併伀銆佹銆呫仾銉嗐兗銉炪伄澶夋洿銈掕銇勩伨銇椼仧銆
    • +
    • Geeklog銇従鍦≒HP 4.3.0浠ラ檷銈掋偟銉濄兗銉堛仐銇︺亜銇俱仚銇屻丳HP闁嬬櫤銉併兗銉犮伅2008骞8鏈堛伀銇疨HP 4銇偟銉濄兗銉堛倰绲備簡銇椼仸銇勩伨銇欍侾HP 4銇eeklog銈掓椿鐢ㄣ仐銇︺亜銈嬨儲銉笺偠銉笺伅銆併仹銇嶃倠銇犮亼銇倓銇廝HP + 5銇搞伄銈€儍銉椼偘銉兗銉夈倰妞滆◣銇椼仸銇忋仩銇曘亜銆 +
    • +
    • FCKeditor銈2.6.4.1銈掑悓姊便仐銇俱仐銇熴
    • +
    • 鏂般仐銇勩儣銉┿偘銈ゃ兂銆XMLSitemap銆嶃倰鍚屾⒈銇椼伨銇椼仧銆傘亾銇儣銉┿偘銈ゃ兂銇併仚銇广仸銇富瑕併仾妞滅储銈ㄣ兂銈搞兂銇屻偟銉濄兗銉堛仐銇︺亜銈XML銇偟銈ゃ儓銉炪儍銉椼兓銉曘偂銈ゃ儷銈掕嚜鍕曠敓鎴愩仐銇俱仚銆傘儣銉┿偘銈ゃ兂銇痬ystral-kk姘忊汇伀銈堛倞闁嬬櫤銇曘倢銇俱仐銇熴
      + (鈥昏ǔ鑰呰ɑ锛欸eeklog Japan銈炽偄闁嬬櫤鑰呫仹銇欍) +
    • +
    • 銇勩亸銇ゃ亱銇鏂般仐銇勩儣銉┿偘銈ゃ兂API銇鑳銇岃拷鍔犮仌銈屻仸銆佹棦瀛樸伄銉椼儵銈般偆銉矨PI銈傛嫛寮点仌銈屻仸銇俱仐銇熴 +
    • +
    • 浠栥伄瑷瑾炪伀缈昏ǔ銇с亶銈嬨倛銇嗐伀銆佸惈銈併仸銇勩倠銉夈偔銉ャ儭銉炽儓銇牬鎵銈docs/english銇Щ鍕曘仐銇俱仐銇熴侴eeklog銇腑銇儔銈儱銉°兂銉堛伕銇儶銉炽偗銇嚜鍕曠殑銇併仢銇仺銇嶃伀鍒╃敤銇椼仸銇勩倠瑷瑾炪伀蹇溿仒銇熴儶銉炽偗銇ㄣ仾銈娿伨銇欍(閬╁垏銇炕瑷炽亴銇裤仱銇嬨倝銇亼銈屻伆銆佽嫳瑾炪伄銉夈偔銉ャ儭銉炽儓銈掕〃绀恒仐銇俱仚銆) +
    • +
    • 鏂般仐銇勬鑳姐伄銈点儩銉笺儓銇ㄣ儸銈ゃ偄銈︺儓銇笉鏁村悎銈掍慨姝c仚銈嬨仧銈併伀銆佹銆呫仾銉嗐兗銉炪伄澶夋洿銈掕銇勩伨銇椼仧銆

    浠婂洖銇儶銉兗銈广伀銇丟oogle Summer of Code 2009銇弬鍔犮仐銇熷鐢熻姘忋伄銉戙儍銉併倓闁嬬櫤銇屾暟澶氥亸鍚伨銈屻仸銇勩伨銇欍傘亗銈娿亴銇ㄣ亞銇斻仏銇勩伨銇!

    @@ -368,28 +428,35 @@

    Geeklog 1.5.2sr5

    1. Gerendi Sandor Attila姘忋亱銈夈併儭銉笺儷閫佷俊銇娿倛銇宠浜嬨倰鍙嬩汉銇儭銉笺儷銇ч併倠銉°兗銉儠銈┿兗銉犮伀XSS銇屽瓨鍦ㄣ仚銈嬨仺鍫卞憡銇屻亗銈娿伨銇椼仧銆
    2. 瑷樹簨銈掔煡浜恒伀銉°兗銉仹閫佷俊銇欍倠姗熻兘銇岃浜嬨伄銉戙兗銉熴儍銈枫儳銉炽倰鐒¤銇椼仸銇勩伨銇椼仧銆 - 銇撱伄銇熴倎銆侀柌瑕с仹銇嶃仾銇勮浜嬨伨銇с儭銉笺儷銇ч佷俊鍙兘銇с仐銇熴
    3. + 銇撱伄銇熴倎銆侀柌瑕с仹銇嶃仾銇勮浜嬨伨銇с儭銉笺儷銇ч佷俊鍙兘銇с仐銇熴 +

    Geeklog 1.5.2sr4

    -

    Nine Situations銈般儷銉笺儣銇 Bookoo姘忋亱銈夈乽sersettings.php 銇彜銇勩儛銈般亴瀵捐薄銇ㄣ仾銈嬨併仌銈夈伀鍒ャ伄SQL銈ゃ兂銈搞偋銈偡銉с兂銇剢寮辨с伄鍫卞憡銇屻亗銈娿伨銇椼仧銆傚墠鍥炪伄鍟忛銇ㄥ悓妲樸伀銆佹敾鎾冭呫伅浠绘剰銇偄銈偊銉炽儓銇儜銈广儻銉笺儔銇儚銉冦偡銉ュゃ倰鍙栧緱鍙兘銇с仐銇熴亴銆併亾銇儶銉兗銈广仹鍟忛銈掍慨姝c仐銇俱仐銇熴

    +

    Nine Situations銈般儷銉笺儣銇 Bookoo姘忋亱銈夈乽sersettings.php + 銇彜銇勩儛銈般亴瀵捐薄銇ㄣ仾銈嬨併仌銈夈伀鍒ャ伄SQL銈ゃ兂銈搞偋銈偡銉с兂銇剢寮辨с伄鍫卞憡銇屻亗銈娿伨銇椼仧銆傚墠鍥炪伄鍟忛銇ㄥ悓妲樸伀銆佹敾鎾冭呫伅浠绘剰銇偄銈偊銉炽儓銇儜銈广儻銉笺儔銇儚銉冦偡銉ュゃ倰鍙栧緱鍙兘銇с仐銇熴亴銆併亾銇儶銉兗銈广仹鍟忛銈掍慨姝c仐銇俱仐銇熴

    Geeklog 1.5.2sr3

    -

    Nine Situations 銈般儷銉笺儣銇 Bookoo姘忋亱銈夈併伨銇熷垾銇甋QL銈ゃ兂銈搞偋銈偡銉с兂銇剢寮辨с亴 webservices API 銇瓨鍦ㄣ仚銈嬨仺鍫卞憡銇屻亗銈娿伨銇椼仧銆傚墠鍥炪伄鍟忛銇ㄥ悓妲樸伀銆佹敾鎾冭呫伅浠绘剰銇偄銈偊銉炽儓銇儜銈广儻銉笺儔銇儚銉冦偡銉ュゃ倰鍙栧緱鍙兘銇с仐銇熴亴銆併亾銇儶銉兗銈广仹鍟忛銈掍慨姝c仐銇俱仐銇熴

    +

    Nine Situations 銈般儷銉笺儣銇 Bookoo姘忋亱銈夈併伨銇熷垾銇甋QL銈ゃ兂銈搞偋銈偡銉с兂銇剢寮辨с亴 webservices API + 銇瓨鍦ㄣ仚銈嬨仺鍫卞憡銇屻亗銈娿伨銇椼仧銆傚墠鍥炪伄鍟忛銇ㄥ悓妲樸伀銆佹敾鎾冭呫伅浠绘剰銇偄銈偊銉炽儓銇儜銈广儻銉笺儔銇儚銉冦偡銉ュゃ倰鍙栧緱鍙兘銇с仐銇熴亴銆併亾銇儶銉兗銈广仹鍟忛銈掍慨姝c仐銇俱仐銇熴

    Geeklog 1.5.2sr2

    -

    Nine Situations 銈般儷銉笺儣銇 Bookoo姘忋亱銈夈乬lFusion 銇銇椼仸SQL銈ゃ兂銈搞偋銈偡銉с兂銇剢寮辨с伄鍫卞憡銇屻亗銈娿伨銇椼仧銇屻併亾銈屻伀 Geeklog 銈傝┎褰撱仐銇︺亜銇俱仐銇熴傘亾銇晱椤屻伀銈堛仯銇︺佹敾鎾冭呫伅浠绘剰銇偄銈偊銉炽儓銇儜銈广儻銉笺儔銇儚銉冦偡銉ュゃ倰鍙栧緱鍙兘銇с仐銇熴亴銆併亾銇儶銉兗銈广仹鍟忛銈掍慨姝c仐銇俱仐銇熴

    +

    Nine Situations 銈般儷銉笺儣銇 Bookoo姘忋亱銈夈乬lFusion 銇銇椼仸SQL銈ゃ兂銈搞偋銈偡銉с兂銇剢寮辨с伄鍫卞憡銇屻亗銈娿伨銇椼仧銇屻併亾銈屻伀 Geeklog + 銈傝┎褰撱仐銇︺亜銇俱仐銇熴傘亾銇晱椤屻伀銈堛仯銇︺佹敾鎾冭呫伅浠绘剰銇偄銈偊銉炽儓銇儜銈广儻銉笺儔銇儚銉冦偡銉ュゃ倰鍙栧緱鍙兘銇с仐銇熴亴銆併亾銇儶銉兗銈广仹鍟忛銈掍慨姝c仐銇俱仐銇熴

    -

    Geeklog 1.5.2sr1

    +

    Geeklog 1.5.2sr1

    -

    Fernando Munoz姘忋亱銈夈佺鐞嗚呯敤鍟忋亜鍚堛倧銇涖伄銉曘偐銉笺儬銇XSS銇彲鑳芥с亴銇傘倠銇ㄥ牨鍛娿亴銇傘倞銇俱仐銇熴傘亾銇儶銉兗銈广仹銇併仢銇晱椤屻倰淇銇椼伨銇椼仧銆

    +

    Fernando Munoz姘忋亱銈夈佺鐞嗚呯敤鍟忋亜鍚堛倧銇涖伄銉曘偐銉笺儬銇XSS銇彲鑳芥с亴銇傘倠銇ㄥ牨鍛娿亴銇傘倞銇俱仐銇熴傘亾銇儶銉兗銈广仹銇併仢銇晱椤屻倰淇銇椼伨銇椼仧銆 +

    Geeklog 1.5.2

    @@ -397,27 +464,28 @@

    Geeklog 1.5.2

    銉愩偘淇

      -
    • ID銇岄噸瑜囥仐銇熻浜嬨伄銉椼儸銉撱儱銉笺倰琛屻亞銇ㄣ佽浜嬪唴瀹广亴澶便倧銈屻倠銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • -
    • 瑷樹簨銇儣銉儞銉ャ兗鏅傘伀銈裤偆銉堛儷銇綑鍒嗐仾銉愩儍銈偣銉┿儍銈枫儱(鏃ユ湰瑾炵増銇с伅\)銇岃〃绀恒仌銈屻倠銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • -
    • 銉堛儵銉冦偗銉愩儍銈偍銉囥偅銈裤兗銇儐銉炽儣銉兗銉堛伀銈汇偔銉ャ儶銉嗐偅銉堛兗銈兂銇屻仾銇勩仧銈併併亶銇°倱銇ㄥ嫊浣溿仐銇︺亜銇亱銇c仧銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • -
    • 銉椼儸銉笺兂銉嗐偔銈广儓銇ф姇绋裤仚銈嬮殯銇乁RL銇屻儶銉炽偗銇鎻涖仌銈屻仾銇勫牬鍚堛亴銇傘倞銇俱仐銇熴亴銆併亾銇儛銈般倰淇銇椼伨銇椼仧銆
    • -
    • 瑭遍銇儜銉笺儫銉冦偡銉с兂銇鏇淬仾銇┿併儠銈c兗銉夈倰鏇存柊銇欍倠闅涖伀鐢熴仒銈嬫銆呫仾鍟忛銇鍑︺仐銇俱仐銇熴
    • +
    • ID銇岄噸瑜囥仐銇熻浜嬨伄銉椼儸銉撱儱銉笺倰琛屻亞銇ㄣ佽浜嬪唴瀹广亴澶便倧銈屻倠銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • +
    • 瑷樹簨銇儣銉儞銉ャ兗鏅傘伀銈裤偆銉堛儷銇綑鍒嗐仾銉愩儍銈偣銉┿儍銈枫儱(鏃ユ湰瑾炵増銇с伅\)銇岃〃绀恒仌銈屻倠銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • +
    • 銉堛儵銉冦偗銉愩儍銈偍銉囥偅銈裤兗銇儐銉炽儣銉兗銉堛伀銈汇偔銉ャ儶銉嗐偅銉堛兗銈兂銇屻仾銇勩仧銈併併亶銇°倱銇ㄥ嫊浣溿仐銇︺亜銇亱銇c仧銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • +
    • 銉椼儸銉笺兂銉嗐偔銈广儓銇ф姇绋裤仚銈嬮殯銇乁RL銇屻儶銉炽偗銇鎻涖仌銈屻仾銇勫牬鍚堛亴銇傘倞銇俱仐銇熴亴銆併亾銇儛銈般倰淇銇椼伨銇椼仧銆
    • +
    • 瑭遍銇儜銉笺儫銉冦偡銉с兂銇鏇淬仾銇┿併儠銈c兗銉夈倰鏇存柊銇欍倠闅涖伀鐢熴仒銈嬫銆呫仾鍟忛銇鍑︺仐銇俱仐銇熴

    鍚屾⒈銇椼仸銇勩倠銉椼儵銈般偆銉炽伄銉愩偘淇

      -
    • 銈儸銉炽儉銉(Calendar): 鍊嬩汉銈儸銉炽儉銉笺伀鏂拌銈ゃ儥銉炽儓銈掕拷鍔犮仹銇嶃仾銇嬨仯銇熴儛銈般倰淇銇椼伨銇椼仧銆
    • -
    • 銉兂銈(Links): 銉兂銈疘D銈掓棦瀛樸伄銈傘伄銇銇堛倠銇ㄣ佸厓銇嬨倝瀛樺湪銇椼仸銇勩仧銉兂銈倰涓婃浉銇嶃仐銇︺仐銇俱亞銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • -
    • 銈€兂銈便兗銉(Polls): 銈€兂銈便兗銉圛D銈掑銇堛倠銇ㄣ佹柊銇椼亜銈€兂銈便兗銉堛亴浣滄垚銇曘倢銈嬨儛銈般倰淇銇椼伨銇椼仧銆傘伨銇熴併偄銉炽偙銉笺儓銇唱鍟忋伀銈枫兂銈般儷銈偐銉笺儓銇屽惈銇俱倢銇︺亜銈嬨仺SQL銈ㄣ儵銉笺亴鐧虹敓銇欍倠銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • -
    • 闈欑殑銉氥兗銈(Static Pages): 闈欑殑銉氥兗銈搞倰淇濆瓨銇欍倠銇ㄣ偑銉笺儕銉笺亴淇濆瓨銈掕銇c仧浜恒伀澶夈倧銈嬨儛銈般倰淇銇椼伨銇椼仧銆
    • +
    • 銈儸銉炽儉銉(Calendar): 鍊嬩汉銈儸銉炽儉銉笺伀鏂拌銈ゃ儥銉炽儓銈掕拷鍔犮仹銇嶃仾銇嬨仯銇熴儛銈般倰淇銇椼伨銇椼仧銆
    • +
    • 銉兂銈(Links): 銉兂銈疘D銈掓棦瀛樸伄銈傘伄銇銇堛倠銇ㄣ佸厓銇嬨倝瀛樺湪銇椼仸銇勩仧銉兂銈倰涓婃浉銇嶃仐銇︺仐銇俱亞銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • +
    • 銈€兂銈便兗銉(Polls): 銈€兂銈便兗銉圛D銈掑銇堛倠銇ㄣ佹柊銇椼亜銈€兂銈便兗銉堛亴浣滄垚銇曘倢銈嬨儛銈般倰淇銇椼伨銇椼仧銆傘伨銇熴併偄銉炽偙銉笺儓銇唱鍟忋伀銈枫兂銈般儷銈偐銉笺儓銇屽惈銇俱倢銇︺亜銈嬨仺SQL銈ㄣ儵銉笺亴鐧虹敓銇欍倠銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • +
    • 闈欑殑銉氥兗銈(Static Pages): 闈欑殑銉氥兗銈搞倰淇濆瓨銇欍倠銇ㄣ偑銉笺儕銉笺亴淇濆瓨銈掕銇c仧浜恒伀澶夈倧銈嬨儛銈般倰淇銇椼伨銇椼仧銆

    浠栥伄銉愩偘淇

      -
    • 銈€儍銉椼儹銉笺儔銇曘倢銈嬬敾鍍忋倰gdlib銈掔敤銇勩仸鎷″ぇ銉荤府灏忋倰琛屻亞闅涖伄鐢昏唱銈掑悜涓娿仌銇涖伨銇椼仧銆
    • -
    • 銉嗐兗銉炪伄澶夋洿鐐广伅銇勩仱銈傞氥倞銆銉嗐兗銉炰綔鎴銇杩般仐銇︺亗銈娿伨銇欍侴eeklog-1.5銈枫儶銉笺偤銇叏銉嗐兗銉炪伀閬╃敤銇欍伖銇嶃儛銈颁慨姝c亴4绠囨墍(銇濄伄銇嗐仭1銇ゃ伅Polls銉椼儵銈般偆銉)銇傘倞銇俱仚銆
    • +
    • 銈€儍銉椼儹銉笺儔銇曘倢銈嬬敾鍍忋倰gdlib銈掔敤銇勩仸鎷″ぇ銉荤府灏忋倰琛屻亞闅涖伄鐢昏唱銈掑悜涓娿仌銇涖伨銇椼仧銆
    • +
    • 銉嗐兗銉炪伄澶夋洿鐐广伅銇勩仱銈傞氥倞銆銉嗐兗銉炰綔鎴銇杩般仐銇︺亗銈娿伨銇欍侴eeklog-1.5銈枫儶銉笺偤銇叏銉嗐兗銉炪伀閬╃敤銇欍伖銇嶃儛銈颁慨姝c亴4绠囨墍(銇濄伄銇嗐仭1銇ゃ伅Polls銉椼儵銈般偆銉)銇傘倞銇俱仚銆 +
    @@ -430,46 +498,50 @@

    銉愩偘淇

    銈汇偔銉ャ儶銉嗐偅闁㈤

      -
    • t0pP8uZz銇倛銈嬨仺銆丗CKeditor鐢ㄣ伄銈€儍銉椼儹銉笺儔銈广偗銉儣銉堛倰鐩存帴鍛笺伋鍑恒仚銇撱仺銇妲樸呫仾銉°儑銈c偄銉曘偂銈ゃ儷(銇熴仩銇椼佸疅琛屽彲鑳姐仾銈广偗銉儣銉堛倰闄ゃ亸)銈掋偄銉冦儣銉兗銉夈仚銈嬨亾銇ㄣ亴鍙兘銇仾銇c仸銇勩伨銇椼仧銆
    • -
    • Mark Evans銇倛銈嬨仺銆佹銆呫仾銈ゃ兂銈儷銉笺儔銉曘偂銈ゃ儷銇柦銇椼仸銇傘倠鐩存帴瀹熻銈掗槻姝€仚銈嬪绛栥亴銆丮icrosoft Windows銇仼銇ぇ鏂囧瓧銉诲皬鏂囧瓧銈掑尯鍒ャ仐銇亜銉曘偂銈ゃ儷銈枫偣銉嗐儬銇с伅涓嶅崄鍒嗐仹銇椼仧銆
    • -
    • 銉夈儵銉曘儓銉曘儵銈般倰銈汇儍銉堛仐銇︺亰銈婂叕闁嬫棩銇屾湭鏉ャ伄瑷樹簨銇с倐銆佽浜婭D銈掔煡銇c仸銇勩倢銇般佽浜嬨倰闁茶Η銇欍倠銇撱仺銇屽彲鑳姐伀銇仯銇︺亜銇俱仐銇熴
    • -
    • 瑷樹簨ID銈掔煡銇c仸銇勩倢銇般佸叕闁嬨仌銈屻仸銇勩仾銇勮浜嬨仹銈傘偝銉°兂銉堛倰銇ゃ亼銈嬨亾銇ㄣ亴鍙兘銇仾銇c仸銇勩伨銇椼仧銆
    • -
    • 銉囥兗銈裤儥銉笺偣銇儛銉冦偗銈€儍銉椼伀澶辨晽銇椼仧銇ㄣ亶銇併儑銉笺偪銉欍兗銈广伄銉戙偣銉兗銉夈亴error.log銇閷层仌銈屻仾銇勩倛銇嗐伀銇倞銇俱仐銇熴
    • +
    • t0pP8uZz銇倛銈嬨仺銆丗CKeditor鐢ㄣ伄銈€儍銉椼儹銉笺儔銈广偗銉儣銉堛倰鐩存帴鍛笺伋鍑恒仚銇撱仺銇妲樸呫仾銉°儑銈c偄銉曘偂銈ゃ儷(銇熴仩銇椼佸疅琛屽彲鑳姐仾銈广偗銉儣銉堛倰闄ゃ亸)銈掋偄銉冦儣銉兗銉夈仚銈嬨亾銇ㄣ亴鍙兘銇仾銇c仸銇勩伨銇椼仧銆 +
    • +
    • Mark Evans銇倛銈嬨仺銆佹銆呫仾銈ゃ兂銈儷銉笺儔銉曘偂銈ゃ儷銇柦銇椼仸銇傘倠鐩存帴瀹熻銈掗槻姝€仚銈嬪绛栥亴銆丮icrosoft Windows銇仼銇ぇ鏂囧瓧銉诲皬鏂囧瓧銈掑尯鍒ャ仐銇亜銉曘偂銈ゃ儷銈枫偣銉嗐儬銇с伅涓嶅崄鍒嗐仹銇椼仧銆
    • +
    • 銉夈儵銉曘儓銉曘儵銈般倰銈汇儍銉堛仐銇︺亰銈婂叕闁嬫棩銇屾湭鏉ャ伄瑷樹簨銇с倐銆佽浜婭D銈掔煡銇c仸銇勩倢銇般佽浜嬨倰闁茶Η銇欍倠銇撱仺銇屽彲鑳姐伀銇仯銇︺亜銇俱仐銇熴
    • +
    • 瑷樹簨ID銈掔煡銇c仸銇勩倢銇般佸叕闁嬨仌銈屻仸銇勩仾銇勮浜嬨仹銈傘偝銉°兂銉堛倰銇ゃ亼銈嬨亾銇ㄣ亴鍙兘銇仾銇c仸銇勩伨銇椼仧銆
    • +
    • 銉囥兗銈裤儥銉笺偣銇儛銉冦偗銈€儍銉椼伀澶辨晽銇椼仧銇ㄣ亶銇併儑銉笺偪銉欍兗銈广伄銉戙偣銉兗銉夈亴error.log銇閷层仌銈屻仾銇勩倛銇嗐伀銇倞銇俱仐銇熴

    浠栥伄銉愩偘淇

      -
    • 銇欍伖銇︺伄鍙炽儢銉儍銈亴浜屽害銉兂銉銉兂銈般仌銈屻仸銇勩仧銇熴倎銆佹檪闁撱伄銉偣銇仾銇c仸銇勩仧銇犮亼銇с仾銇忋丆hatterblock銈凷houtbox銇仼銇偄銉夈偑銉炽伀鎮奖闊裤倰涓庛亪銇︺亜銇俱仐銇熴
    • -
    • 銉堛儵銉冦偗銉愩儍銈伄銇傘倠瑷樹簨銇仱銇戙倝銈屻仧銈炽儭銉炽儓銈掑墛闄ゃ仹銇嶃仾銇勩倛銇嗐伀銇椼仸銇勩仧(CSRF瀵剧瓥鐢)銈汇偔銉ャ儶銉嗐偅銉堛兗銈兂銇壉銇勩倰淇銇椼伨銇椼仧銆
    • -
    • 銉︺兗銈躲兗鎶曠ǹ鎵胯獚銆佽浜嬫姇绋裤併儔銉┿儠銉堣浜嬨儶銈广儓銆丮S SQL銈点儩銉笺儓銇枹銇椼仸銉愩偘淇銈掕銇勩伨銇椼仧銆
    • +
    • 銇欍伖銇︺伄鍙炽儢銉儍銈亴浜屽害銉兂銉銉兂銈般仌銈屻仸銇勩仧銇熴倎銆佹檪闁撱伄銉偣銇仾銇c仸銇勩仧銇犮亼銇с仾銇忋丆hatterblock銈凷houtbox銇仼銇偄銉夈偑銉炽伀鎮奖闊裤倰涓庛亪銇︺亜銇俱仐銇熴
    • +
    • 銉堛儵銉冦偗銉愩儍銈伄銇傘倠瑷樹簨銇仱銇戙倝銈屻仧銈炽儭銉炽儓銈掑墛闄ゃ仹銇嶃仾銇勩倛銇嗐伀銇椼仸銇勩仧(CSRF瀵剧瓥鐢)銈汇偔銉ャ儶銉嗐偅銉堛兗銈兂銇壉銇勩倰淇銇椼伨銇椼仧銆
    • +
    • 銉︺兗銈躲兗鎶曠ǹ鎵胯獚銆佽浜嬫姇绋裤併儔銉┿儠銉堣浜嬨儶銈广儓銆丮S SQL銈点儩銉笺儓銇枹銇椼仸銉愩偘淇銈掕銇勩伨銇椼仧銆

    鍚屾⒈銇椼仸銇勩倠銉椼儵銈般偆銉炽伄銉愩偘淇

      -
    • 銈儸銉炽儉銉: 銈ゃ儥銉炽儓浜堝畾銇儢銉儍銈仹銆佸綋鏃ャ伄銈ゃ儥銉炽儓銇〃绀恒倰(浠婂害銇撱仢...)淇銇椼伨銇椼仧銆
    • -
    • 銉兂銈: 銈儐銈淬儶銈掑鏇淬仚銈嬮殯銇櫤鐢熴仚銈婼QL銈ㄣ儵銉笺仺銆両D銇岄噸瑜囥仚銈嬪牬鍚堛伀鏂拌銈儐銈淬儶銇屾棦瀛樸偒銉嗐偞銉倰榛欍仯銇︿笂鏇搞亶銇欍倠銈ㄣ儵銉笺倰淇銇椼伨銇椼仧銆
    • -
    • 闈欑殑銉氥兗銈: URL銉儵銈ゃ儓銈掓湁鍔广伀銇椼仸銇勩倠闅涖伄鍗板埛鐢ㄣ儦銉笺偢銈掓敼鍠勩仐銇俱仐銇熴
    • +
    • 銈儸銉炽儉銉: 銈ゃ儥銉炽儓浜堝畾銇儢銉儍銈仹銆佸綋鏃ャ伄銈ゃ儥銉炽儓銇〃绀恒倰(浠婂害銇撱仢...)淇銇椼伨銇椼仧銆
    • +
    • 銉兂銈: 銈儐銈淬儶銈掑鏇淬仚銈嬮殯銇櫤鐢熴仚銈婼QL銈ㄣ儵銉笺仺銆両D銇岄噸瑜囥仚銈嬪牬鍚堛伀鏂拌銈儐銈淬儶銇屾棦瀛樸偒銉嗐偞銉倰榛欍仯銇︿笂鏇搞亶銇欍倠銈ㄣ儵銉笺倰淇銇椼伨銇椼仧銆
    • +
    • 闈欑殑銉氥兗銈: URL銉儵銈ゃ儓銈掓湁鍔广伀銇椼仸銇勩倠闅涖伄鍗板埛鐢ㄣ儦銉笺偢銈掓敼鍠勩仐銇俱仐銇熴

    鏂版鑳姐仺鏀瑰杽鐐

      -
    • FCKeditor 2.6.3銈掑悓姊便仐銇俱仐銇熴
    • -
    • 澶氳█瑾炪儮銉笺儔銇仐銇︺亜銈嬪牬鍚堛伀銆併儢銉儍銈倐澶氳█瑾炲寲銇с亶銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • -
    • 瑷樹簨銇偒銉嗐偞銉敤銇皞鐢ㄣ伄銉曘偅銉笺儔銇屻亗銈嬪牬鍚堛併...銈掕臣瑾仚銈嬨嶃仺銇勩亞銈儣銈枫儳銉炽倰杩藉姞銇椼伨銇椼仧銆
    • -
    • 瑷樹簨銉曘偅銉笺儔鐢ㄣ伀銆屻儓銉冦儣銉氥兗銈搞伀琛ㄧず銇欍倠瑷樹簨銇欍伖銇(All Frontpage Stories)銆嶃伄銈儣銈枫儳銉炽倰杩藉姞銇椼伨銇椼仧銆傘岃┎褰撱仚銈嬭┍椤屻伀銇伩琛ㄧず銆嶃伄瑷樹簨銈掋儠銈c兗銉夈伀鍚倎銇亜銈堛亞銇仚銈嬨亾銇ㄣ亴銇с亶銇俱仚銆
    • -
    • 銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽伀銇娿亜銇︺併仧銇ㄣ亪銇拌銇c仸銇傘倠銈儣銈枫儳銉炽倰銆岃ō瀹(restore)銆嶃仐銇熷緦銇с佸厓銇姸鎱嬨伀鎴汇仚(unset)銇撱仺銇屻仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • 銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽仹瑷畾銇椼仧鍊ゃ倰siteconfig.php銇т笂鏇搞亶銇с亶銈嬨倛銇嗐伀銇倞銇俱仐銇熴$_CONF['rootdebug']銈儣銈枫儳銉炽仾銇┿倰瑷畾銇欍倠銇伀褰广伀绔嬨仱銇с仐銈囥亞銆
    • -
    • 銉儮銉笺儓瑾嶈銈掕銇嗐儲銉笺偠銉笺亴Web銈点兗銉撱偣銈掑埄鐢ㄣ仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧(銉︺兗銈躲兗鍚嶃仺銇椼仸銆銉︺兗銈躲兗鍚岪銈点兗銉撱偣鍚 銈掍娇鐢ㄣ仚銈嬪繀瑕併亴銇傘倞銇俱仚)銆
      - 娉ㄦ剰: OpenID銉︺兗銈躲兗銇獚瑷兼柟娉曘伀闁€仚銈嬫妧琛撲笂銇晱椤屻伄銇熴倎銆乄eb銈点兗銉撱偣銈鍒╃敤銇с亶銇俱仜銈
    • -
    • Web銈点兗銉撱偣(AtomPub)銇簰鎻涙с倰楂樸倎銇俱仐銇熴
    • +
    • FCKeditor 2.6.3銈掑悓姊便仐銇俱仐銇熴
    • +
    • 澶氳█瑾炪儮銉笺儔銇仐銇︺亜銈嬪牬鍚堛伀銆併儢銉儍銈倐澶氳█瑾炲寲銇с亶銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • +
    • 瑷樹簨銇偒銉嗐偞銉敤銇皞鐢ㄣ伄銉曘偅銉笺儔銇屻亗銈嬪牬鍚堛併...銈掕臣瑾仚銈嬨嶃仺銇勩亞銈儣銈枫儳銉炽倰杩藉姞銇椼伨銇椼仧銆
    • +
    • 瑷樹簨銉曘偅銉笺儔鐢ㄣ伀銆屻儓銉冦儣銉氥兗銈搞伀琛ㄧず銇欍倠瑷樹簨銇欍伖銇(All Frontpage Stories)銆嶃伄銈儣銈枫儳銉炽倰杩藉姞銇椼伨銇椼仧銆傘岃┎褰撱仚銈嬭┍椤屻伀銇伩琛ㄧず銆嶃伄瑷樹簨銈掋儠銈c兗銉夈伀鍚倎銇亜銈堛亞銇仚銈嬨亾銇ㄣ亴銇с亶銇俱仚銆
    • +
    • 銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽伀銇娿亜銇︺併仧銇ㄣ亪銇拌銇c仸銇傘倠銈儣銈枫儳銉炽倰銆岃ō瀹(restore)銆嶃仐銇熷緦銇с佸厓銇姸鎱嬨伀鎴汇仚(unset)銇撱仺銇屻仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • +
    • 銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽仹瑷畾銇椼仧鍊ゃ倰siteconfig.php銇т笂鏇搞亶銇с亶銈嬨倛銇嗐伀銇倞銇俱仐銇熴$_CONF['rootdebug']銈儣銈枫儳銉炽仾銇┿倰瑷畾銇欍倠銇伀褰广伀绔嬨仱銇с仐銈囥亞銆 +
    • +
    • 銉儮銉笺儓瑾嶈銈掕銇嗐儲銉笺偠銉笺亴Web銈点兗銉撱偣銈掑埄鐢ㄣ仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧(銉︺兗銈躲兗鍚嶃仺銇椼仸銆銉︺兗銈躲兗鍚岪銈点兗銉撱偣鍚 銈掍娇鐢ㄣ仚銈嬪繀瑕併亴銇傘倞銇俱仚)銆
      + 娉ㄦ剰: OpenID銉︺兗銈躲兗銇獚瑷兼柟娉曘伀闁€仚銈嬫妧琛撲笂銇晱椤屻伄銇熴倎銆乄eb銈点兗銉撱偣銈鍒╃敤銇с亶銇俱仜銈銆 +
    • +
    • Web銈点兗銉撱偣(AtomPub)銇簰鎻涙с倰楂樸倎銇俱仐銇熴

    銉嗐兗銉炪伄澶夋洿

    -

    1銇ゃ仩銇戝繀闋堛伄澶夋洿銇屻亗銈娿伨銇: 銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽伄鍚勯爡鐩敤銉嗐兂銉椼儸銉笺儓(admin/config/config_element.thtml)銈掓洿鏂般仐銇︺亸銇犮仌銇(Professional銉嗐兗銉炪亱銈夈偝銉斻兗銇椼仸銇忋仩銇曘亜)銆備粖鍥炪伄銉儶銉笺偣銇у鏇淬仌銈屻仧浠栥伄銉曘偂銈ゃ儷銇仚銇广仸銈儣銈枫儳銉炽仹銇欍傝┏绱般伅銆銉嗐兗銉炪伄澶夋洿鐐銈掋仈瑕с亸銇犮仌銇勩

    +

    1銇ゃ仩銇戝繀闋堛伄澶夋洿銇屻亗銈娿伨銇: 銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽伄鍚勯爡鐩敤銉嗐兂銉椼儸銉笺儓(admin/config/config_element.thtml)銈掓洿鏂般仐銇︺亸銇犮仌銇(Professional銉嗐兗銉炪亱銈夈偝銉斻兗銇椼仸銇忋仩銇曘亜)銆備粖鍥炪伄銉儶銉笺偣銇у鏇淬仌銈屻仧浠栥伄銉曘偂銈ゃ儷銇仚銇广仸銈儣銈枫儳銉炽仹銇欍傝┏绱般伅銆銉嗐兗銉炪伄澶夋洿鐐銈掋仈瑕с亸銇犮仌銇勩

    Geeklog 1.5.0

    @@ -479,31 +551,36 @@

    Google Summer of Code銇垚鏋溿倰銉曘偅銉笺儔銉愩儍銈

    浠婂洖銇儶銉兗銈广伀銇2007 Google Summer of Code銇у疅瑁呫仌銈屻仧娆°伄銉椼儹銈搞偋銈儓銇垚鏋溿倰鍙栥倞杈笺倱銇с亜銇俱仚銆

      -
    • 鏂般仧銇娇銇勩倓銇欍亜銈ゃ兂銈广儓銉笺儷銈广偗銉儣銉(浣滆咃細Matt West)
    • -
    • (config.php銈掔洿鎺ョ法闆嗐仐銇熷緭鏉ャ伄鏂瑰紡銇唬銈忋倠)鏂般仧銇ō瀹氱敤GUI(浣滆咃細Aaron Blankstein)
    • -
    • Atom Publishing Protocol銈掋儥銉笺偣銇ㄣ仐銇焀eb銈点兗銉撱偣API(浣滆咃細Ramnath R. Iyer)
    • +
    • 鏂般仧銇娇銇勩倓銇欍亜銈ゃ兂銈广儓銉笺儷銈广偗銉儣銉(浣滆咃細Matt West)
    • +
    • (config.php銈掔洿鎺ョ法闆嗐仐銇熷緭鏉ャ伄鏂瑰紡銇唬銈忋倠)鏂般仧銇ō瀹氱敤GUI(浣滆咃細Aaron Blankstein)
    • +
    • Atom Publishing Protocol銈掋儥銉笺偣銇ㄣ仐銇焀eb銈点兗銉撱偣API(浣滆咃細Ramnath R. Iyer)

    涓婅浠ュ銇柊姗熻兘銈勬敼鍠

      -
    • OpenID銈点儩銉笺儓: OpenID銈掍娇鐢ㄣ仐銇熴儲銉笺偠銉笺伄銉偘銈ゃ兂銇屽彲鑳姐伀銇倞銇俱仐銇熴侴eeklog銈点偆銉堛伀銈€偒銈︺兂銉堛倰鏂拌浣滄垚銇椼仾銇忋仸銈傘侀氬父銇儲銉笺偠銉笺仺鍚屾銇仼鎭点倰鍙椼亼銈夈倢銇俱仚銆
    • -
    • LDAP銉儮銉笺儓瑾嶈銉€偢銉ャ兗銉倰杩藉姞銇椼伨銇椼仧銆
    • -
    • 銉兂銈(links)銉椼儵銈般偆銉炽仹闅庡堡鍖栥仌銈屻仧銈点儢銈儐銈淬儶銈掓寔銇︺倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • FCKeditor銈抳ersion 2.6銇偄銉冦儣銈般儸銉笺儔
    • -
    • 瑷樹簨鍑︾悊鐢ㄣ偝銉笺儔銇浉銇嶇洿銇椼傘仺銈娿倧銇戙佽浜嬨伀鍚伨銈屻倠鐗规畩鏂囧瓧銈凥TML銈ㄣ兂銉嗐偅銉嗐偅銇壉銇勩伀闁€仚銈嬩富瑕併仾鍟忛銇屽叏銇﹁В娑堛仚銈嬨伅銇氥仹銇欍傘伨銇熴(銉栥儹銉冦偗銉儥銉伄)[code]銇銇椼仸銆佽銉儥銉伄[raw]銈裤偘銇屾柊銇熴伀銈点儩銉笺儓銇曘倢銈嬨倛銇嗐伀銇倞銇俱仐銇熴傘亾銇偪銈般倰浣裤亞銇ㄣ丠TML銇仼銇偝銉笺儔銈掋仢銇伨銇炬姇绋裤仚銈嬮殯銆丠TML銈裤偘銇ㄣ仐銇﹁В閲堛仌銈屻仾銇勩倛銇嗐伀銇倞銇俱仚銆
    • -
    • 銈炽儭銉炽儓銈掗枆銇樸倠銇撱仺銇屻仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆傘仱銇俱倞銆佹棦瀛樸伄銈炽儭銉炽儓銇〃绀恒仌銈屻倠銇屻佹柊瑕忋偝銉°兂銉堛倰鎶曠ǹ銇с亶銇亜銈堛亞銇仹銇嶃伨銇欍
    • -
    • 銈€兂銈便兗銉(polls)銉椼儵銈般偆銉炽仹銈€兂銈便兗銉堛仈銇ㄣ伀瑜囨暟銇唱鍟忋倰銇с亶銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • -
    • 闈欑殑銉氥兗銈(static pages)銉椼儵銈般偆銉炽仹銈炽儭銉炽儓銈掋偟銉濄兗銉堛仚銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • -
    • 銉囥兗銈裤儥銉笺偣銇儛銉冦偗銈€儍銉楃敾闈€仹銆併儛銉冦偗銈€儍銉椼仐銇熴儠銈°偆銉倰鍓婇櫎銇椼仧銈娿併儉銈︺兂銉兗銉夈仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • 銉囥儠銈┿儷銉堛伄Professional銉嗐兗銉炪亴HTML 4.01 Strict婧栨嫚銇仾銈娿伨銇椼仧銆傘伨銇熴XHTML銈傘偟銉濄兗銉堛仐銇︺亜銇俱仚(XHTML婧栨嫚銇儐銉笺優銇屽繀瑕併仹銇)銆
    • +
    • OpenID銈点儩銉笺儓: OpenID銈掍娇鐢ㄣ仐銇熴儲銉笺偠銉笺伄銉偘銈ゃ兂銇屽彲鑳姐伀銇倞銇俱仐銇熴侴eeklog銈点偆銉堛伀銈€偒銈︺兂銉堛倰鏂拌浣滄垚銇椼仾銇忋仸銈傘侀氬父銇儲銉笺偠銉笺仺鍚屾銇仼鎭点倰鍙椼亼銈夈倢銇俱仚銆
    • +
    • LDAP銉儮銉笺儓瑾嶈銉€偢銉ャ兗銉倰杩藉姞銇椼伨銇椼仧銆
    • +
    • 銉兂銈(links)銉椼儵銈般偆銉炽仹闅庡堡鍖栥仌銈屻仧銈点儢銈儐銈淬儶銈掓寔銇︺倠銈堛亞銇仾銈娿伨銇椼仧銆
    • +
    • FCKeditor銈抳ersion 2.6銇偄銉冦儣銈般儸銉笺儔
    • +
    • 瑷樹簨鍑︾悊鐢ㄣ偝銉笺儔銇浉銇嶇洿銇椼傘仺銈娿倧銇戙佽浜嬨伀鍚伨銈屻倠鐗规畩鏂囧瓧銈凥TML銈ㄣ兂銉嗐偅銉嗐偅銇壉銇勩伀闁€仚銈嬩富瑕併仾鍟忛銇屽叏銇﹁В娑堛仚銈嬨伅銇氥仹銇欍傘伨銇熴(銉栥儹銉冦偗銉儥銉伄)[code]銇銇椼仸銆佽銉儥銉伄[raw]銈裤偘銇屾柊銇熴伀銈点儩銉笺儓銇曘倢銈嬨倛銇嗐伀銇倞銇俱仐銇熴傘亾銇偪銈般倰浣裤亞銇ㄣ丠TML銇仼銇偝銉笺儔銈掋仢銇伨銇炬姇绋裤仚銈嬮殯銆丠TML銈裤偘銇ㄣ仐銇﹁В閲堛仌銈屻仾銇勩倛銇嗐伀銇倞銇俱仚銆 +
    • +
    • 銈炽儭銉炽儓銈掗枆銇樸倠銇撱仺銇屻仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆傘仱銇俱倞銆佹棦瀛樸伄銈炽儭銉炽儓銇〃绀恒仌銈屻倠銇屻佹柊瑕忋偝銉°兂銉堛倰鎶曠ǹ銇с亶銇亜銈堛亞銇仹銇嶃伨銇欍
    • +
    • 銈€兂銈便兗銉(polls)銉椼儵銈般偆銉炽仹銈€兂銈便兗銉堛仈銇ㄣ伀瑜囨暟銇唱鍟忋倰銇с亶銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • +
    • 闈欑殑銉氥兗銈(static pages)銉椼儵銈般偆銉炽仹銈炽儭銉炽儓銈掋偟銉濄兗銉堛仚銈嬨倛銇嗐伀銇倞銇俱仐銇熴
    • +
    • 銉囥兗銈裤儥銉笺偣銇儛銉冦偗銈€儍銉楃敾闈€仹銆併儛銉冦偗銈€儍銉椼仐銇熴儠銈°偆銉倰鍓婇櫎銇椼仧銈娿併儉銈︺兂銉兗銉夈仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • +
    • 銉囥儠銈┿儷銉堛伄Professional銉嗐兗銉炪亴HTML 4.01 Strict婧栨嫚銇仾銈娿伨銇椼仧銆傘伨銇熴XHTML銈傘偟銉濄兗銉堛仐銇︺亜銇俱仚(XHTML婧栨嫚銇儐銉笺優銇屽繀瑕併仹銇)銆 +

    銈汇偔銉ャ儶銉嗐偅

    @@ -512,26 +589,42 @@

    Geeklog 1.4.1

    鏂版鑳

      -
    • Microsoft SQL Server銈掋偟銉濄兗銉堛備粖鍥炪伄銉儶銉笺偣銈堛倞銆丟eeklog銈扢icrosoft SQL Server銇偆銉炽偣銉堛兗銉仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆侻ySQL銇犮亼銇с伅銇亸銇仯銇熴伄銇с仚銆侻S SQL銈点儩銉笺儓銇疪andy Kolenko銇倛銈婇枊鐧恒仌銈屻伨銇椼仧銆俁andy銆併亗銈娿亴銇ㄣ亞!
      - 銈点兗銉夈儜銉笺儐銈c伀銈堛倠銉椼儵銈般偆銉炽亴Microsoft SQL Server銇у嫊浣溿仚銈嬨伀銇丮S SQL銈掋偟銉濄兗銉堛仚銈嬪繀瑕併亴銇傘倞銇俱仚銆傚悓姊便仐銇︺亜銈嬨儣銉┿偘銈ゃ兂(銈儸銉炽儉銉笺併儶銉炽偗銆併偄銉炽偙銉笺儓銆丼pam-X銆侀潤鐨勩儦銉笺偢)銇棦銇玀S SQL銈掋偟銉濄兗銉堛仚銈嬨倛銇嗐偄銉冦儣銈般儸銉笺儔娓堛伩銇с仚銆
    • -
    • 銈儸銉炽儉銉笺儣銉┿偘銈ゃ兂: 浠ュ墠銇湰浣撱伀绲勩伩杈笺伨銈屻仸銇勩仧銈儸銉炽儉銉笺仺銈ゃ儥銉炽儓姗熻兘銇粖鍥炪亱銈夈儣銉┿偘銈ゃ兂銇ㄣ仐銇﹀垎闆€仌銈屻伨銇椼仧銆侴eeklog 1.4.0銇у疅鏂姐仌銈屻仧銈€兂銈便兗銉銉兂銈姗熻兘銇銇俱倠銉椼儵銈般偆銉冲寲銇祦銈屻伅銇撱倢銇х祩浜嗐仐銆丟eeklog銇儮銈搞儱銉笺儷鍖栥亴閫层伩銇俱仐銇熴傘偟銈ゃ儓銇笉瑕併仾姗熻兘銈掔劇鍔广伀銇椼仧銈婂樊銇楁浛銇堛倠銇撱仺銇屽鏄撱伀銇仯銇︺亜銇俱仚銆
    • -
    • 澶氳█瑾炪偟銉濄兗銉(Multi-language support)锛 Geeklog銈掔敤銇勩仸鐪熴伄澶氳█瑾炪偟銈ゃ儓銇绡夈亴鍙兘銇仾銈娿伨銇椼仧銆傘儕銉撱偛銉笺偡銉с兂銇犮亼銇с仾銇忋偟銈ゃ儓銇偝銉炽儐銉炽儎銈傘伨銇熴佽█瑾炪倰鍒囥倞鏇裤亪銈屻伆杩介殢銇椼伨銇欍
    • -
    • FCKeditor 2.3.1銈掑悓姊便仐銇俱仐銇熴傜敾鍍忋倰銈€儍銉椼儹銉笺儔銇欍倠銉曘偂銈ゃ儷銉炪儘銉笺偢銉c倰鍐嶃伋鍚屾⒈銇欍倠銈堛亞銇仐銇俱仐銇熴
    • -
    • 鍙ゃ亜銇亜銇楁椿鍕曘仐銇︺亜銇亜銉︺兗銈躲兗銈掍竴鎷墛闄ゃ仚銈嬫鑳姐倰杩藉姞銆備竴搴︺倐銉偘銈ゃ兂銇椼仸銇勩仾銇勩儲銉笺偠銉笺倓銈点偆銉堛倰鐭湡闁撱仐銇嬩娇鐢ㄣ仐銇︺亜銇亜銉︺兗銈躲兗銆侀暦鏈熼枔銉偘銈ゃ兂銇椼仸銇勩仾銇勩儲銉笺偠銉笺亴鑷嫊鐨勩伀妞滅储銇曘倢銆佷竴瑕ц〃绀恒仌銈屻伨銇欍傛湡闁撱伄闀枫仌銇銇堛倠銇撱仺銇屻仹銇嶃佹绱€仌銈屻仧銉︺兗銈躲兗銇嬪垾銇墛闄ゃ仹銇嶃伨銇欍
    • +
    • Microsoft SQL Server銈掋偟銉濄兗銉堛備粖鍥炪伄銉儶銉笺偣銈堛倞銆丟eeklog銈扢icrosoft SQL Server銇偆銉炽偣銉堛兗銉仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆侻ySQL銇犮亼銇с伅銇亸銇仯銇熴伄銇с仚銆侻S + SQL銈点儩銉笺儓銇疪andy Kolenko銇倛銈婇枊鐧恒仌銈屻伨銇椼仧銆俁andy銆併亗銈娿亴銇ㄣ亞!
      + 銈点兗銉夈儜銉笺儐銈c伀銈堛倠銉椼儵銈般偆銉炽亴Microsoft SQL Server銇у嫊浣溿仚銈嬨伀銇丮S SQL銈掋偟銉濄兗銉堛仚銈嬪繀瑕併亴銇傘倞銇俱仚銆傚悓姊便仐銇︺亜銈嬨儣銉┿偘銈ゃ兂(銈儸銉炽儉銉笺併儶銉炽偗銆併偄銉炽偙銉笺儓銆丼pam-X銆侀潤鐨勩儦銉笺偢)銇棦銇玀S + SQL銈掋偟銉濄兗銉堛仚銈嬨倛銇嗐偄銉冦儣銈般儸銉笺儔娓堛伩銇с仚銆 +
    • +
    • 銈儸銉炽儉銉笺儣銉┿偘銈ゃ兂: 浠ュ墠銇湰浣撱伀绲勩伩杈笺伨銈屻仸銇勩仧銈儸銉炽儉銉笺仺銈ゃ儥銉炽儓姗熻兘銇粖鍥炪亱銈夈儣銉┿偘銈ゃ兂銇ㄣ仐銇﹀垎闆€仌銈屻伨銇椼仧銆侴eeklog 1.4.0銇у疅鏂姐仌銈屻仧銈€兂銈便兗銉銉兂銈姗熻兘銇銇俱倠銉椼儵銈般偆銉冲寲銇祦銈屻伅銇撱倢銇х祩浜嗐仐銆丟eeklog銇儮銈搞儱銉笺儷鍖栥亴閫层伩銇俱仐銇熴傘偟銈ゃ儓銇笉瑕併仾姗熻兘銈掔劇鍔广伀銇椼仧銈婂樊銇楁浛銇堛倠銇撱仺銇屽鏄撱伀銇仯銇︺亜銇俱仚銆 +
    • +
    • 澶氳█瑾炪偟銉濄兗銉(Multi-language support)锛 + Geeklog銈掔敤銇勩仸鐪熴伄澶氳█瑾炪偟銈ゃ儓銇绡夈亴鍙兘銇仾銈娿伨銇椼仧銆傘儕銉撱偛銉笺偡銉с兂銇犮亼銇с仾銇忋偟銈ゃ儓銇偝銉炽儐銉炽儎銈傘伨銇熴佽█瑾炪倰鍒囥倞鏇裤亪銈屻伆杩介殢銇椼伨銇欍 +
    • +
    • FCKeditor 2.3.1銈掑悓姊便仐銇俱仐銇熴傜敾鍍忋倰銈€儍銉椼儹銉笺儔銇欍倠銉曘偂銈ゃ儷銉炪儘銉笺偢銉c倰鍐嶃伋鍚屾⒈銇欍倠銈堛亞銇仐銇俱仐銇熴
    • +
    • + 鍙ゃ亜銇亜銇楁椿鍕曘仐銇︺亜銇亜銉︺兗銈躲兗銈掍竴鎷墛闄ゃ仚銈嬫鑳姐倰杩藉姞銆備竴搴︺倐銉偘銈ゃ兂銇椼仸銇勩仾銇勩儲銉笺偠銉笺倓銈点偆銉堛倰鐭湡闁撱仐銇嬩娇鐢ㄣ仐銇︺亜銇亜銉︺兗銈躲兗銆侀暦鏈熼枔銉偘銈ゃ兂銇椼仸銇勩仾銇勩儲銉笺偠銉笺亴鑷嫊鐨勩伀妞滅储銇曘倢銆佷竴瑕ц〃绀恒仌銈屻伨銇欍傛湡闁撱伄闀枫仌銇銇堛倠銇撱仺銇屻仹銇嶃佹绱€仌銈屻仧銉︺兗銈躲兗銇嬪垾銇墛闄ゃ仹銇嶃伨銇欍 +

    銈汇偔銉ャ儶銉嗐偅

    -

    Geeklog 1.4.0浠ュ墠銇儛銉笺偢銉с兂銇х櫤瑕嬨仌銈屻仧銈汇偔銉ャ儶銉嗐偅銇晱椤屻倰鑰冩叜銇椼仸銆丟eeklog銇偨銉笺偣銈炽兗銉夈伄瑕嬬洿銇椼倰琛屻亜銇俱仐銇熴備粖鍥炪伄銉儶銉笺偣銇с伅銆併亜銇忋仱銇嬩簺绱般仾鍟忛銈掔櫤瑕嬨仐銇﹀蹇溿仐銆併偦銈儱銉儐銈c倰楂樸倎銈嬪绛栥倰銇勩亸銇ゃ亱灏庡叆銇椼仸銇勩伨銇欍傚瑝銇椼亜鍓綔鐢ㄣ仺銇椼仸銆併亜銇忋仱銇嬨伄銉愩偘銇ㄤ笉鏁村悎銇岃銇ゃ亱銈娿佷粖鍥炪伄銉儶銉笺偣銇с伅淇銇椼仸銇勩伨銇欍

    +

    Geeklog + 1.4.0浠ュ墠銇儛銉笺偢銉с兂銇х櫤瑕嬨仌銈屻仧銈汇偔銉ャ儶銉嗐偅銇晱椤屻倰鑰冩叜銇椼仸銆丟eeklog銇偨銉笺偣銈炽兗銉夈伄瑕嬬洿銇椼倰琛屻亜銇俱仐銇熴備粖鍥炪伄銉儶銉笺偣銇с伅銆併亜銇忋仱銇嬩簺绱般仾鍟忛銈掔櫤瑕嬨仐銇﹀蹇溿仐銆併偦銈儱銉儐銈c倰楂樸倎銈嬪绛栥倰銇勩亸銇ゃ亱灏庡叆銇椼仸銇勩伨銇欍傚瑝銇椼亜鍓綔鐢ㄣ仺銇椼仸銆併亜銇忋仱銇嬨伄銉愩偘銇ㄤ笉鏁村悎銇岃銇ゃ亱銈娿佷粖鍥炪伄銉儶銉笺偣銇с伅淇銇椼仸銇勩伨銇欍

    銈广儜銉犻槻寰

    -

    浠婂洖銇儶銉兗銈广仹銆鏇存柊銇曘倢銇︺亜銇亜MT-Blacklist銇偟銉濄兗銉堛倰瀹屽叏銇粌姝€仐銇俱仐銇熴備唬銈忋倞銇丷uss Jones銇www.linksleeve.org銇ч亱鍠躲仐銇︺亜銈 Spam Link Verification (SLV)銇ㄣ亜銇嗘墜娉曘倰鎺$敤銇椼仸銇勩伨銇欍係LV銇ㄣ伅銆併亜銈忋伆銈炽儫銉ャ儖銉嗐偅銇岄亱鍠躲仚銈嬨佽嚜鍕曠殑銇洿鏂般仌銈屻倠銉栥儵銉冦偗銉偣銉堛仹銇欍傝┏绱般伅銆Spam-X銉椼儵銈般偆銉銈掋仈瑕с亸銇犮仌銇勩

    +

    浠婂洖銇儶銉兗銈广仹銆鏇存柊銇曘倢銇︺亜銇亜MT-Blacklist銇偟銉濄兗銉堛倰瀹屽叏銇粌姝€仐銇俱仐銇熴備唬銈忋倞銇丷uss + Jones銇www.linksleeve.org銇ч亱鍠躲仐銇︺亜銈 Spam Link Verification + (SLV)銇ㄣ亜銇嗘墜娉曘倰鎺$敤銇椼仸銇勩伨銇欍係LV銇ㄣ伅銆併亜銈忋伆銈炽儫銉ャ儖銉嗐偅銇岄亱鍠躲仚銈嬨佽嚜鍕曠殑銇洿鏂般仌銈屻倠銉栥儵銉冦偗銉偣銉堛仹銇欍傝┏绱般伅銆Spam-X銉椼儵銈般偆銉銈掋仈瑕с亸銇犮仌銇勩 +

    Geeklog 1.4.0sr6

    -

    MustLive銇屻屽弸銇犮仭銇浜嬨倰銉°兗銉仚銈嬨嶃伄銉曘偐銉笺儬銈掑埄鐢ㄣ仐銇XSS銇彲鑳芥с倰鎸囨憳銇椼伨銇椼仧銆備粖鍥炪伄銉儶銉笺偣銇с伅銇撱伄鍟忛銇蹇溿仐銇︺亜銇俱仚銆

    +

    MustLive銇屻屽弸銇犮仭銇浜嬨倰銉°兗銉仚銈嬨嶃伄銉曘偐銉笺儬銈掑埄鐢ㄣ仐銇XSS銇彲鑳芥с倰鎸囨憳銇椼伨銇椼仧銆備粖鍥炪伄銉儶銉笺偣銇с伅銇撱伄鍟忛銇蹇溿仐銇︺亜銇俱仚銆 +

    Geeklog 1.4.0sr5-1

    @@ -541,7 +634,9 @@

    Geeklog 1.4.0sr5-1

    Geeklog 1.4.0sr5

    -

    JPCERT/CC銈堛倞銆併偝銉°兂銉堛伄鎵便亜銇枹銇欍倠銈儹銈广偟銈ゃ儓銉汇偣銈儶銉椼儐銈c兂銈銇彲鑳芥с伀闁€仐銇﹂氱煡銇屻亗銈娿伨銇椼仧銆備粖鍥炪伄銉儶銉笺偣銇с伅銇撱伄鍟忛銇鍑︺仐銇︺亜銇俱仚銆

    +

    JPCERT/CC銈堛倞銆併偝銉°兂銉堛伄鎵便亜銇枹銇欍倠銈儹銈广偟銈ゃ儓銉汇偣銈儶銉椼儐銈c兂銈銇彲鑳芥с伀闁€仐銇﹂氱煡銇屻亗銈娿伨銇椼仧銆備粖鍥炪伄銉儶銉笺偣銇с伅銇撱伄鍟忛銇鍑︺仐銇︺亜銇俱仚銆 +

    Geeklog 1.4.0sr4

    @@ -549,31 +644,43 @@

    Geeklog 1.4.0sr4

    "rgod"銇倛銈娿併偦銈儱銈€仹銇仾銇勬柟娉曘仹銈ゃ兂銈广儓銉笺儷銇曘倢銇烥eeklog銇‵CKeditor銇惈銇俱倢銇︺亜銈"mcpuk"銉曘偂銈ゃ儷銉炪儘銉笺偢銉c伄銉愩偘銇屻佷互鍓嶃伄1.4.0绯汇伄銉儶銉笺偣銇欍伖銇︺伀鍚伨銈屻仸銇勩倠銇撱仺銇屽牨鍛娿仌銈屻伨銇椼仧銆

      -
    • public_html銉囥偅銉偗銉堛儶銇銇亗銈嬨儠銈°偆銉伄涓閮ㄣ亴鐩存帴瀹熻銇曘倢銈嬪彲鑳芥с亴銇傘倞銇俱仐銇熴傘亾銈屻倝銇儠銈°偆銉亴URL绲岀敱銇с偄銈偦銈瑰彲鑳姐仾銈堛亞銇獹eeklog銇屻偆銉炽偣銉堛兗銉仌銈屻仸銇勩倠鍫村悎(銇撱倢銇併偆銉炽偣銉堛兗銉柟娉曘仹銇叏鐒躲亰鍕с倎銇椼仸銇勩仾銇勬柟娉曘仹銇)銆併儶銉€兗銉堛偟銉笺儛銇嬨倝鎮剰銇亗銈嬨偝銉笺儔銈掋偄銉冦儣銉兗銉夈仐銇︺佸疅琛屻仚銈嬨仧銈併伀鍒╃敤銇曘倢銈嬪彲鑳芥с亴銇傘倞銇俱仐銇熴 -

      - 瑭崇窗銇銇勩倧銈嗐倠Geeklog銇剢寮辨ф姇绋(So-called Geeklog "exploit" posted)銈掋仈瑕с亸銇犮仌銇勩 -

      - 浠婂洖銇儶銉兗銈广仹銇乸ublic_html銉囥偅銉偗銉堛儶銇銇亗銈嬨儠銈°偆銉亴鐩存帴瀹熻銇曘倢銈嬨伄銈掗槻銇愭鑳姐倰杩藉姞銇椼伨銇椼仧銆傘仺銇亜銇堛乸ublic_html銉囥偅銉偗銉堛儶銇銇亗銈嬨儠銈°偆銉亴URL绲岀敱銇с偄銈偦銈瑰彲鑳姐仾銈堛亞銇獹eeklog銈掋偆銉炽偣銉堛兗銉仐銇︺亜銈嬨仾銈夈佷慨姝c仚銈嬨亾銇ㄣ倰銇婂嫥銈併仐銇俱仚(瑭崇窗銇FAQ銈掋仈瑕с亸銇犮仌銇刣etails)銆 -
    • -
    • (Geeklog銇甤onfig.php銇CKeditor銈掔劇鍔广伀銇椼仸銇勩仸銈)銆丗CKeditor銇当鍚堛仌銈屻仸銇勩倠"mcpuk"銉曘偂銈ゃ儷銉炪儘銉笺偢銉c倰浣裤亪銇般佷换鎰忋伄PHP銈炽兗銉夈倰銈€儍銉椼儹銉笺儔銇欍倠銇撱仺銇屽彲鑳姐伀銇仯銇︺亜銇俱仐銇熴俉eb銈点兗銉愩伄瑷畾銇椼仩銇勩仹銇併偄銉冦儣銉兗銉夈仐銇熴偝銉笺儔銈掑疅琛屻仚銈嬨亾銇ㄣ倐鍙兘銇с仐銇熴 -

      - 瑭崇窗銇FCKeditor銇甿cpuk銉曘偂銈ゃ儷銉炪儘銉笺偢銉c伄鑴嗗急鎬(Exploit for FCKeditor's mcpuk file manager)銈掋仈瑕с亸銇犮仌銇勩 -

      +
    • + public_html銉囥偅銉偗銉堛儶銇銇亗銈嬨儠銈°偆銉伄涓閮ㄣ亴鐩存帴瀹熻銇曘倢銈嬪彲鑳芥с亴銇傘倞銇俱仐銇熴傘亾銈屻倝銇儠銈°偆銉亴URL绲岀敱銇с偄銈偦銈瑰彲鑳姐仾銈堛亞銇獹eeklog銇屻偆銉炽偣銉堛兗銉仌銈屻仸銇勩倠鍫村悎(銇撱倢銇併偆銉炽偣銉堛兗銉柟娉曘仹銇叏鐒躲亰鍕с倎銇椼仸銇勩仾銇勬柟娉曘仹銇)銆併儶銉€兗銉堛偟銉笺儛銇嬨倝鎮剰銇亗銈嬨偝銉笺儔銈掋偄銉冦儣銉兗銉夈仐銇︺佸疅琛屻仚銈嬨仧銈併伀鍒╃敤銇曘倢銈嬪彲鑳芥с亴銇傘倞銇俱仐銇熴 +

      + 瑭崇窗銇銇勩倧銈嗐倠Geeklog銇剢寮辨ф姇绋(So-called Geeklog "exploit" + posted)銈掋仈瑕с亸銇犮仌銇勩 +

      + 浠婂洖銇儶銉兗銈广仹銇乸ublic_html銉囥偅銉偗銉堛儶銇銇亗銈嬨儠銈°偆銉亴鐩存帴瀹熻銇曘倢銈嬨伄銈掗槻銇愭鑳姐倰杩藉姞銇椼伨銇椼仧銆傘仺銇亜銇堛乸ublic_html銉囥偅銉偗銉堛儶銇銇亗銈嬨儠銈°偆銉亴URL绲岀敱銇с偄銈偦銈瑰彲鑳姐仾銈堛亞銇獹eeklog銈掋偆銉炽偣銉堛兗銉仐銇︺亜銈嬨仾銈夈佷慨姝c仚銈嬨亾銇ㄣ倰銇婂嫥銈併仐銇俱仚(瑭崇窗銇FAQ銈掋仈瑕с亸銇犮仌銇刣etails)銆 +
    • +
    • + (Geeklog銇甤onfig.php銇CKeditor銈掔劇鍔广伀銇椼仸銇勩仸銈)銆丗CKeditor銇当鍚堛仌銈屻仸銇勩倠"mcpuk"銉曘偂銈ゃ儷銉炪儘銉笺偢銉c倰浣裤亪銇般佷换鎰忋伄PHP銈炽兗銉夈倰銈€儍銉椼儹銉笺儔銇欍倠銇撱仺銇屽彲鑳姐伀銇仯銇︺亜銇俱仐銇熴俉eb銈点兗銉愩伄瑷畾銇椼仩銇勩仹銇併偄銉冦儣銉兗銉夈仐銇熴偝銉笺儔銈掑疅琛屻仚銈嬨亾銇ㄣ倐鍙兘銇с仐銇熴 +

      + 瑭崇窗銇FCKeditor銇甿cpuk銉曘偂銈ゃ儷銉炪儘銉笺偢銉c伄鑴嗗急鎬(Exploit + for FCKeditor's mcpuk file manager)銈掋仈瑕с亸銇犮仌銇勩 +

      浠婂洖銇儶銉兗銈广仹銇佽┎褰撱儠銈°偆銉優銉嶃兗銈搞儯銇彇銈婇櫎銇嬨倢銇︺亜銇俱仚銆傘仐銇熴亴銇c仸銆丗CKeditor绲岀敱銇х敾鍍忋仾銇┿伄銉曘偂銈ゃ儷銈掋偄銉冦儣銉兗銉夈仚銈嬨亾銇ㄣ伅銇с亶銇亸銇仯銇︺亜銇俱仚銆侴eeklog銇皢鏉ャ伄銉愩兗銈搞儳銉炽仹銇佹洿鏂般仌銈屻仧FCKeditor銇ㄣ儠銈°偆銉優銉嶃兗銈搞儯銈掑悓姊便仚銈嬨亾銇ㄣ伀銇倠銇с仐銈囥亞銆 -
    • +
    -

    娉: 浠婂洖銇儶銉兗銈广伀銇併儓銉┿儍銈儛銉冦偗銈广儜銉犮倰闃层亹銇熴倎銇鏇存柊銇曘倢銇焞ib-trackback.php銈傚惈銇俱倢銇︺亜銇俱仚銆

    +

    娉: 浠婂洖銇儶銉兗銈广伀銇併儓銉┿儍銈儛銉冦偗銈广儜銉犮倰闃层亹銇熴倎銇鏇存柊銇曘倢銇焞ib-trackback.php銈傚惈銇俱倢銇︺亜銇俱仚銆 +

    Geeklog 1.4.0sr3

    浠婂洖銇儶銉兗銈广仹銇佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇︺亜銇俱仚銆

      -
    1. auth.inc.php銇с伄SQL銈ゃ兂銈搞偋銈偡銉с兂銇ㄨ獚瑷艰總鍥炪伄鍙兘鎬(the Security Science Researchers Institute Of Iran銇牨鍛娿伀銈堛倠)銆
    2. -
    3. getimage.php銇с伄銈儹銈广偟銈ゃ儓銉汇偣銈儶銉椼儐銈c兂銈般伄鍙兘鎬(the Security Science Researchers Institute Of Iran銇牨鍛娿伀銈堛倠)銆
    4. -
    5. getimage.php銇ㄣ併仧銇ㄣ亪銇般丳rofessional銉嗐兗銉炪仾銇┿伄functions.php銇倛銈嬨儜銈规紡娲(the Security Science Researchers Institute Of Iran銇牨鍛娿伀銈堛倠)銆
    6. -
    7. 瑷樹簨鎶曠ǹ銇殯銇甋QL銈ゃ兂銈搞偋銈偡銉с兂銇彲鑳芥с
    8. +
    9. auth.inc.php銇с伄SQL銈ゃ兂銈搞偋銈偡銉с兂銇ㄨ獚瑷艰總鍥炪伄鍙兘鎬(the Security Science Researchers Institute Of + Iran銇牨鍛娿伀銈堛倠)銆 +
    10. +
    11. getimage.php銇с伄銈儹銈广偟銈ゃ儓銉汇偣銈儶銉椼儐銈c兂銈般伄鍙兘鎬(the Security Science Researchers Institute Of + Iran銇牨鍛娿伀銈堛倠)銆 +
    12. +
    13. getimage.php銇ㄣ併仧銇ㄣ亪銇般丳rofessional銉嗐兗銉炪仾銇┿伄functions.php銇倛銈嬨儜銈规紡娲(the + Security Science Researchers Institute Of Iran銇牨鍛娿伀銈堛倠)銆 +
    14. +
    15. 瑷樹簨鎶曠ǹ銇殯銇甋QL銈ゃ兂銈搞偋銈偡銉с兂銇彲鑳芥с
    @@ -581,8 +688,8 @@

    Geeklog 1.4.0sr2

    浠婂洖銇儶銉兗銈广仹銇佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇俱仐銇熴

      -
    • 瑾般仹銈備换鎰忋伄銉︺兗銈躲兗銇ㄣ仐銇︺儹銈般偆銉炽亴鍙兘銇仾銈嬨偦銉冦偡銉с兂銉忋兂銉夈儶銉炽偘銇儛銈(Konstantin Dyakoff銇牨鍛娿伀銈堛倠)銆
    • -
    • 銉︺兗銈躲兗銉椼儹銉曘偅銉笺儷銇牬鎵(Location)銉曘偅銉笺儷銉夈仹HTML銈裤偘銇岄櫎鍘汇仌銈屻仸銇勩仾銇嬨仯銇熴
    • +
    • 瑾般仹銈備换鎰忋伄銉︺兗銈躲兗銇ㄣ仐銇︺儹銈般偆銉炽亴鍙兘銇仾銈嬨偦銉冦偡銉с兂銉忋兂銉夈儶銉炽偘銇儛銈(Konstantin Dyakoff銇牨鍛娿伀銈堛倠)銆
    • +
    • 銉︺兗銈躲兗銉椼儹銉曘偅銉笺儷銇牬鎵(Location)銉曘偅銉笺儷銉夈仹HTML銈裤偘銇岄櫎鍘汇仌銈屻仸銇勩仾銇嬨仯銇熴
    @@ -590,316 +697,411 @@

    Geeklog 1.4.0sr1

    浠婂洖銇儶銉兗銈广仹銇佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇俱仐銇熴

      -
    • Geeklog銇偗銉冦偔銉笺伄鎵便亜銇捣鍥犮仚銈嬨亜銇忋仱銇嬨伄鍟忛(GulfTech Security Research銇甁ames Bercegay銇倛銈嬪牨鍛)銆係QL銈ゃ兂銈搞偋銈偡銉с兂銈勪换鎰忋儠銈°偆銉伕銇偄銈偦銈广佷换鎰忋伄銈炽兗銉夈伄鍩嬨倎杈笺伩鍙娿伋瀹熻銇屽彲鑳姐伀銇倠鑴嗗急鎬с仹銇椼仧銆
    • +
    • Geeklog銇偗銉冦偔銉笺伄鎵便亜銇捣鍥犮仚銈嬨亜銇忋仱銇嬨伄鍟忛(GulfTech Security Research銇甁ames + Bercegay銇倛銈嬪牨鍛)銆係QL銈ゃ兂銈搞偋銈偡銉с兂銈勪换鎰忋儠銈°偆銉伕銇偄銈偦銈广佷换鎰忋伄銈炽兗銉夈伄鍩嬨倎杈笺伩鍙娿伋瀹熻銇屽彲鑳姐伀銇倠鑴嗗急鎬с仹銇椼仧銆 +
    -

    瑷虫敞锛氫互涓嬨伄鍜岃ǔ銇両vySOHO銇屽叕闁嬨仐銇︺亜銇烥eeklog-1.4.0鏃ユ湰瑾炵増銇粯灞炪仚銈媍hanges.html銈掍慨姝c仐銇︿娇鐢ㄣ仐銇︺亜銇俱仚銆

    +

    + 瑷虫敞锛氫互涓嬨伄鍜岃ǔ銇両vySOHO銇屽叕闁嬨仐銇︺亜銇烥eeklog-1.4.0鏃ユ湰瑾炵増銇粯灞炪仚銈媍hanges.html銈掍慨姝c仐銇︿娇鐢ㄣ仐銇︺亜銇俱仚銆

    Geeklog 1.4.0

    (Geeklog 1.4.0 銇佸厓銇1.3.12銇с仚銇仹銆併儛銉笺偢銉с兂1.3.12銈掑弬鐓с仐銇熷牬鍚1.4.0銇┎褰撱仐銇俱仚銆)

    鏂版鑳

      -
    • Geeklog銇従鍦ㄥ叕寮忋伀銇 register_globals = off 銇у嫊銇勩仸銇勩伨銇欍亴銆併伨銇犮亜銇忋仱銇嬨伄銉椼儵銈般偆銉炽仹銇register_globals = on 銇仐銇亸銇︺伅銇勩亼銇亜銇撱仺銇敞鎰忋仐銇︺亸銇犮仌銇勩
    • -
    • 銉堛儵銉冦偗銉愩儍銈銉斻兂銈般儛銉冦偗銇偝銉°兂銉堛伄閫佸彈淇″悜銇戙伄銈点儩銉笺儓銇岃拷鍔犮仌銈屻仸銇勩伨銇欍傘仢銈屻仦銈岃浜嬨仈銇ㄣ伀銈点儩銉笺儓銇曘倢銇︺亜銇俱仚銇屻併儣銉┿偘銈ゃ兂銇屻亾銇鑳姐倰浣裤亪銈嬨倛銇嗐伀鏂般仐銇勩儣銉┿偘銈ゃ兂API銈傘亗銈娿伨銇欍傘儓銉┿儍銈儛銉冦偗銈勩償銉炽偘銉愩儍銈伅config.php銇ф鑳姐倰鎶戞銇欍倠銇撱仺銇屽彲鑳姐仹銇欍
    • -
    • 銈点偆銉堛伄銈€儍銉椼儑銉笺儓銈掗氱煡銇欍倠銇熴倎銇併偊銈с儢銉偘銉汇儑銈c儸銈儓銉兓銈点兗銉撱偣blo.gs銇仼)銇洿鏂般償銉炽偘銈掗併倠姗熻兘銇岃拷鍔犮仌銈屻伨銇椼仧銆傘儓銉┿儍銈儛銉冦偗銈勩償銉炽偘銉愩儍銈伀銈堛仯銇︺併亾銇鑳姐伅瑷樹簨銇斻仺銇偟銉濄兗銉堛仌銈屻仸銇勩伨銇欍亴銆併儣銉┿偘銈ゃ兂銈傘儣銉┿偘銈ゃ兂AIP绲岀敱銇с亾銇鑳姐倰鍒╃敤銇欍倠銇撱仺銇屻仹銇嶃伨銇欍
    • -
    • Geeklog銇瑾伩鍙栥倞銇ㄦ浉銇嶈炯銇銇屻仹銇嶃倠銈堛亞銇佹柊銇椼亜銉曘偅銉笺儔銉汇儠銉兗銉犮儻銉笺偗銇屻丷SS1.0銇犮亼銇с伅銇亸銆佽鏁般伄銉曘偐銉笺優銉冦儓(鐝惧湪銇疪SS銆丷DF銆丄tom)銇с儠銈c兗銉夈仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • 绠$悊鑰呫伀銈堛倠銉︺兗銈躲兗鐘舵厠銇鐞嗘鑳借拷鍔犮傘偄銈偊銉炽儓銇仠姝€兓銈€偗銉嗐偅銉欍兗銈枫儳銉炽倰鍚個銆
    • -
    • Blogger.com銈凩iveJournal.com銇仼銇倛銇嗐仾鍒ャ伄銈点兗銉撱偣銇偄銈偊銉炽儓銈掓寔銇c仸銇勩倠鍒╃敤鑰呫亴銆併偟銈ゃ儓銇洿鎺ョ櫥閷层仐銇亸銇︺倐鑷嫊鐨勩伀銉偘銈ゃ兂銇с亶銈嬫柊銇椼亜閬犻殧瑾嶈銈枫偣銉嗐儬銇岃拷鍔犮仌銈屻伨銇椼仧(銉儮銉笺儓銈€偒銈︺兂銉堛伅銆侀氬父銈€偒銈︺兂銉堛仺銇椼仸绂佹銇欍倠銇撱仺銈傘仹銇嶃伨銇欍)銆
    • -
    • 绠$悊閮ㄥ垎銇屾敼瑷傘仌銈屻併倛銈婅銈勩仚銇忓垎椤炪仌銈屻仧銉偣銉堛仺銇仯銇︺亜銇俱仚銆“銈炽優銉炽儔銇ㄣ偝銉炽儓銉兗銉” (moderation.php) 銈傛柊銇熴仾銈€偆銈炽兂銇с仹銇嶃佺鐞嗛儴鍒嗐仈銇ㄣ伀銈€偆銈炽兂銇屻亗銈娿伨銇欍傘仌銈夈伀銆佺鐞嗐儢銉儍銈併偝銉炪兂銉夈併偝銉炽儓銉兗銉伅銈€儷銉曘偂銉欍儍銉堥爢銇甫銇规浛銇堛仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • FCKeditor(WYSIWYG銈ㄣ儑銈c偪銉)銇屼粯銇勩仸銇勩伨銇欍備綔鍕曘仌銇涖倠銇伅銆乧onfig.php銇 $_CONF['advanced_editor'] = true 銇ō瀹氥仐銇︺亸銇犮仌銇勩
    • -
    • 妞滅储銇с伅銆佸ぇ銇嶃仾銉囥兗銈裤儥銉笺偣銈掓绱€仚銈嬮殯銇偪銈ゃ儬銈€偊銉堛倰闃层亹銇熴倎銆併儦銉笺偢銇斻仺銇绱㈢祼鏋溿倰鎸囧畾銇椼仧浠舵暟銇犮亼琛ㄧず銇欍倠銈堛亞銇仾銈娿伨銇椼仧銆
      娉ㄦ剰:銆屻儦銉笺偢銆嶆绱€倰銈点儩銉笺儓銇欍倠銇伅銆併儣銉┿偘銈ゃ兂銈掋偄銉冦儣銉囥兗銉堛仚銈嬪繀瑕併亴銇傘倞銇俱仚銆傘偄銉冦儣銉囥兗銉堛倰銇椼仾銇勩仺銆丟eeklog銇儣銉┿偘銈ゃ兂妞滅储銉氥兗銈搞伄绲愭灉銈掓銇椼亸琛ㄧず銇椼伨銇涖倱銆傘儣銉┿偘銈ゃ兂銇屻偄銉冦儣銉囥兗銉堛仌銈屻仸銇勩仾銇勩仺銆佸叏銉囥兗銈裤儥銉笺偣銈掓绱€仚銈嬨亾銇ㄣ伀銇倞銇俱仚銇屻丟eeklog銇従鍦ㄣ伄妞滅储绲愭灉銇儦銉笺偢銇椼亱琛ㄧず銇椼仾銇勩亾銇ㄣ伀銇倞銇俱仚銆
    • -
    • 銆岃浜嬩竴瑕с嶃亴灏庡叆銇曘倢銆侀亷鍘汇伄瑷樹簨銈掑勾銇斻仺鏈堛仈銇ㄣ伀涓︺伖鏇裤亪銇︺佽銈勩仚銇忚〃绀恒仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • 鏂般仧銇偑銉栥偢銈с偗銉(瑷樹簨銆佽┍椤屻併儢銉儍銈仾銇)銇儑銉曘偐銉儓銉戙兗銉熴儍銈枫儳銉炽倰銆乧onfig.php銇цō瀹氥仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • +
    • Geeklog銇従鍦ㄥ叕寮忋伀銇 register_globals = off 銇у嫊銇勩仸銇勩伨銇欍亴銆併伨銇犮亜銇忋仱銇嬨伄銉椼儵銈般偆銉炽仹銇register_globals = on + 銇仐銇亸銇︺伅銇勩亼銇亜銇撱仺銇敞鎰忋仐銇︺亸銇犮仌銇勩 +
    • +
    • 銉堛儵銉冦偗銉愩儍銈銉斻兂銈般儛銉冦偗銇偝銉°兂銉堛伄閫佸彈淇″悜銇戙伄銈点儩銉笺儓銇岃拷鍔犮仌銈屻仸銇勩伨銇欍傘仢銈屻仦銈岃浜嬨仈銇ㄣ伀銈点儩銉笺儓銇曘倢銇︺亜銇俱仚銇屻併儣銉┿偘銈ゃ兂銇屻亾銇鑳姐倰浣裤亪銈嬨倛銇嗐伀鏂般仐銇勩儣銉┿偘銈ゃ兂API銈傘亗銈娿伨銇欍傘儓銉┿儍銈儛銉冦偗銈勩償銉炽偘銉愩儍銈伅config.php銇ф鑳姐倰鎶戞銇欍倠銇撱仺銇屽彲鑳姐仹銇欍 +
    • +
    • 銈点偆銉堛伄銈€儍銉椼儑銉笺儓銈掗氱煡銇欍倠銇熴倎銇併偊銈с儢銉偘銉汇儑銈c儸銈儓銉兓銈点兗銉撱偣blo.gs銇仼)銇洿鏂般償銉炽偘銈掗併倠姗熻兘銇岃拷鍔犮仌銈屻伨銇椼仧銆傘儓銉┿儍銈儛銉冦偗銈勩償銉炽偘銉愩儍銈伀銈堛仯銇︺併亾銇鑳姐伅瑷樹簨銇斻仺銇偟銉濄兗銉堛仌銈屻仸銇勩伨銇欍亴銆併儣銉┿偘銈ゃ兂銈傘儣銉┿偘銈ゃ兂AIP绲岀敱銇с亾銇鑳姐倰鍒╃敤銇欍倠銇撱仺銇屻仹銇嶃伨銇欍 +
    • +
    • Geeklog銇瑾伩鍙栥倞銇ㄦ浉銇嶈炯銇銇屻仹銇嶃倠銈堛亞銇佹柊銇椼亜銉曘偅銉笺儔銉汇儠銉兗銉犮儻銉笺偗銇屻丷SS1.0銇犮亼銇с伅銇亸銆佽鏁般伄銉曘偐銉笺優銉冦儓(鐝惧湪銇疪SS銆丷DF銆丄tom)銇с儠銈c兗銉夈仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆 +
    • +
    • 绠$悊鑰呫伀銈堛倠銉︺兗銈躲兗鐘舵厠銇鐞嗘鑳借拷鍔犮傘偄銈偊銉炽儓銇仠姝€兓銈€偗銉嗐偅銉欍兗銈枫儳銉炽倰鍚個銆
    • +
    • + Blogger.com銈凩iveJournal.com銇仼銇倛銇嗐仾鍒ャ伄銈点兗銉撱偣銇偄銈偊銉炽儓銈掓寔銇c仸銇勩倠鍒╃敤鑰呫亴銆併偟銈ゃ儓銇洿鎺ョ櫥閷层仐銇亸銇︺倐鑷嫊鐨勩伀銉偘銈ゃ兂銇с亶銈嬫柊銇椼亜閬犻殧瑾嶈銈枫偣銉嗐儬銇岃拷鍔犮仌銈屻伨銇椼仧(銉儮銉笺儓銈€偒銈︺兂銉堛伅銆侀氬父銈€偒銈︺兂銉堛仺銇椼仸绂佹銇欍倠銇撱仺銈傘仹銇嶃伨銇欍)銆 +
    • +
    • 绠$悊閮ㄥ垎銇屾敼瑷傘仌銈屻併倛銈婅銈勩仚銇忓垎椤炪仌銈屻仧銉偣銉堛仺銇仯銇︺亜銇俱仚銆“銈炽優銉炽儔銇ㄣ偝銉炽儓銉兗銉” (moderation.php) + 銈傛柊銇熴仾銈€偆銈炽兂銇с仹銇嶃佺鐞嗛儴鍒嗐仈銇ㄣ伀銈€偆銈炽兂銇屻亗銈娿伨銇欍傘仌銈夈伀銆佺鐞嗐儢銉儍銈併偝銉炪兂銉夈併偝銉炽儓銉兗銉伅銈€儷銉曘偂銉欍儍銉堥爢銇甫銇规浛銇堛仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆 +
    • +
    • FCKeditor(WYSIWYG銈ㄣ儑銈c偪銉)銇屼粯銇勩仸銇勩伨銇欍備綔鍕曘仌銇涖倠銇伅銆乧onfig.php銇 $_CONF['advanced_editor'] = true 銇ō瀹氥仐銇︺亸銇犮仌銇勩
    • +
    • 妞滅储銇с伅銆佸ぇ銇嶃仾銉囥兗銈裤儥銉笺偣銈掓绱€仚銈嬮殯銇偪銈ゃ儬銈€偊銉堛倰闃层亹銇熴倎銆併儦銉笺偢銇斻仺銇绱㈢祼鏋溿倰鎸囧畾銇椼仧浠舵暟銇犮亼琛ㄧず銇欍倠銈堛亞銇仾銈娿伨銇椼仧銆
      娉ㄦ剰:銆屻儦銉笺偢銆嶆绱€倰銈点儩銉笺儓銇欍倠銇伅銆併儣銉┿偘銈ゃ兂銈掋偄銉冦儣銉囥兗銉堛仚銈嬪繀瑕併亴銇傘倞銇俱仚銆傘偄銉冦儣銉囥兗銉堛倰銇椼仾銇勩仺銆丟eeklog銇儣銉┿偘銈ゃ兂妞滅储銉氥兗銈搞伄绲愭灉銈掓銇椼亸琛ㄧず銇椼伨銇涖倱銆傘儣銉┿偘銈ゃ兂銇屻偄銉冦儣銉囥兗銉堛仌銈屻仸銇勩仾銇勩仺銆佸叏銉囥兗銈裤儥銉笺偣銈掓绱€仚銈嬨亾銇ㄣ伀銇倞銇俱仚銇屻丟eeklog銇従鍦ㄣ伄妞滅储绲愭灉銇儦銉笺偢銇椼亱琛ㄧず銇椼仾銇勩亾銇ㄣ伀銇倞銇俱仚銆 +
    • +
    • 銆岃浜嬩竴瑕с嶃亴灏庡叆銇曘倢銆侀亷鍘汇伄瑷樹簨銈掑勾銇斻仺鏈堛仈銇ㄣ伀涓︺伖鏇裤亪銇︺佽銈勩仚銇忚〃绀恒仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • +
    • 鏂般仧銇偑銉栥偢銈с偗銉(瑷樹簨銆佽┍椤屻併儢銉儍銈仾銇)銇儑銉曘偐銉儓銉戙兗銉熴儍銈枫儳銉炽倰銆乧onfig.php銇цō瀹氥仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆

    浜掓彌鎬

      -
    • 澶夋洿銇欍倠銇伅銆丟eeklog1.4.0銇у嫊銇忋倛銇嗐伀銉嗐兗銉炪倰銈€儍銉椼儑銉笺儓銇椼仾銇忋仸銇亜銇戙伨銇涖倱銆傝┏绱般伅銉嗐兗銉炲鏇淬儶銈广儓銈掋仈鍙傜収銇忋仩銇曘亜銆
    • -
    • 銈炽儭銉炽儓鐢ㄣ伄銉椼儵銈般偆銉矨PI銇屾敼澶夈仌銈屻伨銇椼仧銆傘偝銉°兂銉堛倰鍒╃敤銇椼仸銇勩倠銉椼儵銈般偆銉炽伅銆丟eeklog1.4.0銇у嫊銇忋倛銇嗐伀銈€儍銉椼儑銉笺儓銇欍倠蹇呰銇屻亗銈娿伨銇欍
    • +
    • 澶夋洿銇欍倠銇伅銆丟eeklog1.4.0銇у嫊銇忋倛銇嗐伀銉嗐兗銉炪倰銈€儍銉椼儑銉笺儓銇椼仾銇忋仸銇亜銇戙伨銇涖倱銆傝┏绱般伅銉嗐兗銉炲鏇淬儶銈广儓銈掋仈鍙傜収銇忋仩銇曘亜銆
    • +
    • 銈炽儭銉炽儓鐢ㄣ伄銉椼儵銈般偆銉矨PI銇屾敼澶夈仌銈屻伨銇椼仧銆傘偝銉°兂銉堛倰鍒╃敤銇椼仸銇勩倠銉椼儵銈般偆銉炽伅銆丟eeklog1.4.0銇у嫊銇忋倛銇嗐伀銈€儍銉椼儑銉笺儓銇欍倠蹇呰銇屻亗銈娿伨銇欍

    Geeklog 1.3.11sr2

    -

    銇撱伄銉儶銉笺偣銇丟eeklog1.3.12鐢ㄣ伀鐙嚜銇枊鐧恒仌銈屻仧銈汇偔銉ャ儶銉嗐偅寮峰寲銇ㄣ併偣銉戙儬闃插尽銈掓彁渚涖仐銇︺亜銇俱仚銆傘伨銇熴併儛銈颁慨姝c亴閬╁垏銇粫浜嬮噺銇с佸皯鏁般伄銉愩偘銈掑嚘鐞嗐仐銇︺亜銇俱仚銆(銇濄伄浠栥伄銉愩偘淇銇1.3.12銇儶銉兗銈广倰銇婂緟銇°亸銇犮仌銇勩)

    +

    + 銇撱伄銉儶銉笺偣銇丟eeklog1.3.12鐢ㄣ伀鐙嚜銇枊鐧恒仌銈屻仧銈汇偔銉ャ儶銉嗐偅寮峰寲銇ㄣ併偣銉戙儬闃插尽銈掓彁渚涖仐銇︺亜銇俱仚銆傘伨銇熴併儛銈颁慨姝c亴閬╁垏銇粫浜嬮噺銇с佸皯鏁般伄銉愩偘銈掑嚘鐞嗐仐銇︺亜銇俱仚銆(銇濄伄浠栥伄銉愩偘淇銇1.3.12銇儶銉兗銈广倰銇婂緟銇°亸銇犮仌銇勩)

    銈汇偔銉ャ儶銉嗐偅銇ㄣ偣銉戙儬闃插尽

      -
    • 銉偘銈ゃ兂銇│琛屻伀銇熷害鍒堕檺銇屻亗銈娿併儑銉曘偐銉儓銇5鍒嗛枔銇3鍥炪伨銇с伄瑭﹁銇с仚銆(config.php銇login)銇цō瀹氬彲鑳姐
    • -
    • COM_mail銇с伅E銉°兗銉伄To:銆丗rom: Subject:銇儠銈c兗銉儔銇惈銇俱倢銈嬫敼琛屻偝銉笺儔銈掗櫎鍘汇仐銇俱仚銆
    • -
    • 鏂般仐銇勩儲銉笺偠銉笺偄銈偊銉炽儓銇屼綔鎴愩仌銈屻併儲銉笺偠銉笺伀銈堛倠鎶曠ǹ鎵胯獚銇宑onfig.php銇цū鍙仌銈屻倠銇ㄣ佷竾涓銈€偒銈︺兂銉堛伄浣滄垚銇岄斾腑銇уけ鏁椼仐銇熷牬鍚堛伀銇佹柊銇椼亜銈€偒銈︺兂銉堛亴閬╁垏銇壙瑾嶅緟銇°伀銇倠銇撱仺銈掍繚瑷笺仐銇︺亜銇俱仚銆
    • -
    • 銉°兗銉亴銈广儜銉犮仺纰鸿獚銇曘倢銈嬨仺銆侀熷害鍒堕檺銇岀敓銇樸伨銇欍 (渚嬨亪銇般佹柊銇熴伀鎶曠ǹ銈掕銇嗗墠銇侀佷俊鑰呫伅閫熷害鍒堕檺銇岀祩浜嗐仺銇倠銇倰寰呫仱蹇呰銇屻亗銈娿伨銇欍)
    • -
    • 銈广儜銉犮儭銉笺儷銇403“绂佹” HTTP绲愭灉銈炽兗銉夈倰鍙栧緱銇椼伨銇欍
    • -
    • 銈广儜銉犮儊銈с儍銈伅銆併偝銉°兂銉堛佽浜嬨併儶銉炽偗銆併偆銉欍兂銉堛伄鎶曠ǹ銈勩屽弸銇犮仭銇浜嬨倰閫佷俊銇欍倠銆嶃偑銉椼偡銉с兂銇ч佷俊銇曘倢銇熴儭銉冦偦銉笺偢銈勩併儲銉笺偠銉笺儣銉儠銈c兗銉伄銈炽兂銉嗐兂銉勩伀瀵俱仐銇﹁銇勩伨銇欍
    • -
    • Spam-X銉椼儵銈般偆銉1.0.2銇屽惈銇俱倢銇︺亜銇俱仚銆
    • +
    • 銉偘銈ゃ兂銇│琛屻伀銇熷害鍒堕檺銇屻亗銈娿併儑銉曘偐銉儓銇5鍒嗛枔銇3鍥炪伨銇с伄瑭﹁銇с仚銆(config.php銇login)銇цō瀹氬彲鑳姐
    • +
    • COM_mail銇с伅E銉°兗銉伄To:銆丗rom: Subject:銇儠銈c兗銉儔銇惈銇俱倢銈嬫敼琛屻偝銉笺儔銈掗櫎鍘汇仐銇俱仚銆
    • +
    • 鏂般仐銇勩儲銉笺偠銉笺偄銈偊銉炽儓銇屼綔鎴愩仌銈屻併儲銉笺偠銉笺伀銈堛倠鎶曠ǹ鎵胯獚銇宑onfig.php銇цū鍙仌銈屻倠銇ㄣ佷竾涓銈€偒銈︺兂銉堛伄浣滄垚銇岄斾腑銇уけ鏁椼仐銇熷牬鍚堛伀銇佹柊銇椼亜銈€偒銈︺兂銉堛亴閬╁垏銇壙瑾嶅緟銇°伀銇倠銇撱仺銈掍繚瑷笺仐銇︺亜銇俱仚銆
    • +
    • 銉°兗銉亴銈广儜銉犮仺纰鸿獚銇曘倢銈嬨仺銆侀熷害鍒堕檺銇岀敓銇樸伨銇欍(渚嬨亪銇般佹柊銇熴伀鎶曠ǹ銈掕銇嗗墠銇侀佷俊鑰呫伅閫熷害鍒堕檺銇岀祩浜嗐仺銇倠銇倰寰呫仱蹇呰銇屻亗銈娿伨銇欍)
    • +
    • 銈广儜銉犮儭銉笺儷銇403“绂佹” HTTP绲愭灉銈炽兗銉夈倰鍙栧緱銇椼伨銇欍
    • +
    • 銈广儜銉犮儊銈с儍銈伅銆併偝銉°兂銉堛佽浜嬨併儶銉炽偗銆併偆銉欍兂銉堛伄鎶曠ǹ銈勩屽弸銇犮仭銇浜嬨倰閫佷俊銇欍倠銆嶃偑銉椼偡銉с兂銇ч佷俊銇曘倢銇熴儭銉冦偦銉笺偢銈勩併儲銉笺偠銉笺儣銉儠銈c兗銉伄銈炽兂銉嗐兂銉勩伀瀵俱仐銇﹁銇勩伨銇欍
    • +
    • Spam-X銉椼儵銈般偆銉1.0.2銇屽惈銇俱倢銇︺亜銇俱仚銆
    -

    鏈杩戙(Spam-X銇т娇鐢ㄣ仌銈屻仸銇勩倠)MT-Blacklist銇涓銇曘倢銇熴亾銇ㄣ伀銇旀敞鎰忋亸銇犮仌銇勩傛湰銉儶銉笺偣銇惈銇俱倢銈婼pam-X銉椼儵銈般偆銉炽伅銆乬eeklog.net銇嬨倝銉栥儵銉冦偗銉偣銉堛伄鏈鏂般儛銉笺偢銉с兂銈掑彇寰椼仚銈嬨倛銇嗐伀瑷畾銇曘倢銇︺亜銇俱仚銇屻併偄銉冦儣銉囥兗銉堛伅銇曘倢銇俱仜銈撱

    +

    鏈杩戙(Spam-X銇т娇鐢ㄣ仌銈屻仸銇勩倠)MT-Blacklist銇涓銇曘倢銇熴亾銇ㄣ伀銇旀敞鎰忋亸銇犮仌銇勩傛湰銉儶銉笺偣銇惈銇俱倢銈婼pam-X銉椼儵銈般偆銉炽伅銆乬eeklog.net銇嬨倝銉栥儵銉冦偗銉偣銉堛伄鏈鏂般儛銉笺偢銉с兂銈掑彇寰椼仚銈嬨倛銇嗐伀瑷畾銇曘倢銇︺亜銇俱仚銇屻併偄銉冦儣銉囥兗銉堛伅銇曘倢銇俱仜銈撱 +

    銉愩偘淇

      -
    • 瑷樹簨銉氥兗銈搞倰闁茶Η銇欍倠鍫村悎銆丳HP5.0.5浠ラ檷銇ч併倝銈屻倠銈ㄣ儵銉笺儭銉冦偦銉笺偢銈掍慨姝c仐銇俱仚(bug #483)銆
    • -
    • 绌虹櫧銈掗櫎銇嶃併偄銉儠銈°儥銉冦儓銇с仾銇勬枃瀛椼倰鍚倱銇с亜銈嬨仺銇嶃伅銆併仚銇愩伀E銉°兗銉偄銉夈儸銈广伄鍚嶅墠銈掑紩銇嶅嚭銇椼伨銇(bug #368)銆傚悕鍓嶃伀鐗瑰垾銇枃瀛椼亴銇傘倠銉︺兗銈躲兗銇獷銉°兗銉倰銇欍倠銇ㄣ亶銇焦绔嬨仭銇俱仚銆
    • -
    • 鏃ユ湰瑾炪倓銈裤偆瑾炪仹銇儓銉┿儢銉倰淇銇欍倠銉愩兗銈搞儳銉0.2.2銇乲ses銈儵銈广倰绲勩伩杈笺倱銇с偄銉冦儣銈般儸銉笺儔銇曘倢銇︺亜銇俱仚銆(bugs #94 and #119)
    • -
    • [staticpage:] 鑷嫊銈裤偘銈掍娇鐢ㄣ仚銈嬫檪銇甋QL銈ㄣ儵銉笺亴淇銇曘倢銇︺亜銇俱仚(bug #373)銆
    • +
    • 瑷樹簨銉氥兗銈搞倰闁茶Η銇欍倠鍫村悎銆丳HP5.0.5浠ラ檷銇ч併倝銈屻倠銈ㄣ儵銉笺儭銉冦偦銉笺偢銈掍慨姝c仐銇俱仚(bug #483)銆
    • +
    • 绌虹櫧銈掗櫎銇嶃併偄銉儠銈°儥銉冦儓銇с仾銇勬枃瀛椼倰鍚倱銇с亜銈嬨仺銇嶃伅銆併仚銇愩伀E銉°兗銉偄銉夈儸銈广伄鍚嶅墠銈掑紩銇嶅嚭銇椼伨銇(bug #368)銆傚悕鍓嶃伀鐗瑰垾銇枃瀛椼亴銇傘倠銉︺兗銈躲兗銇獷銉°兗銉倰銇欍倠銇ㄣ亶銇焦绔嬨仭銇俱仚銆
    • +
    • 鏃ユ湰瑾炪倓銈裤偆瑾炪仹銇儓銉┿儢銉倰淇銇欍倠銉愩兗銈搞儳銉0.2.2銇乲ses銈儵銈广倰绲勩伩杈笺倱銇с偄銉冦儣銈般儸銉笺儔銇曘倢銇︺亜銇俱仚銆(bugs #94 and #119)
    • +
    • [staticpage:] 鑷嫊銈裤偘銈掍娇鐢ㄣ仚銈嬫檪銇甋QL銈ㄣ儵銉笺亴淇銇曘倢銇︺亜銇俱仚(bug #373)銆

    銉愩偘淇銇叏銉偣銉堛伅銆丆hangelog銈掑弬鐓с亸銇犮仌銇勩

    鏀硅壇鐐

      -
    • custom_usercheck闁㈡暟 (椤у鐧婚尣銈炽兗銉)銇偟銉濄兗銉堛亴杩藉姞銇曘倢銇︺亜銇俱仚銆傝┏绱般伅lib-custom.php銈掋仈鍙傜収銇忋仩銇曘亜銆
    • -
    • index.php銇嚜鍕曘偄銉笺偒銈ゃ儢銈儣銈枫儳銉炽伄鎿嶄綔銇屾敼鑹仌銈屻併儦銉笺偢銇儹銉笺儔鏅傞枔銇屽皯銇楁敼鍠勩仌銈屻伨銇椼仧銆
    • -
    • 銈€儍銉椼儑銉笺儓銇曘倢銇熸柊銇椼亜瑷瑾炪儠銈°偆銉亴銇勩亸銇ゃ亱鍚伨銈屻仸銇勩伨銇欍
    • -
    • 銈€儍銉椼儑銉笺儓銇曘倢銇烶EAR銈儵銈广亴鍚伨銈屻仸銇勩伨銇欍
    • +
    • custom_usercheck闁㈡暟 (椤у鐧婚尣銈炽兗銉)銇偟銉濄兗銉堛亴杩藉姞銇曘倢銇︺亜銇俱仚銆傝┏绱般伅lib-custom.php銈掋仈鍙傜収銇忋仩銇曘亜銆
    • +
    • index.php銇嚜鍕曘偄銉笺偒銈ゃ儢銈儣銈枫儳銉炽伄鎿嶄綔銇屾敼鑹仌銈屻併儦銉笺偢銇儹銉笺儔鏅傞枔銇屽皯銇楁敼鍠勩仌銈屻伨銇椼仧銆
    • +
    • 銈€儍銉椼儑銉笺儓銇曘倢銇熸柊銇椼亜瑷瑾炪儠銈°偆銉亴銇勩亸銇ゃ亱鍚伨銈屻仸銇勩伨銇欍
    • +
    • 銈€儍銉椼儑銉笺儓銇曘倢銇烶EAR銈儵銈广亴鍚伨銈屻仸銇勩伨銇欍

    Geeklog 1.3.11sr1

    鏈儶銉兗銈广伅銆佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇俱仐銇熴

      -
    • Stefan Esser 銇屻併儲銉笺偠銉笺伄銉戙偣銉兗銉夈兓銉忋儍銈枫儱銇倛銇嗐仾銉︺兗銈躲兗銉囥兗銈裤倰銆併亗銈嬬姸娉併仹鍙栥倞鍑恒仚銈堛亞銇枊鐧恒仹銇嶃倠SQL銈ゃ兂銈搞偋銈偡銉с兂銈掔櫤瑕嬨仐銇俱仐銇熴
    • +
    • Stefan Esser 銇屻併儲銉笺偠銉笺伄銉戙偣銉兗銉夈兓銉忋儍銈枫儱銇倛銇嗐仾銉︺兗銈躲兗銉囥兗銈裤倰銆併亗銈嬬姸娉併仹鍙栥倞鍑恒仚銈堛亞銇枊鐧恒仹銇嶃倠SQL銈ゃ兂銈搞偋銈偡銉с兂銈掔櫤瑕嬨仐銇俱仐銇熴

    Geeklog1.3.11

    -

    Geeklog 1.3.11 銇丟eeklog1.3.10銈掍笂鍥炪倠銉愩偘淇銇ㄣ偦銈儱銉儐銈c儶銉兗銈广仹銇傘倞銆1.3.10銇浛銈忋倠銈傘伄銇с仚銆1銇ゃ伄銉愩偘淇銇1銇ゃ伄銉囥兗銈裤儥銉笺偣銇鏇淬倰浼淬亞銇仹銆併儛銉笺偢銉с兂鐣彿銇鏇淬亴蹇呰銇ㄣ仾銈娿伨銇椼仧銆

    +

    Geeklog 1.3.11 + 銇丟eeklog1.3.10銈掍笂鍥炪倠銉愩偘淇銇ㄣ偦銈儱銉儐銈c儶銉兗銈广仹銇傘倞銆1.3.10銇浛銈忋倠銈傘伄銇с仚銆1銇ゃ伄銉愩偘淇銇1銇ゃ伄銉囥兗銈裤儥銉笺偣銇鏇淬倰浼淬亞銇仹銆併儛銉笺偢銉с兂鐣彿銇鏇淬亴蹇呰銇ㄣ仾銈娿伨銇椼仧銆

    銈汇偔銉ャ儶銉嗐偅鍟忛

      -
    • 銈层偣銉堛儲銉笺偠銉笺伀銈堛倠鎶曠ǹ銇宑onfig.php銇х劇鍔广伀銇曘倢銇︺亜銇︺倐銆併偛銈广儓銉︺兗銈躲兗銇岃浜嬨倰鎶曠ǹ銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧銆 (Barry Wong銇牨鍛)
      銇椼亱銇椼乧onfig.php銇х劇鍔广伀銇椼仸銇勩仾銇勯檺銈娿併亾銈屻倝銇浜嬨伅鎵胯獚寰呫仭銇姸鎱嬨伀銇仯銇︺亜銇俱仐銇熴
    • -
    • 銉兂銈倓銈ゃ儥銉炽儓鎶曠ǹ銇儜銉┿儭銉笺偪銉笺亴銉曘偅銉偪銉兂銈般仌銈屻仸銇娿倝銇氥丼QL銈ゃ兂銈搞偋銈偡銉с兂銇彲鑳芥с亴銇傘倞銇俱仐銇熴
    • -
    • 闁㈤c儢銉儍銈敤銇儶銉炽偗銇屻併儠銈c儷銈裤儶銉炽偘銇曘倢銇︺亜銇亜瑷樹簨銉嗐偔銈广儓銇嬨倝浣滄垚銇曘倢銆併偗銉偣銈点偆銉堛兓銈广偗銉儣銉嗐偅銉炽偘鏀绘拑銇彲鑳芥с亴銇傘倞銇俱仐銇熴(Vincent Furia銇牨鍛)
    • +
    • 銈层偣銉堛儲銉笺偠銉笺伀銈堛倠鎶曠ǹ銇宑onfig.php銇х劇鍔广伀銇曘倢銇︺亜銇︺倐銆併偛銈广儓銉︺兗銈躲兗銇岃浜嬨倰鎶曠ǹ銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧銆 (Barry Wong銇牨鍛)
      銇椼亱銇椼乧onfig.php銇х劇鍔广伀銇椼仸銇勩仾銇勯檺銈娿併亾銈屻倝銇浜嬨伅鎵胯獚寰呫仭銇姸鎱嬨伀銇仯銇︺亜銇俱仐銇熴 +
    • +
    • 銉兂銈倓銈ゃ儥銉炽儓鎶曠ǹ銇儜銉┿儭銉笺偪銉笺亴銉曘偅銉偪銉兂銈般仌銈屻仸銇娿倝銇氥丼QL銈ゃ兂銈搞偋銈偡銉с兂銇彲鑳芥с亴銇傘倞銇俱仐銇熴
    • +
    • 闁㈤c儢銉儍銈敤銇儶銉炽偗銇屻併儠銈c儷銈裤儶銉炽偘銇曘倢銇︺亜銇亜瑷樹簨銉嗐偔銈广儓銇嬨倝浣滄垚銇曘倢銆併偗銉偣銈点偆銉堛兓銈广偗銉儣銉嗐偅銉炽偘鏀绘拑銇彲鑳芥с亴銇傘倞銇俱仐銇熴(Vincent Furia銇牨鍛)

    銉愩偘淇

      -
    • gl_comments銉嗐兗銉栥儷銇‘sid’銉曘偅銉笺儷銉夈伄闀枫仌銇屼慨姝c仌銈屻伨銇椼仧銆20瀛椾互涓娿伄瑷樹簨ID銈掍娇鐢ㄣ仚銈嬨亾銇ㄣ仹銆併偝銉°兂銉堛儭銉笺儷銇岃浜嬨仺鍙栥倞閬曘亪銈夈倢銈嬨亾銇ㄣ倰闃层亷銇俱仚銆
    • -
    • PHP 4.1.x (銈€儍銉椼儑銉笺儓銇曘倢銇 PEAR銉戙儍銈便兗銈搞倰鍚個)銇ㄣ伄浜掓彌鎬с倰淇濊銇椼伨銇欍
    • -
    • 銇欍伆銈勩亸璧峰嫊銇欍倠銈€兗銈偆銉栥偑銉椼偡銉с兂銇慨姝c仐銇︺亜銇俱仚(bug #345)銆
    • -
    • 鍏ㄨ┍椤屻倰鍓婇櫎銇欍倠鍫村悎銆併偝銉°兂銉堛倓瑷樹簨鐢诲儚銈掔殑纰恒伀鍓婇櫎銇椼伨銇(bug #339)銆
    • -
    • 銈€兂銈便兗銉堛倰鍓婇櫎銇欍倠鍫村悎銆併偝銉°兂銉堛倰鍓婇櫎銇椼伨銇欍
    • -
    • 銈儸銉炽儉銉煎唴銇亜銇忋仱銇嬨伄銉愩偘銈掍慨姝c仐銆併偟銈ゃ儓銈儸銉炽儉銉笺仺銉戙兗銈姐儕銉偒銉兂銉銉间浮鏂广倰绶忓悎鐨勩伀鍑︾悊銇欍倠銈堛亞銇敼鑹仐銇俱仚(bug #268, #336, #338,銇濄伄浠)銆
    • -
    • 瑷樹簨鍐呫仹銇 "More by author" 銇 "More from topic"銇儶銉炽偗銈掍慨姝c仐銇俱仚銆
    • -
    • 銇濄伄浠栥亜銈嶃亜銈嶃仾淇銇屻亗銈娿伨銇欍傝┏绱般伅docs/history銈掋仈鍙傜収銇忋仩銇曘亜銆
    • -
    -

    Geeklog1.3.10銇儲銉笺偠銉笺伄鏂广伀銇1.3.11銇搞仹銇嶃倠銇犮亼閫熴倓銇嬨伀銈€儍銉椼偘銉兗銉夈仚銈嬨亾銇ㄣ倰銇婂嫥銈併仐銇俱仚銆傘儐銉笺優銈勮█瑾炪儠銈°偆銉亗銈嬨亜銇1.3.10浠ヤ笂銇甤onfig.php銇с伄澶夋洿銇屻亗銈娿伨銇涖倱銇仹銆併偄銉冦儣銈般儸銉笺儔銇瘮杓冪殑绨″崢銇с仚銆

    +
  • gl_comments銉嗐兗銉栥儷銇‘sid’銉曘偅銉笺儷銉夈伄闀枫仌銇屼慨姝c仌銈屻伨銇椼仧銆20瀛椾互涓娿伄瑷樹簨ID銈掍娇鐢ㄣ仚銈嬨亾銇ㄣ仹銆併偝銉°兂銉堛儭銉笺儷銇岃浜嬨仺鍙栥倞閬曘亪銈夈倢銈嬨亾銇ㄣ倰闃层亷銇俱仚銆
  • +
  • PHP 4.1.x (銈€儍銉椼儑銉笺儓銇曘倢銇 PEAR銉戙儍銈便兗銈搞倰鍚個)銇ㄣ伄浜掓彌鎬с倰淇濊銇椼伨銇欍
  • +
  • 銇欍伆銈勩亸璧峰嫊銇欍倠銈€兗銈偆銉栥偑銉椼偡銉с兂銇慨姝c仐銇︺亜銇俱仚(bug #345)銆
  • +
  • 鍏ㄨ┍椤屻倰鍓婇櫎銇欍倠鍫村悎銆併偝銉°兂銉堛倓瑷樹簨鐢诲儚銈掔殑纰恒伀鍓婇櫎銇椼伨銇(bug #339)銆
  • +
  • 銈€兂銈便兗銉堛倰鍓婇櫎銇欍倠鍫村悎銆併偝銉°兂銉堛倰鍓婇櫎銇椼伨銇欍
  • +
  • 銈儸銉炽儉銉煎唴銇亜銇忋仱銇嬨伄銉愩偘銈掍慨姝c仐銆併偟銈ゃ儓銈儸銉炽儉銉笺仺銉戙兗銈姐儕銉偒銉兂銉銉间浮鏂广倰绶忓悎鐨勩伀鍑︾悊銇欍倠銈堛亞銇敼鑹仐銇俱仚(bug #268, #336, #338,銇濄伄浠)銆
  • +
  • 瑷樹簨鍐呫仹銇 "More by author" 銇 "More from topic"銇儶銉炽偗銈掍慨姝c仐銇俱仚銆
  • +
  • 銇濄伄浠栥亜銈嶃亜銈嶃仾淇銇屻亗銈娿伨銇欍傝┏绱般伅docs/history銈掋仈鍙傜収銇忋仩銇曘亜銆
  • + +

    + Geeklog1.3.10銇儲銉笺偠銉笺伄鏂广伀銇1.3.11銇搞仹銇嶃倠銇犮亼閫熴倓銇嬨伀銈€儍銉椼偘銉兗銉夈仚銈嬨亾銇ㄣ倰銇婂嫥銈併仐銇俱仚銆傘儐銉笺優銈勮█瑾炪儠銈°偆銉亗銈嬨亜銇1.3.10浠ヤ笂銇甤onfig.php銇с伄澶夋洿銇屻亗銈娿伨銇涖倱銇仹銆併偄銉冦儣銈般儸銉笺儔銇瘮杓冪殑绨″崢銇с仚銆

    Geeklog 1.3.10

    鏂般仐銇勩儑銉曘偐銉儓銉嗐兗銉

    -

    鏈儶銉兗銈广伀銇佹柊銇椼亜銉囥儠銈┿儷銉堛儐銉笺優銇屽惈銇俱倢銇俱仚銆俈ictor B. Gonzalez ( Aeonserv銇ф湁鍚嶃仹銇)銇倛銇c仸鎻愪緵銇曘倢銇熷皞闁鐨勩仾銉嗐兗銉炪倰閬搞伋銇俱仐銇熴傘儐銉笺優銇皯銇椾慨姝c仌銈屻佺従鍦℉TML4.01銇–SS婧栨嫚銇ㄣ仾銇c仸銇勩伨銇欍

    +

    鏈儶銉兗銈广伀銇佹柊銇椼亜銉囥儠銈┿儷銉堛儐銉笺優銇屽惈銇俱倢銇俱仚銆俈ictor B. Gonzalez ( Aeonserv銇ф湁鍚嶃仹銇)銇倛銇c仸鎻愪緵銇曘倢銇熷皞闁鐨勩仾銉嗐兗銉炪倰閬搞伋銇俱仐銇熴傘儐銉笺優銇皯銇椾慨姝c仌銈屻佺従鍦℉TML4.01銇–SS婧栨嫚銇ㄣ仾銇c仸銇勩伨銇欍 +

    銇俱仧銆佸彜銇勩儐銉笺優(銈儵銈枫儍銈併偗銉兗銉炽併儑銈搞偪銉兓銉€儙銈儹銉笺儬銆併偛銉笺儬銈点兗銉愩併偣銉犮兗銈广兓銉栥儷銉笺乆銈枫儷銉愩兗銆併儰銉曘兗)銇厤淇°倰鍙栥倞銈勩倎銈嬨亾銇ㄣ伀姹哄畾銇椼伨銇椼仧銆傘仢銈屻倝銇垾銇偪銉笺儨銉笺儷銇ㄣ仐銇﹀埄鐢ㄣ仹銇嶃伨銇欍

    鏂版鑳

      -
    • Spam-X銉椼儵銈般偆銉銇屽惈銇俱倢銇︺亜銇俱仚銆俆om Willet銇倛銈娿偣銉戙儬妞滃嚭銉椼儵銈般偆銉炽亴鎻愪緵銇曘倢銆併仢銈屻伅銉囥儠銈┿儷銉堛仹Geeklog銇竴閮ㄣ仺銇椼仸銈ゃ兂銈广儓銉笺儷銇曘倢銇俱仚銆
      銉椼儵銈般偆銉炽亴銆併儑銉笺偪銉欍兗銈广伀銉栥儵銉冦偗銉偣銉堛倰淇濆瓨銇欍倠銇熴倎銇皯銇椾慨姝c仌銈屻伨銇椼仧銆傘儣銉┿偘銈ゃ兂銇棫銉愩兗銈搞儳銉炽伄銉︺兗銈躲兗銇柟銇併儣銉┿偘銈ゃ兂銇鐞嗐儜銉嶃儷銈掗氥仐銇﹀悇銉栥儵銉冦偗銉偣銉堛倰銈ゃ兂銉濄兗銉堛仚銈嬪繀瑕併亴銇傘倞銇俱仚銆
    • -
    • 瑷樹簨銈€兗銈偆銉栨鑳: 瑷樹簨銈掋屻偄銉笺偒銈ゃ儢銆嶈┍椤屻伀绉诲嫊銇欍倠銇嬨佹墍瀹氥伄鏅傞枔銇嚜鍕曠殑銇墛闄ゃ仚銈嬨亾銇ㄣ亴鍙兘銇с仚銆
    • -
    • 銈偣銈裤優銈ゃ偤銉汇儭銉嬨儱銉笺兓銉愩兗: 銈点偆銉堛伄銉°儖銉ャ兗銉愩兗銇乧onfig.php銇瑷畾銇с亶銇俱仚銆備緥銇堛伆銆併仼銈撱仾銈ㄣ兂銉堛儶銇屻仼銈撱仾闋嗙暘銇ц〃绀恒仌銈屻倠銇嬨倰閬告姙銇с亶銇俱仚銆傘伨銇熴乴ib-custom.php銇枹鏁般倰鍏ャ倢銇︺偒銈广偪銉犻爡鐩倰杩藉姞銇欍倠銇撱仺銈傘仹銇嶃伨銇欍
    • -
    • 銉嗐偔銈广儓銉汇儭銉笺儷銇偗銉儍銈彲鑳姐仾銉兂銈: HTML 銇с伅銇亜銉°兗銉唴銇甎RL銇疓eeklog銇倛銈婅獚璀樸仌銈屻併偗銉儍銈彲鑳姐伄銉兂銈仺銇椼仸琛ㄧず銇曘倢銇俱仚銆
    • -
    • 绶ㄩ泦鍙兘瑷樹簨ID: 瑷樹簨銇甀D (闈欑殑銉氥兗銈搞伄ID銇倛銇嗐仾)銇鏇淬仹銇嶃佽銇垮彇銈婂彲鑳姐仾URL銇仹銇嶃伨銇欍(妞滅储銈ㄣ兂銈搞兂銇倛銇c仸銆佺壒銇玌RL銇浉銇嶆彌銇堛倰銇椼仸鍒╃敤銇欍倠鍫村悎銆佹鍑恒仌銈屻倠銉併儯銉炽偣銇屻仛銇c仺澧椼亪銇俱仚銆)
    • -
    • 鑷嫊銉兂銈伅瑷樹簨銈勩偝銉°兂銉堝唴銇у埄鐢ㄣ仹銇嶃倠鏂般仐銇勩儠銈┿兗銉犮伄銉兂銈仹銇欍傝嚜鍕曘儶銉炽偗銇悕鍓嶃亴銈裤偘銉嶃兗銉犮伀銇仯銇︺亜銇︺両D銇屻儶銉炽偗鍏堛伄銈儢銈搞偋銈儓銇甀D銇с併儶銉炽偗銉嗐偔銈广儓銇屻儶銉炽偗銇儐銈偣銉堛仺銇椼仸浣裤倧銈屻仸銇勩倠[name:idlink text]銉曘偐銉笺儬銈掑彇銇c仸銇勩伨銇欍
      渚: [story:email-bug About the email bug]銇<a href="http://example.com/article.php/email-bug">About the email bug</a>銇ㄣ仾銈娿伨銇欍
      鎼級鑷嫊銈裤偘銇枹銇椼仸銇併儶銉炽偗銉嗐偔銈广儓銇偑銉椼偡銉с兂銇с佹墍瀹氥伄銈傘伄銇屻仾銇勫牬鍚堛丟eeklog銇偑銉栥偢銈с偗銉堛伄銈裤偆銉堛儷(story, event, static page)銈掑埄鐢ㄣ仐銇俱仚銆
      瑷樹簨銇儶銉炽偗銇欍倠[story:]銇ㄣ偆銉欍兂銉堛伀銉兂銈仚銈媅event:]銇屻併亗銈夈亱銇樸倎瀹氱京銇曘倢銇熻嚜鍕曘偪銈般仹銇欍傘儣銉┿偘銈ゃ兂銇嚜鍒嗚嚜韬伄鑷嫊銈裤偘銈掑畾缇┿仐銇︺佽嚜鍒嗐伄銈炽兂銉堛儹銉笺儷涓嬨仹銈儢銈搞偋銈儓銇儶銉炽偗銇欍倠銇撱仺銇屻仹銇嶃伨銇欍傞潤鐨勩儦銉笺偢銇儣銉┿偘銈ゃ兂銇併仚銇с伀[staticpage:]銇ㄣ亜銇嗚嚜鍕曘偪銈般倰鎻愪緵銇椼仸銇勩伨銇欍
    • -
    • 銈偣銈裤優銈ゃ偤鍙兘銇瓻銉°兗銉: 銇傘仾銇熴伄銈点偆銉堛伀鐧婚尣銇椼仸銇勩倠銉︺兗銈躲兗銇佷俊銇曘倢銇烢銉°兗銉伅銆併儐銈偣銉堛儠銈°偆銉(/path/to/geeklog/data/welcome_email.txt)銇儐銈偣銉堛倰鍒╃敤銇欍倠銇撱仺銇с佸畬鍏ㄣ伀銈偣銈裤優銈ゃ偤銇с亶銇俱仚銆
    • -
    • 銈裤偆銉犮偩銉笺兂銉忋儍銈: 涓鑸殑銇 "銈裤偆銉犮偩銉笺兂銉忋儍銈" 銇屽惈銇俱倢銇︺亜銇俱仚銆傘亗銇仧銇偟銉笺儛銇屽垾銇偪銈ゃ儬銈俱兗銉炽伀銇傘倠鍫村悎銆併偟銈ゃ儓銇偪銈ゃ儬銈俱兗銉炽倰瑷畾銇с亶銇俱仚銆
    • +
    • Spam-X銉椼儵銈般偆銉銇屽惈銇俱倢銇︺亜銇俱仚銆俆om Willet銇倛銈娿偣銉戙儬妞滃嚭銉椼儵銈般偆銉炽亴鎻愪緵銇曘倢銆併仢銈屻伅銉囥儠銈┿儷銉堛仹Geeklog銇竴閮ㄣ仺銇椼仸銈ゃ兂銈广儓銉笺儷銇曘倢銇俱仚銆
      銉椼儵銈般偆銉炽亴銆併儑銉笺偪銉欍兗銈广伀銉栥儵銉冦偗銉偣銉堛倰淇濆瓨銇欍倠銇熴倎銇皯銇椾慨姝c仌銈屻伨銇椼仧銆傘儣銉┿偘銈ゃ兂銇棫銉愩兗銈搞儳銉炽伄銉︺兗銈躲兗銇柟銇併儣銉┿偘銈ゃ兂銇鐞嗐儜銉嶃儷銈掗氥仐銇﹀悇銉栥儵銉冦偗銉偣銉堛倰銈ゃ兂銉濄兗銉堛仚銈嬪繀瑕併亴銇傘倞銇俱仚銆 +
    • +
    • 瑷樹簨銈€兗銈偆銉栨鑳: 瑷樹簨銈掋屻偄銉笺偒銈ゃ儢銆嶈┍椤屻伀绉诲嫊銇欍倠銇嬨佹墍瀹氥伄鏅傞枔銇嚜鍕曠殑銇墛闄ゃ仚銈嬨亾銇ㄣ亴鍙兘銇с仚銆
    • +
    • 銈偣銈裤優銈ゃ偤銉汇儭銉嬨儱銉笺兓銉愩兗: 銈点偆銉堛伄銉°儖銉ャ兗銉愩兗銇乧onfig.php銇瑷畾銇с亶銇俱仚銆備緥銇堛伆銆併仼銈撱仾銈ㄣ兂銉堛儶銇屻仼銈撱仾闋嗙暘銇ц〃绀恒仌銈屻倠銇嬨倰閬告姙銇с亶銇俱仚銆傘伨銇熴乴ib-custom.php銇枹鏁般倰鍏ャ倢銇︺偒銈广偪銉犻爡鐩倰杩藉姞銇欍倠銇撱仺銈傘仹銇嶃伨銇欍 +
    • +
    • 銉嗐偔銈广儓銉汇儭銉笺儷銇偗銉儍銈彲鑳姐仾銉兂銈: HTML 銇с伅銇亜銉°兗銉唴銇甎RL銇疓eeklog銇倛銈婅獚璀樸仌銈屻併偗銉儍銈彲鑳姐伄銉兂銈仺銇椼仸琛ㄧず銇曘倢銇俱仚銆
    • +
    • 绶ㄩ泦鍙兘瑷樹簨ID: 瑷樹簨銇甀D (闈欑殑銉氥兗銈搞伄ID銇倛銇嗐仾)銇鏇淬仹銇嶃佽銇垮彇銈婂彲鑳姐仾URL銇仹銇嶃伨銇欍(妞滅储銈ㄣ兂銈搞兂銇倛銇c仸銆佺壒銇玌RL銇浉銇嶆彌銇堛倰銇椼仸鍒╃敤銇欍倠鍫村悎銆佹鍑恒仌銈屻倠銉併儯銉炽偣銇屻仛銇c仺澧椼亪銇俱仚銆)
    • +
    • 鑷嫊銉兂銈伅瑷樹簨銈勩偝銉°兂銉堝唴銇у埄鐢ㄣ仹銇嶃倠鏂般仐銇勩儠銈┿兗銉犮伄銉兂銈仹銇欍傝嚜鍕曘儶銉炽偗銇悕鍓嶃亴銈裤偘銉嶃兗銉犮伀銇仯銇︺亜銇︺両D銇屻儶銉炽偗鍏堛伄銈儢銈搞偋銈儓銇甀D銇с併儶銉炽偗銉嗐偔銈广儓銇屻儶銉炽偗銇儐銈偣銉堛仺銇椼仸浣裤倧銈屻仸銇勩倠[name:idlink + text]銉曘偐銉笺儬銈掑彇銇c仸銇勩伨銇欍
      渚: [story:email-bug About the email bug]銇<a href="http://example.com/article.php/email-bug">About + the email bug</a>銇ㄣ仾銈娿伨銇欍
      鎼級鑷嫊銈裤偘銇枹銇椼仸銇併儶銉炽偗銉嗐偔銈广儓銇偑銉椼偡銉с兂銇с佹墍瀹氥伄銈傘伄銇屻仾銇勫牬鍚堛丟eeklog銇偑銉栥偢銈с偗銉堛伄銈裤偆銉堛儷(story, event, static + page)銈掑埄鐢ㄣ仐銇俱仚銆
      瑷樹簨銇儶銉炽偗銇欍倠[story:]銇ㄣ偆銉欍兂銉堛伀銉兂銈仚銈媅event:]銇屻併亗銈夈亱銇樸倎瀹氱京銇曘倢銇熻嚜鍕曘偪銈般仹銇欍傘儣銉┿偘銈ゃ兂銇嚜鍒嗚嚜韬伄鑷嫊銈裤偘銈掑畾缇┿仐銇︺佽嚜鍒嗐伄銈炽兂銉堛儹銉笺儷涓嬨仹銈儢銈搞偋銈儓銇儶銉炽偗銇欍倠銇撱仺銇屻仹銇嶃伨銇欍傞潤鐨勩儦銉笺偢銇儣銉┿偘銈ゃ兂銇併仚銇с伀[staticpage:]銇ㄣ亜銇嗚嚜鍕曘偪銈般倰鎻愪緵銇椼仸銇勩伨銇欍 +
    • +
    • 銈偣銈裤優銈ゃ偤鍙兘銇瓻銉°兗銉: + 銇傘仾銇熴伄銈点偆銉堛伀鐧婚尣銇椼仸銇勩倠銉︺兗銈躲兗銇佷俊銇曘倢銇烢銉°兗銉伅銆併儐銈偣銉堛儠銈°偆銉(/path/to/geeklog/data/welcome_email.txt)銇儐銈偣銉堛倰鍒╃敤銇欍倠銇撱仺銇с佸畬鍏ㄣ伀銈偣銈裤優銈ゃ偤銇с亶銇俱仚銆 +
    • +
    • 銈裤偆銉犮偩銉笺兂銉忋儍銈: 涓鑸殑銇 "銈裤偆銉犮偩銉笺兂銉忋儍銈" + 銇屽惈銇俱倢銇︺亜銇俱仚銆傘亗銇仧銇偟銉笺儛銇屽垾銇偪銈ゃ儬銈俱兗銉炽伀銇傘倠鍫村悎銆併偟銈ゃ儓銇偪銈ゃ儬銈俱兗銉炽倰瑷畾銇с亶銇俱仚銆 +

    銇濄伄浠栥伄鏀硅壇鐐

      -
    • 銇欍伖銇︺伄鍕曚綔銈掓敼鍠勩仚銈嬨仧銈併併仌銇俱仏銇俱仾澶夋洿銈掕銇勩伨銇椼仧銆
    • -
    • 鏂般仐銇勩偆銉炽偣銉堛兗銉敤銇併亗銇仧銇甅ySQL銉愩兗銈搞儳銉炽亴InnoDB銇儐銉笺儢銉従鍦ㄣ伄MySQL4.0銇俱仧銇3.x”Max”銇т綔銈夈倢銇︺亜銈)銈掋偟銉濄兗銉堛仐銇︺亜銈屻伆銆両nnoDB銉嗐兗銉栥儷(MyISAM銇唬銈忋倞)銈掑埄鐢ㄣ仹銇嶃倠銈儣銈枫儳銉虫鑳姐亴銇傘倞銇俱仚銆傛棦瀛樸伄銉囥兗銈裤儥銉笺偣銇併偣銈儶銉椼儓 admin/install/toinnodb.php.銈掑埄鐢ㄣ仐銇nnoDB銇鎻涖仹銇嶃伨銇欍
      璀﹀憡:InnoDB 銉嗐兗銉栥儷銈掍娇鐢ㄣ仚銈嬨仺銆併儑銉笺偪銉欍兗銈广伄銉愩儍銈偄銉冦儣銇屻亜銇忋倝銇嬭闆戙伀銇倞銇俱仚銆傚皬銇曘亜銈点偆銈恒倓涓▼搴︺伄銈点偆銈恒伄銈点偆銉堛伅銆丮yISAM銉嗐兗銉栥儷銇у崄鍒嗐伀浣滃嫊銇欍倠銇仹銆佷笉瀹夈仾鍫村悎銇疘nnoDB銉嗐兗銉栥儷銈掍娇鐢ㄣ仐銇亜銇с亸銇犮仌銇勩
    • -
    • 銈儸銉炽儉銉笺伄閫便伅銆佹棩鏇滄棩銇嬫湀鏇滄棩銇嬨倝濮嬨倎銈夈倢銇俱仚銆
    • -
    • 闈欑殑銉氥兗銈搞伄銉椼儵銈般偆銉炽伀銇侀潤鐨勩儦銉笺偢銇嵃鍒风敤銉氥兗銈搞倰琛ㄧず銇欍倠銇熴倎銇偑銉椼偡銉с兂銇屻亗銈娿伨銇欍
    • +
    • 銇欍伖銇︺伄鍕曚綔銈掓敼鍠勩仚銈嬨仧銈併併仌銇俱仏銇俱仾澶夋洿銈掕銇勩伨銇椼仧銆
    • +
    • 鏂般仐銇勩偆銉炽偣銉堛兗銉敤銇併亗銇仧銇甅ySQL銉愩兗銈搞儳銉炽亴InnoDB銇儐銉笺儢銉従鍦ㄣ伄MySQL4.0銇俱仧銇3.x”Max”銇т綔銈夈倢銇︺亜銈)銈掋偟銉濄兗銉堛仐銇︺亜銈屻伆銆両nnoDB銉嗐兗銉栥儷(MyISAM銇唬銈忋倞)銈掑埄鐢ㄣ仹銇嶃倠銈儣銈枫儳銉虫鑳姐亴銇傘倞銇俱仚銆傛棦瀛樸伄銉囥兗銈裤儥銉笺偣銇併偣銈儶銉椼儓 + admin/install/toinnodb.php.銈掑埄鐢ㄣ仐銇nnoDB銇鎻涖仹銇嶃伨銇欍
      璀﹀憡:InnoDB + 銉嗐兗銉栥儷銈掍娇鐢ㄣ仚銈嬨仺銆併儑銉笺偪銉欍兗銈广伄銉愩儍銈偄銉冦儣銇屻亜銇忋倝銇嬭闆戙伀銇倞銇俱仚銆傚皬銇曘亜銈点偆銈恒倓涓▼搴︺伄銈点偆銈恒伄銈点偆銉堛伅銆丮yISAM銉嗐兗銉栥儷銇у崄鍒嗐伀浣滃嫊銇欍倠銇仹銆佷笉瀹夈仾鍫村悎銇疘nnoDB銉嗐兗銉栥儷銈掍娇鐢ㄣ仐銇亜銇с亸銇犮仌銇勩 +
    • +
    • 銈儸銉炽儉銉笺伄閫便伅銆佹棩鏇滄棩銇嬫湀鏇滄棩銇嬨倝濮嬨倎銈夈倢銇俱仚銆
    • +
    • 闈欑殑銉氥兗銈搞伄銉椼儵銈般偆銉炽伀銇侀潤鐨勩儦銉笺偢銇嵃鍒风敤銉氥兗銈搞倰琛ㄧず銇欍倠銇熴倎銇偑銉椼偡銉с兂銇屻亗銈娿伨銇欍

    娉ㄩ噲

      -
    • 銈炽儭銉炽儓銈炽兗銉夈伅澶с亶銇忓鏇淬仌銈屻仸鍕曚綔銇屾敼鍠勩仌銈屻佸嬨呫伄銈炽儭銉炽儓銈勩儦銉笺偢銈炽儭銉炽儓銇仼銇儶銉炽偗銇с亶銈嬨倛銇嗐仾鏀硅壇銇屽姞銇堛倝銈屻伨銇椼仧銆
    • -
    • 銉︺兗銈躲兗銇併偟銈ゃ儓銇鐞嗚呫伀瀵俱仐鎮剰銇亗銈嬨偝銉°兂銉堛倰鍫卞憡銇欍倠銇撱仺銇屻仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • -
    • 銈点偆銉堛伄绠$悊鑰呫伅銆佹柊銇椼亜銈炽儭銉炽儓銇岄佷俊銇曘倢銇熷牬鍚堛丒銉°兗銉氱煡銈掑彈銇戝彇銈嬨亾銇ㄣ亴銇с亶銇俱仚銆(鏂般仐銇勮浜嬨併儶銉炽偗銆併偆銉欍兂銉堛併儲銉笺偠銉笺伀瀵俱仚銈婨銉°兗銉氱煡銇ㄥ悓銇樸仹銇欍)
    • -
    • 銈炽儭銉炽儓閫佷俊鑰呫伄IP銈€儔銉偣銇閷层仌銈屻乄hois銈点兗銉撱偣銇儶銉炽偗銇椼仸鐩存帴瑕嬨倠銇撱仺銇屻仹銇嶃伨銇欍(銇俱仧銇乄hois姗熻兘銈掑倷銇堛仧Tom Willet銇NetTools 銈掋偆銉炽偣銉堛兗銉仚銈嬨亾銇ㄣ亴銇с亶銇俱仚銆)
    • +
    • 銈炽儭銉炽儓銈炽兗銉夈伅澶с亶銇忓鏇淬仌銈屻仸鍕曚綔銇屾敼鍠勩仌銈屻佸嬨呫伄銈炽儭銉炽儓銈勩儦銉笺偢銈炽儭銉炽儓銇仼銇儶銉炽偗銇с亶銈嬨倛銇嗐仾鏀硅壇銇屽姞銇堛倝銈屻伨銇椼仧銆
    • +
    • 銉︺兗銈躲兗銇併偟銈ゃ儓銇鐞嗚呫伀瀵俱仐鎮剰銇亗銈嬨偝銉°兂銉堛倰鍫卞憡銇欍倠銇撱仺銇屻仹銇嶃倠銈堛亞銇仾銈娿伨銇椼仧銆
    • +
    • 銈点偆銉堛伄绠$悊鑰呫伅銆佹柊銇椼亜銈炽儭銉炽儓銇岄佷俊銇曘倢銇熷牬鍚堛丒銉°兗銉氱煡銈掑彈銇戝彇銈嬨亾銇ㄣ亴銇с亶銇俱仚銆(鏂般仐銇勮浜嬨併儶銉炽偗銆併偆銉欍兂銉堛併儲銉笺偠銉笺伀瀵俱仚銈婨銉°兗銉氱煡銇ㄥ悓銇樸仹銇欍)
    • +
    • 銈炽儭銉炽儓閫佷俊鑰呫伄IP銈€儔銉偣銇閷层仌銈屻乄hois銈点兗銉撱偣銇儶銉炽偗銇椼仸鐩存帴瑕嬨倠銇撱仺銇屻仹銇嶃伨銇欍(銇俱仧銇乄hois姗熻兘銈掑倷銇堛仧Tom Willet銇NetTools 銈掋偆銉炽偣銉堛兗銉仚銈嬨亾銇ㄣ亴銇с亶銇俱仚銆) +

    銈汇偔銉ャ儶銉嗐偅闁㈤c伄淇

    -

    娉ㄦ剰:浠ヤ笅銇儛銈般伅銇欍伖銇eeklog銇儜銉笺儫銉冦偡銉с兂銈枫偣銉嗐儬銇儓銉┿儢銉倓銆併屾儏鍫辨紡娲┿嶃伄椤炪仹銇欍傘仧銇ㄣ亪銇般併亗銈嬬姸娉佷笅銇с併偟銈ゃ儓銇偝銉炽儐銉炽儎銇岄柌瑕с仹銇嶃仾銇嬨仯銇熶汉銇岄柌瑕с仹銇嶃倠銈堛亞銇仾銈娿伨銇欍傘亾銈屻倝銇儛銈般倰浣裤仯銇︺佺壒鍏搞倰寰椼仧銈娿丟eeklog銈勩仢銇亱鍠剁挵澧冦伀銉銉°兗銈搞倰涓庛亪銈嬨倛銇嗐伀銇枊鐧恒仌銈屻仸銇勩伨銇涖倱銆

    +

    + 娉ㄦ剰:浠ヤ笅銇儛銈般伅銇欍伖銇eeklog銇儜銉笺儫銉冦偡銉с兂銈枫偣銉嗐儬銇儓銉┿儢銉倓銆併屾儏鍫辨紡娲┿嶃伄椤炪仹銇欍傘仧銇ㄣ亪銇般併亗銈嬬姸娉佷笅銇с併偟銈ゃ儓銇偝銉炽儐銉炽儎銇岄柌瑕с仹銇嶃仾銇嬨仯銇熶汉銇岄柌瑕с仹銇嶃倠銈堛亞銇仾銈娿伨銇欍傘亾銈屻倝銇儛銈般倰浣裤仯銇︺佺壒鍏搞倰寰椼仧銈娿丟eeklog銈勩仢銇亱鍠剁挵澧冦伀銉銉°兗銈搞倰涓庛亪銈嬨倛銇嗐伀銇枊鐧恒仌銈屻仸銇勩伨銇涖倱銆

      -
    • 绠$悊鑰呫偘銉兗銉椼伅銆併仢銇偘銉兗銉椼伄銉°兂銉愩仹銇亸銇︺倐銆併仚銇广仸銇偘銉兗銉椼伄銉°兂銉愩倰銉偣銉堛伀鍙兘銇с仐銇熴
    • -
    • 绠$悊鑰呫偘銉兗銉椼伅銆併仢銇偘銉兗銉椼伄銉°兂銉愩仹銇亸銇︺倐銆併偡銈广儐銉犲唴銇仚銇广仸銇偘銉兗銉椼儶銈广儓銇屻倐銈夈亪銇俱仐銇(bug #280)銆
    • -
    • 瑷樹簨銇娿倛銇炽偆銉欍兂銉堢鐞嗚呫伅銆併偄銈偦銈广仐銇﹁銇胯炯銇俱仾銇忋仸銈傘併仚銇广仸銇浜嬨倓銈ゃ儥銉炽儓銇儶銈广儓銈掑父銇倐銈夈亪銇俱仐銇熴(bug #269)
    • -
    • 銉︺兗銈躲兗銇屻仢銇浜嬨倰瑾個瑷卞彲銈掓寔銇c仸銇勩仾銇忋仸銈(瑷樹簨銇ㄣ偝銉°兂銉圛D涓℃柟銈掔煡銇c仸銇勩倢銇)銆併仢銇浜嬨亱銈夈偝銉°兂銉堛倰瑕佹眰銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧銆
    • -
    • 銈儸銉炽儉銉笺伄鏃ヤ粯銇ㄩ便伄鐢婚潰銇偆銉欍兂銉堣ū鍙亴閬╁垏銇儊銈с儍銈仌銈屻仛銆併偆銉欍兂銉堛亴瑕嬨倠銇撱仺銇屻仹銇嶃仾銇勩伅銇氥伄銉︺兗銈躲兗銇仢銇偆銉欍兂銉堛亴闁茶Η鍙兘銇с仐銇熴
    • -
    • 銈点偆銉堛偒銉兂銉銉笺伄涓仹闁茶Η瑷卞彲銇屻仾銇勫牬鍚堛仹銈(銈ゃ儥銉炽儓銇甀D銈掔煡銇c仸銇勩倢銇)銆併儜銉笺偨銉娿儷銈儸銉炽儉銉笺伀浣曘倝銇嬨伄銈ゃ儥銉炽儓銈掕拷鍔犮仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴
    • +
    • 绠$悊鑰呫偘銉兗銉椼伅銆併仢銇偘銉兗銉椼伄銉°兂銉愩仹銇亸銇︺倐銆併仚銇广仸銇偘銉兗銉椼伄銉°兂銉愩倰銉偣銉堛伀鍙兘銇с仐銇熴
    • +
    • 绠$悊鑰呫偘銉兗銉椼伅銆併仢銇偘銉兗銉椼伄銉°兂銉愩仹銇亸銇︺倐銆併偡銈广儐銉犲唴銇仚銇广仸銇偘銉兗銉椼儶銈广儓銇屻倐銈夈亪銇俱仐銇(bug #280)銆
    • +
    • 瑷樹簨銇娿倛銇炽偆銉欍兂銉堢鐞嗚呫伅銆併偄銈偦銈广仐銇﹁銇胯炯銇俱仾銇忋仸銈傘併仚銇广仸銇浜嬨倓銈ゃ儥銉炽儓銇儶銈广儓銈掑父銇倐銈夈亪銇俱仐銇熴(bug #269)
    • +
    • 銉︺兗銈躲兗銇屻仢銇浜嬨倰瑾個瑷卞彲銈掓寔銇c仸銇勩仾銇忋仸銈(瑷樹簨銇ㄣ偝銉°兂銉圛D涓℃柟銈掔煡銇c仸銇勩倢銇)銆併仢銇浜嬨亱銈夈偝銉°兂銉堛倰瑕佹眰銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧銆
    • +
    • 銈儸銉炽儉銉笺伄鏃ヤ粯銇ㄩ便伄鐢婚潰銇偆銉欍兂銉堣ū鍙亴閬╁垏銇儊銈с儍銈仌銈屻仛銆併偆銉欍兂銉堛亴瑕嬨倠銇撱仺銇屻仹銇嶃仾銇勩伅銇氥伄銉︺兗銈躲兗銇仢銇偆銉欍兂銉堛亴闁茶Η鍙兘銇с仐銇熴
    • +
    • 銈点偆銉堛偒銉兂銉銉笺伄涓仹闁茶Η瑷卞彲銇屻仾銇勫牬鍚堛仹銈(銈ゃ儥銉炽儓銇甀D銈掔煡銇c仸銇勩倢銇)銆併儜銉笺偨銉娿儷銈儸銉炽儉銉笺伀浣曘倝銇嬨伄銈ゃ儥銉炽儓銈掕拷鍔犮仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴

    銇濄伄浠栥伄銉愩偘淇

      -
    • 鎶曠ǹ銇曘倢銇熻浜嬨倰銉椼儸銉撱儱銉笺仐銇熴倞淇濆瓨銇椼仧銈娿仐銇︺倐銆佹姇绋裤仌銈屻仧瑷樹簨銇壙瑾嶅緟銇°伄銇俱伨銇с仐銇熴亴銆佸疅闅涖伀銇柊銇椼亜瑷樹簨銇ㄣ仐銇︿繚瀛樸仌銈屻仸銇勩伨銇椼仧銆
    • -
    • 銉戙兗銈姐儕銉偒銉兂銉銉笺亱銈夈伄銈ゃ儥銉炽儓鍓婇櫎銇屻佷綔鍕曘仐銇俱仜銈撱仹銇椼仧(bug #199)銆
    • -
    • 鍙ゃ亜銉︺兗銈躲兗銉曘偐銉堛伅銆併儠銈┿儓銇岀暟銇仯銇熴儠銈°偆銉舰寮忋伄鍫村悎绉诲嫊銇曘倢銇俱仐銇熴傘仧銇ㄣ亪銇般.gif銇嬨倝.jpg 銇稿銈忋倠鍫村悎銇с仚(bug #228)銆
    • -
    • 鐢诲儚銇珮銇曘伅鏈澶уゃ倰瓒娿亪銈嬨亴銆佸箙銇渶澶уゃ倰瓒娿亪銇亜鍫村悎銆佺敾鍍忋伄銉偟銈ゃ偤銇綔鍕曘仐銇俱仜銈撱仹銇椼仧(bug #242)銆
    • -
    • 鐢诲儚銈掑啀銉偟銈ゃ偤銇欍倠銇熴倎銇獹D銉┿偆銉栥儵銉倰浣跨敤銇欍倠銇ㄣ併儶銈点偆銈恒仐銇︺亜銇亜鐢诲儚銈掍繚瀛樸仚銈嬨亾銇ㄣ伅銇с亶銇俱仜銈撱仹銇椼仧(bug #197)銆
    • -
    • GD銉┿偆銉栥儵銉倰浣跨敤銇欍倠銇ㄣ GIF鐢诲儚銇疨NG銉曘偐銉笺優銉冦儓銇鎻涖仌銈屻伨銇椼仧銇屻丟eeklog銇疓IF銉愩兗銈搞儳銉炽倰琛ㄧず銇椼倛銇嗐仺銇椼仸銇勩伨銇椼仧銆 LZW 銉戙儐銉炽儓銇绲備簡銇椼仸銇嬨倝銆佸啀銇矴IF鐢诲儚銈掍娇鐢ㄣ仚銈嬨亾銇ㄣ亴瀹夊叏銇ㄣ仾銈娿丳NG澶夋彌銇仾銇忋仾銈娿伨銇椼仧銆
    • -
    • 銈裤兗銉溿兗銉伀銈傘併儲銉笺偠銉笺亴鎶便亪銇︺亜銈婨銉°兗銉儓銉┿儢銉亴鍫卞憡銇曘倢銇︺亜銈嬨併偄銉冦儣銈般儸銉笺儔銇曘倢銇烶EAR銉戙儍銈便兗銈搞亴鍚伨銈屻仸銇勩伨銇(bug #246)銆
      娉ㄦ剰:銇撱倢銈夈伅銆丟eeklog1.3.9sr2銇悓姊便仐銇熴伄銇ㄥ悓銇楶EAR銉戙儍銈便兗銈搞仹銇欍
    • -
    -

    銉嗐兗銉炲鏇銈傘亗銈娿併仢銇腑銇亜銇ゃ亸銇嬨伅銆佹柊銇椼亜姗熻兘銈掑嫊浣溿仌銇涖倠銇熴倎銇噸瑕併仹銇傘倠銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜銆(銇熴仺銇堛伆銆佺法闆嗗彲鑳姐仾瑷樹簨ID銇ㄣ仢銇浜嬨兓銈€兗銈偆銉栥伄銈儣銈枫儳銉)!

    +
  • 鎶曠ǹ銇曘倢銇熻浜嬨倰銉椼儸銉撱儱銉笺仐銇熴倞淇濆瓨銇椼仧銈娿仐銇︺倐銆佹姇绋裤仌銈屻仧瑷樹簨銇壙瑾嶅緟銇°伄銇俱伨銇с仐銇熴亴銆佸疅闅涖伀銇柊銇椼亜瑷樹簨銇ㄣ仐銇︿繚瀛樸仌銈屻仸銇勩伨銇椼仧銆
  • +
  • 銉戙兗銈姐儕銉偒銉兂銉銉笺亱銈夈伄銈ゃ儥銉炽儓鍓婇櫎銇屻佷綔鍕曘仐銇俱仜銈撱仹銇椼仧(bug #199)銆
  • +
  • 鍙ゃ亜銉︺兗銈躲兗銉曘偐銉堛伅銆併儠銈┿儓銇岀暟銇仯銇熴儠銈°偆銉舰寮忋伄鍫村悎绉诲嫊銇曘倢銇俱仐銇熴傘仧銇ㄣ亪銇般.gif銇嬨倝.jpg 銇稿銈忋倠鍫村悎銇с仚(bug #228)銆
  • +
  • 鐢诲儚銇珮銇曘伅鏈澶уゃ倰瓒娿亪銈嬨亴銆佸箙銇渶澶уゃ倰瓒娿亪銇亜鍫村悎銆佺敾鍍忋伄銉偟銈ゃ偤銇綔鍕曘仐銇俱仜銈撱仹銇椼仧(bug #242)銆
  • +
  • 鐢诲儚銈掑啀銉偟銈ゃ偤銇欍倠銇熴倎銇獹D銉┿偆銉栥儵銉倰浣跨敤銇欍倠銇ㄣ併儶銈点偆銈恒仐銇︺亜銇亜鐢诲儚銈掍繚瀛樸仚銈嬨亾銇ㄣ伅銇с亶銇俱仜銈撱仹銇椼仧(bug #197)銆
  • +
  • GD銉┿偆銉栥儵銉倰浣跨敤銇欍倠銇ㄣ GIF鐢诲儚銇疨NG銉曘偐銉笺優銉冦儓銇鎻涖仌銈屻伨銇椼仧銇屻丟eeklog銇疓IF銉愩兗銈搞儳銉炽倰琛ㄧず銇椼倛銇嗐仺銇椼仸銇勩伨銇椼仧銆 LZW 銉戙儐銉炽儓銇绲備簡銇椼仸銇嬨倝銆佸啀銇矴IF鐢诲儚銈掍娇鐢ㄣ仚銈嬨亾銇ㄣ亴瀹夊叏銇ㄣ仾銈娿丳NG澶夋彌銇仾銇忋仾銈娿伨銇椼仧銆 +
  • +
  • 銈裤兗銉溿兗銉伀銈傘併儲銉笺偠銉笺亴鎶便亪銇︺亜銈婨銉°兗銉儓銉┿儢銉亴鍫卞憡銇曘倢銇︺亜銈嬨併偄銉冦儣銈般儸銉笺儔銇曘倢銇烶EAR銉戙儍銈便兗銈搞亴鍚伨銈屻仸銇勩伨銇(bug #246)銆
    娉ㄦ剰:銇撱倢銈夈伅銆丟eeklog1.3.9sr2銇悓姊便仐銇熴伄銇ㄥ悓銇楶EAR銉戙儍銈便兗銈搞仹銇欍 +
  • + +

    銉嗐兗銉炲鏇銈傘亗銈娿併仢銇腑銇亜銇ゃ亸銇嬨伅銆佹柊銇椼亜姗熻兘銈掑嫊浣溿仌銇涖倠銇熴倎銇噸瑕併仹銇傘倠銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜銆(銇熴仺銇堛伆銆佺法闆嗗彲鑳姐仾瑷樹簨ID銇ㄣ仢銇浜嬨兓銈€兗銈偆銉栥伄銈儣銈枫儳銉)! +

    鏈儶銉兗銈广伀銇丟eeklog銇偝銉熴儱銉嬨儐銈c伀銈堛仯銇︽彁渚涖仌銈屻仧妲樸呫仾鏀硅壇鐐广亴鍚伨銈屻仸銇勩伨銇欍 (纰鸿獚銇仧銈乨ocs銇俱仧銇痟istory銉曘偂銈ゃ儷銈掋仈鍙傜収銇忋仩銇曘亜銆)

    Geeklog 1.3.9sr3

    鏈儶銉兗銈广伅銆佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇俱仐銇熴

      -
    • 銈层偣銉堛儲銉笺偠銉笺伄鎶曠ǹ銇宑onfig.php銇х劇鍔广伀銇曘倢銇︺亜銇︺倐銆佹姇绋裤仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇(Barry Wong銇牨鍛)銆
      config.php銇х劇鍔广伀銇椼仾銇勯檺銈娿併亾銈屻倝銇浜嬨伅銇俱仩鎵胯獚寰呫仭銇姸鎱嬨伀銇仯銇︺亜銇俱仐銇熴
    • -
    • 銉兂銈倓銈ゃ儥銉炽儓鎶曠ǹ銇儜銉┿儭銉笺偪銉笺亴銉曘偅銉偪銉兂銈般仌銈屻仸銇娿倝銇氥丼QL銈ゃ兂銈搞偋銈偡銉с兂銇彲鑳芥с亴銇傘倞銇俱仐銇熴
    • +
    • 銈层偣銉堛儲銉笺偠銉笺伄鎶曠ǹ銇宑onfig.php銇х劇鍔广伀銇曘倢銇︺亜銇︺倐銆佹姇绋裤仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇(Barry + Wong銇牨鍛)銆
      config.php銇х劇鍔广伀銇椼仾銇勯檺銈娿併亾銈屻倝銇浜嬨伅銇俱仩鎵胯獚寰呫仭銇姸鎱嬨伀銇仯銇︺亜銇俱仐銇熴
    • +
    • 銉兂銈倓銈ゃ儥銉炽儓鎶曠ǹ銇儜銉┿儭銉笺偪銉笺亴銉曘偅銉偪銉兂銈般仌銈屻仸銇娿倝銇氥丼QL銈ゃ兂銈搞偋銈偡銉с兂銇彲鑳芥с亴銇傘倞銇俱仐銇熴

    Geeklog 1.3.9sr2

    鏈儶銉兗銈广伅銆佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇俱仐銇熴

      -
    • 瑷瑾炪儠銈°偆銉唴銇鏁$topic銈掍娇銇嗐亾銇ㄣ仹鐢熴仒銇熴偗銉偣銈点偆銉堛兓銈广偗銉儣銉嗐偅銉炽偘銇剢寮辨с亴淇銇曘倢銇俱仐銇(bug #293)銆
    • -
    • 瑷樹簨銈勩偄銉炽偙銉笺儓銇枹銇欍倠銈炽儭銉炽儓銉°兗銉伄宸仐姝€倎銇с併偝銉°兂銉堥佷俊銇屾鑳藉仠姝€伀銇倞銇俱仐銇熴
    • +
    • 瑷瑾炪儠銈°偆銉唴銇鏁$topic銈掍娇銇嗐亾銇ㄣ仹鐢熴仒銇熴偗銉偣銈点偆銉堛兓銈广偗銉儣銉嗐偅銉炽偘銇剢寮辨с亴淇銇曘倢銇俱仐銇(bug #293)銆
    • +
    • 瑷樹簨銈勩偄銉炽偙銉笺儓銇枹銇欍倠銈炽儭銉炽儓銉°兗銉伄宸仐姝€倎銇с併偝銉°兂銉堥佷俊銇屾鑳藉仠姝€伀銇倞銇俱仐銇熴

    銇濄伄浠栥伄淇

      -
    • PHP5銇ф纰恒伀鍕曚綔銇欍倠銈堛亞銇乴ib-plugins.php銇屼慨姝c仌銈屻伨銇椼仧銆
    • -
    • 瀹屽叏銇偪銉笺儨銉笺儷銇伅銆佸牨鍛娿仌銈屻仧E銉°兗銉儓銉┿儢銉倰淇銇欍倠銈€儍銉椼儑銉笺儓銇曘倢銇烶EAR銉戙儍銈便兗銈搞倐鍚伨銈屻仸銇勩伨銇欍
    • +
    • PHP5銇ф纰恒伀鍕曚綔銇欍倠銈堛亞銇乴ib-plugins.php銇屼慨姝c仌銈屻伨銇椼仧銆
    • +
    • 瀹屽叏銇偪銉笺儨銉笺儷銇伅銆佸牨鍛娿仌銈屻仧E銉°兗銉儓銉┿儢銉倰淇銇欍倠銈€儍銉椼儑銉笺儓銇曘倢銇烶EAR銉戙儍銈便兗銈搞倐鍚伨銈屻仸銇勩伨銇欍

    Geeklog 1.3.9sr1

    鏈儶銉兗銈广伅銆佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇俱仐銇熴

      -
    • 銈层偣銉堛儲銉笺偠銉笺伄銈炽儭銉炽儓鎶曠ǹ銇宑onfig.php銇х劇鍔广伀銇仯銇︺亜銇︺倐銆佹姇绋裤仚銈嬨亾銇ㄣ亴銇с亶銇︺亜銇俱仐銇熴
      銇撱伄銉愩偘銇佹槑銈夈亱銇竴瀹氥伄Geeklog銇偟銈ゃ儓銇告暟鐧俱伄銈广儜銉犮儭銉笺儷銈掗佷俊銇欍倠銇熴倎銇併偣銉戙優銉笺伀銈堛仯銇﹂枊鐧恒仌銈屻仧銈傘伄銇с仚銆
    • -
    • 銈炽儭銉炽儓鎶曠ǹ銈掋儊銈с儍銈仚銈嬮熷害鍒堕檺銇屼粯鍔犮仌銈屻伨銇椼仧銆
    • -
    • 銇┿伄瑭遍銈傘偛銈广儓銉︺兗銈躲兗銇伅瑕嬨亪銇亱銇c仧鍫村悎銆佽浜嬨伄闁茶Η瑷卞彲銇倛銇c仸銇併偟銈ゃ儓銇偆銉炽儑銉冦偗銈广儦銉笺偢銇屻偛銈广儓銉︺兗銈躲兗銇銇椼仸瑷樹簨銈掕〃绀恒仐銇︺亜銇熷彲鑳芥с亴銇傘倞銇俱仚銆
    • -
    • 瑭遍銇枹銇欍倠銉囥偆銉兗銉銈ゃ偢銈с偣銉堛兓E銉°兗銉倰銆併儲銉笺偠銉笺亴銇俱仩绉诲嫊銇椼仧瑭遍銇嬨倝鍙栧緱銇椼仸銇勩伨銇椼仧(bug #178)銆
    • -
    • 銉︺兗銈躲兗銇屼竴瀹氥伄瑭遍銇偄銈偦銈广仐銇亸銇︺倐銆佽┍椤屻仚銇广仸銇枹銇欍倠銉囥偆銉兗銉銈ゃ偢銈с偣銉堛倰璩艰銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧銆
    • -
    • 銉椼儹銉曘偅銉笺儷銈掕銇︺亜銈嬨儲銉笺偠銉笺亴銆併偝銉°兂銉堛伄鎺茶級銇曘倢銇︺亜銈嬭浜嬨伀銈€偗銈汇偣銇欍倠瑷卞彲銈掓寔銇c仸銇勩仾銇忋仸銈傘佽浜嬨伀瀵俱仚銈嬨偝銉°兂銉堛亴銆併儲銉笺偠銉笺伄銉椼儹銉曘偅銉笺儷銇幉杓夈仌銈屻倠銇撱仺銇屻亗銈娿伨銇椼仧銆
    • +
    • 銈层偣銉堛儲銉笺偠銉笺伄銈炽儭銉炽儓鎶曠ǹ銇宑onfig.php銇х劇鍔广伀銇仯銇︺亜銇︺倐銆佹姇绋裤仚銈嬨亾銇ㄣ亴銇с亶銇︺亜銇俱仐銇熴
      銇撱伄銉愩偘銇佹槑銈夈亱銇竴瀹氥伄Geeklog銇偟銈ゃ儓銇告暟鐧俱伄銈广儜銉犮儭銉笺儷銈掗佷俊銇欍倠銇熴倎銇併偣銉戙優銉笺伀銈堛仯銇﹂枊鐧恒仌銈屻仧銈傘伄銇с仚銆 +
    • +
    • 銈炽儭銉炽儓鎶曠ǹ銈掋儊銈с儍銈仚銈嬮熷害鍒堕檺銇屼粯鍔犮仌銈屻伨銇椼仧銆
    • +
    • 銇┿伄瑭遍銈傘偛銈广儓銉︺兗銈躲兗銇伅瑕嬨亪銇亱銇c仧鍫村悎銆佽浜嬨伄闁茶Η瑷卞彲銇倛銇c仸銇併偟銈ゃ儓銇偆銉炽儑銉冦偗銈广儦銉笺偢銇屻偛銈广儓銉︺兗銈躲兗銇銇椼仸瑷樹簨銈掕〃绀恒仐銇︺亜銇熷彲鑳芥с亴銇傘倞銇俱仚銆
    • +
    • 瑭遍銇枹銇欍倠銉囥偆銉兗銉銈ゃ偢銈с偣銉堛兓E銉°兗銉倰銆併儲銉笺偠銉笺亴銇俱仩绉诲嫊銇椼仧瑭遍銇嬨倝鍙栧緱銇椼仸銇勩伨銇椼仧(bug #178)銆
    • +
    • 銉︺兗銈躲兗銇屼竴瀹氥伄瑭遍銇偄銈偦銈广仐銇亸銇︺倐銆佽┍椤屻仚銇广仸銇枹銇欍倠銉囥偆銉兗銉銈ゃ偢銈с偣銉堛倰璩艰銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧銆
    • +
    • 銉椼儹銉曘偅銉笺儷銈掕銇︺亜銈嬨儲銉笺偠銉笺亴銆併偝銉°兂銉堛伄鎺茶級銇曘倢銇︺亜銈嬭浜嬨伀銈€偗銈汇偣銇欍倠瑷卞彲銈掓寔銇c仸銇勩仾銇忋仸銈傘佽浜嬨伀瀵俱仚銈嬨偝銉°兂銉堛亴銆併儲銉笺偠銉笺伄銉椼儹銉曘偅銉笺儷銇幉杓夈仌銈屻倠銇撱仺銇屻亗銈娿伨銇椼仧銆

    銇濄伄浠栥伄淇

      -
    • 銉︺兗銈躲兗銇岃嚜鍒嗐伄銉儠銈°儸銉炽偣銇嬨倝瑭遍銈掗櫎澶栥仐銇熷牬鍚堛伄COM_showTopics銇甋QL銈ㄣ儵銉笺亴淇銇曘倢銇俱仐銇熴
    • -
    • 銈层偣銉堛儲銉笺偠銉笺伀瀵俱仚銈嬩划銈汇儍銈枫儳銉矷D銈掑嚘鐞嗐仚銈嬨亾銇ㄣ仹鐢熴仒銇焑rror.log銇 "Duplicate entry '...' for key 1."銇儭銉冦偦銉笺偢銇屼慨姝c仌銈屻伨銇椼仧銆
    • -
    • 銉囥偆銉兗銉銈ゃ偢銈с偣銉堛伄闁撻仌銇c仧浣滆呭悕銇屼慨姝c仌銈屻伨銇椼仧(bug #207)銆
    • -
    • plugin_profileblocksedit_plugin-name銉椼儵銈般偆銉矨PI姗熻兘銇屻乽sersettings.php銇偝銉笺儔銇竴閮ㄣ倰绱涘け銇椼仧銇熴倎浣滃嫊銇椼伨銇涖倱銇с仐銇熴
    • +
    • 銉︺兗銈躲兗銇岃嚜鍒嗐伄銉儠銈°儸銉炽偣銇嬨倝瑭遍銈掗櫎澶栥仐銇熷牬鍚堛伄COM_showTopics銇甋QL銈ㄣ儵銉笺亴淇銇曘倢銇俱仐銇熴
    • +
    • 銈层偣銉堛儲銉笺偠銉笺伀瀵俱仚銈嬩划銈汇儍銈枫儳銉矷D銈掑嚘鐞嗐仚銈嬨亾銇ㄣ仹鐢熴仒銇焑rror.log銇 "Duplicate entry '...' for key 1."銇儭銉冦偦銉笺偢銇屼慨姝c仌銈屻伨銇椼仧銆
    • +
    • 銉囥偆銉兗銉銈ゃ偢銈с偣銉堛伄闁撻仌銇c仧浣滆呭悕銇屼慨姝c仌銈屻伨銇椼仧(bug #207)銆
    • +
    • plugin_profileblocksedit_plugin-name銉椼儵銈般偆銉矨PI姗熻兘銇屻乽sersettings.php銇偝銉笺儔銇竴閮ㄣ倰绱涘け銇椼仧銇熴倎浣滃嫊銇椼伨銇涖倱銇с仐銇熴

    COM_extractLinks銇"href" 銈掑惈銇俱仾銇勩偄銉炽偒銉笺偪銈般倰鐒¤銇欍倠銇撱仺銇仾銈娿伨銇(bug #183)銆

    Geeklog 1.3.9

    鏂版鑳

      -
    • Geeklog銇併仚銇广仸銇瓻銉°兗銉倰閫佷俊銇欍倠銇熴倎銆丳EAR::Mail銈掍娇鐢ㄣ仐銇︺亜銇俱仚銆傘仢銈屻伀銈堛倞銆丳HP銇惌杓夈儭銉笺儷姗熻兘(鍓嶈堪)銈剆endmail銆丼MTP銈掍粙銇椼仸E銉°兗銉倰閫佷俊銇欍倠銇撱仺銇屻仹銇嶃伨銇欍
    • -
    • RSS銉曘偅銉笺儔銈掍綔鎴愩仐銇熴倞瑷畾銇椼仧銈娿仚銈婥ontent Syndication銇ㄣ亜銇嗘柊銇椼亜绠$悊銈儣銈枫儳銉炽亴銇傘倞銇俱仚銆傛柊銇熴仾瑷樹簨銈掋仚銇广仸鍚倱銇с亜銈嬫婧栥儠銈c兗銉夈伀鍔犮亪銆佽┍椤屻仈銇ㄣ倓娆°伄銈ゃ儥銉炽儓鐢ㄣ併儶銉炽偗鐢ㄣ伄銉曘偅銉笺儔銈掍綔鎴愩仚銈嬨亾銇ㄣ亴銇с亶銇俱仚銆
      銇撱伄姗熻兘銇併儣銉┿偘銈ゃ兂銇屻儠銈c兗銉夈倰杩藉姞銇с亶銈嬨亾銇ㄣ仹鎷″嫉鍙兘銇с仚銆傘儠銈c兗銉夈偗銉┿偣銈掕拷鍔犮仚銈嬨亾銇ㄣ仹銆丷SS0.91浠ュ銇儠銈┿兗銉炪儍銉堛仹銉曘偅銉笺儔銈掓彁渚涖仚銈嬨亾銇ㄣ倐鍙兘銇с仚銆
    • -
    • 绠$悊鑰呫伅銆併儢銉儍銈伄銉偣銉堛亱銈夈儢銉儍銈伄闋嗙暘銈掔啊鍗樸伀澶夋洿銇欍倠銇撱仺銇屻仹銇嶃伨銇欍
    • -
    • 銈般儷銉笺儣銇儲銉笺偠銉笺倰杩藉姞銇欍倠浠c倧銈娿仺銇倠銈ゃ兂銈裤兗銉曘偋銉笺偣銇屻亗銈娿伨銇(JavaScript銇屽繀瑕併仹銇)銆
    • -
    • 绠$悊鑰呫偘銉兗銉椼伄銉︺兗銈躲兗銇佽嚜鍒嗚嚜韬亴銉°兂銉愩伀銇仯銇︺亜銈嬨偘銉兗銉椼伀浠栥伄銉︺兗銈躲兗銈掑壊銈婂綋銇︺倠銇撱仺銇犮亼銇с亶銇俱仚銆
    • -
    • 鐢诲儚銇偄銉冦儣銉兗銉夈倐銆佺敾鍍忋倰銉偟銈ゃ偤銇欍倠銇熴倎銇獹D銉┿偆銉栥儵銉倰浣裤亞銇撱仺銇屻仹銇嶃伨銇欍
    • -
    • 銈炽儭銉炽儓銇儐銉炽儣銉兗銉堛倰浣跨敤銇椼伨銇欍
    • -
    • 銉曘偂銈ゃ儷銇偄銉冦儣銉兗銉夈倰瑷便仌銇亜鍘炽仐銇勩偊銈с儢銉涖偣銉堛倰銆佹婧栥伄鐢诲儚銉囥偅銉偗銉堛儶銇仼蹇溿仌銇涖倠銇熴倎銇佹柊銇椼亜瑷畾鐢ㄥ鏁 $_CONF['path_images'] 銈掕ō瀹氥仐銇︺佽浜嬬敾鍍忋仺銉︺兗銈躲兗銉椼儹銉曘偅銉笺儷銇屼繚瀛樸仌銈屻倠銈︺偋銉栥儎銉兗澶栭儴銇儑銈c儸銈儓銉伀閫层個銇撱仺銇屻仹銇嶃伨銇欍
    • -
    • Geeklog銇佽浜嬨伄URL鐢ㄣ伄URL銉儵銈ゃ儓銈掋偟銉濄兗銉堛仐銇︺亜銇俱仚銆傘仧銇ㄣ亪銇般丟oogle銇偗銉兗銉┿兗銇岃í鍟忋仐銈勩仚銇 https://www.geeklog.net/article.php/20031229225326631 銇倛銇嗐仾URL銈掓寔銇ゃ亾銇ㄣ亴銇с亶銇俱仚銆
    • -
    • 銉椼儵銈般偆銉炽伅銆丟eeklog銇柊銇椼亜銉栥儹銉冦偗銇嫭鑷伄銈汇偗銈枫儳銉炽倰杩藉姞銇с亶銇俱仚銆
    • -
    • 銇欍伖銇︺伄URL銉曘偅銉笺儷銉夈伅銆255鏂囧瓧銇俱仹淇濆瓨銇屻仹銇嶃伨銇(銉嗐兗銉炪伄銈€儍銉椼儑銉笺儓銇屽繀瑕併仹銇)銆
    • +
    • Geeklog銇併仚銇广仸銇瓻銉°兗銉倰閫佷俊銇欍倠銇熴倎銆丳EAR::Mail銈掍娇鐢ㄣ仐銇︺亜銇俱仚銆傘仢銈屻伀銈堛倞銆丳HP銇惌杓夈儭銉笺儷姗熻兘(鍓嶈堪)銈剆endmail銆丼MTP銈掍粙銇椼仸E銉°兗銉倰閫佷俊銇欍倠銇撱仺銇屻仹銇嶃伨銇欍
    • +
    • RSS銉曘偅銉笺儔銈掍綔鎴愩仐銇熴倞瑷畾銇椼仧銈娿仚銈婥ontent + Syndication銇ㄣ亜銇嗘柊銇椼亜绠$悊銈儣銈枫儳銉炽亴銇傘倞銇俱仚銆傛柊銇熴仾瑷樹簨銈掋仚銇广仸鍚倱銇с亜銈嬫婧栥儠銈c兗銉夈伀鍔犮亪銆佽┍椤屻仈銇ㄣ倓娆°伄銈ゃ儥銉炽儓鐢ㄣ併儶銉炽偗鐢ㄣ伄銉曘偅銉笺儔銈掍綔鎴愩仚銈嬨亾銇ㄣ亴銇с亶銇俱仚銆
      銇撱伄姗熻兘銇併儣銉┿偘銈ゃ兂銇屻儠銈c兗銉夈倰杩藉姞銇с亶銈嬨亾銇ㄣ仹鎷″嫉鍙兘銇с仚銆傘儠銈c兗銉夈偗銉┿偣銈掕拷鍔犮仚銈嬨亾銇ㄣ仹銆丷SS0.91浠ュ銇儠銈┿兗銉炪儍銉堛仹銉曘偅銉笺儔銈掓彁渚涖仚銈嬨亾銇ㄣ倐鍙兘銇с仚銆 +
    • +
    • 绠$悊鑰呫伅銆併儢銉儍銈伄銉偣銉堛亱銈夈儢銉儍銈伄闋嗙暘銈掔啊鍗樸伀澶夋洿銇欍倠銇撱仺銇屻仹銇嶃伨銇欍
    • +
    • 銈般儷銉笺儣銇儲銉笺偠銉笺倰杩藉姞銇欍倠浠c倧銈娿仺銇倠銈ゃ兂銈裤兗銉曘偋銉笺偣銇屻亗銈娿伨銇(JavaScript銇屽繀瑕併仹銇)銆
    • +
    • 绠$悊鑰呫偘銉兗銉椼伄銉︺兗銈躲兗銇佽嚜鍒嗚嚜韬亴銉°兂銉愩伀銇仯銇︺亜銈嬨偘銉兗銉椼伀浠栥伄銉︺兗銈躲兗銈掑壊銈婂綋銇︺倠銇撱仺銇犮亼銇с亶銇俱仚銆
    • +
    • 鐢诲儚銇偄銉冦儣銉兗銉夈倐銆佺敾鍍忋倰銉偟銈ゃ偤銇欍倠銇熴倎銇獹D銉┿偆銉栥儵銉倰浣裤亞銇撱仺銇屻仹銇嶃伨銇欍
    • +
    • 銈炽儭銉炽儓銇儐銉炽儣銉兗銉堛倰浣跨敤銇椼伨銇欍
    • +
    • 銉曘偂銈ゃ儷銇偄銉冦儣銉兗銉夈倰瑷便仌銇亜鍘炽仐銇勩偊銈с儢銉涖偣銉堛倰銆佹婧栥伄鐢诲儚銉囥偅銉偗銉堛儶銇仼蹇溿仌銇涖倠銇熴倎銇佹柊銇椼亜瑷畾鐢ㄥ鏁 $_CONF['path_images'] + 銈掕ō瀹氥仐銇︺佽浜嬬敾鍍忋仺銉︺兗銈躲兗銉椼儹銉曘偅銉笺儷銇屼繚瀛樸仌銈屻倠銈︺偋銉栥儎銉兗澶栭儴銇儑銈c儸銈儓銉伀閫层個銇撱仺銇屻仹銇嶃伨銇欍 +
    • +
    • Geeklog銇佽浜嬨伄URL鐢ㄣ伄URL銉儵銈ゃ儓銈掋偟銉濄兗銉堛仐銇︺亜銇俱仚銆傘仧銇ㄣ亪銇般丟oogle銇偗銉兗銉┿兗銇岃í鍟忋仐銈勩仚銇 https://www.geeklog.net/article.php/20031229225326631 + 銇倛銇嗐仾URL銈掓寔銇ゃ亾銇ㄣ亴銇с亶銇俱仚銆 +
    • +
    • 銉椼儵銈般偆銉炽伅銆丟eeklog銇柊銇椼亜銉栥儹銉冦偗銇嫭鑷伄銈汇偗銈枫儳銉炽倰杩藉姞銇с亶銇俱仚銆
    • +
    • 銇欍伖銇︺伄URL銉曘偅銉笺儷銉夈伅銆255鏂囧瓧銇俱仹淇濆瓨銇屻仹銇嶃伨銇(銉嗐兗銉炪伄銈€儍銉椼儑銉笺儓銇屽繀瑕併仹銇)銆

    銉嗐兗銉炲鏇淬伄瀹屽叏銇儶銈广儓銇銉嗐兗銉炪伄瑾槑銈掋仈鍙傜収銇忋仩銇曘亜銆

    闈欑殑銉氥兗銈搞儣銉┿偘銈ゃ兂1.4銈備粬銇敼鑹偣銇惈銇俱倢銇︺亰銈娿丳HP銇畆eturn鏂囥倰浣裤倧銇氥伀銆侀潤鐨勩儦銉笺偢銇玃HP銈掔祫銇胯炯銈杩藉姞銇偑銉椼偡銉с兂姗熻兘銇屻亗銈娿伨銇欍

    銉愩偘淇

      -
    • 妞滅储銈偍銉亱銈夈伄鏂囧瓧銇併偝銉°兂銉堝唴銇с儚銈ゃ儵銈ゃ儓銇曘倢銇︺亜銇俱仚銆傘伨銇熴佹绱€偗銈ㄣ儶銇'*' 鏂囧瓧銈掑惈銈鏅傘伅銆併儚銈ゃ儵銈ゃ儓銇欍倠銇撱仺銇у晱椤屻倰淇銇椼伨銇椼仧銆
    • -
    • 妞滅储銈儵銈广仹銇仌銇俱仏銇俱仾淇
    • -
    • 绌恒伄銉︺兗銈躲兗鍚嶃仹銉︺兗銈躲兗銇岀櫥閷层仹銇嶃倠銉愩偘銇屼慨姝c仌銈屻伨銇椼仧銆
    • -
    • 銉︺兗銈躲兗銈掍竴鎷偆銉炽儩銉笺儓銇椼仸銇勩倠鏅傘併仢銇儲銉笺偠銉笺伅銇裤仾鑷嫊鐨勩伀銉囥偆銉兗銉銈ゃ偢銈с偣銉堛倰璩艰銇椼仸銇勩伨銇椼仧銆(浠c倧銈娿伀 $_CONF['emailstoriesperdefault'] 銇ō瀹氥倰浣裤亜銇俱仚銆)
    • -
    • Root銈般儷銉笺儣(銇熴仺銇堛伆绠$悊鑰)銇儲銉笺偠銉笺亴浠ュ墠鍒╃敤銇с亶銇熴偝銉°兂銉堝墛闄ゃ伄銈儣銈枫儳銉虫鑳姐亴淇銇曘倢銇俱仐銇熴傚疅闅涖伄瑷樹簨銇銇椼仸瑷樹簨绶ㄩ泦瑷卞彲銈掓寔銇c仸銇勩倠銉︺兗銈躲兗銇併偝銉°兂銉堛倰鍓婇櫎銇с亶銇俱仚銆
    • -
    • 銈般儷銉笺儣銇墛闄ゃ伅銆 group_assignments 銉嗐兗銉栥儷銇绔嬨仐銇熼爡鐩亴娈嬨倠鍫村悎銇屻亗銈娿伨銇(銇撱倢銇従鍦ㄤ慨姝c仌銈屻伨銇椼仧)銆 1.3.9銇偄銉冦儣銈般儸銉笺儔銇欍倠鍫村悎銆併偆銉炽偣銉堛兗銉伄銈广偗銉儣銉堛伅銆併儑銉笺偪銉欍兗銈广亱銈夊绔嬨仐銇熼爡鐩倰绉诲嫊銇欍倠銇撱仺銇仾銈娿伨銇欍
    • +
    • 妞滅储銈偍銉亱銈夈伄鏂囧瓧銇併偝銉°兂銉堝唴銇с儚銈ゃ儵銈ゃ儓銇曘倢銇︺亜銇俱仚銆傘伨銇熴佹绱€偗銈ㄣ儶銇'*' 鏂囧瓧銈掑惈銈鏅傘伅銆併儚銈ゃ儵銈ゃ儓銇欍倠銇撱仺銇у晱椤屻倰淇銇椼伨銇椼仧銆
    • +
    • 妞滅储銈儵銈广仹銇仌銇俱仏銇俱仾淇
    • +
    • 绌恒伄銉︺兗銈躲兗鍚嶃仹銉︺兗銈躲兗銇岀櫥閷层仹銇嶃倠銉愩偘銇屼慨姝c仌銈屻伨銇椼仧銆
    • +
    • 銉︺兗銈躲兗銈掍竴鎷偆銉炽儩銉笺儓銇椼仸銇勩倠鏅傘併仢銇儲銉笺偠銉笺伅銇裤仾鑷嫊鐨勩伀銉囥偆銉兗銉銈ゃ偢銈с偣銉堛倰璩艰銇椼仸銇勩伨銇椼仧銆(浠c倧銈娿伀 $_CONF['emailstoriesperdefault'] 銇ō瀹氥倰浣裤亜銇俱仚銆) +
    • +
    • Root銈般儷銉笺儣(銇熴仺銇堛伆绠$悊鑰)銇儲銉笺偠銉笺亴浠ュ墠鍒╃敤銇с亶銇熴偝銉°兂銉堝墛闄ゃ伄銈儣銈枫儳銉虫鑳姐亴淇銇曘倢銇俱仐銇熴傚疅闅涖伄瑷樹簨銇銇椼仸瑷樹簨绶ㄩ泦瑷卞彲銈掓寔銇c仸銇勩倠銉︺兗銈躲兗銇併偝銉°兂銉堛倰鍓婇櫎銇с亶銇俱仚銆
    • +
    • 銈般儷銉笺儣銇墛闄ゃ伅銆 group_assignments 銉嗐兗銉栥儷銇绔嬨仐銇熼爡鐩亴娈嬨倠鍫村悎銇屻亗銈娿伨銇(銇撱倢銇従鍦ㄤ慨姝c仌銈屻伨銇椼仧)銆 + 1.3.9銇偄銉冦儣銈般儸銉笺儔銇欍倠鍫村悎銆併偆銉炽偣銉堛兗銉伄銈广偗銉儣銉堛伅銆併儑銉笺偪銉欍兗銈广亱銈夊绔嬨仐銇熼爡鐩倰绉诲嫊銇欍倠銇撱仺銇仾銈娿伨銇欍 +

    銈汇偔銉ャ儶銉嗐偅銆佺壒銇玈QL銈ゃ兂銈搞偋銈偡銉с兂銇銇欍倠銈汇偔銉ャ儶銉嗐偅銈掓敼鍠勩仚銈嬨仧銈併伀澶氥亸銇鏇淬亴銇傘倞銇俱仐銇熴

    Geeklog 1.3.8-1sr6

    鏈儶銉兗銈广伅銆佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇俱仐銇熴

      -
    • 瑷瑾炪儠銈°偆銉唴銇鏁$topic銈掍娇銇嗐亾銇ㄣ仹鐢熴仒銇熴偗銉偣銈点偆銉堛兓銈广偗銉儣銉嗐偅銉炽偘銇剢寮辨с亴淇銇曘倢銇俱仐銇(bug #293)銆
    • -
    • 瑷樹簨銈勩偄銉炽偙銉笺儓銇枹銇欍倠銈炽儭銉炽儓銇樊銇楁銈併仹銆併偝銉°兂銉堛伄閫佷俊銇屾鑳藉仠姝€伀銇倞銇俱仐銇熴
    • +
    • 瑷瑾炪儠銈°偆銉唴銇鏁$topic銈掍娇銇嗐亾銇ㄣ仹鐢熴仒銇熴偗銉偣銈点偆銉堛兓銈广偗銉儣銉嗐偅銉炽偘銇剢寮辨с亴淇銇曘倢銇俱仐銇(bug #293)銆
    • +
    • 瑷樹簨銈勩偄銉炽偙銉笺儓銇枹銇欍倠銈炽儭銉炽儓銇樊銇楁銈併仹銆併偝銉°兂銉堛伄閫佷俊銇屾鑳藉仠姝€伀銇倞銇俱仐銇熴

    Geeklog 1.3.8-1sr5

    鏈儶銉兗銈广伅銆佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇俱仐銇熴

      -
    • 銈层偣銉堛儲銉笺偠銉笺伄銈炽儭銉炽儓鎶曠ǹ銇宑onfig.php銇х劇鍔广伀銇曘倢銇︺亜銇︺倐銆併偝銉°兂銉堟姇绋裤亴鍙兘銇с仐銇熴
      銇撱伄銉愩偘銇佹槑銈夈亱銇竴瀹氥伄Geeklog銇偟銈ゃ儓銇告暟鐧俱伄銈广儜銉犮儭銉笺儷銈掗佷俊銇欍倠銇熴倎銇併偣銉戙優銉笺伀銈堛仯銇﹂枊鐧恒仌銈屻仧銈傘伄銇с仚銆
    • +
    • 銈层偣銉堛儲銉笺偠銉笺伄銈炽儭銉炽儓鎶曠ǹ銇宑onfig.php銇х劇鍔广伀銇曘倢銇︺亜銇︺倐銆併偝銉°兂銉堟姇绋裤亴鍙兘銇с仐銇熴
      銇撱伄銉愩偘銇佹槑銈夈亱銇竴瀹氥伄Geeklog銇偟銈ゃ儓銇告暟鐧俱伄銈广儜銉犮儭銉笺儷銈掗佷俊銇欍倠銇熴倎銇併偣銉戙優銉笺伀銈堛仯銇﹂枊鐧恒仌銈屻仧銈傘伄銇с仚銆 +

    Geeklog 1.3.8-1sr4

    鏈儶銉兗銈广伅銆佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇俱仐銇熴

      -
    • 绠$悊鑰呫偘銉兗銉椼伄銉︺兗銈躲兗銈勩儲銉笺偠銉肩鐞嗚呫偘銉兗銉椼亴銆丷oot銈般儷銉笺儣銇儭銉炽儛銇仾銈嬨亾銇ㄣ亴鍙兘銇с仐銇(Samuel M. Stone銇牨鍛娿乥ug #135)銆
    • -
    • 銇傘倠銈ㄣ儶銈€伄绠$悊鑰呫伀銇倠銇(瑷樹簨銇枹銇欍倠瑷樹簨绠$悊鑰呫仾銇)銆併儲銉笺偠銉笺亴銇濄亾銇偄銈偦銈广倰瑷卞彲銇曘倢銇︺亜銇亸銇︺倐銆併偑銉栥偢銈с偗銉堛伄ID銈掔煡銇c仸銇勩倢銇般併仢銇偍銉偄鍐(瑷樹簨銇仼)銇仚銇广仸銇偑銉栥偢銈с偗銉堛倰鍓婇櫎銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧銆
    • -
    • 銈ゃ儥銉炽儓ID銈掔煡銇c仸銇勩倢銇般佷粬銇汉銇儜銉笺偨銉娿儷銈ゃ儥銉炽儓銈掑墛闄ゃ仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴
    • -
    • 銉︺兗銈躲兗銇屽疅闅涖伄瑷樹簨銇偄銈偦銈广仐銇亸銇︺倐銆佽浜嬨伄銈炽儭銉炽儓銈掕銈嬨亾銇ㄣ亴鍙兘銇с仐銇(Peter Roozemaal銇牨鍛)銆
    • -
    • 銈儹銈广偟銈ゃ儓銉汇偣銈儶銉椼儐銈c兂銈板晱椤屻伄銇熴倎銇佽銇嬨伄銈€偒銈︺兂銉堣ō瀹氥倰鍙栧緱銇椼仸銆佺壒銇阀濡欍伀浣溿倝銈屻仧銉兂銈倰銈儶銉冦偗銇椼仧鍫村悎銆併仢銇ō瀹(銉戙偣銉兗銉夈倰鍚個)銈掑鏇淬仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴 (Jelmer銇牨鍛娿乂incent Furia銇倛銈婃彁妗堛仌銈屻仧淇)
    • -
    • SQL銇偆銉炽偢銈с偗銈枫儳銉炽伄鍙兘鎬с亱銈夈併偝銉°兂銉堣〃绀恒伀闅滃銇岃捣銇嶃伨銇椼仧(Jelmer銇牨鍛)銆
    • -
    • 銈儸銉炽儉銉笺伀Javascript銈炽兗銉夈倰鍏ャ倢銈嬨亾銇ㄣ亴鍙兘銇с仐銇(Jelmer銇牨鍛)銆
    • -
    • 銈炽儭銉炽儓銉椼儸銉撱儱銉笺伄Javascript銈炽兗銉夈倰瀹熻銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧(Jelmer銇牨鍛)銆
    • +
    • 绠$悊鑰呫偘銉兗銉椼伄銉︺兗銈躲兗銈勩儲銉笺偠銉肩鐞嗚呫偘銉兗銉椼亴銆丷oot銈般儷銉笺儣銇儭銉炽儛銇仾銈嬨亾銇ㄣ亴鍙兘銇с仐銇(Samuel M. Stone銇牨鍛娿乥ug #135)銆
    • +
    • 銇傘倠銈ㄣ儶銈€伄绠$悊鑰呫伀銇倠銇(瑷樹簨銇枹銇欍倠瑷樹簨绠$悊鑰呫仾銇)銆併儲銉笺偠銉笺亴銇濄亾銇偄銈偦銈广倰瑷卞彲銇曘倢銇︺亜銇亸銇︺倐銆併偑銉栥偢銈с偗銉堛伄ID銈掔煡銇c仸銇勩倢銇般併仢銇偍銉偄鍐(瑷樹簨銇仼)銇仚銇广仸銇偑銉栥偢銈с偗銉堛倰鍓婇櫎銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧銆
    • +
    • 銈ゃ儥銉炽儓ID銈掔煡銇c仸銇勩倢銇般佷粬銇汉銇儜銉笺偨銉娿儷銈ゃ儥銉炽儓銈掑墛闄ゃ仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴
    • +
    • 銉︺兗銈躲兗銇屽疅闅涖伄瑷樹簨銇偄銈偦銈广仐銇亸銇︺倐銆佽浜嬨伄銈炽儭銉炽儓銈掕銈嬨亾銇ㄣ亴鍙兘銇с仐銇(Peter Roozemaal銇牨鍛)銆
    • +
    • 銈儹銈广偟銈ゃ儓銉汇偣銈儶銉椼儐銈c兂銈板晱椤屻伄銇熴倎銇佽銇嬨伄銈€偒銈︺兂銉堣ō瀹氥倰鍙栧緱銇椼仸銆佺壒銇阀濡欍伀浣溿倝銈屻仧銉兂銈倰銈儶銉冦偗銇椼仧鍫村悎銆併仢銇ō瀹(銉戙偣銉兗銉夈倰鍚個)銈掑鏇淬仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴 (Jelmer銇牨鍛娿乂incent + Furia銇倛銈婃彁妗堛仌銈屻仧淇) +
    • +
    • SQL銇偆銉炽偢銈с偗銈枫儳銉炽伄鍙兘鎬с亱銈夈併偝銉°兂銉堣〃绀恒伀闅滃銇岃捣銇嶃伨銇椼仧(Jelmer銇牨鍛)銆
    • +
    • 銈儸銉炽儉銉笺伀Javascript銈炽兗銉夈倰鍏ャ倢銈嬨亾銇ㄣ亴鍙兘銇с仐銇(Jelmer銇牨鍛)銆
    • +
    • 銈炽儭銉炽儓銉椼儸銉撱儱銉笺伄Javascript銈炽兗銉夈倰瀹熻銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧(Jelmer銇牨鍛)銆

    Geeklog 1.3.8-1sr3

    鏈儶銉兗銈广伅銆佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅闁㈤c伄鍟忛銇蹇溿仐銇俱仐銇熴

      -
    • 鎸囨憳銇曘倢銇︺亜銈"dr.wh0"銇倛銇嗐伀銆併儶銉炽偗鎶曠ǹ鐢ㄣ伄銈儐銈淬儶銉汇儠銈c兗銉儔銇併伨銇c仧銇忋儠銈c儷銈裤儶銉炽偘銇曘倢銇︺亜銇俱仜銈撱仹銇椼仧銆32鏂囧瓧銇у銇忋伄闅滃銈掔敓銇樸仌銇涖倠銇撱仺銇亰銇濄倝銇忋仹銇嶃伨銇涖倱銇屻佺従鍦ㄣ亾銈屻伅淇銇曘倢銇俱仐銇熴
    • -
    • Vincent Furia銇屻併儲銉笺偠銉煎悜銇戙伄E銉°兗銉伄銉曘偐銉笺儬銇銇欍倠鍒剁磩銈掑洖閬裤仚銈嬨亾銇ㄣ亴銇с亶銆併仢銇埗绱勩倰銈广儜銉犮儲銉笺偠銉笺伀浣跨敤銇欍倠銇撱仺銈傘仹銇嶃倠銇撱仺銈掔櫤瑕嬨仐銇俱仐銇熴傘亾銈屻倝銇晱椤屻伄淇銇姞銇堛併仢銇儠銈┿兗銉犮伀銇熷害鍒堕檺銈傘亗銈娿伨銇欍(瑷樹簨鎶曠ǹ銇熷害鍒堕檺銇銇欍倠銉囥儠銈┿儷銉)
    • -
    • 銈层偣銉堛儲銉笺偠銉笺伄銈炽儭銉炽儓閫佷俊銇屽仠姝€仌銈屻仧鍫村悎銇с倐銆侀佷俊銇欍倠鏂规硶銇屻亗銈娿伨銇椼仧銆
    • -
    • 銇汇亱銇銇嬨伄銉︺兗銈躲兗鍚嶃仹銈炽儭銉炽儓銈掗佷俊銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧銆
    • +
    • + 鎸囨憳銇曘倢銇︺亜銈"dr.wh0"銇倛銇嗐伀銆併儶銉炽偗鎶曠ǹ鐢ㄣ伄銈儐銈淬儶銉汇儠銈c兗銉儔銇併伨銇c仧銇忋儠銈c儷銈裤儶銉炽偘銇曘倢銇︺亜銇俱仜銈撱仹銇椼仧銆32鏂囧瓧銇у銇忋伄闅滃銈掔敓銇樸仌銇涖倠銇撱仺銇亰銇濄倝銇忋仹銇嶃伨銇涖倱銇屻佺従鍦ㄣ亾銈屻伅淇銇曘倢銇俱仐銇熴 +
    • +
    • Vincent + Furia銇屻併儲銉笺偠銉煎悜銇戙伄E銉°兗銉伄銉曘偐銉笺儬銇銇欍倠鍒剁磩銈掑洖閬裤仚銈嬨亾銇ㄣ亴銇с亶銆併仢銇埗绱勩倰銈广儜銉犮儲銉笺偠銉笺伀浣跨敤銇欍倠銇撱仺銈傘仹銇嶃倠銇撱仺銈掔櫤瑕嬨仐銇俱仐銇熴傘亾銈屻倝銇晱椤屻伄淇銇姞銇堛併仢銇儠銈┿兗銉犮伀銇熷害鍒堕檺銈傘亗銈娿伨銇欍(瑷樹簨鎶曠ǹ銇熷害鍒堕檺銇銇欍倠銉囥儠銈┿儷銉) +
    • +
    • 銈层偣銉堛儲銉笺偠銉笺伄銈炽儭銉炽儓閫佷俊銇屽仠姝€仌銈屻仧鍫村悎銇с倐銆侀佷俊銇欍倠鏂规硶銇屻亗銈娿伨銇椼仧銆
    • +
    • 銇汇亱銇銇嬨伄銉︺兗銈躲兗鍚嶃仹銈炽儭銉炽儓銈掗佷俊銇欍倠銇撱仺銇屽彲鑳姐仹銇椼仧銆

    Geeklog 1.3.8-1sr2

    -

    Jouko Pynnonen 銇屻1.3.8銇у皫鍏ャ仐銇熸柊銇熴仾銆屻儜銈广儻銉笺儔鍐嶇櫤琛屻嶃伄姗熻兘銈掍娇銇c仸銆佹敾鎾冭呫亴銈€偒銈︺兂銉堛伄銉戙偣銉兗銉夈倰澶夈亪銇︺仐銇俱亞鏂规硶銈掔櫤瑕嬨仐銇俱仐銇熴傘亾銇儶銉兗銈广伅銆併亾銇晱椤屻伀瀵惧繙銇椼伨銇椼仧銆傘仢銇粬銇鏇淬伅銇傘倞銇俱仜銈撱仹銇椼仧銆

    +

    Jouko Pynnonen + 銇屻1.3.8銇у皫鍏ャ仐銇熸柊銇熴仾銆屻儜銈广儻銉笺儔鍐嶇櫤琛屻嶃伄姗熻兘銈掍娇銇c仸銆佹敾鎾冭呫亴銈€偒銈︺兂銉堛伄銉戙偣銉兗銉夈倰澶夈亪銇︺仐銇俱亞鏂规硶銈掔櫤瑕嬨仐銇俱仐銇熴傘亾銇儶銉兗銈广伅銆併亾銇晱椤屻伀瀵惧繙銇椼伨銇椼仧銆傘仢銇粬銇鏇淬伅銇傘倞銇俱仜銈撱仹銇椼仧銆

    銇с亶銈嬨仩銇戞棭銇忋偄銉冦儣銈般儸銉笺儔銇欍倠銇撱仺銈掋亰鍕с倎銇椼伨銇欍

    Geeklog 1.3.8-1sr1

    鏈儶銉兗銈广伄鎺茶級鐩殑銇2003骞淬伄9鏈堛仺10鏈堝垵鏃伀鍫卞憡銇曘倢銇熴偦銈儱銉儐銈e晱椤屻伀瀵惧繙銇欍倠銇撱仺銇с仚銆傛湰銉愩兗銈搞儳銉炽伀銈€儍銉椼偘銉兗銉夈仚銈嬨亾銇ㄣ倰寮枫亸銇婂嫥銈併仐銇俱仚銆

    銈汇偔銉ャ儶銉嗐偅鍟忛

      -
    • Ulf Harnhammar's kses HTML銉曘偅銉偪銉笺倰绲勩伩杈笺個銇撱仺銇倛銈娿併亾銇儶銉兗銈广伅绋呫伄瀹熻鍙兘銇狫avascript銈ゃ兂銈搞偋銈偡銉с兂銇–SS銇敼澶夊晱椤屻伀瀵惧繙銇椼仸銇勩伨銇欍
    • -
    • SQL銈ㄣ儵銉笺伄瑭崇窗銇併儢銉┿偊銈躲兗銇с伅銇撱倢浠ヤ笂鍫卞憡銇曘倢銈嬨亾銇ㄣ伅銇傘倞銇俱仜銈撱(Geeklog銇 error.log銉曘偂銈ゃ儷銇犮亼銇у牨鍛娿仌銈屻伨銇欍) 銇撱倢銇併偍銉┿兗銉°儍銈汇兗銈(鍫卞憡銇曘倢銇烻QL銈ゃ兂銈搞偋銈偡銉с兂鍟忛銇с倧銇嬨仯銇熴儓銉┿儢銉伀闄愩倞)銇竴閮ㄣ仺銇椼仸閲嶈銇儏鍫便亴婕忔穿銇欍倠銇撱仺銈掗槻銇愩倐銇仹銇欍
    • +
    • Ulf Harnhammar's kses + HTML銉曘偅銉偪銉笺倰绲勩伩杈笺個銇撱仺銇倛銈娿併亾銇儶銉兗銈广伅绋呫伄瀹熻鍙兘銇狫avascript銈ゃ兂銈搞偋銈偡銉с兂銇–SS銇敼澶夊晱椤屻伀瀵惧繙銇椼仸銇勩伨銇欍 +
    • +
    • SQL銈ㄣ儵銉笺伄瑭崇窗銇併儢銉┿偊銈躲兗銇с伅銇撱倢浠ヤ笂鍫卞憡銇曘倢銈嬨亾銇ㄣ伅銇傘倞銇俱仜銈撱(Geeklog銇 error.log銉曘偂銈ゃ儷銇犮亼銇у牨鍛娿仌銈屻伨銇欍) + 銇撱倢銇併偍銉┿兗銉°儍銈汇兗銈(鍫卞憡銇曘倢銇烻QL銈ゃ兂銈搞偋銈偡銉с兂鍟忛銇с倧銇嬨仯銇熴儓銉┿儢銉伀闄愩倞)銇竴閮ㄣ仺銇椼仸閲嶈銇儏鍫便亴婕忔穿銇欍倠銇撱仺銈掗槻銇愩倐銇仹銇欍 +
    -

    鐝惧湪銇疢ySQL4.1銇eeklog銈掍娇鐢ㄣ仚銈嬨亾銇ㄣ倰鎺ㄥエ銇椼仸銇勩仾銇銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜銆(銇撱倢銇屾浉銇嬨倢銇熸檪鐐广仹銇併偄銉儠銈°儶銉兗銈规闅庛仹瀹熼殯銇鍍嶃仐銇︺亜銈嬨偟銈ゃ儓涓娿仹銇娇鐢ㄣ仌銈屻仸銇勩伨銇涖倱銆)Geeklog銇銇儶銉兗銈广伀銇丼QL銈ゃ兂銈搞偋銈偡銉с兂銈掋倛銈婂畬鍏ㄣ伀銉曘偅銉偪銉兂銈般仚銈嬫鑳姐亴銇ゃ亶銆丮ySQL4.1銇с伄銉堛儵銉栥儷銈掍慨姝c仐銇俱仚銆

    +

    鐝惧湪銇疢ySQL4.1銇eeklog銈掍娇鐢ㄣ仚銈嬨亾銇ㄣ倰鎺ㄥエ銇椼仸銇勩仾銇銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜銆(銇撱倢銇屾浉銇嬨倢銇熸檪鐐广仹銇併偄銉儠銈°儶銉兗銈规闅庛仹瀹熼殯銇鍍嶃仐銇︺亜銈嬨偟銈ゃ儓涓娿仹銇娇鐢ㄣ仌銈屻仸銇勩伨銇涖倱銆)Geeklog銇銇儶銉兗銈广伀銇丼QL銈ゃ兂銈搞偋銈偡銉с兂銈掋倛銈婂畬鍏ㄣ伀銉曘偅銉偪銉兂銈般仚銈嬫鑳姐亴銇ゃ亶銆丮ySQL4.1銇с伄銉堛儵銉栥儷銈掍慨姝c仐銇俱仚銆 +

    銇濄伄浠栥伄淇

      -
    • URL銇儩銉笺儓鐣彿(example.com:8080銇仼)銇屽惈銇俱倢銇︺亜銇熷牬鍚堛佸鏁 $_CONF['cookiedomain'] 銇ゃ伄鑷嫊妞滅储銇屼慨姝c仌銈屻伨銇椼仧銆傘亾銈屻仹銆佷竴閮ㄣ伄銉︺兗銈躲兗銇屽牨鍛娿仐銇︺亜銇熴儹銈般偆銉炽伄銉堛儵銉栥儷銇屼慨姝c仌銈屻伨銇欍
    • -
    • 1.3.8-1sr1銇畬鍏ㄣ仾銈裤兗銉溿兗銉伀銈傘併偄銉冦儣銉囥兗銉堛仌銈屻仧銉曘儵銉炽偣瑾(銈儕銉)銈勩儓銉偝瑾炪伄銉曘偂銈ゃ儷銇屽惈銇俱倢銇俱仚銆
    • +
    • URL銇儩銉笺儓鐣彿(example.com:8080銇仼)銇屽惈銇俱倢銇︺亜銇熷牬鍚堛佸鏁 $_CONF['cookiedomain'] + 銇ゃ伄鑷嫊妞滅储銇屼慨姝c仌銈屻伨銇椼仧銆傘亾銈屻仹銆佷竴閮ㄣ伄銉︺兗銈躲兗銇屽牨鍛娿仐銇︺亜銇熴儹銈般偆銉炽伄銉堛儵銉栥儷銇屼慨姝c仌銈屻伨銇欍 +
    • +
    • 1.3.8-1sr1銇畬鍏ㄣ仾銈裤兗銉溿兗銉伀銈傘併偄銉冦儣銉囥兗銉堛仌銈屻仧銉曘儵銉炽偣瑾(銈儕銉)銈勩儓銉偝瑾炪伄銉曘偂銈ゃ儷銇屽惈銇俱倢銇俱仚銆

    Geeklog 1.3.8-1

    Geeklog 1.3.8-1銇丟eeklog1.3.8銇銇欍倠銉愩偘淇銇儶銉兗銈广仹銇欍傘仌銇俱仏銇俱仾(銇汇仺銈撱仼銉炪偆銉娿兗銇)銉愩偘淇銇屽惈銇俱倢銇︺亜銇俱仚銆傘仢銈屻倝銇晱椤屻伅銆併仼銈屻倐銈汇偔銉ャ儶銉嗐偅銇枹閫c仐銇︺亜銇俱仜銈撱

    銉愩偘淇

      -
    • 浠ュ墠銇1.3.8銇嫊浣(妞滅储绲愭灉銇屾埢銇c仸銇撱仾銇勫牬鍚堛 $_CONF['searchloginrequired'] 銈掍娇銇c仸銈傘亞涓搴︽绱€儠銈┿兗銉犮倰琛ㄧず銇欍倠銇仼)銈掑京娲汇仌銇涖倠鏂般仐銇勬绱㈡鑳姐伀淇銇椼伨銇欍傘伨銇熸棩浠樸伀銈堛倠妞滅储銈掍慨姝c仐銇俱仐銇熴
    • -
    • MySQL銉愩兗銈搞儳銉炽伄纰鸿獚銈掕│銇裤仧鍫村悎銇併偆銉炽偣銉堛兗銉偣銈儶銉椼儓銇晱椤屻伅淇銇曘倢銇俱仐銇熴傘偆銉炽偣銉堛兗銉偣銈儶銉椼儓銇丳HP-4.0.4浠ュ墠銇儛銉笺偢銉с兂銇с伅浣滃嫊銇椼伨銇涖倱銇с仐銇熴
    • -
    • 鐢诲儚銈掑惈銈瑷樹簨銇枹閫c儢銉儍銈伄銉堛儵銉栥儷銇慨姝c仌銈屻伨銇椼仧銆
    • -
    • 銉囥偆銉兗銉銈ゃ偢銈с偣銉堛倰閫佷俊銇欍倠銇ㄣ亶銆併偛銈广儓銉︺兗銈躲兗銈掑璞°亱銈夊銇欍倛銇嗐伀銇椼伨銇椼仧銆
    • -
    • 绠$悊鑰呫亴銉︺兗銈躲兗銇瓻銉°兗銉偄銉夈儸銈广倰澶夋洿銇欍倠闅涖佸垾銇儲銉笺偠銉笺亴銇欍仹銇娇鐢ㄣ仐銇︺亜銈嬨偄銉夈儸銈广仺閲嶈銇椼仾銇勩倛銇嗐伀銇椼伨銇椼仧銆
    • -
    • 瑷樹簨銈掑墛闄ゃ仚銈嬨仺銇嶃伅銆丷SS銉曘偅銉笺儔銇ㄥ彜銇勮浜嬨儢銉儍銈倰銈€儍銉椼儑銉笺儓銇欍倠銈堛亞銇仐銇俱仐銇熴
    • +
    • 浠ュ墠銇1.3.8銇嫊浣(妞滅储绲愭灉銇屾埢銇c仸銇撱仾銇勫牬鍚堛 $_CONF['searchloginrequired'] + 銈掍娇銇c仸銈傘亞涓搴︽绱€儠銈┿兗銉犮倰琛ㄧず銇欍倠銇仼)銈掑京娲汇仌銇涖倠鏂般仐銇勬绱㈡鑳姐伀淇銇椼伨銇欍傘伨銇熸棩浠樸伀銈堛倠妞滅储銈掍慨姝c仐銇俱仐銇熴 +
    • +
    • MySQL銉愩兗銈搞儳銉炽伄纰鸿獚銈掕│銇裤仧鍫村悎銇併偆銉炽偣銉堛兗銉偣銈儶銉椼儓銇晱椤屻伅淇銇曘倢銇俱仐銇熴傘偆銉炽偣銉堛兗銉偣銈儶銉椼儓銇丳HP-4.0.4浠ュ墠銇儛銉笺偢銉с兂銇с伅浣滃嫊銇椼伨銇涖倱銇с仐銇熴
    • +
    • 鐢诲儚銈掑惈銈瑷樹簨銇枹閫c儢銉儍銈伄銉堛儵銉栥儷銇慨姝c仌銈屻伨銇椼仧銆
    • +
    • 銉囥偆銉兗銉銈ゃ偢銈с偣銉堛倰閫佷俊銇欍倠銇ㄣ亶銆併偛銈广儓銉︺兗銈躲兗銈掑璞°亱銈夊銇欍倛銇嗐伀銇椼伨銇椼仧銆
    • +
    • 绠$悊鑰呫亴銉︺兗銈躲兗銇瓻銉°兗銉偄銉夈儸銈广倰澶夋洿銇欍倠闅涖佸垾銇儲銉笺偠銉笺亴銇欍仹銇娇鐢ㄣ仐銇︺亜銈嬨偄銉夈儸銈广仺閲嶈銇椼仾銇勩倛銇嗐伀銇椼伨銇椼仧銆
    • +
    • 瑷樹簨銈掑墛闄ゃ仚銈嬨仺銇嶃伅銆丷SS銉曘偅銉笺儔銇ㄥ彜銇勮浜嬨儢銉儍銈倰銈€儍銉椼儑銉笺儓銇欍倠銈堛亞銇仐銇俱仐銇熴

    1.3.8-1銇畬鍏ㄣ仾銈裤兗銉溿兗銉伀銈傘佹柊銇椼亸銈€儍銉椼儑銉笺儓銇曘倢銇熻█瑾炪儠銈°偆銉亴鍚伨銈屻伨銇欍(瑭崇窗銇疌hangelog銈掋仈鍙傜収銇忋仩銇曘亜銆)

    Geeklog 1.3.8

    鏂版鑳

    -

    Geeklog 1.3.8銇伅銆侀潤鐨勩儦銉笺偢1.1銇1.2銇儣銉┿偘銈ゃ兂銇浮鏂广伀鏇裤倧銈闈欑殑銉氥兗銈1.3銉椼儵銈般偆銉銇屽惈銇俱倢銇︺亜銇俱仚銆傝┏绱般伀銇ゃ亜銇︺伅闈欑殑銉氥兗銈搞伄瑾槑銈掋仈瑕с亸銇犮仌銇勩

    -
      -
    • 妞滅储姗熻兘銇屾洿鏂般仌銈屻伨銇椼仧銆傘儦銉笺偢銈勩仚銇广仸銇█钁夈併偗銈ㄣ儶銇嬨倝銇仼銈撱仾瑷钁夈倐閬╁垏銇绱€仹銇嶃伨銇欍傛绱€仚銈嬭█钁夈伅瑷樹簨銇腑銇с儚銈ゃ儵銈ゃ儓銇曘倢銇俱仚銆
    • -
    • 鏂般仧銇儣銉┿偆銉愩偡銉笺兓銈儣銈枫儳銉: 銉︺兗銈躲兗銇佷粬銇儲銉笺偠銉笺倓绠$悊鑰呫亱銈夈伄E銉°兗銉倰鍙椼亼鍙栥倠銇嬨仼銇嗐亱銆併偑銉炽儵銈ゃ兂銉栥儹銉冦偗銇嚜鍒嗐伄鍚嶅墠銈掑嚭銇欍亱銇┿亞銇嬨倰姹恒倎銈嬨亾銇ㄣ亴銇с亶銇俱仚銆
    • -
    • 銇傘倠銈般儷銉笺儣銇亜銈嬨仚銇广仸銇儲銉笺偠銉笺伄銉偣銉堛倰鍙栧緱銇欍倠銇撱仺銇屻仹銇嶃伨銇(绠$悊鑰呫偘銉兗銉椼伄銈ㄣ儑銈c偪銉笺亱銈)銆
    • -
    • 銉偟銈ゃ偤銇岃浜嬨伄鐢诲儚鐢ㄣ伀瑷畾銇曘倢銇︺亜銈嬪牬鍚堛併儶銈点偆銈恒仌銈屻仸銇勩仾銇勭敾鍍忋倰淇濈銇с亶銇俱仚(鏈鍒濄伀config.php銇цō瀹氥仌銈屻仸銇勩仾銇戙倢銇般亜銇戙伨銇涖倱銆)銆傘仢銇倛銇嗐仾鍫村悎銆佽浜嬨伄涓伄銉偟銈ゃ偤銇椼仧鐢诲儚銇皬銇曘亸銇仯銇︺併偑銉偢銉娿儷銇敾鍍忋伀銉兂銈仌銈屻伨銇欍
    • -
    • 銇傘倠瑭遍銈掋儑銉曘偐銉儓銇┍椤屻伀銇с亶銇俱仚銆傝浜嬨伄鎶曠ǹ銉曘偐銉笺儬銇с伄瑭遍閬告姙銇с併仢銇┍椤屻亴銉囥儠銈┿儷銉堛伀銇倞銇俱仚銆傘仐銇嬨仐銆佽┍椤 (index.php?topic=Geeklog 銇仼)銇ч柌瑕с仚銈嬪牬鍚堛佹柊銇椼亜瑷樹簨銇姇绋裤伅銆佺従鍦ㄣ伄瑭遍銇屻儑銉曘偐銉儓銇仾銈娿伨銇欍
    • -
    • 銉︺兗銈躲兗銇儲銉笺偠銉煎悕銈掑鏇淬仌銇涖仧銈娿併偄銈偊銉炽儓銈掑墛闄ゃ仌銇涖仧銈娿仚銈嬨亾銇ㄣ亴銇с亶銇俱仚銆備浮鏂广伄姗熻兘銇ㄣ倐銇玞onfig.php銇ф湁鍔广伀銇欍倠蹇呰銇屻亗銈娿伨銇欍
    • -
    • 鎷″嫉銉椼儵銈般偆銉矨PI: 銉椼儵銈般偆銉炽伅銆丟eeklog銇偦銉炽偪銉笺儢銉儍銈伄銈炽兂銉嗐兂銉勩倰琛ㄧず銇欍倠銇撱仺銇屻仹銇嶃併儲銉笺偠銉笺伄銉椼儹銉曘偅銉笺儷銇儣銉┿偘銈ゃ兂鑷韩銇儏鍫便倰杩藉姞銇с亶銆併伨銇熴偟銈ゃ儓銇儤銉冦儉銉(<head>銈汇偗銈枫儳銉)銇儏鍫便倰杩藉姞銇欍倠銇撱仺銈傘仹銇嶃伨銇欍
    • -
    • 銈偣銈裤儬鐧婚尣銉曘偐銉笺儬鐢ㄣ伀鏂般仐銇凙PI銇屻亗銈娿伨銇 (銈点兂銉椼儷銈炽兗銉夈伅lib-custom.php銈掋仈鍙傜収銇忋仩銇曘亜銆)銆
    • -
    • 銉忋兗銉夈偝銉笺儔銇曘倢銇烪TML銇ぇ閮ㄥ垎銈掋儐銉炽儣銉兗銉堛儠銈°偆銉伀绉诲嫊銇椼併儐銉笺優銉囥偠銈ゃ儕銉笺伀銉偆銈€偊銉堛伄绠$悊銈掋仌銇涖倠銇熴倎銇佸皯銇椼儐銉笺優銇鏇淬亴銇傘倞銇俱仐銇熴傚鏇淬儶銈广儓銇銉嗐兗銉炪伄瑾槑銈掋仈瑕с亸銇犮仌銇勩
    • +

      Geeklog 1.3.8銇伅銆侀潤鐨勩儦銉笺偢1.1銇1.2銇儣銉┿偘銈ゃ兂銇浮鏂广伀鏇裤倧銈闈欑殑銉氥兗銈1.3銉椼儵銈般偆銉銇屽惈銇俱倢銇︺亜銇俱仚銆傝┏绱般伀銇ゃ亜銇︺伅闈欑殑銉氥兗銈搞伄瑾槑銈掋仈瑕с亸銇犮仌銇勩

      +
        +
      • 妞滅储姗熻兘銇屾洿鏂般仌銈屻伨銇椼仧銆傘儦銉笺偢銈勩仚銇广仸銇█钁夈併偗銈ㄣ儶銇嬨倝銇仼銈撱仾瑷钁夈倐閬╁垏銇绱€仹銇嶃伨銇欍傛绱€仚銈嬭█钁夈伅瑷樹簨銇腑銇с儚銈ゃ儵銈ゃ儓銇曘倢銇俱仚銆
      • +
      • 鏂般仧銇儣銉┿偆銉愩偡銉笺兓銈儣銈枫儳銉: 銉︺兗銈躲兗銇佷粬銇儲銉笺偠銉笺倓绠$悊鑰呫亱銈夈伄E銉°兗銉倰鍙椼亼鍙栥倠銇嬨仼銇嗐亱銆併偑銉炽儵銈ゃ兂銉栥儹銉冦偗銇嚜鍒嗐伄鍚嶅墠銈掑嚭銇欍亱銇┿亞銇嬨倰姹恒倎銈嬨亾銇ㄣ亴銇с亶銇俱仚銆
      • +
      • 銇傘倠銈般儷銉笺儣銇亜銈嬨仚銇广仸銇儲銉笺偠銉笺伄銉偣銉堛倰鍙栧緱銇欍倠銇撱仺銇屻仹銇嶃伨銇(绠$悊鑰呫偘銉兗銉椼伄銈ㄣ儑銈c偪銉笺亱銈)銆
      • +
      • + 銉偟銈ゃ偤銇岃浜嬨伄鐢诲儚鐢ㄣ伀瑷畾銇曘倢銇︺亜銈嬪牬鍚堛併儶銈点偆銈恒仌銈屻仸銇勩仾銇勭敾鍍忋倰淇濈銇с亶銇俱仚(鏈鍒濄伀config.php銇цō瀹氥仌銈屻仸銇勩仾銇戙倢銇般亜銇戙伨銇涖倱銆)銆傘仢銇倛銇嗐仾鍫村悎銆佽浜嬨伄涓伄銉偟銈ゃ偤銇椼仧鐢诲儚銇皬銇曘亸銇仯銇︺併偑銉偢銉娿儷銇敾鍍忋伀銉兂銈仌銈屻伨銇欍 +
      • +
      • 銇傘倠瑭遍銈掋儑銉曘偐銉儓銇┍椤屻伀銇с亶銇俱仚銆傝浜嬨伄鎶曠ǹ銉曘偐銉笺儬銇с伄瑭遍閬告姙銇с併仢銇┍椤屻亴銉囥儠銈┿儷銉堛伀銇倞銇俱仚銆傘仐銇嬨仐銆佽┍椤 (index.php?topic=Geeklog + 銇仼)銇ч柌瑕с仚銈嬪牬鍚堛佹柊銇椼亜瑷樹簨銇姇绋裤伅銆佺従鍦ㄣ伄瑭遍銇屻儑銉曘偐銉儓銇仾銈娿伨銇欍 +
      • +
      • 銉︺兗銈躲兗銇儲銉笺偠銉煎悕銈掑鏇淬仌銇涖仧銈娿併偄銈偊銉炽儓銈掑墛闄ゃ仌銇涖仧銈娿仚銈嬨亾銇ㄣ亴銇с亶銇俱仚銆備浮鏂广伄姗熻兘銇ㄣ倐銇玞onfig.php銇ф湁鍔广伀銇欍倠蹇呰銇屻亗銈娿伨銇欍
      • +
      • 鎷″嫉銉椼儵銈般偆銉矨PI: 銉椼儵銈般偆銉炽伅銆丟eeklog銇偦銉炽偪銉笺儢銉儍銈伄銈炽兂銉嗐兂銉勩倰琛ㄧず銇欍倠銇撱仺銇屻仹銇嶃併儲銉笺偠銉笺伄銉椼儹銉曘偅銉笺儷銇儣銉┿偘銈ゃ兂鑷韩銇儏鍫便倰杩藉姞銇с亶銆併伨銇熴偟銈ゃ儓銇儤銉冦儉銉(<head>銈汇偗銈枫儳銉)銇儏鍫便倰杩藉姞銇欍倠銇撱仺銈傘仹銇嶃伨銇欍
      • +
      • 銈偣銈裤儬鐧婚尣銉曘偐銉笺儬鐢ㄣ伀鏂般仐銇凙PI銇屻亗銈娿伨銇 (銈点兂銉椼儷銈炽兗銉夈伅lib-custom.php銈掋仈鍙傜収銇忋仩銇曘亜銆)銆
      • +
      • 銉忋兗銉夈偝銉笺儔銇曘倢銇烪TML銇ぇ閮ㄥ垎銈掋儐銉炽儣銉兗銉堛儠銈°偆銉伀绉诲嫊銇椼併儐銉笺優銉囥偠銈ゃ儕銉笺伀銉偆銈€偊銉堛伄绠$悊銈掋仌銇涖倠銇熴倎銇佸皯銇椼儐銉笺優銇鏇淬亴銇傘倞銇俱仐銇熴傚鏇淬儶銈广儓銇銉嗐兗銉炪伄瑾槑銈掋仈瑕с亸銇犮仌銇勩 +

      銉愩偘淇

        -
      • 銆屻儜銈广儻銉笺儔鍐嶈ō瀹氥嶆鑳姐亴銉儵銈ゃ儓銇曘倢銇俱仐銇熴傚彜銇勩儜銈广儻銉笺儔銈掋儶銈汇儍銉堛仐銇︽柊銇椼亜銉戙偣銉兗銉夈倰閫佷俊銇欍倠浠c倧銈娿伀銆佺壒瀹氥伄銉兂銈倰鍚個E銉°兗銉倰鍙椾俊銇椼伨銇欍傘亾銇儶銉炽偗銇緭銇堛伆銆佺洿鎺ユ柊銇椼亜銉戙偣銉兗銉夈倰鐧婚尣銇欍倠銇撱仺銇屻仹銇嶃伨銇欍傜櫥閷层仐銇亜鍫村悎銇佸崢銇仢銇瓻銉°兗銉倰鐒¤銇欍倠銇撱仺銇屻仹銇嶃佸彜銇勩儜銈广儻銉笺儔銇屾湁鍔广伄銇俱伨銇ㄣ仾銈娿伨銇欍
      • -
      • 瑭遍銇偄銈偦銈广亴蹇呫仛銇椼倐閬╁垏銇儊銈с儍銈仌銈屻仸銇亜銇俱仜銈撱仹銇椼仧銆傝浜嬨伄绠$悊鑰呫亴銆1.3.8銇偄銉冦儣銈般儸銉笺儔銇椼仧寰屻仹瀹氱京銇曘倢銇熴儭銉冦偦銉笺偢銇偄銈偦銈广仐銇熴亾銇ㄣ倰浼濄亪銇︺亶銇熴倝銆併亗銇仧銇┍椤屻儜銉笺儫銉冦偡銉с兂銈掓敞鎰忋仐銇︺儊銈с儍銈仐銇︺亸銇犮仌銇勩
      • -
      • 銈€兂銈便兗銉堛偍銉囥偅銈裤兗銇с佸洖绛斻倰1鍥炰綑瑷堛伀鍏ュ姏銇с亶銇︺亜銇俱仐銇(銇熴仺銇堛伆銆佸洖绛斻伄鏈澶у洖鏁般亴10鍥炪伀瑷畾銇曘倢銇︺亜銈嬪牬鍚堛佸疅闅涖伀銇11鍥炲叆鍔涘彲鑳姐仹銇椼仧銆)銆傘偄銉炽偙銉笺儓銈掋儊銈с儍銈仐銇︺亸銇犮仌銇勩傘偄銉炽偙銉笺儓鍥炵瓟銇渶澶у洖鏁般倰瓒呫亪銇︺亜銇熴倝銆佹渶寰屻伄鍥炵瓟銇岀劇鍔广伀銇仯銇︺亜銈嬨亱銈傘仐銈屻伨銇涖倱銆 (蹇呰銇繙銇樸仸銆 $_CONF['maxanswers'] 銇ㄣ仐銇︺亸銇犮仌銇勩)
      • -
      • Geeklog銇丮ySQL銇彜銇勩儛銉笺偢銉с兂(鐗广伀3.22.锝橈綐)銇с偆銉炽偣銉堛兗銉仐銇﹀啀銇冲嫊浣溿仚銈嬨倛銇嗐伀銇倞銇俱仐銇熴傘亾銈屻倝銇彜銇勩儛銉笺偢銉с兂銇丮ySQL AB銇с偟銉濄兗銉堛仹銇嶃仾銇勩倐銇倐銇傘倞銆3.23.54銈堛倞鍙ゃ亜銈傘伄銈掋偆銉炽偣銉堛兗銉仐銇︺亜銈婱ySQL銇伅銆併偦銈儱銉儐銈e晱椤屻亴銇傘倠銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜銆
      • +
      • + 銆屻儜銈广儻銉笺儔鍐嶈ō瀹氥嶆鑳姐亴銉儵銈ゃ儓銇曘倢銇俱仐銇熴傚彜銇勩儜銈广儻銉笺儔銈掋儶銈汇儍銉堛仐銇︽柊銇椼亜銉戙偣銉兗銉夈倰閫佷俊銇欍倠浠c倧銈娿伀銆佺壒瀹氥伄銉兂銈倰鍚個E銉°兗銉倰鍙椾俊銇椼伨銇欍傘亾銇儶銉炽偗銇緭銇堛伆銆佺洿鎺ユ柊銇椼亜銉戙偣銉兗銉夈倰鐧婚尣銇欍倠銇撱仺銇屻仹銇嶃伨銇欍傜櫥閷层仐銇亜鍫村悎銇佸崢銇仢銇瓻銉°兗銉倰鐒¤銇欍倠銇撱仺銇屻仹銇嶃佸彜銇勩儜銈广儻銉笺儔銇屾湁鍔广伄銇俱伨銇ㄣ仾銈娿伨銇欍 +
      • +
      • 瑭遍銇偄銈偦銈广亴蹇呫仛銇椼倐閬╁垏銇儊銈с儍銈仌銈屻仸銇亜銇俱仜銈撱仹銇椼仧銆傝浜嬨伄绠$悊鑰呫亴銆1.3.8銇偄銉冦儣銈般儸銉笺儔銇椼仧寰屻仹瀹氱京銇曘倢銇熴儭銉冦偦銉笺偢銇偄銈偦銈广仐銇熴亾銇ㄣ倰浼濄亪銇︺亶銇熴倝銆併亗銇仧銇┍椤屻儜銉笺儫銉冦偡銉с兂銈掓敞鎰忋仐銇︺儊銈с儍銈仐銇︺亸銇犮仌銇勩 +
      • +
      • + 銈€兂銈便兗銉堛偍銉囥偅銈裤兗銇с佸洖绛斻倰1鍥炰綑瑷堛伀鍏ュ姏銇с亶銇︺亜銇俱仐銇(銇熴仺銇堛伆銆佸洖绛斻伄鏈澶у洖鏁般亴10鍥炪伀瑷畾銇曘倢銇︺亜銈嬪牬鍚堛佸疅闅涖伀銇11鍥炲叆鍔涘彲鑳姐仹銇椼仧銆)銆傘偄銉炽偙銉笺儓銈掋儊銈с儍銈仐銇︺亸銇犮仌銇勩傘偄銉炽偙銉笺儓鍥炵瓟銇渶澶у洖鏁般倰瓒呫亪銇︺亜銇熴倝銆佹渶寰屻伄鍥炵瓟銇岀劇鍔广伀銇仯銇︺亜銈嬨亱銈傘仐銈屻伨銇涖倱銆 + (蹇呰銇繙銇樸仸銆 $_CONF['maxanswers'] 銇ㄣ仐銇︺亸銇犮仌銇勩) +
      • +
      • Geeklog銇丮ySQL銇彜銇勩儛銉笺偢銉с兂(鐗广伀3.22.锝橈綐)銇с偆銉炽偣銉堛兗銉仐銇﹀啀銇冲嫊浣溿仚銈嬨倛銇嗐伀銇倞銇俱仐銇熴傘亾銈屻倝銇彜銇勩儛銉笺偢銉с兂銇丮ySQL + AB銇с偟銉濄兗銉堛仹銇嶃仾銇勩倐銇倐銇傘倞銆3.23.54銈堛倞鍙ゃ亜銈傘伄銈掋偆銉炽偣銉堛兗銉仐銇︺亜銈婱ySQL銇伅銆併偦銈儱銉儐銈e晱椤屻亴銇傘倠銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜銆 +

      Geeklog 1.3.7sr5

      鏈儶銉兗銈广伅銆佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銇蹇溿仐銇俱仐銇熴

        -
      • 绠$悊鑰呫偘銉兗銉椼伄銉︺兗銈躲兗銇ㄣ儲銉笺偠銉肩鐞嗐偘銉兗銉椼亴銆丷oot銈般儷銉笺儣銇儭銉炽儛銇仾銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴 (Samuel M. Stone銇牨鍛 bug #135)
      • -
      • 銉︺兗銈躲兗銇岃浜嬨伀銈€偗銈汇偣銇欍倠銇撱仺銇岃ū銇曘倢銇︺亜銇亸銇︺倐銆併偑銉栥偢銈с偗銉堛伄ID銈掔煡銇c仸銇勩倢銇般併亗銈嬨偍銉偄(銇熴仺銇堛伆銆佽浜嬨伄瑷樹簨绠$悊鑰)銇鐞嗚呫伀銇倠銇撱仺銇с併仢銇偍銉偄銇仚銇广仸銇偑銉栥偢銈с偗銉(銇熴仺銇堛伆銆佽浜)銈掑墛闄ゅ彲鑳姐仹銇椼仧銆
      • -
      • 銈ゃ儥銉炽儓ID銈掔煡銇c仸銇勩倢銇般佷粬銇汉銇儜銉笺偨銉娿儷銈ゃ儥銉炽儓銈掑墛闄ゃ仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴
      • -
      • 銉︺兗銈躲兗銇屽疅闅涖伄瑷樹簨銇偄銈偦銈广仐銇亸銇︺倐銆佽浜嬨伄銈炽儭銉炽儓銈掗柌瑕с仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴(Peter Roozemaal銇牨鍛)
      • -
      • 銈儹銈广偟銈ゃ儓銉汇偣銈儶銉椼儐銈c兂銈板晱椤屻伄銇熴倎銇佽銇嬨伄銈€偒銈︺兂銉堣ō瀹氥倰鍙栧緱銇椼仸銆佺壒銇阀濡欍伀浣溿倝銈屻仧銉兂銈倰銈儶銉冦偗銇椼仧鍫村悎銆併仢銇ō瀹(銉戙偣銉兗銉夈倰鍚個)銈掑鏇淬仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴 (Jelmer銇牨鍛娿乂incent Furia銇倛銈婃彁妗堛仌銈屻仧淇)
      • -
      • SQL銈ゃ兂銈搞偋銈偡銉с兂銇彲鑳芥с亱銈夈併偝銉°兂銉堣〃绀恒伀闅滃銇岃捣銇嶃伨銇椼仧銆 (Jelmer銇牨鍛)
      • -
      • 銈儸銉炽儉銉笺伀Javascript銈炽兗銉夈倰涓嶆銇尶鍏ャ仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇 (Jelmer銇牨鍛)銆
      • -
      • 銈炽儭銉炽儓銉椼儸銉撱儱銉笺伄Javascript銈炽兗銉夈倰瀹熻鍙兘銇с仐銇熴(淇濆瓨銇仹銇嶃仾銇勩)(Jelmer銇牨鍛)
      • +
      • 绠$悊鑰呫偘銉兗銉椼伄銉︺兗銈躲兗銇ㄣ儲銉笺偠銉肩鐞嗐偘銉兗銉椼亴銆丷oot銈般儷銉笺儣銇儭銉炽儛銇仾銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴 (Samuel M. Stone銇牨鍛 bug #135)
      • +
      • 銉︺兗銈躲兗銇岃浜嬨伀銈€偗銈汇偣銇欍倠銇撱仺銇岃ū銇曘倢銇︺亜銇亸銇︺倐銆併偑銉栥偢銈с偗銉堛伄ID銈掔煡銇c仸銇勩倢銇般併亗銈嬨偍銉偄(銇熴仺銇堛伆銆佽浜嬨伄瑷樹簨绠$悊鑰)銇鐞嗚呫伀銇倠銇撱仺銇с併仢銇偍銉偄銇仚銇广仸銇偑銉栥偢銈с偗銉(銇熴仺銇堛伆銆佽浜)銈掑墛闄ゅ彲鑳姐仹銇椼仧銆
      • +
      • 銈ゃ儥銉炽儓ID銈掔煡銇c仸銇勩倢銇般佷粬銇汉銇儜銉笺偨銉娿儷銈ゃ儥銉炽儓銈掑墛闄ゃ仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴
      • +
      • 銉︺兗銈躲兗銇屽疅闅涖伄瑷樹簨銇偄銈偦銈广仐銇亸銇︺倐銆佽浜嬨伄銈炽儭銉炽儓銈掗柌瑕с仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴(Peter Roozemaal銇牨鍛)
      • +
      • 銈儹銈广偟銈ゃ儓銉汇偣銈儶銉椼儐銈c兂銈板晱椤屻伄銇熴倎銇佽銇嬨伄銈€偒銈︺兂銉堣ō瀹氥倰鍙栧緱銇椼仸銆佺壒銇阀濡欍伀浣溿倝銈屻仧銉兂銈倰銈儶銉冦偗銇椼仧鍫村悎銆併仢銇ō瀹(銉戙偣銉兗銉夈倰鍚個)銈掑鏇淬仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴 (Jelmer銇牨鍛娿乂incent + Furia銇倛銈婃彁妗堛仌銈屻仧淇) +
      • +
      • SQL銈ゃ兂銈搞偋銈偡銉с兂銇彲鑳芥с亱銈夈併偝銉°兂銉堣〃绀恒伀闅滃銇岃捣銇嶃伨銇椼仧銆 (Jelmer銇牨鍛)
      • +
      • 銈儸銉炽儉銉笺伀Javascript銈炽兗銉夈倰涓嶆銇尶鍏ャ仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇 (Jelmer銇牨鍛)銆
      • +
      • 銈炽儭銉炽儓銉椼儸銉撱儱銉笺伄Javascript銈炽兗銉夈倰瀹熻鍙兘銇с仐銇熴(淇濆瓨銇仹銇嶃仾銇勩)(Jelmer銇牨鍛)

      Geeklog 1.3.7sr4

      鏈儶銉兗銈广伅銆佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅闁㈤c伄鍟忛銇蹇溿仐銇俱仐銇熴

        -
      • 鎸囨憳銇曘倢銇︺亜銈"dr.wh0"銇倛銇嗐伀銆併儶銉炽偗鎶曠ǹ鐢ㄣ伄銈儐銈淬儶銉汇儠銈c兗銉儔銇併伨銇c仧銇忋儠銈c儷銈裤儶銉炽偘銇曘倢銇︺亜銇俱仜銈撱仹銇椼仧銆32鏂囧瓧銇у銇忋伄闅滃銈掔敓銇樸仌銇涖倠銇撱仺銇亰銇濄倝銇忋仹銇嶃伨銇涖倱銇屻佺従鍦ㄣ亾銈屻伅淇銇曘倢銇俱仐銇熴
      • -
      • Vincent Furia 銇屻併儲銉笺偠銉煎悜銇戙伄E銉°兗銉伄銉曘偐銉笺儬銇銇欍倠鍒剁磩銈掑洖閬裤仚銈嬨亾銇ㄣ亴銇с亶銆併仢銇埗绱勩倰銈广儜銉犮儲銉笺偠銉笺伀浣跨敤銇欍倠銇撱仺銈傘仹銇嶃倠銇撱仺銈掔櫤瑕嬨仐銇俱仐銇熴
      • -
      • 銈层偣銉堛儲銉笺偠銉笺伄銈炽儭銉炽儓閫佷俊銇屽仠姝€仌銈屻仧鍫村悎銇с倐銆侀佷俊銇с亶銈嬫柟娉曘亴銇傘倞銇俱仐銇熴
      • -
      • 銇汇亱銇銇嬨伄銉︺兗銈躲兗鍚嶃仹銈炽儭銉炽儓銈掗併倠銇撱仺銇屽彲鑳姐仹銇椼仧銆
      • +
      • + 鎸囨憳銇曘倢銇︺亜銈"dr.wh0"銇倛銇嗐伀銆併儶銉炽偗鎶曠ǹ鐢ㄣ伄銈儐銈淬儶銉汇儠銈c兗銉儔銇併伨銇c仧銇忋儠銈c儷銈裤儶銉炽偘銇曘倢銇︺亜銇俱仜銈撱仹銇椼仧銆32鏂囧瓧銇у銇忋伄闅滃銈掔敓銇樸仌銇涖倠銇撱仺銇亰銇濄倝銇忋仹銇嶃伨銇涖倱銇屻佺従鍦ㄣ亾銈屻伅淇銇曘倢銇俱仐銇熴 +
      • +
      • Vincent Furia 銇屻併儲銉笺偠銉煎悜銇戙伄E銉°兗銉伄銉曘偐銉笺儬銇銇欍倠鍒剁磩銈掑洖閬裤仚銈嬨亾銇ㄣ亴銇с亶銆併仢銇埗绱勩倰銈广儜銉犮儲銉笺偠銉笺伀浣跨敤銇欍倠銇撱仺銈傘仹銇嶃倠銇撱仺銈掔櫤瑕嬨仐銇俱仐銇熴
      • +
      • 銈层偣銉堛儲銉笺偠銉笺伄銈炽儭銉炽儓閫佷俊銇屽仠姝€仌銈屻仧鍫村悎銇с倐銆侀佷俊銇с亶銈嬫柟娉曘亴銇傘倞銇俱仐銇熴
      • +
      • 銇汇亱銇銇嬨伄銉︺兗銈躲兗鍚嶃仹銈炽儭銉炽儓銈掗併倠銇撱仺銇屽彲鑳姐仹銇椼仧銆

      Geeklog 1.3.7sr3

      -

      鏈儶銉兗銈广伄鐩殑銇2003骞淬伄9鏈堛仺10鏈堝垵鏃伀鍫卞憡銇曘倢銇熴偦銈儱銉儐銈e晱椤屻倰瀵惧繙銇欍倠銇撱仺銇с仚銆侴eeklog銇渶鏂般儛銉笺偢銉с兂(銇撱倢銇屾浉銇嬨倢銇︺亜銈嬫檪鐐广仹銆1.3.8-1sr1)銇偄銉冦儣銈般儸銉笺儔銇欍倠浜堝畾銇屻仾銇勬柟銇伅銆佷唬銈忋倞銇皯銇亸銇ㄣ倐1.3.7sr3銇偄銉冦儣銈般儸銉笺儔銇欍倠銇撱仺銈掋亰鍕с倎銇椼伨銇欍

      +

      + 鏈儶銉兗銈广伄鐩殑銇2003骞淬伄9鏈堛仺10鏈堝垵鏃伀鍫卞憡銇曘倢銇熴偦銈儱銉儐銈e晱椤屻倰瀵惧繙銇欍倠銇撱仺銇с仚銆侴eeklog銇渶鏂般儛銉笺偢銉с兂(銇撱倢銇屾浉銇嬨倢銇︺亜銈嬫檪鐐广仹銆1.3.8-1sr1)銇偄銉冦儣銈般儸銉笺儔銇欍倠浜堝畾銇屻仾銇勬柟銇伅銆佷唬銈忋倞銇皯銇亸銇ㄣ倐1.3.7sr3銇偄銉冦儣銈般儸銉笺儔銇欍倠銇撱仺銈掋亰鍕с倎銇椼伨銇欍

      銈汇偔銉ャ儶銉嗐偅鍟忛

        -
      • Ulf Harnhammar's kses HTML銉曘偅銉偪銉笺倰绲勩伩杈笺個銇撱仺銇倛銈娿併亾銇儶銉兗銈广伅绋呫伄瀹熻鍙兘銇狫avascript銇偆銉炽偢銈с偗銈枫儳銉炽仺CSS銇敼澶夊晱椤屻伀瀵惧繙銇椼仸銇勩伨銇欍
      • -
      • SQL銈ㄣ儵銉笺伄瑭崇窗銇儢銉┿偊銈躲兗銇с伅銇撱倢浠ヤ笂鍫卞憡銇曘倢銈嬨亾銇ㄣ伅銇傘倞銇俱仜銈(Geeklog銇 error.log 銉曘偂銈ゃ儷銇犮亼銇у牨鍛娿仌銈屻伨銇欍)銆傘亾銈屻伅銆併偍銉┿兗銉°儍銈汇兗銈(鍫卞憡銇曘倢銇烻QL銈ゃ兂銈搞偋銈偡銉с兂鍟忛銇с倧銇嬨仯銇熴儓銉┿儢銉伀闄愩倞)銇竴閮ㄣ仺銇椼仸閲嶈銇儏鍫便伄婕忔穿銈掗槻銇愩倐銇仹銇欍
      • +
      • Ulf Harnhammar's kses + HTML銉曘偅銉偪銉笺倰绲勩伩杈笺個銇撱仺銇倛銈娿併亾銇儶銉兗銈广伅绋呫伄瀹熻鍙兘銇狫avascript銇偆銉炽偢銈с偗銈枫儳銉炽仺CSS銇敼澶夊晱椤屻伀瀵惧繙銇椼仸銇勩伨銇欍 +
      • +
      • SQL銈ㄣ儵銉笺伄瑭崇窗銇儢銉┿偊銈躲兗銇с伅銇撱倢浠ヤ笂鍫卞憡銇曘倢銈嬨亾銇ㄣ伅銇傘倞銇俱仜銈(Geeklog銇 error.log + 銉曘偂銈ゃ儷銇犮亼銇у牨鍛娿仌銈屻伨銇欍)銆傘亾銈屻伅銆併偍銉┿兗銉°儍銈汇兗銈(鍫卞憡銇曘倢銇烻QL銈ゃ兂銈搞偋銈偡銉с兂鍟忛銇с倧銇嬨仯銇熴儓銉┿儢銉伀闄愩倞)銇竴閮ㄣ仺銇椼仸閲嶈銇儏鍫便伄婕忔穿銈掗槻銇愩倐銇仹銇欍 +
      -

      鐝惧湪銇疢ySQL4.1銇eeklog銈掍娇鐢ㄣ仚銈嬨亾銇ㄣ倰鎺ㄥエ銇椼仸銇勩仾銇銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜(銇撱倢銇屾浉銇嬨倢銇熸檪鐐广仹銇併偄銉儠銈°儶銉兗銈规闅庛仹瀹熼殯銇亱鐢ㄣ仌銈屻仸銇勩倠銈点偆銉堜笂銇с伅浣跨敤銇曘倢銇︺亜銇俱仜銈撱)銆侴eeklog銇銇儶銉兗銈广伀銇丼QL銈ゃ兂銈搞偋銈偡銉с兂銈掋倛銈婂畬鍏ㄣ伀銉曘偅銉偪銉兂銈般仚銈嬫鑳姐亴銇ゃ亶銆丮ySQL4.1銇с儓銉┿儢銉倰淇銇椼伨銇欍

      +

      鐝惧湪銇疢ySQL4.1銇eeklog銈掍娇鐢ㄣ仚銈嬨亾銇ㄣ倰鎺ㄥエ銇椼仸銇勩仾銇銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜(銇撱倢銇屾浉銇嬨倢銇熸檪鐐广仹銇併偄銉儠銈°儶銉兗銈规闅庛仹瀹熼殯銇亱鐢ㄣ仌銈屻仸銇勩倠銈点偆銉堜笂銇с伅浣跨敤銇曘倢銇︺亜銇俱仜銈撱)銆侴eeklog銇銇儶銉兗銈广伀銇丼QL銈ゃ兂銈搞偋銈偡銉с兂銈掋倛銈婂畬鍏ㄣ伀銉曘偅銉偪銉兂銈般仚銈嬫鑳姐亴銇ゃ亶銆丮ySQL4.1銇с儓銉┿儢銉倰淇銇椼伨銇欍 +

      Geeklog 1.3.7sr2

      銈汇偔銉ャ儶銉嗐偅鍟忛

      鏈儶銉兗銈广伄鐩殑銇佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銈掍慨姝c仚銈嬨亾銇ㄣ仹銇欍傘仚銇广仸銇儲銉笺偠銉笺伀銇佹湰銉愩兗銈搞儳銉炽伀銇с亶銈嬨仩銇戦熴倓銇嬨伀銈€儍銉椼偘銉兗銉夈仚銈嬨亾銇ㄣ倰寮枫亸銇婂嫥銈併仐銇俱仚銆

        -
      • 绠$悊鑰呫偄銈偊銉炽儓銈掑惈銈併丟eeklog銈点偆銉堛伄銈€偒銈︺兂銉堛仈銇ㄣ伀鏈夊姽銇偦銉冦偡銉с兂ID銈掑彇寰椼仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴 (SCAN銈€偨銈枫偍銈ゃ儎銇牨鍛)
      • -
      • Internet Explorer銈掍娇銇嗐仺銆佸煁銈佽炯銇俱倢銇烶HP銈炽兗銉夈仹鐢诲儚銈掋偄銉冦儣銉兗銉夈仹銇嶃佸疅琛屻仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴 (SCAN 銈€偨銈枫偍銈ゃ儎銇牨鍛)
      • -
      • 瑷樹簨銇儜銉笺儫銉冦偡銉с兂銇岃┍椤屻伄銉戙兗銉熴儍銈枫儳銉炽倰鐒″姽銇仐銇︺仐銇俱亜銆併偄銈偦銈广仹銇嶃仾銇嬨仯銇熴儲銉笺偠銉笺伀瑷樹簨銈掕〃绀恒仚銈嬬祼鏋溿仺銇倞銇俱仐銇(Andrew Lawlor銇牨鍛)銆傘亾銈屻伅2003骞5鏈15鏃ャ伀銉儶銉笺偣銇曘倢銇熸柊銇椼亜index.php銇ф棦銇慨姝c仌銈屻伨銇椼仧銆
      • -
      • 浠ヤ笅銇偪銈般伄銇勩仛銈屻亱銈掕ū鍙仌銈屻仧HTML銇儶銈广儓銇拷鍔犮仚銈嬨仺銆併偟銈ゃ儓銇屻偣銈儶銉椼儓銇敾鎾冦倰鍙椼亼銈勩仚銇忋仾銇c仸銇椼伨銇嗐仺銇勩亞璀﹀憡銇宑onfig.php銇拷鍔犮仌銈屻伨銇椼仧銆
        <img> <span> <marquee> <script> <embed> <object> <iframe>
        (Joat Dede銇寚鎽)
      • +
      • 绠$悊鑰呫偄銈偊銉炽儓銈掑惈銈併丟eeklog銈点偆銉堛伄銈€偒銈︺兂銉堛仈銇ㄣ伀鏈夊姽銇偦銉冦偡銉с兂ID銈掑彇寰椼仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴 (SCAN銈€偨銈枫偍銈ゃ儎銇牨鍛)
      • +
      • Internet Explorer銈掍娇銇嗐仺銆佸煁銈佽炯銇俱倢銇烶HP銈炽兗銉夈仹鐢诲儚銈掋偄銉冦儣銉兗銉夈仹銇嶃佸疅琛屻仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴 (SCAN 銈€偨銈枫偍銈ゃ儎銇牨鍛)
      • +
      • 瑷樹簨銇儜銉笺儫銉冦偡銉с兂銇岃┍椤屻伄銉戙兗銉熴儍銈枫儳銉炽倰鐒″姽銇仐銇︺仐銇俱亜銆併偄銈偦銈广仹銇嶃仾銇嬨仯銇熴儲銉笺偠銉笺伀瑷樹簨銈掕〃绀恒仚銈嬬祼鏋溿仺銇倞銇俱仐銇(Andrew + Lawlor銇牨鍛)銆傘亾銈屻伅2003骞5鏈15鏃ャ伀銉儶銉笺偣銇曘倢銇熸柊銇椼亜index.php銇ф棦銇慨姝c仌銈屻伨銇椼仧銆 +
      • +
      • 浠ヤ笅銇偪銈般伄銇勩仛銈屻亱銈掕ū鍙仌銈屻仧HTML銇儶銈广儓銇拷鍔犮仚銈嬨仺銆併偟銈ゃ儓銇屻偣銈儶銉椼儓銇敾鎾冦倰鍙椼亼銈勩仚銇忋仾銇c仸銇椼伨銇嗐仺銇勩亞璀﹀憡銇宑onfig.php銇拷鍔犮仌銈屻伨銇椼仧銆
        <img> <span> <marquee> + <script> <embed> <object> <iframe>
        (Joat Dede銇寚鎽) +

      銇撱伄銈€儍銉椼儑銉笺儓銇伅銆併儲銉笺偠銉笺亴绠$悊銈ㄣ儶銈€仹瑕嬨倠銆屻偄銈偦銈广亴鎷掑惁銇曘倢銇俱仐銇熴嶃仺銇勩亞銈堛亸瑕嬨倝銈屻倠銈ㄣ儵銉笺儭銉冦偦銉笺偢銇銇欍倠淇銇屽惈銇俱倢銇︺亜銇俱仚銆(銇熴仺銇堛伆銆佽浜嬨倰淇濆瓨銇椼倛銇嗐仺銇椼仧銈娿佽浜嬬鐞嗚呰ū鍙伄銇傘倠銉︺兗銈躲兗銆屻伄銇裤嶃仺銇欍倠鍫村悎)

      1.3.7sr2銇畬鍏ㄣ仾銈裤兗銉溿兗銉伀銈傘併偄銉冦儣銉囥兗銉堛仌銈屻仧绋呫伄鏂般仐銇勮█瑾炪儠銈°偆銉亴鍚伨銈屻仸銇勩伨銇(瑭崇窗銇疌hangelog銈掋仈鍙傜収銇忋仩銇曘亜銆)銆

      @@ -907,75 +1109,93 @@

      Geeklog 1.3.7sr1

      銈汇偔銉ャ儶銉嗐偅鍟忛

      鏈儶銉兗銈广伄涓汇仾鐩殑銇佷互涓嬨伄銈汇偔銉ャ儶銉嗐偅鍟忛銈掍慨姝c仚銈嬨亾銇ㄣ仹銇欍傘儲銉笺偠銉笺伄鏂广伀銇佹湰銉愩兗銈搞儳銉炽伀銈€儍銉椼偘銉兗銉夈仚銈嬨亾銇ㄣ倰寮枫亸鎺ㄥエ銇勩仧銇椼伨銇欍

        -
      • Javascript銈炽兗銉夈倰銉︺兗銈躲兗銇儣銉儠銈c兗銉伄銉涖兗銉犮儦銉笺偢闈€伀鍩嬨倎杈笺個銇撱仺銇屽彲鑳姐仹銇椼仧銆 (Jin Yean Tan銇牨鍛)
      • -
      • Javascript銈炽兗銉夈倰銆併偗銉偣銈点偆銉堛兓銈广偗銉儣銉嗐偅銉炽偘鏀绘拑銇т娇鐢ㄣ仚銈嬨仧銈併伀銆佷竴瀹氥伄URL銇煁銈佽炯銈銇撱仺銇屽彲鑳姐仹銇椼仧銆(Jin Yean Tan銇牨鍛)
      • -
      • 銈炽儭銉炽儓ID(閫氬父銇銇堛伨銇涖倱)銈掔煡銇c仸銇勩倢銇般併偝銉°兂銉堛倰瑾般亱銇屽墛闄ゃ仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴
      • -
      • 瑷樹簨銇偄銈偦銈广仐銇亸銇︺倐(銇熴仺銇堛伆銆併亗銈嬨偘銉兗銉椼伄銉°兂銉愩仹銇亜鍫村悎)銆佽浜嬬鐞嗚呫亴瑷樹簨銈掓搷浣滃彲鑳姐仹銇椼仧銆傘偆銉欍兂銉堛併儶銉炽偗銆併偄銉炽偙銉笺儓銆佽┍椤屻併儢銉儍銈伄绠$悊鑰呫伀銈傚悓銇樸亾銇ㄣ亴鍙兘銇с仐銇(Kobaz銇牨鍛)銆
      • +
      • Javascript銈炽兗銉夈倰銉︺兗銈躲兗銇儣銉儠銈c兗銉伄銉涖兗銉犮儦銉笺偢闈€伀鍩嬨倎杈笺個銇撱仺銇屽彲鑳姐仹銇椼仧銆 (Jin Yean Tan銇牨鍛)
      • +
      • Javascript銈炽兗銉夈倰銆併偗銉偣銈点偆銉堛兓銈广偗銉儣銉嗐偅銉炽偘鏀绘拑銇т娇鐢ㄣ仚銈嬨仧銈併伀銆佷竴瀹氥伄URL銇煁銈佽炯銈銇撱仺銇屽彲鑳姐仹銇椼仧銆(Jin Yean Tan銇牨鍛)
      • +
      • 銈炽儭銉炽儓ID(閫氬父銇銇堛伨銇涖倱)銈掔煡銇c仸銇勩倢銇般併偝銉°兂銉堛倰瑾般亱銇屽墛闄ゃ仚銈嬨亾銇ㄣ亴鍙兘銇с仐銇熴
      • +
      • 瑷樹簨銇偄銈偦銈广仐銇亸銇︺倐(銇熴仺銇堛伆銆併亗銈嬨偘銉兗銉椼伄銉°兂銉愩仹銇亜鍫村悎)銆佽浜嬬鐞嗚呫亴瑷樹簨銈掓搷浣滃彲鑳姐仹銇椼仧銆傘偆銉欍兂銉堛併儶銉炽偗銆併偄銉炽偙銉笺儓銆佽┍椤屻併儢銉儍銈伄绠$悊鑰呫伀銈傚悓銇樸亾銇ㄣ亴鍙兘銇с仐銇(Kobaz銇牨鍛)銆

      銇濄伄浠栥伄銉愩偘淇

        -
      • index.php銇с併儶銉銈ゃ儸銈儓銇岀劇闄愩儷銉笺儣銇仾銈嬪彲鑳芥с倰淇銇椼伨銇椼仧銆 $HTTP_SERVER_VARS['HTTP_HOST'] 銇岃ō瀹氥仌銈屻仸銇勩仾銇戙倢銇般併儶銉銈ゃ儸銈儓銈掕捣銇撱仐銇俱仜銈撱傘伨銇熴佽ō瀹氥仺瀹熼殯銇偟銉笺儛銉嶃兗銉犮倰姣旇純銇欍倢銇般併倐銇嗕笉瀹夊畾銇姸鎱嬨伀銇仾銈娿伨銇涖倱銆
      • -
      • ImageMagick銈掍娇鐢ㄣ仚銈嬫檪銇併儶銈点偆銈恒仚銈嬬敾鍍忋倰淇銇椼伨銇椼仧銆
      • -
      • 銆屻儲銉笺偠銉笺嶃亴銆$_CONF['notification'] 銇櫥閷层仌銈屻仸銇勩仾銇忋仸銈傘佹柊銇椼亜銉︺兗銈躲兗閫氱煡E銉°兗銉(Geeklog1.3.7銇у皫鍏ャ仌銈屻仸銇勩倠)銇屽父銇佷俊銇曘倢銇俱仐銇熴
      • -
      • 绠$悊銉°儖銉ャ兗銇佺鐞嗘鑳姐伄銈炽偄銇竴閮ㄣ仹銇仾銇忋儣銉┿偘銈ゃ兂銇伩銇銇椼仸绠$悊鑰呫偄銈偦銈广仐銇︺亜銈嬨儲銉笺偠銉笺伀琛ㄧず銇曘倢銇︺亜銇俱仚銆
      • -
      • 銉囥偆銉兗銉銈ゃ偢銈с偣銉堢敤銇儑銉曘偐銉儓銇 off 銇埢銈娿伨銇欍傘仧銇ㄣ亪銇般佹柊銇椼亜銉︺兗銈躲兗銇嚜鍕曠殑銇儉銈ゃ偢銈с偣銉堛倰鍙椼亼鍙栥倞銇俱仜銈撱傛柊銇椼亜銉︺兗銈躲兗鍚戙亼銇儑銈ゃ儶銉笺儉銈ゃ偢銈с偣銉堛倰鍐嶃伋鍙兘銇仚銈嬨伀銇乧onfig.php銇 $_CONF['emailstoriesperdefault'] = 1 銈掕ō瀹氥仐銇︺亸銇犮仌銇勩
      • -
      -

      銉夈偔銉ャ儭銉炽儓鍙娿伋銉忋兗銉夈偝銉笺儔銇曘倢銇熴儶銉炽偗(銉愩兗銈搞儳銉炽儊銈с儍銈併偟銈ゃ儓銇儠銉冦偪銉笺伄Geeklog銇搞伄銉兂銈)銇https://www.geeklog.net/ 銇歌銇忋倛銇嗐伀銈€儍銉椼儑銉笺儓銇曘倢銇俱仐銇熴

      +
    • index.php銇с併儶銉銈ゃ儸銈儓銇岀劇闄愩儷銉笺儣銇仾銈嬪彲鑳芥с倰淇銇椼伨銇椼仧銆 $HTTP_SERVER_VARS['HTTP_HOST'] + 銇岃ō瀹氥仌銈屻仸銇勩仾銇戙倢銇般併儶銉銈ゃ儸銈儓銈掕捣銇撱仐銇俱仜銈撱傘伨銇熴佽ō瀹氥仺瀹熼殯銇偟銉笺儛銉嶃兗銉犮倰姣旇純銇欍倢銇般併倐銇嗕笉瀹夊畾銇姸鎱嬨伀銇仾銈娿伨銇涖倱銆 +
    • +
    • ImageMagick銈掍娇鐢ㄣ仚銈嬫檪銇併儶銈点偆銈恒仚銈嬬敾鍍忋倰淇銇椼伨銇椼仧銆
    • +
    • 銆屻儲銉笺偠銉笺嶃亴銆$_CONF['notification'] 銇櫥閷层仌銈屻仸銇勩仾銇忋仸銈傘佹柊銇椼亜銉︺兗銈躲兗閫氱煡E銉°兗銉(Geeklog1.3.7銇у皫鍏ャ仌銈屻仸銇勩倠)銇屽父銇佷俊銇曘倢銇俱仐銇熴
    • +
    • 绠$悊銉°儖銉ャ兗銇佺鐞嗘鑳姐伄銈炽偄銇竴閮ㄣ仹銇仾銇忋儣銉┿偘銈ゃ兂銇伩銇銇椼仸绠$悊鑰呫偄銈偦銈广仐銇︺亜銈嬨儲銉笺偠銉笺伀琛ㄧず銇曘倢銇︺亜銇俱仚銆
    • +
    • 銉囥偆銉兗銉銈ゃ偢銈с偣銉堢敤銇儑銉曘偐銉儓銇 off + 銇埢銈娿伨銇欍傘仧銇ㄣ亪銇般佹柊銇椼亜銉︺兗銈躲兗銇嚜鍕曠殑銇儉銈ゃ偢銈с偣銉堛倰鍙椼亼鍙栥倞銇俱仜銈撱傛柊銇椼亜銉︺兗銈躲兗鍚戙亼銇儑銈ゃ儶銉笺儉銈ゃ偢銈с偣銉堛倰鍐嶃伋鍙兘銇仚銈嬨伀銇乧onfig.php銇 $_CONF['emailstoriesperdefault'] + = 1 銈掕ō瀹氥仐銇︺亸銇犮仌銇勩 +
    • +
    +

    銉夈偔銉ャ儭銉炽儓鍙娿伋銉忋兗銉夈偝銉笺儔銇曘倢銇熴儶銉炽偗(銉愩兗銈搞儳銉炽儊銈с儍銈併偟銈ゃ儓銇儠銉冦偪銉笺伄Geeklog銇搞伄銉兂銈)銇https://www.geeklog.net/ 銇歌銇忋倛銇嗐伀銈€儍銉椼儑銉笺儓銇曘倢銇俱仐銇熴

    Geeklog 1.3.7

    鏂版鑳

      -
    • 閫氱煡E銉°兗銉伅銆佹柊銇椼亜瑷樹簨銆併儶銉炽偗銆併亗銈嬨亜銇偆銉欍兂銉堛亴鎺茶級銇曘倢銇熴亱銆佹柊銇椼亜銉︺兗銈躲兗銇屻仢銇偟銈ゃ儓銇櫥閷层仐銇熴仺銇嶃伀閫佷俊銇曘倢銇俱仚(瑭崇窗銇鎶曠ǹ銇ō瀹銈掋仈鍙傜収銇忋仩銇曘亜銆)銆
      銇撱伄姗熻兘銇孏eeklog銇偦銈儱銉儐銈f鑳姐仺涓绶掋伀銇仾銇c仸銇勩仾銇勩亾銇ㄣ伀銇旀敞鎰忋亸銇犮仌銇勩傚銇忋伄鏂广亱銈夈亾銇鑳芥с亴鏈涖伨銈屻仧銇仹銆佹湰褰撱伀銉忋儍銈互涓娿伄銈傘伄銇с仐銇熴
    • -
    • 鏂扮潃銉栥儹銉冦偗銇岄亷鍘24鏅傞枔銇浜嬨嶃倰銈儶銉冦偗銇欍倠銇ㄣ佹柊銇椼亜瑷樹簨銇岃〃绀恒仌銈屻伨銇欍
    • -
    • 銉︺兗銈躲兗銇啓鐪熴伅銆佽浜嬨伄鐢诲儚銇ㄥ悓銇樸亸銉偟銈ゃ偤銇曘倢銇︺亜銇俱仚(鐢诲儚銉┿偆銉栥儵銉伄浣跨敤銇岃ō瀹氥仌銈屻仸銇勩倠鍫村悎)銆傘儲銉笺偠銉笺伄鍐欑湡銇渶澶с偟銈ゃ偤銇乧onfig.php銇垾銆呫伄瑷畾澶夋暟銇цō瀹氥仹銇嶃伨銇欍
    • -
    • 銉椼儵銈般偆銉炽儭銉嬨儱銉笺伅銆併儠銈°偆銉偡銈广儐銉犮伀瀛樺湪銇欍倠銇屻伨銇犮偆銉炽偣銉堛兗銉仐銇︺亜銇亜銉椼儵銈般偆銉炽仚銇广仸銈掕〃绀恒仐銇︺亜銇俱仚銆傘伨銇熴佸鏄撱伀銈ゃ兂銈广儓銉笺儷銇с亶銈嬨倛銇嗐伀銆併仢銈屻倝銇儣銉┿偘銈ゃ兂銇偆銉炽偣銉堛兗銉偣銈儶銉椼儓銇搞伄銉兂銈倐鎻愪緵銇椼仸銇勩伨銇欍
    • -
    • 銇勩亸銇ゃ亱銇柊銇椼亜瑷畾澶夋暟銇屻乧onfig.php銇拷鍔犮仌銈屻伨銇椼仧銆(notification, showfirstasfeatured, dateonly, timeonly, skip_preview, upcomingeventsrange, emailstoryloginrequired, hideemailicon, hideprintericon, hidenewstories, hidenewcomments, hidenewlinks, max_photo_width, max_photo_height, max_photo_size). 瑭崇窗銇config銇鏄銈掋仈鍙傜収銇忋仩銇曘亜銆
    • -
    • 銉嗐兗銉炲鏇: 澶夋洿銉偣銉堛伅銉嗐兗銉炪伄瑾槑銈掋仈鍙傜収銇忋仩銇曘亜銆
    • +
    • 閫氱煡E銉°兗銉伅銆佹柊銇椼亜瑷樹簨銆併儶銉炽偗銆併亗銈嬨亜銇偆銉欍兂銉堛亴鎺茶級銇曘倢銇熴亱銆佹柊銇椼亜銉︺兗銈躲兗銇屻仢銇偟銈ゃ儓銇櫥閷层仐銇熴仺銇嶃伀閫佷俊銇曘倢銇俱仚(瑭崇窗銇鎶曠ǹ銇ō瀹銈掋仈鍙傜収銇忋仩銇曘亜銆)銆
      銇撱伄姗熻兘銇孏eeklog銇偦銈儱銉儐銈f鑳姐仺涓绶掋伀銇仾銇c仸銇勩仾銇勩亾銇ㄣ伀銇旀敞鎰忋亸銇犮仌銇勩傚銇忋伄鏂广亱銈夈亾銇鑳芥с亴鏈涖伨銈屻仧銇仹銆佹湰褰撱伀銉忋儍銈互涓娿伄銈傘伄銇с仐銇熴 +
    • +
    • 鏂扮潃銉栥儹銉冦偗銇岄亷鍘24鏅傞枔銇浜嬨嶃倰銈儶銉冦偗銇欍倠銇ㄣ佹柊銇椼亜瑷樹簨銇岃〃绀恒仌銈屻伨銇欍
    • +
    • 銉︺兗銈躲兗銇啓鐪熴伅銆佽浜嬨伄鐢诲儚銇ㄥ悓銇樸亸銉偟銈ゃ偤銇曘倢銇︺亜銇俱仚(鐢诲儚銉┿偆銉栥儵銉伄浣跨敤銇岃ō瀹氥仌銈屻仸銇勩倠鍫村悎)銆傘儲銉笺偠銉笺伄鍐欑湡銇渶澶с偟銈ゃ偤銇乧onfig.php銇垾銆呫伄瑷畾澶夋暟銇цō瀹氥仹銇嶃伨銇欍
    • +
    • 銉椼儵銈般偆銉炽儭銉嬨儱銉笺伅銆併儠銈°偆銉偡銈广儐銉犮伀瀛樺湪銇欍倠銇屻伨銇犮偆銉炽偣銉堛兗銉仐銇︺亜銇亜銉椼儵銈般偆銉炽仚銇广仸銈掕〃绀恒仐銇︺亜銇俱仚銆傘伨銇熴佸鏄撱伀銈ゃ兂銈广儓銉笺儷銇с亶銈嬨倛銇嗐伀銆併仢銈屻倝銇儣銉┿偘銈ゃ兂銇偆銉炽偣銉堛兗銉偣銈儶銉椼儓銇搞伄銉兂銈倐鎻愪緵銇椼仸銇勩伨銇欍
    • +
    • 銇勩亸銇ゃ亱銇柊銇椼亜瑷畾澶夋暟銇屻乧onfig.php銇拷鍔犮仌銈屻伨銇椼仧銆(notification, showfirstasfeatured, dateonly, timeonly, skip_preview, + upcomingeventsrange, emailstoryloginrequired, hideemailicon, hideprintericon, hidenewstories, hidenewcomments, + hidenewlinks, max_photo_width, max_photo_height, max_photo_size). 瑭崇窗銇config銇鏄銈掋仈鍙傜収銇忋仩銇曘亜銆 +
    • +
    • 銉嗐兗銉炲鏇: 澶夋洿銉偣銉堛伅銉嗐兗銉炪伄瑾槑銈掋仈鍙傜収銇忋仩銇曘亜銆

    銉愩偘淇

      -
    • 涓嶅畬鍏ㄣ仾瑷瑾炪儠銈°偆銉倰浣裤仯銇熷牬鍚(銇傘倠銇勩伅URL銈掑埄鐢ㄣ仐銇熷牬鍚)銇併仚銇广仸銇浜嬨倰娑堝幓銇曘仜銇亜銈堛亞銇佺鐞嗚呰浜嬨偍銉囥偅銈裤兗銇仐銇c亱銈娿仐銇熴儊銈с儍銈倰鍔犮亪銇俱仐銇熴
    • -
    • UserAdmin銉戙兗銉熴儍銈枫儳銉炽倰鎸併仱銉︺兗銈躲兗銇丷oot銉︺兗銈躲兗銇儜銈广儻銉笺儔銈掑鏇淬仌銇涖佸疅闅涖伀Root銇仾銈媗ib-security.php銇嵄闄恒仾銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • -
    • "homeonly"銇ㄨō瀹氥仌銈屻倠銇ㄣ儢銉儍銈亴娑堛亪銈嬨儓銉┿儢銉倰淇銇椼伨銇椼仧銆
    • -
    • 瑷樹簨銇ㄣ偝銉°兂銉堛伄瑜囨暟銇 [code] ... [/code]閮ㄥ垎銇儓銉┿儢銉倰淇銇椼伨銇椼仧銆
    • -
    • [code]閮ㄥ垎銇≒HP4.2.0浠ヤ笂銇瓾TML銉曘偐銉笺優銉冦儓銇偝銉°兂銉堛仹銇2琛屻偣銉氥兗銈枫兂銈般倰淇銇椼伨銇椼仧銆
    • -
    • Geeklog銇ч佷俊銇曘倢銇烢銉°兗銉伄銈广儵銉冦偡銉'/'銇℉TML銈ㄣ兂銉嗐偅銉嗐偅銇儓銉┿儢銉倰淇銇椼伨銇椼仧銆
    • -
    • 銉椼儵銈般偆銉矨PI銇搞伄淇銇ㄦ敼鑹倰琛屻亜銇俱仐銇熴
    • +
    • 涓嶅畬鍏ㄣ仾瑷瑾炪儠銈°偆銉倰浣裤仯銇熷牬鍚(銇傘倠銇勩伅URL銈掑埄鐢ㄣ仐銇熷牬鍚)銇併仚銇广仸銇浜嬨倰娑堝幓銇曘仜銇亜銈堛亞銇佺鐞嗚呰浜嬨偍銉囥偅銈裤兗銇仐銇c亱銈娿仐銇熴儊銈с儍銈倰鍔犮亪銇俱仐銇熴
    • +
    • UserAdmin銉戙兗銉熴儍銈枫儳銉炽倰鎸併仱銉︺兗銈躲兗銇丷oot銉︺兗銈躲兗銇儜銈广儻銉笺儔銈掑鏇淬仌銇涖佸疅闅涖伀Root銇仾銈媗ib-security.php銇嵄闄恒仾銉愩偘銈掍慨姝c仐銇俱仐銇熴
    • +
    • "homeonly"銇ㄨō瀹氥仌銈屻倠銇ㄣ儢銉儍銈亴娑堛亪銈嬨儓銉┿儢銉倰淇銇椼伨銇椼仧銆
    • +
    • 瑷樹簨銇ㄣ偝銉°兂銉堛伄瑜囨暟銇 [code] ... [/code]閮ㄥ垎銇儓銉┿儢銉倰淇銇椼伨銇椼仧銆
    • +
    • [code]閮ㄥ垎銇≒HP4.2.0浠ヤ笂銇瓾TML銉曘偐銉笺優銉冦儓銇偝銉°兂銉堛仹銇2琛屻偣銉氥兗銈枫兂銈般倰淇銇椼伨銇椼仧銆
    • +
    • Geeklog銇ч佷俊銇曘倢銇烢銉°兗銉伄銈广儵銉冦偡銉'/'銇℉TML銈ㄣ兂銉嗐偅銉嗐偅銇儓銉┿儢銉倰淇銇椼伨銇椼仧銆
    • +
    • 銉椼儵銈般偆銉矨PI銇搞伄淇銇ㄦ敼鑹倰琛屻亜銇俱仐銇熴

    瀵勭ǹ鑰: Blaine Lang, Vincent Furia, 鍙娿伋Kenn Osborne銇屾湰銉儶銉笺偣銇瘎绋裤亜銇熴仐銇俱仐銇熴

    Geeklog銇偣銉斻兗銉夈偄銉冦儣 (灏戙仐銇犮亼)

    -

    1.3.6浠ュ墠銇彜銇勩儛銉笺偢銉с兂銇嬨倝銈€儍銉椼偘銉兗銉夈仚銈嬪牬鍚堛乮nstall銉囥偅銉偗銉堛儶銇亗銈媋ddindex.php銇ㄥ懠銇般倢銈嬨偣銈儶銉椼儓銈掑疅琛屻仚銈嬪繀瑕併亴鍑恒仸銇忋倠銇嬨倐銇椼倢銇俱仜銈撱傘亾銇偣銈儶銉椼儓銇丟eeklog銇儑銉笺偪銉欍兗銈广儐銉笺儢銉伄銇勩亸銇ゃ亱銇偆銉炽儑銉冦偗銈广儠銈c兗銉儔銈掍粯鍔犮仐銆併偄銈偦銈规檪闁撳叏浣撱倰灏戙仐鏀瑰杽銇椼伨銇欍

    -

    銉囥兗銈裤儥銉笺偣銇仼銈屻亸銈夈亜銇儲銉笺偠銉笺倓瑷樹簨銇仼銇屻亗銈嬨亱銇倛銇c仸銆佸疅琛屾檪闁撱亴銇嬨亱銈嬨亱銈傘仐銈屻仾銇勩伄銇с併亾銈屻伅鍒ャ呫伄銈广偗銉儣銉(銈ゃ兂銈广儓銉笺儷銈广偗銉儣銉堛伄銈€儍銉椼偘銉兗銉夊嚘鐞嗐伄涓閮ㄣ仹銇仾銇)銇ㄣ仐銇﹀疅琛屻仌銈屻伨銇椼仧銆傘仧銇ㄣ亪銇般併儧銈广儐銈c兂銈般偟銉笺儞銈广亴PHP銈广偗銉儣銉堛伄瀹熻鏅傞枔銇埗闄愩倰涓庛亪銇︺亜銈嬪牬鍚堛併偪銈ゃ儬銈€偊銉堛伀銇倠浜恒亴銇勩倠銇嬨倐銇椼倢銇俱仜銈撱傘仢銇嗐亜銇嗐亾銇ㄣ伀銇仯銇︺倐銆佹厡銇︺仾銇勩仹銇忋仩銇曘亜銆傘仼銇儐銉笺儢銉伀銈傘儠銈c兗銉儔銇岃拷鍔犮仌銈屻伨銇涖倱銇с仐銇熴仺閫氱煡銇曘倢銈嬨伨銇с佷綍搴︺倐銇濄伄銈广偗銉儣銉堛倰瀹熻銇椼仸銇忋仩銇曘亜銆 (浣曞害銈備綍搴︺倐 ...)

    +

    + 1.3.6浠ュ墠銇彜銇勩儛銉笺偢銉с兂銇嬨倝銈€儍銉椼偘銉兗銉夈仚銈嬪牬鍚堛乮nstall銉囥偅銉偗銉堛儶銇亗銈媋ddindex.php銇ㄥ懠銇般倢銈嬨偣銈儶銉椼儓銈掑疅琛屻仚銈嬪繀瑕併亴鍑恒仸銇忋倠銇嬨倐銇椼倢銇俱仜銈撱傘亾銇偣銈儶銉椼儓銇丟eeklog銇儑銉笺偪銉欍兗銈广儐銉笺儢銉伄銇勩亸銇ゃ亱銇偆銉炽儑銉冦偗銈广儠銈c兗銉儔銈掍粯鍔犮仐銆併偄銈偦銈规檪闁撳叏浣撱倰灏戙仐鏀瑰杽銇椼伨銇欍

    +

    + 銉囥兗銈裤儥銉笺偣銇仼銈屻亸銈夈亜銇儲銉笺偠銉笺倓瑷樹簨銇仼銇屻亗銈嬨亱銇倛銇c仸銆佸疅琛屾檪闁撱亴銇嬨亱銈嬨亱銈傘仐銈屻仾銇勩伄銇с併亾銈屻伅鍒ャ呫伄銈广偗銉儣銉(銈ゃ兂銈广儓銉笺儷銈广偗銉儣銉堛伄銈€儍銉椼偘銉兗銉夊嚘鐞嗐伄涓閮ㄣ仹銇仾銇)銇ㄣ仐銇﹀疅琛屻仌銈屻伨銇椼仧銆傘仧銇ㄣ亪銇般併儧銈广儐銈c兂銈般偟銉笺儞銈广亴PHP銈广偗銉儣銉堛伄瀹熻鏅傞枔銇埗闄愩倰涓庛亪銇︺亜銈嬪牬鍚堛併偪銈ゃ儬銈€偊銉堛伀銇倠浜恒亴銇勩倠銇嬨倐銇椼倢銇俱仜銈撱傘仢銇嗐亜銇嗐亾銇ㄣ伀銇仯銇︺倐銆佹厡銇︺仾銇勩仹銇忋仩銇曘亜銆傘仼銇儐銉笺儢銉伀銈傘儠銈c兗銉儔銇岃拷鍔犮仌銈屻伨銇涖倱銇с仐銇熴仺閫氱煡銇曘倢銈嬨伨銇с佷綍搴︺倐銇濄伄銈广偗銉儣銉堛倰瀹熻銇椼仸銇忋仩銇曘亜銆 + (浣曞害銈備綍搴︺倐 ...)

    Geeklog1.3.7銈掓柊銇椼亸銈ゃ兂銈广儓銉笺儷銇欍倢銇般併亾銇偣銈儶銉椼儓銈掑疅琛屻仚銈嬪繀瑕併亴銇亜銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜銆傛柊銇熴伀銈ゃ兂銈广儓銉笺儷銇椼仸銇勩倠闁撱伀鐢熸垚銇曘倢銇熴儑銉笺偪銉欍兗銈广伀銇併仚銇с伀鏂般仐銇勩偆銉炽儑銉冦偗銈广儠銈c兗銉儔銇屻亗銈娿伨銇欍

    Geeklog 1.3.6

    鏂版鑳

      -
    • 瑷樹簨銇敾鍍忋伅銆併偄銉冦儣銉兗銉変腑銇嚜鍕曠殑銇儶銈点偆銈恒仹銇嶃伨銇(ImageMagick銇媙etpbm銇仼銇°倝銇嬨亴銈ゃ兂銈广儓銉笺儷銇曘倢銇︺亜銈嬪牬鍚)銆傝┏绱般伀銇ゃ亜銇︺伅銆銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽伄瑾槑銈掋仈鍙傜収銇忋仩銇曘亜銆
    • -
    • "Frontpage" 銇ㄣ亜銇嗐偪銈ゃ儓銉伄闈欑殑銉氥兗銈搞伄銈炽兂銉嗐兂銉勩伅銆丟eeklog銈点偆銉堛仹銉曘儹銉炽儓銉氥兗銈镐笂銇渶鍒濄伄瑷樹簨銇墠銇〃绀恒仌銈屻伨銇欍傞潤鐨勩儦銉笺偢銇屻仌銈夈伀”nonews”銉┿儥銉倰銇ゃ亼銇︺亜銈嬪牬鍚堛伅銆佸畬鍏ㄣ伀銉曘儹銉炽儓銉氥兗銈搞伄銉嬨儱銉笺偣銈掑叆銈屾浛銇堛倠銇撱仺銇仾銈娿伨銇欍
    • -
    • 銉︺兗銈躲兗銇倛銈嬫姇绋裤倰鎵胯獚銇欍倠: 鏈夊姽銇牬鍚(config.php銇)銆佹柊銇椼亜銉︺兗銈躲兗銇嚜鍒嗐伄銉戙偣銉兗銉夈倰鍙椼亼鍙栥倠鍓嶃伀銆佺鐞嗚呫伀銈堛仯銇︽壙瑾嶃仌銈屻倠蹇呰銇屻亗銈娿伨銇欍
    • -
    • 鎶曠ǹ鎵胯獚銇垾銆呫伀銆佸畬鍏ㄣ伀(config.php銇)銇嬨伨銇熴伅涓瀹氥伄銉︺兗銈躲兗銈般儷銉笺儣銇伩銇у彇銈婃秷銇欍亾銇ㄣ亴銇с亶銇俱仚(鏂般仐銇勬鑳 story.submit銆乴inks.submit銆 event.submit銈掍娇銇c仸)銆
    • -
    • 銈姐兗銈广偝銉笺儔(PHP銆丠TML銇仼)銈掗佷俊銇欍倠銇ㄣ乕code] ... [/code]銇ㄣ亜銇嗘摤浼笺偪銈般倰浣裤仯銇︺佷竴瀛椾竴鍙ュ銇堛仛銇啀鐢熴仌銈屻仧閫佷俊鏂囥倰灏佸叆銇с亶銇俱仚銆
    • -
    • 銉兂銈偦銈偡銉с兂銇с伅銆佸垎椤炪併儦銉笺偢鍒嗐亼銇曘倢銇熴儑銈c偣銉椼儸銈(鍒ャ呫伀銈儠銇с亶銇︺佷互鍓嶃伄1.3.6銈广偪銈ゃ儷銇儶銈广儐銈c兂銈般伀銈傛埢銈屻伨銇欍)銇屼娇銈忋倢銇︺亜銇俱仚銆
    • -
    • 蹇呰銇倝銇般併偛銈广儓銉︺兗銈躲兗銈掋偟銈ゃ儓銇伝銇ㄣ倱銇┿仚銇广仸銇儴鍒(銇熴仺銇堛伆銆併儶銉炽偗銈汇偗銈枫儳銉炽併偟銈ゃ儓绲辫▓)銇嬨倝绶犮倎鍑恒仚銇撱仺銇屻仹銇嶃伨銇欍
    • -
    • Geeklog銈点偆銉堛伅銆config.php銇儠銉┿偘銈掕ō瀹氥仐銇︾啊鍗樸伀姗熻兘鍋滄銇欍倠銇撱仺銇屻仹銇嶃伨銇欍(銇熴仺銇堛伆銉°兂銉嗐儕銉炽偣銇牬鍚堛仾銇)
    • -
    • 銉嗐兗銉炲鏇: 澶夋洿銉偣銉堛伅銉嗐兗銉炪伄瑾槑銈掋仈鍙傜収銇忋仩銇曘亜銆
    • +
    • 瑷樹簨銇敾鍍忋伅銆併偄銉冦儣銉兗銉変腑銇嚜鍕曠殑銇儶銈点偆銈恒仹銇嶃伨銇(ImageMagick銇媙etpbm銇仼銇°倝銇嬨亴銈ゃ兂銈广儓銉笺儷銇曘倢銇︺亜銈嬪牬鍚)銆傝┏绱般伀銇ゃ亜銇︺伅銆銈炽兂銉曘偅銈儱銉兗銈枫儳銉炽伄瑾槑銈掋仈鍙傜収銇忋仩銇曘亜銆 +
    • +
    • "Frontpage" 銇ㄣ亜銇嗐偪銈ゃ儓銉伄闈欑殑銉氥兗銈搞伄銈炽兂銉嗐兂銉勩伅銆丟eeklog銈点偆銉堛仹銉曘儹銉炽儓銉氥兗銈镐笂銇渶鍒濄伄瑷樹簨銇墠銇〃绀恒仌銈屻伨銇欍傞潤鐨勩儦銉笺偢銇屻仌銈夈伀”nonews”銉┿儥銉倰銇ゃ亼銇︺亜銈嬪牬鍚堛伅銆佸畬鍏ㄣ伀銉曘儹銉炽儓銉氥兗銈搞伄銉嬨儱銉笺偣銈掑叆銈屾浛銇堛倠銇撱仺銇仾銈娿伨銇欍
    • +
    • 銉︺兗銈躲兗銇倛銈嬫姇绋裤倰鎵胯獚銇欍倠: 鏈夊姽銇牬鍚(config.php銇)銆佹柊銇椼亜銉︺兗銈躲兗銇嚜鍒嗐伄銉戙偣銉兗銉夈倰鍙椼亼鍙栥倠鍓嶃伀銆佺鐞嗚呫伀銈堛仯銇︽壙瑾嶃仌銈屻倠蹇呰銇屻亗銈娿伨銇欍 +
    • +
    • 鎶曠ǹ鎵胯獚銇垾銆呫伀銆佸畬鍏ㄣ伀(config.php銇)銇嬨伨銇熴伅涓瀹氥伄銉︺兗銈躲兗銈般儷銉笺儣銇伩銇у彇銈婃秷銇欍亾銇ㄣ亴銇с亶銇俱仚(鏂般仐銇勬鑳 + story.submit銆乴inks.submit銆 event.submit銈掍娇銇c仸)銆 +
    • +
    • 銈姐兗銈广偝銉笺儔(PHP銆丠TML銇仼)銈掗佷俊銇欍倠銇ㄣ乕code] ... [/code]銇ㄣ亜銇嗘摤浼笺偪銈般倰浣裤仯銇︺佷竴瀛椾竴鍙ュ銇堛仛銇啀鐢熴仌銈屻仧閫佷俊鏂囥倰灏佸叆銇с亶銇俱仚銆
    • +
    • 銉兂銈偦銈偡銉с兂銇с伅銆佸垎椤炪併儦銉笺偢鍒嗐亼銇曘倢銇熴儑銈c偣銉椼儸銈(鍒ャ呫伀銈儠銇с亶銇︺佷互鍓嶃伄1.3.6銈广偪銈ゃ儷銇儶銈广儐銈c兂銈般伀銈傛埢銈屻伨銇欍)銇屼娇銈忋倢銇︺亜銇俱仚銆
    • +
    • 蹇呰銇倝銇般併偛銈广儓銉︺兗銈躲兗銈掋偟銈ゃ儓銇伝銇ㄣ倱銇┿仚銇广仸銇儴鍒(銇熴仺銇堛伆銆併儶銉炽偗銈汇偗銈枫儳銉炽併偟銈ゃ儓绲辫▓)銇嬨倝绶犮倎鍑恒仚銇撱仺銇屻仹銇嶃伨銇欍
    • +
    • Geeklog銈点偆銉堛伅銆config.php銇儠銉┿偘銈掕ō瀹氥仐銇︾啊鍗樸伀姗熻兘鍋滄銇欍倠銇撱仺銇屻仹銇嶃伨銇欍(銇熴仺銇堛伆銉°兂銉嗐儕銉炽偣銇牬鍚堛仾銇)
    • +
    • 銉嗐兗銉炲鏇: 澶夋洿銉偣銉堛伅銉嗐兗銉炪伄瑾槑銈掋仈鍙傜収銇忋仩銇曘亜銆

    銉愩偘淇

      -
    • 銇勩亸銇ゃ亱銇慨姝c仹銆併偄銈偊銉炽儓銇銇欍倠銉戙兗銉熴儍銈枫儳銉炽亴閬╁垏銇ō瀹氥仌銈屻倠銇撱仺銇屼繚瑷笺仌銈屻伨銇椼仧(銇熴仺銇堛伆銆併儲銉笺偠銉笺亴銈€偗銈汇偣妯┿倰鎸併仧銇亜瑷樹簨銇偪銈ゃ儓銉倰琛ㄧず銇椼仾銇勩)銆
    • -
    • Geeklog銈掗仼鍒囥伀銉兗銈儵銈ゃ偤銇с亶銈嬨倛銇嗐伀銆併亜銇忋仱銇嬩慨姝c倰琛屻亜銇俱仐銇熴(鏈鏂般伄瑷瑾炪儠銈°偆銉倰鎸併仯銇︺亜銇︺佸浗銇ㄨ█瑾炪伀閬┿仐銇銉兗銈儷瑷畾銈掗伕鎶炪仐銇熷牬鍚堛)
    • -
    • 澶夋暟 $_CONF['site_admin_url'] 銈掋丟eeklog銇鐞嗐儑銈c儸銈儓銉倰銉儘銉笺儬銇欍倠銇撱仺銇屻仹銇嶃倠銈堛亞銇侀仼鍒囥伀浣跨敤銇椼仸銇勩伨銇欍
    • -
    • 鏂般仐銇 RDF銉戙兗銈点伅銆(鍏ㄩ儴銇с伅銇亜銇仜銈)銇汇仺銈撱仼銇甊DF銉嬨儱銉笺偣銉曘偅銉笺儔銈掗仼鍒囥伀銈ゃ兂銉濄兗銉堛仐銇俱仚銆
    • +
    • 銇勩亸銇ゃ亱銇慨姝c仹銆併偄銈偊銉炽儓銇銇欍倠銉戙兗銉熴儍銈枫儳銉炽亴閬╁垏銇ō瀹氥仌銈屻倠銇撱仺銇屼繚瑷笺仌銈屻伨銇椼仧(銇熴仺銇堛伆銆併儲銉笺偠銉笺亴銈€偗銈汇偣妯┿倰鎸併仧銇亜瑷樹簨銇偪銈ゃ儓銉倰琛ㄧず銇椼仾銇勩)銆
    • +
    • Geeklog銈掗仼鍒囥伀銉兗銈儵銈ゃ偤銇с亶銈嬨倛銇嗐伀銆併亜銇忋仱銇嬩慨姝c倰琛屻亜銇俱仐銇熴(鏈鏂般伄瑷瑾炪儠銈°偆銉倰鎸併仯銇︺亜銇︺佸浗銇ㄨ█瑾炪伀閬┿仐銇銉兗銈儷瑷畾銈掗伕鎶炪仐銇熷牬鍚堛) +
    • +
    • 澶夋暟 $_CONF['site_admin_url'] 銈掋丟eeklog銇鐞嗐儑銈c儸銈儓銉倰銉儘銉笺儬銇欍倠銇撱仺銇屻仹銇嶃倠銈堛亞銇侀仼鍒囥伀浣跨敤銇椼仸銇勩伨銇欍
    • +
    • 鏂般仐銇 RDF銉戙兗銈点伅銆(鍏ㄩ儴銇с伅銇亜銇仜銈)銇汇仺銈撱仼銇甊DF銉嬨儱銉笺偣銉曘偅銉笺儔銈掗仼鍒囥伀銈ゃ兂銉濄兗銉堛仐銇俱仚銆

    娉ㄦ剰

      -
    • config.php銇伅鏂般仐銇勫鏁般亴銇熴亸銇曘倱銇傘倠銇仹銆佸墠鍥炪伄銈ゃ兂銈广儓銉笺儷銇嬨倝鍙ゃ亜config.php銈掋偝銉斻兗銇欍倠浠c倧銈娿伀銆併仢銇儠銈°偆銉倰鏂般仧銇偝銉斻兗銇欍倠銇撱仺銈掋亰鍕с倎銇椼伨銇欍
    • -
    • 鑻辫獮銆併儔銈ゃ儎瑾炪併偆銈裤儶銈㈣獮銆併儩銉笺儵銉炽儔瑾炪佹棩鏈獮銇儠銈°偆銉亴銆佹渶杩戙偄銉冦儣銉囥兗銉堛仌銈屻仧銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜銆傘仢銇粬銇█瑾炪儠銈°偆銉倰浣跨敤銇欍倠銇ㄣ併亗銇仧銇瓽eeklog銈点偆銉堛亴銇嶃仭銈撱仺鍕曘亱銇亜鍫村悎銇屻亗銈娿伨銇欍
    • +
    • config.php銇伅鏂般仐銇勫鏁般亴銇熴亸銇曘倱銇傘倠銇仹銆佸墠鍥炪伄銈ゃ兂銈广儓銉笺儷銇嬨倝鍙ゃ亜config.php銈掋偝銉斻兗銇欍倠浠c倧銈娿伀銆併仢銇儠銈°偆銉倰鏂般仧銇偝銉斻兗銇欍倠銇撱仺銈掋亰鍕с倎銇椼伨銇欍
    • +
    • 鑻辫獮銆併儔銈ゃ儎瑾炪併偆銈裤儶銈㈣獮銆併儩銉笺儵銉炽儔瑾炪佹棩鏈獮銇儠銈°偆銉亴銆佹渶杩戙偄銉冦儣銉囥兗銉堛仌銈屻仧銇撱仺銇仈娉ㄦ剰銇忋仩銇曘亜銆傘仢銇粬銇█瑾炪儠銈°偆銉倰浣跨敤銇欍倠銇ㄣ併亗銇仧銇瓽eeklog銈点偆銉堛亴銇嶃仭銈撱仺鍕曘亱銇亜鍫村悎銇屻亗銈娿伨銇欍

    瀵勭ǹ鑰: Gene Wood銆 Blaine Lang銆 Tom Willet銆佸強銇 Roger Webster銇屾湰銉儶銉笺偣銇瘎绋裤亜銇熴仐銇俱仐銇熴

    diff --git a/public_html/docs/japanese/support.html b/public_html/docs/japanese/support.html index 8e1bcf2dd..5e5c433bf 100644 --- a/public_html/docs/japanese/support.html +++ b/public_html/docs/japanese/support.html @@ -88,8 +88,6 @@

    瀵勪粯

    鑻辫獮浠ュ銇с伄銈点儩銉笺儓

    -

    geeklog.info - 銉夈偆銉勮獮銇с伄Geeklog銈点儩銉笺儓

    -

    GeeklogPolska - 銉濄兗銉┿兂銉夎獮銇с伄Geeklog銈点儩銉笺儓

    Geeklog Japanese - 鏃ユ湰瑾炪仹銇瓽eeklog銈点儩銉笺儓

    diff --git a/public_html/editors/ckeditor/CHANGES.md b/public_html/editors/ckeditor/CHANGES.md index 3f5c45eca..a741f61a2 100644 --- a/public_html/editors/ckeditor/CHANGES.md +++ b/public_html/editors/ckeditor/CHANGES.md @@ -1,6 +1,216 @@ CKEditor 4 Changelog ==================== +## CKEditor 4.6.1 + +New Features: + +* [#16639](http://dev.ckeditor.com/ticket/16639): The `callback` parameter in the [CKEDITOR.ajax.post](http://docs.ckeditor.com/#!/api/CKEDITOR.ajax-method-post) method became optional. + +Fixed Issues: + +* [#11064](http://dev.ckeditor.com/ticket/11064): [Blink, WebKit] Fixed: Cannot select all editor content when a widget or a non-editable element is the first or last element of the content. Also fixes this issue in the [Select All](http://ckeditor.com/addon/selectall) plugin. +* [#14755](http://dev.ckeditor.com/ticket/14755): [Blink, WebKit, IE8] Fixed: Browser hangs when a table is inserted in the place of a selected list with an empty last item. +* [#16624](http://dev.ckeditor.com/ticket/16624): Fixed: Improved the [Color Button](http://ckeditor.com/addon/colorbutton) plugin which will now normalize the CSS `background` property if it only contains a color value. This fixes missing background colors when using [Paste from Word](http://ckeditor.com/addon/pastefromword). +* [#16600](http://dev.ckeditor.com/ticket/16600): [Blink, WebKit] Fixed: Error thrown occasionally by an uninitialized editable for multiple CKEditor instances on the same page. + +## CKEditor 4.6 + +New Features: + +* [#14569](http://dev.ckeditor.com/ticket/14569): Added a new, flat, default CKEditor skin called [Moono-Lisa](http://ckeditor.com/addon/moono-lisa). Refreshed default colors available in the [Color Button](http://ckeditor.com/addon/colorbutton) plugin ([Text Color and Background Color](http://docs.ckeditor.com/#!/guide/dev_colorbutton) feature). +* [#14707](http://dev.ckeditor.com/ticket/14707): Added a new [Copy Formatting](http://ckeditor.com/addon/copyformatting) feature to enable easy copying of styles between your document parts. +* Introduced the completely rewritten [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin: + * Backward incompatibility: The [`config.pasteFromWordRemoveFontStyles`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordRemoveFontStyles) option now defaults to `false`. This option will be deprecated in the future. Use [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_acf) to replicate the effect of setting it to `true`. + * Backward incompatibility: The [`config.pasteFromWordNumberedHeadingToList`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordNumberedHeadingToList) and [`config.pasteFromWordRemoveStyles`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordRemoveStyles) options were dropped and no longer have any effect on pasted content. + * Major improvements in preservation of list numbering, styling and indentation (nested lists with multiple levels). + * Major improvements in document structure parsing that fix plenty of issues with distorted or missing content after paste. +* Added new translation: Occitan. Thanks to [C茅dric Valmary](https://totenoc.eu/)! +* [#10015](http://dev.ckeditor.com/ticket/10015): Keyboard shortcuts (relevant to the operating system in use) will now be displayed in tooltips and context menus. +* [#13794](http://dev.ckeditor.com/ticket/13794): The [Upload Image](http://ckeditor.com/addon/uploadimage) feature now uses `uploaded.width/height` if set. +* [#12541](http://dev.ckeditor.com/ticket/12541): Added the [Upload File](http://ckeditor.com/addon/uploadfile) plugin that lets you upload a file by drag&dropping it into the editor content. +* [#14449](http://dev.ckeditor.com/ticket/14449): Introduced the [Balloon Panel](http://ckeditor.com/addon/balloonpanel) plugin that lets you create stylish floating UI elements for the editor. +* [#12077](https://dev.ckeditor.com/ticket/12077): Added support for the HTML5 `download` attribute in link (``) elements. Selecting the "Force Download" checkbox in the [Link](http://ckeditor.com/addon/link) dialog will cause the linked file to be downloaded automatically. Thanks to [sbusse](https://github.com/sbusse)! +* [#13518](http://dev.ckeditor.com/ticket/13518): Introduced the [`additionalRequestParameters`](http://docs.ckeditor.com/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition-property-additionalRequestParameters) property for file uploads to make it possible to send additional information about the uploaded file to the server. +* [#14889](http://dev.ckeditor.com/ticket/14889): Added the [`config.image2_altRequired`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_altRequired) option for the [Enhanced Image](http://ckeditor.com/addon/image2) plugin to allow making alternative text a mandatory field. Thanks to [Andrey Fedoseev](https://github.com/andreyfedoseev)! + +Fixed Issues: + +* [#9991](http://dev.ckeditor.com/ticket/9991): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) should only normalize input data. +* [#7209](http://dev.ckeditor.com/ticket/7209): Fixed: Lists with 3 levels not [pasted from Word](http://ckeditor.com/addon/pastefromword) correctly. +* [#14335](http://dev.ckeditor.com/ticket/14335): Fixed: Pasting a numbered list starting with a value different from "1" from Microsoft Word does not work correctly. +* [#14542](http://dev.ckeditor.com/ticket/14542): Fixed: Copying a numbered list from Microsoft Word does not preserve list formatting. +* [#14544](http://dev.ckeditor.com/ticket/14544): Fixed: Copying a nested list from Microsoft Word results in an empty list. +* [#14660](http://dev.ckeditor.com/ticket/14660): Fixed: [Pasting text from Word](http://ckeditor.com/addon/pastefromword) breaks the styling in some cases. +* [#14867](http://dev.ckeditor.com/ticket/14867): [Firefox] Fixed: Text gets stripped when [pasting content from Word](http://ckeditor.com/addon/pastefromword). +* [#2507](http://dev.ckeditor.com/ticket/2507): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) does not detect pasting a part of a paragraph. +* [#3336](http://dev.ckeditor.com/ticket/3336): Fixed: Extra blank row added on top of the content [pasted from Word](http://ckeditor.com/addon/pastefromword). +* [#6115](http://dev.ckeditor.com/ticket/6115): Fixed: When Right-to-Left text direction is applied to a table [pasted from Word](http://ckeditor.com/addon/pastefromword), borders are missing on one side. +* [#6342](http://dev.ckeditor.com/ticket/6342): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filters out a basic text style when it is [configured to use attributes](http://docs.ckeditor.com/#!/guide/dev_basicstyles-section-custom-basic-text-style-definition). +* [#6457](http://dev.ckeditor.com/ticket/6457): [IE] Fixed: [Pasting from Word](http://ckeditor.com/addon/pastefromword) is extremely slow. +* [#6789](http://dev.ckeditor.com/ticket/6789): Fixed: The `mso-list: ignore` style is not handled properly when [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#7262](http://dev.ckeditor.com/ticket/7262): Fixed: Lists in preformatted body disappear when [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#7662](http://dev.ckeditor.com/ticket/7662): [Opera] Fixed: Extra empty number/bullet shown in the editor body when editing a multi-level list [pasted from Word](http://ckeditor.com/addon/pastefromword). +* [#7807](http://dev.ckeditor.com/ticket/7807): Fixed: Last item in a list not converted to a `
  • ` element after [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#7950](http://dev.ckeditor.com/ticket/7950): [IE] Fixed: Content [from Word pasted](http://ckeditor.com/addon/pastefromword) differently than in other browsers. +* [#7982](http://dev.ckeditor.com/ticket/7982): Fixed: Multi-level lists get split into smaller ones when [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#8231](http://dev.ckeditor.com/ticket/8231): [WebKit, Opera] Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) inserts empty paragraphs. +* [#8266](http://dev.ckeditor.com/ticket/8266): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) inserts a blank line at the top. +* [#8341](http://dev.ckeditor.com/ticket/8341), [#7646](http://dev.ckeditor.com/ticket/7646): Fixed: Faulty removal of empty `` elements in [Paste from Word](http://ckeditor.com/addon/pastefromword) content cleanup breaking content formatting. +* [#8754](http://dev.ckeditor.com/ticket/8754): [Firefox] Fixed: Incorrect pasting of multiple nested lists in [Paste from Word](http://ckeditor.com/addon/pastefromword). +* [#8983](http://dev.ckeditor.com/ticket/8983): Fixed: Alignment lost when [pasting from Word](http://ckeditor.com/addon/pastefromword) with [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) set to [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR). +* [#9331](http://dev.ckeditor.com/ticket/9331): [IE] Fixed: [Pasting text from Word](http://ckeditor.com/addon/pastefromword) creates a simple Caesar cipher. +* [#9422](http://dev.ckeditor.com/ticket/9422): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) leaves an unwanted `color:windowtext` style. +* [#10011](http://dev.ckeditor.com/ticket/10011): [IE9-10] Fixed: [`config.pasteFromWordRemoveFontStyles`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordRemoveFontStyles) is ignored under certain conditions. +* [#10643](http://dev.ckeditor.com/ticket/10643): Fixed: Differences between using Ctrl+V and pasting from the [Paste from Word](http://ckeditor.com/addon/pastefromword) dialog. +* [#10784](http://dev.ckeditor.com/ticket/10784): Fixed: Lines missing when [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#11294](http://dev.ckeditor.com/ticket/11294): [IE10] Fixed: Font size is not preserved when [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#11627](http://dev.ckeditor.com/ticket/11627): Fixed: Missing words when [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#12784](http://dev.ckeditor.com/ticket/12784): Fixed: Bulleted list with custom bullets gets changed to a numbered list when [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#13174](http://dev.ckeditor.com/ticket/13174): Fixed: Data loss after [pasting from Word](http://ckeditor.com/addon/pastefromword). +* [#13828](http://dev.ckeditor.com/ticket/13828): Fixed: Widget classes should be added to the wrapper rather than the widget element. +* [#13829](http://dev.ckeditor.com/ticket/13829): Fixed: No class in [Widget](http://ckeditor.com/addon/widget) wrapper to identify the widget type. +* [#13519](http://dev.ckeditor.com/ticket/13519): Server response received when uploading files should be more flexible. + +Other Changes: + +* Updated [SCAYT](http://ckeditor.com/addon/scayt) (Spell Check As You Type) and [WebSpellChecker](http://ckeditor.com/addon/wsc) plugins: + * Support for the new default Moono-Lisa skin. + * [#121](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/121): Fixed: [Basic Styles](http://ckeditor.com/addon/basicstyles) do not work when SCAYT is enabled. + * [#125](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/125): Fixed: Inline styles are not continued when writing multiple lines of styled text with SCAYT enabled. + * [#127](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/127): Fixed: Uncaught TypeError after enabling SCAYT in the CKEditor `
    ` element. + * [#128](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/128): Fixed: Error thrown after enabling SCAYT caused by conflicts with RequireJS. + +## CKEditor 4.5.11 + +**Security Updates:** + +* [Severity: minor] Fixed the `target="_blank"` vulnerability reported by James Gaskell. + + Issue summary: If a victim had access to a spoofed version of ckeditor.com via HTTP (e.g. due to DNS spoofing, using a hacked public network or mailicious hotspot), then when using a link to the ckeditor.com website it was possible for the attacker to change the current URL of the opening page, even if the opening page was protected with SSL. + + An upgrade is recommended. + +New Features: + +* [#14747](http://dev.ckeditor.com/ticket/14747): The [Enhanced Image](http://ckeditor.com/addon/image2) caption now supports the link `target` attribute. +* [#7154](http://dev.ckeditor.com/ticket/7154): Added support for the "Display Text" field to the [Link](http://ckeditor.com/addon/link) dialog. Thanks to [Ryan Guill](https://github.com/ryanguill)! + +Fixed Issues: + +* [#13362](http://dev.ckeditor.com/ticket/13362): [Blink, WebKit] Fixed: Active widget element is not cached when it is losing focus and it is inside an editable element. +* [#13755](http://dev.ckeditor.com/ticket/13755): [Edge] Fixed: Pasting images does not work. +* [#13548](http://dev.ckeditor.com/ticket/13548): [IE] Fixed: Clicking the [elements path](http://ckeditor.com/addon/elementspath) disables Cut and Copy icons. +* [#13812](http://dev.ckeditor.com/ticket/13812): Fixed: When aborting file upload the placeholder for image is left. +* [#14659](http://dev.ckeditor.com/ticket/14659): [Blink] Fixed: Content scrolled to the top after closing the dialog in a [`
    `-based editor](http://ckeditor.com/addon/divarea). +* [#14825](http://dev.ckeditor.com/ticket/14825): [Edge] Fixed: Focusing the editor causes unwanted scrolling due to dropped support for the `setActive` method. + +## CKEditor 4.5.10 + +Fixed Issues: + +* [#10750](http://dev.ckeditor.com/ticket/10750): Fixed: The editor does not escape the `font-style` family property correctly, removing quotes and whitespace from font names. +* [#14413](http://dev.ckeditor.com/ticket/14413): Fixed: The [Auto Grow](http://ckeditor.com/addon/autogrow) plugin with the [`config.autoGrow_onStartup`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoGrow_onStartup) option set to `true` does not work properly for an editor that is not visible. +* [#14451](http://dev.ckeditor.com/ticket/14451): Fixed: Numeric element ID not escaped properly. Thanks to [Jakub Chalupa](https://github.com/chaluja7)! +* [#14590](http://dev.ckeditor.com/ticket/14590): Fixed: Additional line break appearing after inline elements when switching modes. Thanks to [dpidcock](https://github.com/dpidcock)! +* [#14539](https://dev.ckeditor.com/ticket/14539): Fixed: JAWS reads "selected Blank" instead of "selected " when selecting a widget. +* [#14701](http://dev.ckeditor.com/ticket/14701): Fixed: More precise labels for [Enhanced Image](http://ckeditor.com/addon/image2) and [Placeholder](http://ckeditor.com/addon/placeholder) widgets. +* [#14667](http://dev.ckeditor.com/ticket/14667): [IE] Fixed: Removing background color from selected text removes background color from the whole paragraph. +* [#14252](http://dev.ckeditor.com/ticket/14252): [IE] Fixed: Styles drop-down list does not always reflect the current style of the text line. +* [#14275](http://dev.ckeditor.com/ticket/14275): [IE9+] Fixed: `onerror` and `onload` events are not used in browsers it could have been used when loading scripts dynamically. + +## CKEditor 4.5.9 + +Fixed Issues: + +* [#10685](http://dev.ckeditor.com/ticket/10685): Fixed: Unreadable toolbar icons after updating to the new editor version. Fixed with [6876179](https://github.com/ckeditor/ckeditor-dev/commit/6876179db4ee97e786b07b8fd72e6b4120732185) in [ckeditor-dev](https://github.com/ckeditor/ckeditor-dev) and [6c9189f4](https://github.com/ckeditor/ckeditor-presets/commit/6c9189f46392d2c126854fe8889b820b8c76d291) in [ckeditor-presets](https://github.com/ckeditor/ckeditor-presets). +* [#14573](https://dev.ckeditor.com/ticket/14573): Fixed: Missing [Widget](http://ckeditor.com/addon/widget) drag handler CSS when there are multiple editor instances. +* [#14620](https://dev.ckeditor.com/ticket/14620): Fixed: Setting both the `min-height` style for the `` element and the `height` style for the `` element breaks the [Auto Grow](http://ckeditor.com/addon/autogrow) plugin. +* [#14538](http://dev.ckeditor.com/ticket/14538): Fixed: Keyboard focus goes into an embedded `';}else{if(ie6){$('select').css('visibility','hidden');}msgbox+='
    ';}msgbox+='
    X
    ';msgbox+='
    ';var $jqib=$(msgbox).appendTo($body);var $jqi=$jqib.children('#'+options.prefix);var $jqif=$jqib.children('#'+options.prefix+'fade');if(message.constructor==String){message={state0:{html:message,buttons:options.buttons,focus:options.focus,submit:options.submit}};}var states="";$.each(message,function(statename,stateobj){stateobj=$.extend({},$.prompt.defaults.state,stateobj);message[statename]=stateobj;states+='';});$jqi.find('#'+options.prefix+'states').html(states).children('.'+options.prefix+'_state:first').css('display','block');$jqi.find('.'+options.prefix+'buttons:empty').css('display','none');$.each(message,function(statename,stateobj){var $state=$jqi.find('#'+options.prefix+'_state_'+statename);$state.children('.'+options.prefix+'buttons').children('button').click(function(){var msg=$state.children('.'+options.prefix+'message');var clicked=stateobj.buttons[$(this).text()];if(clicked==undefined){for(var i in stateobj.buttons)if(stateobj.buttons[i].title==$(this).text())clicked=stateobj.buttons[i].value;}if(typeof clicked=='object')clicked=clicked.value;var forminputs={};$.each($jqi.find('#'+options.prefix+'states :input').serializeArray(),function(i,obj){if(forminputs[obj.name]===undefined){forminputs[obj.name]=obj.value;}else if(typeof forminputs[obj.name]==Array||typeof forminputs[obj.name]=='object'){forminputs[obj.name].push(obj.value);}else{forminputs[obj.name]=[forminputs[obj.name],obj.value];}});var close=stateobj.submit(clicked,msg,forminputs);if(close===undefined||close){removePrompt(true,clicked,msg,forminputs);}});$state.find('.'+options.prefix+'buttons button:eq('+stateobj.focus+')').addClass(options.prefix+'defaultbutton');});var fadeClicked=function(){if(options.persistent){var offset=(options.top.toString().indexOf('%')>=0?($window.height()*(parseInt(options.top,10)/100)):parseInt(options.top,10)),top=parseInt($jqi.css('top').replace('px',''),10)-offset;$('html,body').animate({scrollTop:top},'fast',function(){var i=0;$jqib.addClass(options.prefix+'warning');var intervalid=setInterval(function(){$jqib.toggleClass(options.prefix+'warning');if(i++>1){clearInterval(intervalid);$jqib.removeClass(options.prefix+'warning');}},100);});}else{removePrompt();}};var keyPressEventHandler=function(e){var key=(window.event)?event.keyCode:e.keyCode;if(key==27){fadeClicked();}if(key==9){var $inputels=$(':input:enabled:visible',$jqib);var fwd=!e.shiftKey&&e.target==$inputels[$inputels.length-1];var back=e.shiftKey&&e.target==$inputels[0];if(fwd||back){setTimeout(function(){if(!$inputels)return;var el=$inputels[back===true?$inputels.length-1:0];if(el)el.focus();},10);return false;}}};var positionPrompt=function(){var bodyHeight=$body.outerHeight(true),windowHeight=$window.height(),documentHeight=$(document).height(),height=bodyHeight>windowHeight?bodyHeight:windowHeight,top=parseInt($window.scrollTop(),10)+(options.top.toString().indexOf('%')>=0?(windowHeight*(parseInt(options.top,10)/100)):parseInt(options.top,10));height=height>documentHeight?height:documentHeight;$jqib.css({position:"absolute",height:height,width:"100%",top:0,left:0,right:0,bottom:0});$jqif.css({position:"absolute",height:height,width:"100%",top:0,left:0,right:0,bottom:0});$jqi.css({position:"absolute",top:top,left:"50%",marginLeft:(($jqi.outerWidth()/2)*-1)});};var stylePrompt=function(){$jqif.css({zIndex:options.zIndex,display:"none",opacity:options.opacity});$jqi.css({zIndex:options.zIndex+1,display:"none"});$jqib.css({zIndex:options.zIndex});};var removePrompt=function(callCallback,clicked,msg,formvals){$jqi.remove();$window.unbind('resize',positionPrompt);$jqif.fadeOut(options.overlayspeed,function(){$jqif.unbind('click',fadeClicked);$jqif.remove();if(callCallback){options.callback(clicked,msg,formvals);}$jqib.unbind('keypress',keyPressEventHandler);$jqib.remove();if(ie6&&!options.useiframe){$('select').css('visibility','visible');}});};positionPrompt();stylePrompt();$jqif.click(fadeClicked);$window.resize(positionPrompt);$jqib.bind("keydown keypress",keyPressEventHandler);$jqi.find('.'+options.prefix+'close').click(removePrompt);$jqif.fadeIn(options.overlayspeed);$jqi[options.show](options.promptspeed,options.loaded);$jqi.find('#'+options.prefix+'states .'+options.prefix+'_state:first .'+options.prefix+'defaultbutton').focus();if(options.timeout>0)setTimeout($.prompt.close,options.timeout);return $jqib;};$.prompt.defaults={prefix:'jqi',classes:'',buttons:{Ok:true},loaded:function(){},submit:function(){return true;},callback:function(){},opacity:0.6,zIndex:999,overlayspeed:'slow',promptspeed:'fast',show:'promptDropIn',focus:0,useiframe:false,top:'15%',persistent:true,timeout:0,state:{html:'',buttons:{Ok:true},focus:0,submit:function(){return true;}}};$.prompt.currentPrefix=$.prompt.defaults.prefix;$.prompt.setDefaults=function(o){$.prompt.defaults=$.extend({},$.prompt.defaults,o);};$.prompt.setStateDefaults=function(o){$.prompt.defaults.state=$.extend({},$.prompt.defaults.state,o);};$.prompt.getStateContent=function(state){return $('#'+$.prompt.currentPrefix+'_state_'+state);};$.prompt.getCurrentState=function(){return $('.'+$.prompt.currentPrefix+'_state:visible');};$.prompt.getCurrentStateName=function(){var stateid=$.prompt.getCurrentState().attr('id');return stateid.replace($.prompt.currentPrefix+'_state_','');};$.prompt.goToState=function(state,callback){$('.'+$.prompt.currentPrefix+'_state').slideUp('slow');$('#'+$.prompt.currentPrefix+'_state_'+state).slideDown('slow',function(){$(this).find('.'+$.prompt.currentPrefix+'defaultbutton').focus();if(typeof callback=='function')callback();});};$.prompt.nextState=function(callback){var $next=$('.'+$.prompt.currentPrefix+'_state:visible').next();$('.'+$.prompt.currentPrefix+'_state').slideUp('slow');$next.slideDown('slow',function(){$next.find('.'+$.prompt.currentPrefix+'defaultbutton').focus();if(typeof callback=='function')callback();});};$.prompt.prevState=function(callback){var $next=$('.'+$.prompt.currentPrefix+'_state:visible').prev();$('.'+$.prompt.currentPrefix+'_state').slideUp('slow');$next.slideDown('slow',function(){$next.find('.'+$.prompt.currentPrefix+'defaultbutton').focus();if(typeof callback=='function')callback();});};$.prompt.close=function(){$('#'+$.prompt.currentPrefix+'box').fadeOut('fast',function(){$(this).remove();});};$.fn.extend({prompt:function(options){if(options==undefined)options={};if(options.withDataAndEvents==undefined)options.withDataAndEvents=false;$.prompt($(this).clone(options.withDataAndEvents).html(),options);},promptDropIn:function(speed,callback){var $t=$(this);if($t.css("display")=="none"){var eltop=$t.css('top');$t.css({top:$(window).scrollTop(),display:'block'}).animate({top:eltop},speed,'swing',callback);}}});})(jQuery); \ No newline at end of file diff --git a/public_html/getimage.php b/public_html/getimage.php index 993d52ba8..d97cbe041 100644 --- a/public_html/getimage.php +++ b/public_html/getimage.php @@ -31,13 +31,12 @@ // +---------------------------------------------------------------------------+ /** -* For really strict webhosts, this file an be used to show images in pages that -* serve the images from outside of the webtree to a place that the webserver -* user can actually write too -* -* @author Tony Bibbs, tony AT tonybibbs DOT com -* -*/ + * For really strict webhosts, this file an be used to show images in pages that + * serve the images from outside of the webtree to a place that the webserver + * user can actually write too + * + * @author Tony Bibbs, tony AT tonybibbs DOT com + */ require_once 'lib-common.php'; require_once $_CONF['path_system'] . 'classes/downloader.class.php'; @@ -51,12 +50,12 @@ 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', - 'png' => 'image/x-png' + 'png' => 'image/x-png', ) ); COM_setArgNames(array('mode', 'image')); -$mode = COM_applyFilter(COM_getArgument('mode')); +$mode = COM_applyFilter(COM_getArgument('mode')); $image = COM_applyFilter(COM_getArgument('image')); if (strstr($image, '..')) { @@ -94,16 +93,10 @@ if (is_array($st)) { // cf. RFC 2616, Section 3.3.1 Full Date $last_mod = str_replace('+0000', 'GMT', gmdate('r', $st['mtime'])); - $etag = '"' . md5($image) . '"'; + $etag = '"' . md5($image) . '"'; - $mod_since = ''; - $none_match = ''; - if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { - $mod_since = $_SERVER['HTTP_IF_MODIFIED_SINCE']; - } - if (isset($_SERVER['HTTP_IF_NONE_MATCH'])) { - $none_match = $_SERVER['HTTP_IF_NONE_MATCH']; - } + $mod_since = Geeklog\Input::server('HTTP_IF_MODIFIED_SINCE', ''); + $none_match = Geeklog\Input::server('HTTP_IF_NONE_MATCH', ''); if (($last_mod == $mod_since) && ($etag == $none_match)) { // image hasn't change - we're done diff --git a/public_html/index.php b/public_html/index.php index 88cc4aad9..ad47f1c43 100644 --- a/public_html/index.php +++ b/public_html/index.php @@ -45,23 +45,28 @@ function fixTopic(&$A, $tid_list) { global $_TABLES, $topic; + // This case may happen if a article belongs to the current topic but the default topic for the article is a child of the current topic. + $sql = "SELECT t.topic, t.imageurl + FROM {$_TABLES['topics']} t, {$_TABLES['topic_assignments']} ta + WHERE t.tid = ta.tid"; + // If all topics (blank) then find default topic if (!empty($topic)) { - // This case may happen if a article belongs to the current topic but the default topic for the article is a child of the current topic. - $sql = "SELECT t.topic, t.imageurl - FROM {$_TABLES['topics']} t, {$_TABLES['topic_assignments']} ta - WHERE t.tid = ta.tid - AND ta.type = 'article' AND ta.id = '{$A['sid']}' AND ta.tid = '$topic' - " . COM_getLangSQL('tid', 'AND', 't') . COM_getPermSQL('AND', 0, 2, 't'); - - $result = DB_query($sql); - $nrows = DB_numRows($result); - if ($nrows > 0) { - $B = DB_fetchArray($result); - $A['topic'] = $B['topic']; - $A['imageurl'] = $B['imageurl']; - } else { + $sql .= " AND ta.type = 'article' AND ta.id = '{$A['sid']}' AND ta.tid = '$topic'"; + } else { + $sql .= " AND ta.type = 'article' AND ta.id = '{$A['sid']}'"; + } + $sql .= COM_getLangSQL('tid', 'AND', 't') . COM_getPermSQL('AND', 0, 2, 't'); + $sql .= " ORDER BY ta.tdefault DESC"; // Do this just in case story doesn't have a default (it always should) and the current topic is all + + $result = DB_query($sql); + $nrows = DB_numRows($result); + if ($nrows > 0) { + $B = DB_fetchArray($result); + $A['topic'] = $B['topic']; + $A['imageurl'] = $B['imageurl']; + } else { + if (!empty($topic)) { // Does not belong to current topic so check inherited - // Make sure sort order the same as in TOPIC_getTopic or articles with multiple topics might not display in the right topic when clicked $sql = "SELECT t.topic, t.imageurl FROM {$_TABLES['topics']} t, {$_TABLES['topic_assignments']} ta @@ -78,7 +83,12 @@ function fixTopic(&$A, $tid_list) $A['topic'] = $B['topic']; $A['imageurl'] = $B['imageurl']; } + } else { + // This should not happen as every article should have at least 1 default topic + $A['topic'] = ''; + $A['imageurl'] = ''; } + } } @@ -90,12 +100,7 @@ function fixTopic(&$A, $tid_list) // See if user has access to view topic else display message. // This check has already been done in lib-common so re check to figure out if // 404 message needs to be displayed. -$topic_check = ''; -if (isset($_GET['topic'])) { - $topic_check = COM_applyFilter($_GET['topic']); -} elseif (isset($_POST['topic'])) { - $topic_check = COM_applyFilter($_POST['topic']); -} +$topic_check = Geeklog\Input::fGetOrPost('topic', ''); if ($topic_check != '') { if (strtolower($topic_check) != strtolower(DB_getItem($_TABLES['topics'], 'tid', "tid = '$topic_check' " . COM_getPermSQL('AND')))) { COM_handle404(); @@ -103,21 +108,16 @@ function fixTopic(&$A, $tid_list) } $displayall = false; -if (isset($_GET['display'])) { - if (($_GET['display'] == 'all') && (empty($topic))) { - $displayall = true; - } +if ((Geeklog\Input::get('display') === 'all') && empty($topic)) { + $displayall = true; } // Retrieve the archive topic - currently only one supported $archivetid = DB_getItem($_TABLES['topics'], 'tid', "archive_flag=1"); -$page = 1; -if (isset($_GET['page'])) { - $page = COM_applyFilter($_GET['page'], true); - if ($page == 0) { - $page = 1; - } +$page = (int) Geeklog\Input::fGet('page', 1); +if ($page == 0) { + $page = 1; } $display = ''; @@ -132,11 +132,8 @@ function fixTopic(&$A, $tid_list) } if (isset($_GET['msg'])) { - $plugin = ''; - if (isset($_GET['plugin'])) { - $plugin = COM_applyFilter($_GET['plugin']); - } - $display .= COM_showMessage(COM_applyFilter($_GET['msg'], true), $plugin); + $plugin = Geeklog\Input::fGet('plugin', ''); + $display .= COM_showMessage((int) Geeklog\Input::fGet('msg'), $plugin); } if (SEC_inGroup('Root') && ($page == 1)) { @@ -291,20 +288,19 @@ function fixTopic(&$A, $tid_list) } } -// The incorrect t.topic, t.imageurl will most likely be return ... will fix later in fixtopic function. -// Could not fix in sql since 2 many variables to contend with plus speed of sql statement probably an issue -$msql = "SELECT s.*, ta.tid, UNIX_TIMESTAMP(s.date) AS unixdate, +// The incorrect t.topic, t.imageurl will most likely be return so removed from this statement and added later in fixtopic function. (also because of MySQL 5.7 default install support) +$msql = "SELECT s.*, UNIX_TIMESTAMP(s.date) AS unixdate, UNIX_TIMESTAMP(s.expire) as expireunix, - {$userfields}, t.topic, t.imageurl + {$userfields} FROM {$_TABLES['stories']} AS s, {$_TABLES['topic_assignments']} AS ta, {$_TABLES['users']} AS u, {$_TABLES['topics']} AS t WHERE (s.uid = u.uid) AND (ta.tid = t.tid) AND ta.type = 'article' AND ta.id = s.sid " . COM_getLangSQL('sid', 'AND', 's') . " AND - {$sql} GROUP BY s.sid, s.uid, s.draft_flag, s.date, s.title, s.page_title, s.introtext, - s.bodytext, s.text_version, s.hits, s.numemails, s.comments, s.comment_expire, s.trackbacks, - s.related, s.featured, s.show_topic_icon, s.commentcode, s.trackbackcode, s.statuscode, s.expire, - s.postmode, s.advanced_editor_mode, s.frontpage, s.meta_description, s.meta_keywords, - s.cache_time, s.owner_id, s.group_id, s.perm_owner, s.perm_group, s.perm_members, s.perm_anon, - ta.tid, expireunix, {$userfields}, t.topic, t.imageurl + {$sql} GROUP BY s.sid, s.uid, s.draft_flag, s.date, s.title, s.page_title, s.introtext, + s.bodytext, s.text_version, s.hits, s.numemails, s.comments, s.comment_expire, s.trackbacks, + s.related, s.featured, s.show_topic_icon, s.commentcode, s.trackbackcode, s.statuscode, s.expire, + s.postmode, s.advanced_editor_mode, s.frontpage, s.meta_description, s.meta_keywords, + s.cache_time, s.owner_id, s.group_id, s.perm_owner, s.perm_group, s.perm_members, s.perm_anon, + expireunix, {$userfields}, date ORDER BY featured DESC, date DESC LIMIT {$offset}, {$limit}"; $result = DB_query($msql); diff --git a/public_html/javascript/jquery.min.js b/public_html/javascript/jquery.min.js index 0f60b7bd0..4c5be4c0f 100644 --- a/public_html/javascript/jquery.min.js +++ b/public_html/javascript/jquery.min.js @@ -1,5 +1,4 @@ -/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="
    ",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; - -return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("