Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Q
question2answer
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
outils
question2answer
Commits
2076b209
Commit
2076b209
authored
Jul 31, 2020
by
Scott
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move admin pages to Controller system
parent
0924669a
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
2275 additions
and
2146 deletions
+2275
-2146
routing.php
qa-include/app/routing.php
+23
-11
Approve.php
qa-src/Controllers/Admin/Approve.php
+90
-79
Categories.php
qa-src/Controllers/Admin/Categories.php
+545
-532
Flagged.php
qa-src/Controllers/Admin/Flagged.php
+91
-80
Hidden.php
qa-src/Controllers/Admin/Hidden.php
+119
-108
Moderate.php
qa-src/Controllers/Admin/Moderate.php
+122
-111
Pages.php
qa-src/Controllers/Admin/Pages.php
+473
-460
Plugins.php
qa-src/Controllers/Admin/Plugins.php
+196
-188
UserFields.php
qa-src/Controllers/Admin/UserFields.php
+207
-194
UserTitles.php
qa-src/Controllers/Admin/UserTitles.php
+139
-126
Widgets.php
qa-src/Controllers/Admin/Widgets.php
+270
-257
No files found.
qa-include/app/routing.php
View file @
2076b209
...
@@ -46,9 +46,31 @@ function qa_controller_routing(Router $router)
...
@@ -46,9 +46,31 @@ function qa_controller_routing(Router $router)
$router
->
addRoute
(
'GET'
,
'ip/{str}'
,
"
$ns
\User\Ip"
,
'address'
,
[
'template'
=>
'ip'
]);
$router
->
addRoute
(
'GET'
,
'ip/{str}'
,
"
$ns
\User\Ip"
,
'address'
,
[
'template'
=>
'ip'
]);
$router
->
addRoute
(
'POST'
,
'ip/{str}'
,
"
$ns
\User\Ip"
,
'address'
,
[
'template'
=>
'ip'
]);
$router
->
addRoute
(
'POST'
,
'ip/{str}'
,
"
$ns
\User\Ip"
,
'address'
,
[
'template'
=>
'ip'
]);
$router
->
addRoute
(
'GET'
,
'admin/stats'
,
"
$ns
\Admin\Stats"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/userfields'
,
"
$ns
\Admin\UserFields"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/userfields'
,
"
$ns
\Admin\UserFields"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/usertitles'
,
"
$ns
\Admin\UserTitles"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/usertitles'
,
"
$ns
\Admin\UserTitles"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/layoutwidgets'
,
"
$ns
\Admin\Widgets"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/layoutwidgets'
,
"
$ns
\Admin\Widgets"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/categories'
,
"
$ns
\Admin\Categories"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/categories'
,
"
$ns
\Admin\Categories"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/pages'
,
"
$ns
\Admin\Pages"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/pages'
,
"
$ns
\Admin\Pages"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/points'
,
"
$ns
\Admin\Points"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/points'
,
"
$ns
\Admin\Points"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/points'
,
"
$ns
\Admin\Points"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/points'
,
"
$ns
\Admin\Points"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/stats'
,
"
$ns
\Admin\Stats"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/plugins'
,
"
$ns
\Admin\Plugins"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/plugins'
,
"
$ns
\Admin\Plugins"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/moderate'
,
"
$ns
\Admin\Moderate"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/moderate'
,
"
$ns
\Admin\Moderate"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/flagged'
,
"
$ns
\Admin\Flagged"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/flagged'
,
"
$ns
\Admin\Flagged"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/hidden'
,
"
$ns
\Admin\Hidden"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/hidden'
,
"
$ns
\Admin\Hidden"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'GET'
,
'admin/approve'
,
"
$ns
\Admin\Approve"
,
'index'
,
[
'template'
=>
'admin'
]);
$router
->
addRoute
(
'POST'
,
'admin/approve'
,
"
$ns
\Admin\Approve"
,
'index'
,
[
'template'
=>
'admin'
]);
}
}
/**
/**
...
@@ -63,17 +85,7 @@ function qa_page_routing()
...
@@ -63,17 +85,7 @@ function qa_page_routing()
'account'
=>
'pages/account.php'
,
'account'
=>
'pages/account.php'
,
'activity/'
=>
'pages/activity.php'
,
'activity/'
=>
'pages/activity.php'
,
'admin/'
=>
'pages/admin/admin-default.php'
,
'admin/'
=>
'pages/admin/admin-default.php'
,
'admin/approve'
=>
'pages/admin/admin-approve.php'
,
'admin/categories'
=>
'pages/admin/admin-categories.php'
,
'admin/flagged'
=>
'pages/admin/admin-flagged.php'
,
'admin/hidden'
=>
'pages/admin/admin-hidden.php'
,
'admin/layoutwidgets'
=>
'pages/admin/admin-widgets.php'
,
'admin/moderate'
=>
'pages/admin/admin-moderate.php'
,
'admin/pages'
=>
'pages/admin/admin-pages.php'
,
'admin/plugins'
=>
'pages/admin/admin-plugins.php'
,
'admin/recalc'
=>
'pages/admin/admin-recalc.php'
,
'admin/recalc'
=>
'pages/admin/admin-recalc.php'
,
'admin/userfields'
=>
'pages/admin/admin-userfields.php'
,
'admin/usertitles'
=>
'pages/admin/admin-usertitles.php'
,
'answers/'
=>
'pages/answers.php'
,
'answers/'
=>
'pages/answers.php'
,
'ask'
=>
'pages/ask.php'
,
'ask'
=>
'pages/ask.php'
,
'categories/'
=>
'pages/categories.php'
,
'categories/'
=>
'pages/categories.php'
,
...
...
qa-
include/pages/admin/admin-a
pprove.php
→
qa-
src/Controllers/Admin/A
pprove.php
View file @
2076b209
...
@@ -3,9 +3,6 @@
...
@@ -3,9 +3,6 @@
Question2Answer by Gideon Greenspan and contributors
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
http://www.question2answer.org/
Description: Controller for admin page showing new users waiting for approval
This program is free software; you can redistribute it and/or
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
as published by the Free Software Foundation; either version 2
...
@@ -19,118 +16,132 @@
...
@@ -19,118 +16,132 @@
More about this license: http://www.question2answer.org/license.php
More about this license: http://www.question2answer.org/license.php
*/
*/
if
(
!
defined
(
'QA_VERSION'
))
{
// don't allow this page to be requested directly from browser
namespace
Q2A\Controllers\Admin
;
header
(
'Location: ../../../'
);
exit
;
}
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
use
Q2A\Controllers\BaseController
;
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
use
Q2A\Database\DbConnection
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
/**
* Controller for admin page showing new users waiting for approval.
*/
class
Approve
extends
BaseController
{
public
function
__construct
(
DbConnection
$db
)
{
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
// Check we're not using single-sign on integration
parent
::
__construct
(
$db
);
if
(
QA_FINAL_EXTERNAL_USERS
)
// Check we're not using single-sign on integration
qa_fatal_error
(
'User accounts are handled by external code'
);
if
(
QA_FINAL_EXTERNAL_USERS
)
{
qa_fatal_error
(
'User accounts are handled by external code'
);
}
}
// Find most flagged questions, answers, comments
public
function
index
()
{
// Find most flagged questions, answers, comments
$userid
=
qa_get_logged_in_userid
();
$userid
=
qa_get_logged_in_userid
();
$users
=
qa_db_get_unapproved_users
(
qa_opt
(
'page_size_users'
));
$users
=
qa_db_get_unapproved_users
(
qa_opt
(
'page_size_users'
));
$userfields
=
qa_db_select_with_pending
(
qa_db_userfields_selectspec
());
$userfields
=
qa_db_select_with_pending
(
qa_db_userfields_selectspec
());
// Check admin privileges (do late to allow one DB query)
// Check admin privileges (do late to allow one DB query)
if
(
qa_get_logged_in_level
()
<
QA_USER_LEVEL_MODERATOR
)
{
if
(
qa_get_logged_in_level
()
<
QA_USER_LEVEL_MODERATOR
)
{
$qa_content
=
qa_content_prepare
();
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
return
$qa_content
;
return
$qa_content
;
}
}
// Check to see if any were approved or blocked here
// Check to see if any were approved or blocked here
$pageerror
=
qa_admin_check_clicks
();
$pageerror
=
qa_admin_check_clicks
();
// Prepare content for theme
// Prepare content for theme
$qa_content
=
qa_content_prepare
();
$qa_content
=
qa_content_prepare
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/recent_users_title'
);
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/recent_users_title'
);
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'message_list'
]
=
array
(
$qa_content
[
'message_list'
]
=
array
(
'form'
=>
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'hidden'
=>
array
(
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
),
),
'messages'
=>
array
(),
'messages'
=>
array
(),
);
);
if
(
count
(
$users
))
{
if
(
count
(
$users
))
{
foreach
(
$users
as
$user
)
{
foreach
(
$users
as
$user
)
{
$message
=
array
();
$message
=
array
();
$message
[
'tags'
]
=
'id="p'
.
qa_html
(
$user
[
'userid'
])
.
'"'
;
// use p prefix for qa_admin_click() in qa-admin.js
$message
[
'tags'
]
=
'id="p'
.
qa_html
(
$user
[
'userid'
])
.
'"'
;
// use p prefix for qa_admin_click() in qa-admin.js
$message
[
'content'
]
=
qa_lang_html
(
'users/registered_label'
)
.
' '
.
$message
[
'content'
]
=
qa_lang_html
(
'users/registered_label'
)
.
' '
.
strtr
(
qa_lang_html
(
'users/x_ago_from_y'
),
array
(
strtr
(
qa_lang_html
(
'users/x_ago_from_y'
),
array
(
'^1'
=>
qa_time_to_string
(
qa_opt
(
'db_time'
)
-
$user
[
'created'
]),
'^1'
=>
qa_time_to_string
(
qa_opt
(
'db_time'
)
-
$user
[
'created'
]),
'^2'
=>
qa_ip_anchor_html
(
@
inet_ntop
(
$user
[
'createip'
])),
'^2'
=>
qa_ip_anchor_html
(
@
inet_ntop
(
$user
[
'createip'
])),
))
.
'<br/>'
;
))
.
'<br/>'
;
$htmlemail
=
qa_html
(
$user
[
'email'
]);
$htmlemail
=
qa_html
(
$user
[
'email'
]);
$message
[
'content'
]
.=
qa_lang_html
(
'users/email_label'
)
.
' <a href="mailto:'
.
$htmlemail
.
'">'
.
$htmlemail
.
'</a>'
;
$message
[
'content'
]
.=
qa_lang_html
(
'users/email_label'
)
.
' <a href="mailto:'
.
$htmlemail
.
'">'
.
$htmlemail
.
'</a>'
;
if
(
qa_opt
(
'confirm_user_emails'
))
{
if
(
qa_opt
(
'confirm_user_emails'
))
{
$message
[
'content'
]
.=
'<small> - '
.
qa_lang_html
((
$user
[
'flags'
]
&
QA_USER_FLAGS_EMAIL_CONFIRMED
)
?
'users/email_confirmed'
:
'users/email_not_confirmed'
)
.
'</small>'
;
$message
[
'content'
]
.=
'<small> - '
.
qa_lang_html
((
$user
[
'flags'
]
&
QA_USER_FLAGS_EMAIL_CONFIRMED
)
?
'users/email_confirmed'
:
'users/email_not_confirmed'
)
.
'</small>'
;
}
}
foreach
(
$userfields
as
$userfield
)
{
foreach
(
$userfields
as
$userfield
)
{
if
(
strlen
(
@
$user
[
'profile'
][
$userfield
[
'title'
]]))
if
(
strlen
(
@
$user
[
'profile'
][
$userfield
[
'title'
]]))
$message
[
'content'
]
.=
'<br/>'
.
qa_html
(
$userfield
[
'content'
]
.
': '
.
$user
[
'profile'
][
$userfield
[
'title'
]]);
$message
[
'content'
]
.=
'<br/>'
.
qa_html
(
$userfield
[
'content'
]
.
': '
.
$user
[
'profile'
][
$userfield
[
'title'
]]);
}
}
$message
[
'meta_order'
]
=
qa_lang_html
(
'main/meta_order'
);
$message
[
'meta_order'
]
=
qa_lang_html
(
'main/meta_order'
);
$message
[
'who'
][
'data'
]
=
qa_get_one_user_html
(
$user
[
'handle'
]);
$message
[
'who'
][
'data'
]
=
qa_get_one_user_html
(
$user
[
'handle'
]);
$message
[
'form'
]
=
array
(
$message
[
'form'
]
=
array
(
'style'
=>
'light'
,
'style'
=>
'light'
,
'buttons'
=>
array
(
'buttons'
=>
array
(
'approve'
=>
array
(
'approve'
=>
array
(
'tags'
=>
'name="admin_'
.
$user
[
'userid'
]
.
'_userapprove" onclick="return qa_admin_click(this);"'
,
'tags'
=>
'name="admin_'
.
$user
[
'userid'
]
.
'_userapprove" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/approve_button'
),
'label'
=>
qa_lang_html
(
'question/approve_button'
),
'popup'
=>
qa_lang_html
(
'admin/approve_user_popup'
),
'popup'
=>
qa_lang_html
(
'admin/approve_user_popup'
),
),
),
'block'
=>
array
(
'block'
=>
array
(
'tags'
=>
'name="admin_'
.
$user
[
'userid'
]
.
'_userblock" onclick="return qa_admin_click(this);"'
,
'tags'
=>
'name="admin_'
.
$user
[
'userid'
]
.
'_userblock" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'admin/block_button'
),
'label'
=>
qa_lang_html
(
'admin/block_button'
),
'popup'
=>
qa_lang_html
(
'admin/block_user_popup'
),
'popup'
=>
qa_lang_html
(
'admin/block_user_popup'
),
),
),
),
),
);
);
$qa_content
[
'message_list'
][
'messages'
][]
=
$message
;
$qa_content
[
'message_list'
][
'messages'
][]
=
$message
;
}
}
}
else
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_unapproved_found'
);
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_unapproved_found'
);
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
return
$qa_content
;
return
$qa_content
;
}
}
qa-
include/pages/admin/admin-c
ategories.php
→
qa-
src/Controllers/Admin/C
ategories.php
View file @
2076b209
...
@@ -3,9 +3,6 @@
...
@@ -3,9 +3,6 @@
Question2Answer by Gideon Greenspan and contributors
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
http://www.question2answer.org/
Description: Controller for admin page for editing categories
This program is free software; you can redistribute it and/or
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
as published by the Free Software Foundation; either version 2
...
@@ -19,631 +16,647 @@
...
@@ -19,631 +16,647 @@
More about this license: http://www.question2answer.org/license.php
More about this license: http://www.question2answer.org/license.php
*/
*/
if
(
!
defined
(
'QA_VERSION'
))
{
// don't allow this page to be requested directly from browser
namespace
Q2A\Controllers\Admin
;
header
(
'Location: ../../../'
);
exit
;
}
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
// Get relevant list of categories
$editcategoryid
=
qa_post_text
(
'edit'
);
if
(
!
isset
(
$editcategoryid
))
$editcategoryid
=
qa_get
(
'edit'
);
if
(
!
isset
(
$editcategoryid
))
$editcategoryid
=
qa_get
(
'addsub'
);
$categories
=
qa_db_select_with_pending
(
qa_db_category_nav_selectspec
(
$editcategoryid
,
true
,
false
,
true
));
use
Q2A\Controllers\BaseController
;
use
Q2A\Database\DbConnection
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
/**
* Controller for admin page for editing categories.
*/
class
Categories
extends
BaseController
{
public
function
__construct
(
DbConnection
$db
)
{
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
// Check admin privileges (do late to allow one DB query)
parent
::
__construct
(
$db
);
if
(
!
qa_admin_check_privileges
(
$qa_content
))
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
return
$qa_content
;
// Work out the appropriate state for the page
$editcategory
=
@
$categories
[
$editcategoryid
];
if
(
isset
(
$editcategory
))
{
$parentid
=
qa_get
(
'addsub'
);
if
(
isset
(
$parentid
))
$editcategory
=
array
(
'parentid'
=>
$parentid
);
}
else
{
if
(
qa_clicked
(
'doaddcategory'
))
$editcategory
=
array
();
elseif
(
qa_clicked
(
'dosavecategory'
))
{
$parentid
=
qa_post_text
(
'parent'
);
$editcategory
=
array
(
'parentid'
=>
strlen
(
$parentid
)
?
$parentid
:
null
);
}
}
}
$setmissing
=
qa_post_text
(
'missing'
)
||
qa_get
(
'missing'
);
public
function
index
()
{
// Get relevant list of categories
$setparent
=
!
$setmissing
&&
(
qa_post_text
(
'setparent'
)
||
qa_get
(
'setparent'
))
&&
isset
(
$editcategory
[
'categoryid'
]);
$editcategoryid
=
qa_post_text
(
'edit'
);
if
(
!
isset
(
$editcategoryid
))
$editcategoryid
=
qa_get
(
'edit'
);
if
(
!
isset
(
$editcategoryid
))
$editcategoryid
=
qa_get
(
'addsub'
);
$hassubcategory
=
false
;
$categories
=
qa_db_select_with_pending
(
qa_db_category_nav_selectspec
(
$editcategoryid
,
true
,
false
,
true
));
foreach
(
$categories
as
$category
)
{
if
(
!
strcmp
(
$category
[
'parentid'
],
$editcategoryid
))
$hassubcategory
=
true
;
}
// Process saving options
// Check admin privileges (do late to allow one DB query)
$savedoptions
=
false
;
if
(
!
qa_admin_check_privileges
(
$qa_content
))
$securityexpired
=
false
;
return
$qa_content
;
if
(
qa_clicked
(
'dosaveoptions'
))
{
if
(
!
qa_check_form_security_code
(
'admin/categories'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
else
{
// Work out the appropriate state for the page
qa_set_option
(
'allow_no_category'
,
(
int
)
qa_post_text
(
'option_allow_no_category'
));
qa_set_option
(
'allow_no_sub_category'
,
(
int
)
qa_post_text
(
'option_allow_no_sub_category'
));
$savedoptions
=
true
;
}
}
$editcategory
=
@
$categories
[
$editcategoryid
];
// Process saving an old or new category
if
(
isset
(
$editcategory
))
{
$parentid
=
qa_get
(
'addsub'
);
if
(
isset
(
$parentid
))
$editcategory
=
array
(
'parentid'
=>
$parentid
);
if
(
qa_clicked
(
'docancel'
))
{
}
else
{
if
(
$setmissing
||
$setparent
)
if
(
qa_clicked
(
'doaddcategory'
))
qa_redirect
(
qa_request
(),
array
(
'edit'
=>
$editcategory
[
'categoryid'
]));
$editcategory
=
array
();
elseif
(
isset
(
$editcategory
[
'categoryid'
]))
qa_redirect
(
qa_request
());
else
qa_redirect
(
qa_request
(),
array
(
'edit'
=>
@
$editcategory
[
'parentid'
]));
}
elseif
(
qa_clicked
(
'dosetmissing'
))
{
elseif
(
qa_clicked
(
'dosavecategory'
))
{
if
(
!
qa_check_form_security_code
(
'admin/categories'
,
qa_post_text
(
'code'
)))
$parentid
=
qa_post_text
(
'parent'
);
$securityexpired
=
true
;
$editcategory
=
array
(
'parentid'
=>
strlen
(
$parentid
)
?
$parentid
:
null
);
}
}
else
{
$setmissing
=
qa_post_text
(
'missing'
)
||
qa_get
(
'missing'
);
$inreassign
=
qa_get_category_field_value
(
'reassign'
);
qa_db_category_reassign
(
$editcategory
[
'categoryid'
],
$inreassign
);
qa_redirect
(
qa_request
(),
array
(
'recalc'
=>
1
,
'edit'
=>
$editcategory
[
'categoryid'
]));
}
}
elseif
(
qa_clicked
(
'dosavecategory'
))
{
$setparent
=
!
$setmissing
&&
(
qa_post_text
(
'setparent'
)
||
qa_get
(
'setparent'
))
&&
isset
(
$editcategory
[
'categoryid'
]);
if
(
!
qa_check_form_security_code
(
'admin/categories'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
elseif
(
qa_post_text
(
'dodelete'
))
{
$hassubcategory
=
false
;
if
(
!
$hassubcategory
)
{
foreach
(
$categories
as
$category
)
{
$inreassign
=
qa_get_category_field_value
(
'reassign'
);
if
(
!
strcmp
(
$category
[
'parentid'
],
$editcategoryid
))
qa_db_category_reassign
(
$editcategory
[
'categoryid'
],
$inreassign
);
$hassubcategory
=
true
;
qa_db_category_delete
(
$editcategory
[
'categoryid'
]);
qa_redirect
(
qa_request
(),
array
(
'recalc'
=>
1
,
'edit'
=>
$editcategory
[
'parentid'
]));
}
}
}
else
{
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
$inname
=
qa_post_text
(
'name'
);
$incontent
=
qa_post_text
(
'content'
);
$inparentid
=
$setparent
?
qa_get_category_field_value
(
'parent'
)
:
$editcategory
[
'parentid'
];
$inposition
=
qa_post_text
(
'position'
);
$errors
=
array
();
//
Check the parent ID
//
Process saving options
$incategories
=
qa_db_select_with_pending
(
qa_db_category_nav_selectspec
(
$inparentid
,
true
));
$savedoptions
=
false
;
$securityexpired
=
false
;
// Verify the name is legitimate for that parent ID
if
(
qa_clicked
(
'dosaveoptions'
))
{
if
(
!
qa_check_form_security_code
(
'admin/categories'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
if
(
empty
(
$inname
))
else
{
$errors
[
'name'
]
=
qa_lang
(
'main/field_required'
);
qa_set_option
(
'allow_no_category'
,
(
int
)
qa_post_text
(
'option_allow_no_category'
));
elseif
(
qa_strlen
(
$inname
)
>
QA_DB_MAX_CAT_PAGE_TITLE_LENGTH
)
qa_set_option
(
'allow_no_sub_category'
,
(
int
)
qa_post_text
(
'option_allow_no_sub_category'
));
$errors
[
'name'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_CAT_PAGE_TITLE_LENGTH
);
$savedoptions
=
true
;
else
{
foreach
(
$incategories
as
$category
)
{
if
(
!
strcmp
(
$category
[
'parentid'
],
$inparentid
)
&&
strcmp
(
$category
[
'categoryid'
],
@
$editcategory
[
'categoryid'
])
&&
qa_strtolower
(
$category
[
'title'
])
==
qa_strtolower
(
$inname
)
)
{
$errors
[
'name'
]
=
qa_lang
(
'admin/category_already_used'
);
}
}
}
}
}
// Verify the slug is legitimate for that parent ID
for
(
$attempt
=
0
;
$attempt
<
100
;
$attempt
++
)
{
// Process saving an old or new category
switch
(
$attempt
)
{
case
0
:
$inslug
=
qa_post_text
(
'slug'
);
if
(
!
isset
(
$inslug
))
$inslug
=
implode
(
'-'
,
qa_string_to_words
(
$inname
));
break
;
case
1
:
if
(
qa_clicked
(
'docancel'
))
{
$inslug
=
qa_lang_sub
(
'admin/category_default_slug'
,
$inslug
);
if
(
$setmissing
||
$setparent
)
break
;
qa_redirect
(
qa_request
(),
array
(
'edit'
=>
$editcategory
[
'categoryid'
]));
elseif
(
isset
(
$editcategory
[
'categoryid'
]))
qa_redirect
(
qa_request
());
else
qa_redirect
(
qa_request
(),
array
(
'edit'
=>
@
$editcategory
[
'parentid'
]));
}
elseif
(
qa_clicked
(
'dosetmissing'
))
{
if
(
!
qa_check_form_security_code
(
'admin/categories'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
default
:
else
{
$inslug
=
qa_lang_sub
(
'admin/category_default_slug'
,
$attempt
-
1
);
$inreassign
=
qa_get_category_field_value
(
'reassign'
);
break
;
qa_db_category_reassign
(
$editcategory
[
'categoryid'
],
$inreassign
);
qa_redirect
(
qa_request
(),
array
(
'recalc'
=>
1
,
'edit'
=>
$editcategory
[
'categoryid'
]));
}
}
$matchcategoryid
=
qa_db_category_slug_to_id
(
$inparentid
,
$inslug
);
// query against DB since MySQL ignores accents, etc...
}
elseif
(
qa_clicked
(
'dosavecategory'
))
{
if
(
!
qa_check_form_security_code
(
'admin/categories'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
if
(
!
isset
(
$inparentid
))
elseif
(
qa_post_text
(
'dodelete'
))
{
$matchpage
=
qa_db_single_select
(
qa_db_page_full_selectspec
(
$inslug
,
false
));
if
(
!
$hassubcategory
)
{
else
$inreassign
=
qa_get_category_field_value
(
'reassign'
);
$matchpage
=
null
;
qa_db_category_reassign
(
$editcategory
[
'categoryid'
],
$inreassign
);
qa_db_category_delete
(
$editcategory
[
'categoryid'
]);
if
(
empty
(
$inslug
))
qa_redirect
(
qa_request
(),
array
(
'recalc'
=>
1
,
'edit'
=>
$editcategory
[
'parentid'
]));
$errors
[
'slug'
]
=
qa_lang
(
'main/field_required'
);
}
elseif
(
qa_strlen
(
$inslug
)
>
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
)
$errors
[
'slug'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
);
elseif
(
preg_match
(
'/[\\+\\/]/'
,
$inslug
))
$errors
[
'slug'
]
=
qa_lang_sub
(
'admin/slug_bad_chars'
,
'+ /'
);
elseif
(
!
isset
(
$inparentid
)
&&
qa_admin_is_slug_reserved
(
$inslug
))
// only top level is a problem
$errors
[
'slug'
]
=
qa_lang
(
'admin/slug_reserved'
);
elseif
(
isset
(
$matchcategoryid
)
&&
strcmp
(
$matchcategoryid
,
@
$editcategory
[
'categoryid'
]))
$errors
[
'slug'
]
=
qa_lang
(
'admin/category_already_used'
);
elseif
(
isset
(
$matchpage
))
$errors
[
'slug'
]
=
qa_lang
(
'admin/page_already_used'
);
else
unset
(
$errors
[
'slug'
]);
if
(
isset
(
$editcategory
[
'categoryid'
])
||
!
isset
(
$errors
[
'slug'
]))
// don't try other options if editing existing category
}
else
{
break
;
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
}
$inname
=
qa_post_text
(
'name'
);
$incontent
=
qa_post_text
(
'content'
);
$inparentid
=
$setparent
?
qa_get_category_field_value
(
'parent'
)
:
$editcategory
[
'parentid'
];
$inposition
=
qa_post_text
(
'position'
);
$errors
=
array
();
// Check the parent ID
$incategories
=
qa_db_select_with_pending
(
qa_db_category_nav_selectspec
(
$inparentid
,
true
));
// Verify the name is legitimate for that parent ID
if
(
empty
(
$inname
))
$errors
[
'name'
]
=
qa_lang
(
'main/field_required'
);
elseif
(
qa_strlen
(
$inname
)
>
QA_DB_MAX_CAT_PAGE_TITLE_LENGTH
)
$errors
[
'name'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_CAT_PAGE_TITLE_LENGTH
);
else
{
foreach
(
$incategories
as
$category
)
{
if
(
!
strcmp
(
$category
[
'parentid'
],
$inparentid
)
&&
strcmp
(
$category
[
'categoryid'
],
@
$editcategory
[
'categoryid'
])
&&
qa_strtolower
(
$category
[
'title'
])
==
qa_strtolower
(
$inname
)
)
{
$errors
[
'name'
]
=
qa_lang
(
'admin/category_already_used'
);
}
}
}
// Perform appropriate database action
// Verify the slug is legitimate for that parent ID
if
(
empty
(
$errors
))
{
for
(
$attempt
=
0
;
$attempt
<
100
;
$attempt
++
)
{
require_once
QA_INCLUDE_DIR
.
'app/cookies.php'
;
switch
(
$attempt
)
{
if
(
isset
(
$editcategory
[
'categoryid'
]))
{
// changing existing category
case
0
:
qa_db_category_rename
(
$editcategory
[
'categoryid'
],
$inname
,
$inslug
);
$inslug
=
qa_post_text
(
'slug'
);
if
(
!
isset
(
$inslug
))
$inslug
=
implode
(
'-'
,
qa_string_to_words
(
$inname
));
break
;
$recalc
=
false
;
case
1
:
$inslug
=
qa_lang_sub
(
'admin/category_default_slug'
,
$inslug
);
break
;
if
(
$setparent
)
{
default
:
qa_db_category_set_parent
(
$editcategory
[
'categoryid'
],
$inparentid
);
$inslug
=
qa_lang_sub
(
'admin/category_default_slug'
,
$attempt
-
1
);
$recalc
=
true
;
break
;
}
else
{
}
qa_db_category_set_content
(
$editcategory
[
'categoryid'
],
$incontent
);
qa_db_category_set_position
(
$editcategory
[
'categoryid'
],
$inposition
);
$matchcategoryid
=
qa_db_category_slug_to_id
(
$inparentid
,
$inslug
);
// query against DB since MySQL ignores accents, etc...
$recalc
=
$hassubcategory
&&
$inslug
!==
$editcategory
[
'tags'
];
if
(
!
isset
(
$inparentid
))
$matchpage
=
qa_db_single_select
(
qa_db_page_full_selectspec
(
$inslug
,
false
));
else
$matchpage
=
null
;
if
(
empty
(
$inslug
))
$errors
[
'slug'
]
=
qa_lang
(
'main/field_required'
);
elseif
(
qa_strlen
(
$inslug
)
>
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
)
$errors
[
'slug'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
);
elseif
(
preg_match
(
'/[\\+\\/]/'
,
$inslug
))
$errors
[
'slug'
]
=
qa_lang_sub
(
'admin/slug_bad_chars'
,
'+ /'
);
elseif
(
!
isset
(
$inparentid
)
&&
qa_admin_is_slug_reserved
(
$inslug
))
// only top level is a problem
$errors
[
'slug'
]
=
qa_lang
(
'admin/slug_reserved'
);
elseif
(
isset
(
$matchcategoryid
)
&&
strcmp
(
$matchcategoryid
,
@
$editcategory
[
'categoryid'
]))
$errors
[
'slug'
]
=
qa_lang
(
'admin/category_already_used'
);
elseif
(
isset
(
$matchpage
))
$errors
[
'slug'
]
=
qa_lang
(
'admin/page_already_used'
);
else
unset
(
$errors
[
'slug'
]);
if
(
isset
(
$editcategory
[
'categoryid'
])
||
!
isset
(
$errors
[
'slug'
]))
// don't try other options if editing existing category
break
;
}
}
qa_report_event
(
'cat_edit'
,
qa_get_logged_in_userid
(),
qa_get_logged_in_handle
(),
qa_cookie_get
(),
array
(
// Perform appropriate database action
'categoryid'
=>
$editcategory
[
'categoryid'
],
'parentid'
=>
isset
(
$inparentid
)
?
$inparentid
:
null
,
if
(
empty
(
$errors
))
{
'content'
=>
isset
(
$incontent
)
?
$incontent
:
null
,
require_once
QA_INCLUDE_DIR
.
'app/cookies.php'
;
'position'
=>
isset
(
$inposition
)
?
$inposition
:
null
,
if
(
isset
(
$editcategory
[
'categoryid'
]))
{
// changing existing category
'name'
=>
$inname
,
qa_db_category_rename
(
$editcategory
[
'categoryid'
],
$inname
,
$inslug
);
'slug'
=>
$inslug
,
));
$recalc
=
false
;
if
(
$setparent
)
{
qa_db_category_set_parent
(
$editcategory
[
'categoryid'
],
$inparentid
);
$recalc
=
true
;
}
else
{
qa_db_category_set_content
(
$editcategory
[
'categoryid'
],
$incontent
);
qa_db_category_set_position
(
$editcategory
[
'categoryid'
],
$inposition
);
$recalc
=
$hassubcategory
&&
$inslug
!==
$editcategory
[
'tags'
];
}
qa_report_event
(
'cat_edit'
,
qa_get_logged_in_userid
(),
qa_get_logged_in_handle
(),
qa_cookie_get
(),
array
(
'categoryid'
=>
$editcategory
[
'categoryid'
],
'parentid'
=>
isset
(
$inparentid
)
?
$inparentid
:
null
,
'content'
=>
isset
(
$incontent
)
?
$incontent
:
null
,
'position'
=>
isset
(
$inposition
)
?
$inposition
:
null
,
'name'
=>
$inname
,
'slug'
=>
$inslug
,
));
qa_redirect
(
qa_request
(),
array
(
'edit'
=>
$editcategory
[
'categoryid'
],
'saved'
=>
true
,
'recalc'
=>
(
int
)
$recalc
));
}
else
{
// creating a new one
$categoryid
=
qa_db_category_create
(
$inparentid
,
$inname
,
$inslug
);
qa_db_category_set_content
(
$categoryid
,
$incontent
);
if
(
isset
(
$inposition
))
qa_db_category_set_position
(
$categoryid
,
$inposition
);
qa_report_event
(
'cat_new'
,
qa_get_logged_in_userid
(),
qa_get_logged_in_handle
(),
qa_cookie_get
(),
array
(
'categoryid'
=>
$categoryid
,
'parentid'
=>
$inparentid
,
'content'
=>
isset
(
$incontent
)
?
$incontent
:
null
,
'position'
=>
isset
(
$inposition
)
?
$inposition
:
null
,
'name'
=>
$inname
,
'slug'
=>
$inslug
,
));
qa_redirect
(
qa_request
(),
array
(
'edit'
=>
$inparentid
,
'added'
=>
true
));
}
}
}
}
qa_redirect
(
qa_request
(),
array
(
'edit'
=>
$editcategory
[
'categoryid'
],
'saved'
=>
true
,
'recalc'
=>
(
int
)
$recalc
));
}
else
{
// creating a new one
// Prepare content for theme
$categoryid
=
qa_db_category_create
(
$inparentid
,
$inname
,
$inslug
);
qa_db_category_set_content
(
$categoryid
,
$incontent
);
$qa_content
=
qa_content_prepare
(
);
if
(
isset
(
$inposition
))
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/categories_title'
);
qa_db_category_set_position
(
$categoryid
,
$inposition
);
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
(
);
qa_report_event
(
'cat_new'
,
qa_get_logged_in_userid
(),
qa_get_logged_in_handle
(),
qa_cookie_get
(),
array
(
if
(
$setmissing
)
{
'categoryid'
=>
$categoryid
,
$qa_content
[
'form'
]
=
array
(
'parentid'
=>
$inparentid
,
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'content'
=>
isset
(
$incontent
)
?
$incontent
:
null
,
'position'
=>
isset
(
$inposition
)
?
$inposition
:
null
,
'name'
=>
$inname
,
'slug'
=>
$inslug
,
));
qa_redirect
(
qa_request
(),
array
(
'edit'
=>
$inparentid
,
'added'
=>
true
));
'style'
=>
'tall'
,
}
}
}
}
'fields'
=>
array
(
'reassign'
=>
array
(
'label'
=>
isset
(
$editcategory
)
?
qa_lang_html_sub
(
'admin/category_no_sub_to'
,
qa_html
(
$editcategory
[
'title'
]))
:
qa_lang_html
(
'admin/category_none_to'
),
'loose'
=>
true
,
),
),
// Prepare content for theme
'buttons'
=>
array
(
'save'
=>
array
(
$qa_content
=
qa_content_prepare
();
'tags'
=>
'id="dosaveoptions"'
,
// just used for qa_recalc_click()
'label'
=>
qa_lang_html
(
'main/save_button'
),
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/categories_title'
);
),
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
if
(
$setmissing
)
{
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'fields'
=>
array
(
'reassign'
=>
array
(
'label'
=>
isset
(
$editcategory
)
?
qa_lang_html_sub
(
'admin/category_no_sub_to'
,
qa_html
(
$editcategory
[
'title'
]))
:
qa_lang_html
(
'admin/category_none_to'
),
'loose'
=>
true
,
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'tags'
=>
'id="dosaveoptions"'
,
// just used for qa_recalc_click()
'label'
=>
qa_lang_html
(
'main/save_button'
),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosetmissing'
=>
'1'
,
// for IE
'edit'
=>
@
$editcategory
[
'categoryid'
],
'missing'
=>
'1'
,
'code'
=>
qa_get_form_security_code
(
'admin/categories'
),
),
);
qa_set_up_category_field
(
$qa_content
,
$qa_content
[
'form'
][
'fields'
][
'reassign'
],
'reassign'
,
$categories
,
@
$editcategory
[
'categoryid'
],
qa_opt
(
'allow_no_category'
),
qa_opt
(
'allow_no_sub_category'
));
}
elseif
(
isset
(
$editcategory
))
{
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'ok'
=>
qa_get
(
'saved'
)
?
qa_lang_html
(
'admin/category_saved'
)
:
(
qa_get
(
'added'
)
?
qa_lang_html
(
'admin/category_added'
)
:
null
),
'fields'
=>
array
(
'name'
=>
array
(
'id'
=>
'name_display'
,
'tags'
=>
'name="name" id="name"'
,
'label'
=>
qa_lang_html
(
count
(
$categories
)
?
'admin/category_name'
:
'admin/category_name_first'
),
'value'
=>
qa_html
(
isset
(
$inname
)
?
$inname
:
@
$editcategory
[
'title'
]),
'error'
=>
qa_html
(
@
$errors
[
'name'
]),
),
'questions'
=>
array
(),
'delete'
=>
array
(),
'reassign'
=>
array
(),
'slug'
=>
array
(
'id'
=>
'slug_display'
,
'tags'
=>
'name="slug"'
,
'label'
=>
qa_lang_html
(
'admin/category_slug'
),
'value'
=>
qa_html
(
isset
(
$inslug
)
?
$inslug
:
@
$editcategory
[
'tags'
]),
'error'
=>
qa_html
(
@
$errors
[
'slug'
]),
),
'content'
=>
array
(
'id'
=>
'content_display'
,
'tags'
=>
'name="content"'
,
'label'
=>
qa_lang_html
(
'admin/category_description'
),
'value'
=>
qa_html
(
isset
(
$incontent
)
?
$incontent
:
@
$editcategory
[
'content'
]),
'error'
=>
qa_html
(
@
$errors
[
'content'
]),
'rows'
=>
2
,
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'tags'
=>
'id="dosaveoptions"'
,
// just used for qa_recalc_click
'label'
=>
qa_lang_html
(
isset
(
$editcategory
[
'categoryid'
])
?
'main/save_button'
:
'admin/add_category_button'
),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosavecategory'
=>
'1'
,
// for IE
'edit'
=>
@
$editcategory
[
'categoryid'
],
'parent'
=>
@
$editcategory
[
'parentid'
],
'setparent'
=>
(
int
)
$setparent
,
'code'
=>
qa_get_form_security_code
(
'admin/categories'
),
),
);
if
(
$setparent
)
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'reassign'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'questions'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'content'
]);
$qa_content
[
'form'
][
'fields'
][
'parent'
]
=
array
(
'label'
=>
qa_lang_html
(
'admin/category_parent'
),
);
$childdepth
=
qa_db_category_child_depth
(
$editcategory
[
'categoryid'
]);
qa_set_up_category_field
(
$qa_content
,
$qa_content
[
'form'
][
'fields'
][
'parent'
],
'parent'
,
isset
(
$incategories
)
?
$incategories
:
$categories
,
isset
(
$inparentid
)
?
$inparentid
:
@
$editcategory
[
'parentid'
],
true
,
true
,
QA_CATEGORY_DEPTH
-
1
-
$childdepth
,
@
$editcategory
[
'categoryid'
]);
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'options'
][
''
]
=
qa_lang_html
(
'admin/category_top_level'
);
@
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'note'
]
.=
qa_lang_html_sub
(
'admin/category_max_depth_x'
,
QA_CATEGORY_DEPTH
);
}
elseif
(
isset
(
$editcategory
[
'categoryid'
]))
{
// existing category
if
(
$hassubcategory
)
{
$qa_content
[
'form'
][
'fields'
][
'name'
][
'note'
]
=
qa_lang_html
(
'admin/category_no_delete_subs'
);
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'reassign'
]);
}
else
{
'cancel'
=>
array
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]
=
array
(
'tags'
=>
'name="docancel"'
,
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
'label'
=>
),
'<span id="reassign_shown">'
.
qa_lang_html
(
'admin/delete_category_reassign'
)
.
'</span>'
.
),
'<span id="reassign_hidden" style="display:none;">'
.
qa_lang_html
(
'admin/delete_category'
)
.
'</span>'
,
'value'
=>
0
,
'type'
=>
'checkbox'
,
);
$qa_content
[
'form'
][
'fields'
][
'reassign'
]
=
array
(
'hidden'
=>
array
(
'id'
=>
'reassign_display'
,
'dosetmissing'
=>
'1'
,
// for IE
'tags'
=>
'name="reassign"'
,
'edit'
=>
@
$editcategory
[
'categoryid'
],
'missing'
=>
'1'
,
'code'
=>
qa_get_form_security_code
(
'admin/categories'
),
),
);
);
qa_set_up_category_field
(
$qa_content
,
$qa_content
[
'form'
][
'fields'
][
'reassign'
],
'reassign'
,
qa_set_up_category_field
(
$qa_content
,
$qa_content
[
'form'
][
'fields'
][
'reassign'
],
'reassign'
,
$categories
,
$editcategory
[
'parentid'
],
true
,
true
,
null
,
$editcategory
[
'categoryid'
]);
$categories
,
@
$editcategory
[
'categoryid'
],
qa_opt
(
'allow_no_category'
),
qa_opt
(
'allow_no_sub_category'
));
}
}
elseif
(
isset
(
$editcategory
))
{
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'ok'
=>
qa_get
(
'saved'
)
?
qa_lang_html
(
'admin/category_saved'
)
:
(
qa_get
(
'added'
)
?
qa_lang_html
(
'admin/category_added'
)
:
null
),
'fields'
=>
array
(
'name'
=>
array
(
'id'
=>
'name_display'
,
'tags'
=>
'name="name" id="name"'
,
'label'
=>
qa_lang_html
(
count
(
$categories
)
?
'admin/category_name'
:
'admin/category_name_first'
),
'value'
=>
qa_html
(
isset
(
$inname
)
?
$inname
:
@
$editcategory
[
'title'
]),
'error'
=>
qa_html
(
@
$errors
[
'name'
]),
),
'questions'
=>
array
(),
'delete'
=>
array
(),
'reassign'
=>
array
(),
'slug'
=>
array
(
'id'
=>
'slug_display'
,
'tags'
=>
'name="slug"'
,
'label'
=>
qa_lang_html
(
'admin/category_slug'
),
'value'
=>
qa_html
(
isset
(
$inslug
)
?
$inslug
:
@
$editcategory
[
'tags'
]),
'error'
=>
qa_html
(
@
$errors
[
'slug'
]),
),
'content'
=>
array
(
'id'
=>
'content_display'
,
'tags'
=>
'name="content"'
,
'label'
=>
qa_lang_html
(
'admin/category_description'
),
'value'
=>
qa_html
(
isset
(
$incontent
)
?
$incontent
:
@
$editcategory
[
'content'
]),
'error'
=>
qa_html
(
@
$errors
[
'content'
]),
'rows'
=>
2
,
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'tags'
=>
'id="dosaveoptions"'
,
// just used for qa_recalc_click
'label'
=>
qa_lang_html
(
isset
(
$editcategory
[
'categoryid'
])
?
'main/save_button'
:
'admin/add_category_button'
),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosavecategory'
=>
'1'
,
// for IE
'edit'
=>
@
$editcategory
[
'categoryid'
],
'parent'
=>
@
$editcategory
[
'parentid'
],
'setparent'
=>
(
int
)
$setparent
,
'code'
=>
qa_get_form_security_code
(
'admin/categories'
),
),
);
$qa_content
[
'form'
][
'fields'
][
'questions'
]
=
array
(
'label'
=>
qa_lang_html
(
'admin/total_qs'
),
'type'
=>
'static'
,
'value'
=>
'<a href="'
.
qa_path_html
(
'questions/'
.
qa_category_path_request
(
$categories
,
$editcategory
[
'categoryid'
]))
.
'">'
.
(
$editcategory
[
'qcount'
]
==
1
?
qa_lang_html_sub
(
'main/1_question'
,
'1'
,
'1'
)
:
qa_lang_html_sub
(
'main/x_questions'
,
qa_format_number
(
$editcategory
[
'qcount'
]))
)
.
'</a>'
,
);
if
(
$hassubcategory
&&
!
qa_opt
(
'allow_no_sub_category'
))
{
$nosubcount
=
qa_db_count_categoryid_qs
(
$editcategory
[
'categoryid'
]);
if
(
$nosubcount
)
{
$qa_content
[
'form'
][
'fields'
][
'questions'
][
'error'
]
=
strtr
(
qa_lang_html
(
'admin/category_no_sub_error'
),
array
(
'^q'
=>
qa_format_number
(
$nosubcount
),
'^1'
=>
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'edit'
=>
$editcategory
[
'categoryid'
],
'missing'
=>
1
))
.
'">'
,
'^2'
=>
'</a>'
,
));
}
}
qa_set_display_rules
(
$qa_content
,
array
(
if
(
$setparent
)
{
'position_display'
=>
'!dodelete'
,
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
'slug_display'
=>
'!dodelete'
,
unset
(
$qa_content
[
'form'
][
'fields'
][
'reassign'
]);
'content_display'
=>
'!dodelete'
,
unset
(
$qa_content
[
'form'
][
'fields'
][
'questions'
]);
'parent_display'
=>
'!dodelete'
,
unset
(
$qa_content
[
'form'
][
'fields'
][
'content'
]);
'children_display'
=>
'!dodelete'
,
'reassign_display'
=>
'dodelete'
,
'reassign_shown'
=>
'dodelete'
,
'reassign_hidden'
=>
'!dodelete'
,
));
}
else
{
// new category
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'reassign'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'slug'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'questions'
]);
$qa_content
[
'focusid'
]
=
'name'
;
}
if
(
!
$setparent
)
{
$qa_content
[
'form'
][
'fields'
][
'parent'
]
=
array
(
$pathhtml
=
qa_category_path_html
(
$categories
,
@
$editcategory
[
'parentid'
]);
'label'
=>
qa_lang_html
(
'admin/category_parent'
),
);
if
(
count
(
$categories
))
{
$childdepth
=
qa_db_category_child_depth
(
$editcategory
[
'categoryid'
]);
$qa_content
[
'form'
][
'fields'
][
'parent'
]
=
array
(
'id'
=>
'parent_display'
,
'label'
=>
qa_lang_html
(
'admin/category_parent'
),
'type'
=>
'static'
,
'value'
=>
(
strlen
(
$pathhtml
)
?
$pathhtml
:
qa_lang_html
(
'admin/category_top_level'
)),
);
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'value'
]
=
qa_set_up_category_field
(
$qa_content
,
$qa_content
[
'form'
][
'fields'
][
'parent'
],
'parent'
,
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'edit'
=>
@
$editcategory
[
'parentid'
]))
.
'">'
.
isset
(
$incategories
)
?
$incategories
:
$categories
,
isset
(
$inparentid
)
?
$inparentid
:
@
$editcategory
[
'parentid'
],
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'value'
]
.
'</a>'
;
true
,
true
,
QA_CATEGORY_DEPTH
-
1
-
$childdepth
,
@
$editcategory
[
'categoryid'
])
;
if
(
isset
(
$editcategory
[
'categoryid'
]))
{
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'options'
][
''
]
=
qa_lang_html
(
'admin/category_top_level'
);
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'value'
]
.=
' - '
.
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'edit'
=>
$editcategory
[
'categoryid'
],
'setparent'
=>
1
))
.
'" style="white-space: nowrap;">'
.
qa_lang_html
(
'admin/category_move_parent'
)
.
'</a>'
;
}
}
$positionoptions
=
array
(
);
@
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'note'
]
.=
qa_lang_html_sub
(
'admin/category_max_depth_x'
,
QA_CATEGORY_DEPTH
);
$previous
=
null
;
}
elseif
(
isset
(
$editcategory
[
'categoryid'
]))
{
// existing category
$passedself
=
false
;
if
(
$hassubcategory
)
{
$qa_content
[
'form'
][
'fields'
][
'name'
][
'note'
]
=
qa_lang_html
(
'admin/category_no_delete_subs'
);
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'reassign'
]);
}
else
{
$qa_content
[
'form'
][
'fields'
][
'delete'
]
=
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
'<span id="reassign_shown">'
.
qa_lang_html
(
'admin/delete_category_reassign'
)
.
'</span>'
.
'<span id="reassign_hidden" style="display:none;">'
.
qa_lang_html
(
'admin/delete_category'
)
.
'</span>'
,
'value'
=>
0
,
'type'
=>
'checkbox'
,
);
$qa_content
[
'form'
][
'fields'
][
'reassign'
]
=
array
(
'id'
=>
'reassign_display'
,
'tags'
=>
'name="reassign"'
,
);
qa_set_up_category_field
(
$qa_content
,
$qa_content
[
'form'
][
'fields'
][
'reassign'
],
'reassign'
,
$categories
,
$editcategory
[
'parentid'
],
true
,
true
,
null
,
$editcategory
[
'categoryid'
]);
}
foreach
(
$categories
as
$key
=>
$category
)
{
$qa_content
[
'form'
][
'fields'
][
'questions'
]
=
array
(
if
(
!
strcmp
(
$category
[
'parentid'
],
@
$editcategory
[
'parentid'
]))
{
'label'
=>
qa_lang_html
(
'admin/total_qs'
),
if
(
isset
(
$previous
))
'type'
=>
'static'
,
$positionhtml
=
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
$passedself
?
$category
[
'title'
]
:
$previous
[
'title'
]));
'value'
=>
'<a href="'
.
qa_path_html
(
'questions/'
.
qa_category_path_request
(
$categories
,
$editcategory
[
'categoryid'
]))
.
'">'
.
else
(
$editcategory
[
'qcount'
]
==
1
$positionhtml
=
qa_lang_html
(
'admin/first'
);
?
qa_lang_html_sub
(
'main/1_question'
,
'1'
,
'1'
)
:
qa_lang_html_sub
(
'main/x_questions'
,
qa_format_number
(
$editcategory
[
'qcount'
]))
)
.
'</a>'
,
);
if
(
$hassubcategory
&&
!
qa_opt
(
'allow_no_sub_category'
))
{
$nosubcount
=
qa_db_count_categoryid_qs
(
$editcategory
[
'categoryid'
]);
if
(
$nosubcount
)
{
$qa_content
[
'form'
][
'fields'
][
'questions'
][
'error'
]
=
strtr
(
qa_lang_html
(
'admin/category_no_sub_error'
),
array
(
'^q'
=>
qa_format_number
(
$nosubcount
),
'^1'
=>
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'edit'
=>
$editcategory
[
'categoryid'
],
'missing'
=>
1
))
.
'">'
,
'^2'
=>
'</a>'
,
));
}
}
$positionoptions
[
$category
[
'position'
]]
=
$positionhtml
;
qa_set_display_rules
(
$qa_content
,
array
(
'position_display'
=>
'!dodelete'
,
'slug_display'
=>
'!dodelete'
,
'content_display'
=>
'!dodelete'
,
'parent_display'
=>
'!dodelete'
,
'children_display'
=>
'!dodelete'
,
'reassign_display'
=>
'dodelete'
,
'reassign_shown'
=>
'dodelete'
,
'reassign_hidden'
=>
'!dodelete'
,
));
if
(
!
strcmp
(
$category
[
'categoryid'
],
@
$editcategory
[
'categoryid'
]))
}
else
{
// new category
$passedself
=
true
;
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'reassign'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'slug'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'questions'
]);
$
previous
=
$category
;
$
qa_content
[
'focusid'
]
=
'name'
;
}
}
}
if
(
isset
(
$editcategory
[
'position'
]))
if
(
!
$setparent
)
{
$positionvalue
=
$positionoptions
[
$editcategory
[
'position'
]];
$pathhtml
=
qa_category_path_html
(
$categories
,
@
$editcategory
[
'parentid'
]);
if
(
count
(
$categories
))
{
$qa_content
[
'form'
][
'fields'
][
'parent'
]
=
array
(
'id'
=>
'parent_display'
,
'label'
=>
qa_lang_html
(
'admin/category_parent'
),
'type'
=>
'static'
,
'value'
=>
(
strlen
(
$pathhtml
)
?
$pathhtml
:
qa_lang_html
(
'admin/category_top_level'
)),
);
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'value'
]
=
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'edit'
=>
@
$editcategory
[
'parentid'
]))
.
'">'
.
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'value'
]
.
'</a>'
;
if
(
isset
(
$editcategory
[
'categoryid'
]))
{
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'value'
]
.=
' - '
.
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'edit'
=>
$editcategory
[
'categoryid'
],
'setparent'
=>
1
))
.
'" style="white-space: nowrap;">'
.
qa_lang_html
(
'admin/category_move_parent'
)
.
'</a>'
;
}
}
else
{
$positionoptions
=
array
();
$positionvalue
=
isset
(
$previous
)
?
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
$previous
[
'title'
]))
:
qa_lang_html
(
'admin/first'
);
$positionoptions
[
1
+
@
max
(
array_keys
(
$positionoptions
))]
=
$positionvalue
;
}
$qa_content
[
'form'
][
'fields'
][
'position'
]
=
array
(
$previous
=
null
;
'id'
=>
'position_display'
,
$passedself
=
false
;
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
);
if
(
isset
(
$editcategory
[
'categoryid'
]))
{
foreach
(
$categories
as
$key
=>
$category
)
{
$catdepth
=
count
(
qa_category_path
(
$categories
,
$editcategory
[
'categoryid'
]));
if
(
!
strcmp
(
$category
[
'parentid'
],
@
$editcategory
[
'parentid'
]))
{
if
(
isset
(
$previous
))
$positionhtml
=
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
$passedself
?
$category
[
'title'
]
:
$previous
[
'title'
]));
else
$positionhtml
=
qa_lang_html
(
'admin/first'
);
if
(
$catdepth
<
QA_CATEGORY_DEPTH
)
{
$positionoptions
[
$category
[
'position'
]]
=
$positionhtml
;
$childrenhtml
=
''
;
foreach
(
$categories
as
$category
)
{
if
(
!
strcmp
(
$category
[
'categoryid'
],
@
$editcategory
[
'categoryid'
]))
if
(
!
strcmp
(
$category
[
'parentid'
],
$editcategory
[
'categoryid'
]))
{
$passedself
=
true
;
$childrenhtml
.=
(
strlen
(
$childrenhtml
)
?
', '
:
''
)
.
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'edit'
=>
$category
[
'categoryid'
]))
.
'">'
.
qa_html
(
$category
[
'title'
])
.
'</a>'
.
$previous
=
$category
;
' ('
.
$category
[
'qcount'
]
.
')'
;
}
}
}
}
if
(
!
strlen
(
$childrenhtml
))
if
(
isset
(
$editcategory
[
'position'
]
))
$
childrenhtml
=
qa_lang_html
(
'admin/category_no_subs'
)
;
$
positionvalue
=
$positionoptions
[
$editcategory
[
'position'
]]
;
$childrenhtml
.=
' - <a href="'
.
qa_path_html
(
qa_request
(),
array
(
'addsub'
=>
$editcategory
[
'categoryid'
]))
.
else
{
'" style="white-space: nowrap;"><b>'
.
qa_lang_html
(
'admin/category_add_sub'
)
.
'</b></a>'
;
$positionvalue
=
isset
(
$previous
)
?
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
$previous
[
'title'
]))
:
qa_lang_html
(
'admin/first'
);
$positionoptions
[
1
+
@
max
(
array_keys
(
$positionoptions
))]
=
$positionvalue
;
}
$qa_content
[
'form'
][
'fields'
][
'children'
]
=
array
(
$qa_content
[
'form'
][
'fields'
][
'position'
]
=
array
(
'id'
=>
'children_display'
,
'id'
=>
'position_display'
,
'label'
=>
qa_lang_html
(
'admin/category_subs'
),
'tags'
=>
'name="position"'
,
'type'
=>
'static'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'value'
=>
$childrenhtml
,
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
);
);
}
else
{
$qa_content
[
'form'
][
'fields'
][
'name'
][
'note'
]
=
qa_lang_html_sub
(
'admin/category_no_add_subs_x'
,
QA_CATEGORY_DEPTH
);
}
}
if
(
isset
(
$editcategory
[
'categoryid'
]))
{
}
$catdepth
=
count
(
qa_category_path
(
$categories
,
$editcategory
[
'categoryid'
]));
if
(
$catdepth
<
QA_CATEGORY_DEPTH
)
{
$childrenhtml
=
''
;
foreach
(
$categories
as
$category
)
{
if
(
!
strcmp
(
$category
[
'parentid'
],
$editcategory
[
'categoryid'
]))
{
$childrenhtml
.=
(
strlen
(
$childrenhtml
)
?
', '
:
''
)
.
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'edit'
=>
$category
[
'categoryid'
]))
.
'">'
.
qa_html
(
$category
[
'title'
])
.
'</a>'
.
' ('
.
$category
[
'qcount'
]
.
')'
;
}
}
if
(
!
strlen
(
$childrenhtml
))
$childrenhtml
=
qa_lang_html
(
'admin/category_no_subs'
);
$childrenhtml
.=
' - <a href="'
.
qa_path_html
(
qa_request
(),
array
(
'addsub'
=>
$editcategory
[
'categoryid'
]))
.
'" style="white-space: nowrap;"><b>'
.
qa_lang_html
(
'admin/category_add_sub'
)
.
'</b></a>'
;
$qa_content
[
'form'
][
'fields'
][
'children'
]
=
array
(
'id'
=>
'children_display'
,
'label'
=>
qa_lang_html
(
'admin/category_subs'
),
'type'
=>
'static'
,
'value'
=>
$childrenhtml
,
);
}
else
{
$qa_content
[
'form'
][
'fields'
][
'name'
][
'note'
]
=
qa_lang_html_sub
(
'admin/category_no_add_subs_x'
,
QA_CATEGORY_DEPTH
);
}
}
else
{
}
$qa_content
[
'form'
]
=
array
(
}
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'ok'
=>
$savedoptions
?
qa_lang_html
(
'admin/options_saved'
)
:
null
,
}
else
{
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'ok'
=>
$savedoptions
?
qa_lang_html
(
'admin/options_saved'
)
:
null
,
'style'
=>
'tall'
,
'fields'
=>
array
(
'intro'
=>
array
(
'label'
=>
qa_lang_html
(
'admin/categories_introduction'
),
'type'
=>
'static'
,
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'tags'
=>
'name="dosaveoptions" id="dosaveoptions"'
,
'label'
=>
qa_lang_html
(
'main/save_button'
),
),
'add'
=>
array
(
'tags'
=>
'name="doaddcategory"'
,
'label'
=>
qa_lang_html
(
'admin/add_category_button'
),
),
),
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/categories'
),
),
);
'style'
=>
'tall'
,
if
(
count
(
$categories
))
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'intro'
]);
'fields'
=>
array
(
$navcategoryhtml
=
''
;
'intro'
=>
array
(
'label'
=>
qa_lang_html
(
'admin/categories_introduction'
),
'type'
=>
'static'
,
),
),
'buttons'
=>
array
(
foreach
(
$categories
as
$category
)
{
'save'
=>
array
(
if
(
!
isset
(
$category
[
'parentid'
]))
{
'tags'
=>
'name="dosaveoptions" id="dosaveoptions"'
,
$navcategoryhtml
.=
'label'
=>
qa_lang_html
(
'main/save_button'
),
'<a href="'
.
qa_path_html
(
'admin/categories'
,
array
(
'edit'
=>
$category
[
'categoryid'
]))
.
'">'
.
),
qa_html
(
$category
[
'title'
])
.
'</a> - '
.
(
$category
[
'qcount'
]
==
1
?
qa_lang_html_sub
(
'main/1_question'
,
'1'
,
'1'
)
:
qa_lang_html_sub
(
'main/x_questions'
,
qa_format_number
(
$category
[
'qcount'
]))
)
.
'<br/>'
;
}
}
$qa_content
[
'form'
][
'fields'
][
'nav'
]
=
array
(
'label'
=>
qa_lang_html
(
'admin/top_level_categories'
),
'type'
=>
'static'
,
'value'
=>
$navcategoryhtml
,
);
'add'
=>
array
(
$qa_content
[
'form'
][
'fields'
][
'allow_no_category'
]
=
array
(
'tags'
=>
'name="doaddcategory"'
,
'label'
=>
qa_lang_html
(
'options/allow_no_category'
),
'label'
=>
qa_lang_html
(
'admin/add_category_button'
),
'tags'
=>
'name="option_allow_no_category"'
,
),
'type'
=>
'checkbox'
,
),
'value'
=>
qa_opt
(
'allow_no_category'
),
);
'hidden'
=>
array
(
if
(
!
qa_opt
(
'allow_no_category'
))
{
'code'
=>
qa_get_form_security_code
(
'admin/categories'
),
$nocatcount
=
qa_db_count_categoryid_qs
(
null
);
),
);
if
(
count
(
$categories
))
{
if
(
$nocatcount
)
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'intro'
]);
$qa_content
[
'form'
][
'fields'
][
'allow_no_category'
][
'error'
]
=
strtr
(
qa_lang_html
(
'admin/category_none_error'
),
array
(
'^q'
=>
qa_format_number
(
$nocatcount
),
'^1'
=>
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'missing'
=>
1
))
.
'">'
,
'^2'
=>
'</a>'
,
));
}
}
$navcategoryhtml
=
''
;
$qa_content
[
'form'
][
'fields'
][
'allow_no_sub_category'
]
=
array
(
'label'
=>
qa_lang_html
(
'options/allow_no_sub_category'
),
'tags'
=>
'name="option_allow_no_sub_category"'
,
'type'
=>
'checkbox'
,
'value'
=>
qa_opt
(
'allow_no_sub_category'
),
);
foreach
(
$categories
as
$category
)
{
}
else
if
(
!
isset
(
$category
[
'parentid'
]))
{
unset
(
$qa_content
[
'form'
][
'buttons'
][
'save'
]);
$navcategoryhtml
.=
'<a href="'
.
qa_path_html
(
'admin/categories'
,
array
(
'edit'
=>
$category
[
'categoryid'
]))
.
'">'
.
qa_html
(
$category
[
'title'
])
.
'</a> - '
.
(
$category
[
'qcount'
]
==
1
?
qa_lang_html_sub
(
'main/1_question'
,
'1'
,
'1'
)
:
qa_lang_html_sub
(
'main/x_questions'
,
qa_format_number
(
$category
[
'qcount'
]))
)
.
'<br/>'
;
}
}
}
$qa_content
[
'form'
][
'fields'
][
'nav'
]
=
array
(
if
(
qa_get
(
'recalc'
))
{
'label'
=>
qa_lang_html
(
'admin/top_level_categories'
),
$qa_content
[
'form'
][
'ok'
]
=
'<span id="recalc_ok">'
.
qa_lang_html
(
'admin/recalc_categories'
)
.
'</span>'
;
'type'
=>
'static'
,
$qa_content
[
'form'
][
'hidden'
][
'code_recalc'
]
=
qa_get_form_security_code
(
'admin/recalc'
);
'value'
=>
$navcategoryhtml
,
);
$qa_content
[
'form'
][
'fields'
][
'allow_no_category'
]
=
array
(
'label'
=>
qa_lang_html
(
'options/allow_no_category'
),
'tags'
=>
'name="option_allow_no_category"'
,
'type'
=>
'checkbox'
,
'value'
=>
qa_opt
(
'allow_no_category'
),
);
if
(
!
qa_opt
(
'allow_no_category'
))
{
$nocatcount
=
qa_db_count_categoryid_qs
(
null
);
if
(
$nocatcount
)
{
$qa_content
[
'form'
][
'fields'
][
'allow_no_category'
][
'error'
]
=
strtr
(
qa_lang_html
(
'admin/category_none_error'
),
array
(
'^q'
=>
qa_format_number
(
$nocatcount
),
'^1'
=>
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'missing'
=>
1
))
.
'">'
,
'^2'
=>
'</a>'
,
));
}
}
$qa_content
[
'form'
][
'fields'
][
'allow_no_sub_category'
]
=
array
(
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
'label'
=>
qa_lang_html
(
'options/allow_no_sub_category'
),
$qa_content
[
'script_var'
][
'qa_warning_recalc'
]
=
qa_lang
(
'admin/stop_recalc_warning'
);
'tags'
=>
'name="option_allow_no_sub_category"'
,
'type'
=>
'checkbox'
,
'value'
=>
qa_opt
(
'allow_no_sub_category'
),
);
}
else
$qa_content
[
'script_onloads'
][]
=
array
(
unset
(
$qa_content
[
'form'
][
'buttons'
][
'save'
]);
"qa_recalc_click('dorecalccategories', document.getElementById('dosaveoptions'), null, 'recalc_ok');"
}
);
}
if
(
qa_get
(
'recalc'
))
{
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'form'
][
'ok'
]
=
'<span id="recalc_ok">'
.
qa_lang_html
(
'admin/recalc_categories'
)
.
'</span>'
;
$qa_content
[
'form'
][
'hidden'
][
'code_recalc'
]
=
qa_get_form_security_code
(
'admin/recalc'
);
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
$qa_content
[
'script_var'
][
'qa_warning_recalc'
]
=
qa_lang
(
'admin/stop_recalc_warning'
);
$qa_content
[
'script_onloads'
][]
=
array
(
return
$qa_content
;
"qa_recalc_click('dorecalccategories', document.getElementById('dosaveoptions'), null, 'recalc_ok');"
}
);
}
}
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
return
$qa_content
;
qa-
include/pages/admin/admin-f
lagged.php
→
qa-
src/Controllers/Admin/F
lagged.php
View file @
2076b209
...
@@ -3,9 +3,6 @@
...
@@ -3,9 +3,6 @@
Question2Answer by Gideon Greenspan and contributors
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
http://www.question2answer.org/
Description: Controller for admin page showing posts with the most flags
This program is free software; you can redistribute it and/or
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
as published by the Free Software Foundation; either version 2
...
@@ -19,119 +16,133 @@
...
@@ -19,119 +16,133 @@
More about this license: http://www.question2answer.org/license.php
More about this license: http://www.question2answer.org/license.php
*/
*/
if
(
!
defined
(
'QA_VERSION'
))
{
// don't allow this page to be requested directly from browser
namespace
Q2A\Controllers\Admin
;
header
(
'Location: ../../../'
);
exit
;
}
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
use
Q2A\Controllers\BaseController
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
use
Q2A\Database\DbConnection
;
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
/**
* Controller for admin page showing posts with the most flags.
*/
class
Flagged
extends
BaseController
{
public
function
__construct
(
DbConnection
$db
)
{
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
parent
::
__construct
(
$db
);
}
// Find most flagged questions, answers, comments
public
function
index
()
{
// Find most flagged questions, answers, comments
$userid
=
qa_get_logged_in_userid
();
$userid
=
qa_get_logged_in_userid
();
$questions
=
qa_db_select_with_pending
(
$questions
=
qa_db_select_with_pending
(
qa_db_flagged_post_qs_selectspec
(
$userid
,
0
,
true
)
qa_db_flagged_post_qs_selectspec
(
$userid
,
0
,
true
)
);
);
// Check admin privileges (do late to allow one DB query)
// Check admin privileges (do late to allow one DB query)
if
(
qa_user_maximum_permit_error
(
'permit_hide_show'
))
{
if
(
qa_user_maximum_permit_error
(
'permit_hide_show'
))
{
$qa_content
=
qa_content_prepare
();
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
return
$qa_content
;
return
$qa_content
;
}
}
// Check to see if any were cleared or hidden here
// Check to see if any were cleared or hidden here
$pageerror
=
qa_admin_check_clicks
();
$pageerror
=
qa_admin_check_clicks
();
// Remove questions the user has no permission to hide/show
// Remove questions the user has no permission to hide/show
if
(
qa_user_permit_error
(
'permit_hide_show'
))
{
// if user not allowed to show/hide all posts
if
(
qa_user_permit_error
(
'permit_hide_show'
))
{
// if user not allowed to show/hide all posts
foreach
(
$questions
as
$index
=>
$question
)
{
foreach
(
$questions
as
$index
=>
$question
)
{
if
(
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
))
{
if
(
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
))
{
unset
(
$questions
[
$index
]);
unset
(
$questions
[
$index
]);
}
}
}
}
}
}
// Get information for users
// Get information for users
$usershtml
=
qa_userids_handles_html
(
qa_any_get_userids_handles
(
$questions
));
$usershtml
=
qa_userids_handles_html
(
qa_any_get_userids_handles
(
$questions
));
// Prepare content for theme
// Prepare content for theme
$qa_content
=
qa_content_prepare
();
$qa_content
=
qa_content_prepare
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/most_flagged_title'
);
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/most_flagged_title'
);
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'q_list'
]
=
array
(
$qa_content
[
'q_list'
]
=
array
(
'form'
=>
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'hidden'
=>
array
(
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
),
),
'qs'
=>
array
(),
'qs'
=>
array
(),
);
);
if
(
count
(
$questions
))
{
if
(
count
(
$questions
))
{
foreach
(
$questions
as
$question
)
{
foreach
(
$questions
as
$question
)
{
$postid
=
qa_html
(
isset
(
$question
[
'opostid'
])
?
$question
[
'opostid'
]
:
$question
[
'postid'
]);
$postid
=
qa_html
(
isset
(
$question
[
'opostid'
])
?
$question
[
'opostid'
]
:
$question
[
'postid'
]);
$elementid
=
'p'
.
$postid
;
$elementid
=
'p'
.
$postid
;
$htmloptions
=
qa_post_html_options
(
$question
);
$htmloptions
=
qa_post_html_options
(
$question
);
$htmloptions
[
'voteview'
]
=
false
;
$htmloptions
[
'voteview'
]
=
false
;
$htmloptions
[
'tagsview'
]
=
(
$question
[
'obasetype'
]
==
'Q'
);
$htmloptions
[
'tagsview'
]
=
(
$question
[
'obasetype'
]
==
'Q'
);
$htmloptions
[
'answersview'
]
=
false
;
$htmloptions
[
'answersview'
]
=
false
;
$htmloptions
[
'viewsview'
]
=
false
;
$htmloptions
[
'viewsview'
]
=
false
;
$htmloptions
[
'contentview'
]
=
true
;
$htmloptions
[
'contentview'
]
=
true
;
$htmloptions
[
'flagsview'
]
=
true
;
$htmloptions
[
'flagsview'
]
=
true
;
$htmloptions
[
'elementid'
]
=
$elementid
;
$htmloptions
[
'elementid'
]
=
$elementid
;
$htmlfields
=
qa_any_to_q_html_fields
(
$question
,
$userid
,
qa_cookie_get
(),
$usershtml
,
null
,
$htmloptions
);
$htmlfields
=
qa_any_to_q_html_fields
(
$question
,
$userid
,
qa_cookie_get
(),
$usershtml
,
null
,
$htmloptions
);
if
(
isset
(
$htmlfields
[
'what_url'
]))
// link directly to relevant content
if
(
isset
(
$htmlfields
[
'what_url'
]))
// link directly to relevant content
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
$htmlfields
[
'form'
]
=
array
(
$htmlfields
[
'form'
]
=
array
(
'style'
=>
'light'
,
'style'
=>
'light'
,
'buttons'
=>
array
(
'buttons'
=>
array
(
'clearflags'
=>
array
(
'clearflags'
=>
array
(
'tags'
=>
'name="admin_'
.
$postid
.
'_clearflags" onclick="return qa_admin_click(this);"'
,
'tags'
=>
'name="admin_'
.
$postid
.
'_clearflags" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/clear_flags_button'
),
'label'
=>
qa_lang_html
(
'question/clear_flags_button'
),
),
),
'hide'
=>
array
(
'hide'
=>
array
(
'tags'
=>
'name="admin_'
.
$postid
.
'_hide" onclick="return qa_admin_click(this);"'
,
'tags'
=>
'name="admin_'
.
$postid
.
'_hide" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/hide_button'
),
'label'
=>
qa_lang_html
(
'question/hide_button'
),
),
),
),
),
);
);
$qa_content
[
'q_list'
][
'qs'
][]
=
$htmlfields
;
$qa_content
[
'q_list'
][
'qs'
][]
=
$htmlfields
;
}
}
}
else
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_flagged_found'
);
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_flagged_found'
);
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
return
$qa_content
;
return
$qa_content
;
}
}
qa-
include/pages/admin/admin-h
idden.php
→
qa-
src/Controllers/Admin/H
idden.php
View file @
2076b209
...
@@ -3,9 +3,6 @@
...
@@ -3,9 +3,6 @@
Question2Answer by Gideon Greenspan and contributors
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
http://www.question2answer.org/
Description: Controller for admin page showing hidden questions, answers and comments
This program is free software; you can redistribute it and/or
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
as published by the Free Software Foundation; either version 2
...
@@ -19,153 +16,167 @@
...
@@ -19,153 +16,167 @@
More about this license: http://www.question2answer.org/license.php
More about this license: http://www.question2answer.org/license.php
*/
*/
if
(
!
defined
(
'QA_VERSION'
))
{
// don't allow this page to be requested directly from browser
namespace
Q2A\Controllers\Admin
;
header
(
'Location: ../../../'
);
exit
;
use
Q2A\Controllers\BaseController
;
}
use
Q2A\Database\DbConnection
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
/**
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
* Controller for admin page showing hidden questions, answers and comments.
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
*/
class
Hidden
extends
BaseController
{
public
function
__construct
(
DbConnection
$db
)
{
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
parent
::
__construct
(
$db
);
}
// Find recently hidden questions, answers, comments
public
function
index
()
{
// Find recently hidden questions, answers, comments
$userid
=
qa_get_logged_in_userid
();
$userid
=
qa_get_logged_in_userid
();
list
(
$hiddenquestions
,
$hiddenanswers
,
$hiddencomments
)
=
qa_db_select_with_pending
(
list
(
$hiddenquestions
,
$hiddenanswers
,
$hiddencomments
)
=
qa_db_select_with_pending
(
qa_db_qs_selectspec
(
$userid
,
'created'
,
0
,
null
,
null
,
'Q_HIDDEN'
,
true
),
qa_db_qs_selectspec
(
$userid
,
'created'
,
0
,
null
,
null
,
'Q_HIDDEN'
,
true
),
qa_db_recent_a_qs_selectspec
(
$userid
,
0
,
null
,
null
,
'A_HIDDEN'
,
true
),
qa_db_recent_a_qs_selectspec
(
$userid
,
0
,
null
,
null
,
'A_HIDDEN'
,
true
),
qa_db_recent_c_qs_selectspec
(
$userid
,
0
,
null
,
null
,
'C_HIDDEN'
,
true
)
qa_db_recent_c_qs_selectspec
(
$userid
,
0
,
null
,
null
,
'C_HIDDEN'
,
true
)
);
);
// Check admin privileges (do late to allow one DB query)
// Check admin privileges (do late to allow one DB query)
if
(
qa_user_maximum_permit_error
(
'permit_hide_show'
)
&&
qa_user_maximum_permit_error
(
'permit_delete_hidden'
))
{
if
(
qa_user_maximum_permit_error
(
'permit_hide_show'
)
&&
qa_user_maximum_permit_error
(
'permit_delete_hidden'
))
{
$qa_content
=
qa_content_prepare
();
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
return
$qa_content
;
return
$qa_content
;
}
}
// Check to see if any have been reshown or deleted
// Check to see if any have been reshown or deleted
$pageerror
=
qa_admin_check_clicks
();
$pageerror
=
qa_admin_check_clicks
();
// Combine sets of questions and remove those this user has no permissions for
// Combine sets of questions and remove those this user has no permissions for
$questions
=
qa_any_sort_by_date
(
array_merge
(
$hiddenquestions
,
$hiddenanswers
,
$hiddencomments
));
$questions
=
qa_any_sort_by_date
(
array_merge
(
$hiddenquestions
,
$hiddenanswers
,
$hiddencomments
));
if
(
qa_user_permit_error
(
'permit_hide_show'
)
&&
qa_user_permit_error
(
'permit_delete_hidden'
))
{
// not allowed to see all hidden posts
if
(
qa_user_permit_error
(
'permit_hide_show'
)
&&
qa_user_permit_error
(
'permit_delete_hidden'
))
{
// not allowed to see all hidden posts
foreach
(
$questions
as
$index
=>
$question
)
{
foreach
(
$questions
as
$index
=>
$question
)
{
if
(
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
)
&&
qa_user_post_permit_error
(
'permit_delete_hidden'
,
$question
))
{
if
(
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
)
&&
qa_user_post_permit_error
(
'permit_delete_hidden'
,
$question
))
{
unset
(
$questions
[
$index
]);
unset
(
$questions
[
$index
]);
}
}
}
}
}
}
// Get information for users
// Get information for users
$usershtml
=
qa_userids_handles_html
(
qa_any_get_userids_handles
(
$questions
));
$usershtml
=
qa_userids_handles_html
(
qa_any_get_userids_handles
(
$questions
));
// Create list of actual hidden postids and see which ones have dependents
// Create list of actual hidden postids and see which ones have dependents
$qhiddenpostid
=
array
();
$qhiddenpostid
=
array
();
foreach
(
$questions
as
$key
=>
$question
)
foreach
(
$questions
as
$key
=>
$question
)
$qhiddenpostid
[
$key
]
=
isset
(
$question
[
'opostid'
])
?
$question
[
'opostid'
]
:
$question
[
'postid'
];
$qhiddenpostid
[
$key
]
=
isset
(
$question
[
'opostid'
])
?
$question
[
'opostid'
]
:
$question
[
'postid'
];
$dependcounts
=
qa_db_postids_count_dependents
(
$qhiddenpostid
);
$dependcounts
=
qa_db_postids_count_dependents
(
$qhiddenpostid
);
// Prepare content for theme
// Prepare content for theme
$qa_content
=
qa_content_prepare
();
$qa_content
=
qa_content_prepare
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/recent_hidden_title'
);
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/recent_hidden_title'
);
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'q_list'
]
=
array
(
$qa_content
[
'q_list'
]
=
array
(
'form'
=>
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'hidden'
=>
array
(
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
),
),
'qs'
=>
array
(),
'qs'
=>
array
(),
);
);
if
(
count
(
$questions
))
{
if
(
count
(
$questions
))
{
foreach
(
$questions
as
$key
=>
$question
)
{
foreach
(
$questions
as
$key
=>
$question
)
{
$elementid
=
'p'
.
$qhiddenpostid
[
$key
];
$elementid
=
'p'
.
$qhiddenpostid
[
$key
];
$htmloptions
=
qa_post_html_options
(
$question
);
$htmloptions
=
qa_post_html_options
(
$question
);
$htmloptions
[
'voteview'
]
=
false
;
$htmloptions
[
'voteview'
]
=
false
;
$htmloptions
[
'tagsview'
]
=
!
isset
(
$question
[
'opostid'
]);
$htmloptions
[
'tagsview'
]
=
!
isset
(
$question
[
'opostid'
]);
$htmloptions
[
'answersview'
]
=
false
;
$htmloptions
[
'answersview'
]
=
false
;
$htmloptions
[
'viewsview'
]
=
false
;
$htmloptions
[
'viewsview'
]
=
false
;
$htmloptions
[
'updateview'
]
=
false
;
$htmloptions
[
'updateview'
]
=
false
;
$htmloptions
[
'contentview'
]
=
true
;
$htmloptions
[
'contentview'
]
=
true
;
$htmloptions
[
'flagsview'
]
=
true
;
$htmloptions
[
'flagsview'
]
=
true
;
$htmloptions
[
'elementid'
]
=
$elementid
;
$htmloptions
[
'elementid'
]
=
$elementid
;
$htmlfields
=
qa_any_to_q_html_fields
(
$question
,
$userid
,
qa_cookie_get
(),
$usershtml
,
null
,
$htmloptions
);
$htmlfields
=
qa_any_to_q_html_fields
(
$question
,
$userid
,
qa_cookie_get
(),
$usershtml
,
null
,
$htmloptions
);
if
(
isset
(
$htmlfields
[
'what_url'
]))
// link directly to relevant content
if
(
isset
(
$htmlfields
[
'what_url'
]))
// link directly to relevant content
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
$htmlfields
[
'what_2'
]
=
qa_lang_html
(
'main/hidden'
);
$htmlfields
[
'what_2'
]
=
qa_lang_html
(
'main/hidden'
);
if
(
@
$htmloptions
[
'whenview'
])
{
if
(
@
$htmloptions
[
'whenview'
])
{
$updated
=
@
$question
[
isset
(
$question
[
'opostid'
])
?
'oupdated'
:
'updated'
];
$updated
=
@
$question
[
isset
(
$question
[
'opostid'
])
?
'oupdated'
:
'updated'
];
if
(
isset
(
$updated
))
if
(
isset
(
$updated
))
$htmlfields
[
'when_2'
]
=
qa_when_to_html
(
$updated
,
@
$htmloptions
[
'fulldatedays'
]);
$htmlfields
[
'when_2'
]
=
qa_when_to_html
(
$updated
,
@
$htmloptions
[
'fulldatedays'
]);
}
}
$buttons
=
array
();
$buttons
=
array
();
$posttype
=
qa_strtolower
(
isset
(
$question
[
'obasetype'
])
?
$question
[
'obasetype'
]
:
$question
[
'basetype'
]);
$posttype
=
qa_strtolower
(
isset
(
$question
[
'obasetype'
])
?
$question
[
'obasetype'
]
:
$question
[
'basetype'
]);
if
(
!
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
))
{
if
(
!
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
))
{
// Possible values for popup: reshow_q_popup, reshow_a_popup, reshow_c_popup
// Possible values for popup: reshow_q_popup, reshow_a_popup, reshow_c_popup
$buttons
[
'reshow'
]
=
array
(
$buttons
[
'reshow'
]
=
array
(
'tags'
=>
'name="admin_'
.
qa_html
(
$qhiddenpostid
[
$key
])
.
'_reshow" onclick="return qa_admin_click(this);"'
,
'tags'
=>
'name="admin_'
.
qa_html
(
$qhiddenpostid
[
$key
])
.
'_reshow" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/reshow_button'
),
'label'
=>
qa_lang_html
(
'question/reshow_button'
),
'popup'
=>
qa_lang_html
(
sprintf
(
'question/reshow_%s_popup'
,
$posttype
)),
'popup'
=>
qa_lang_html
(
sprintf
(
'question/reshow_%s_popup'
,
$posttype
)),
);
);
}
}
if
(
!
qa_user_post_permit_error
(
'permit_delete_hidden'
,
$question
)
&&
!
$dependcounts
[
$qhiddenpostid
[
$key
]])
{
if
(
!
qa_user_post_permit_error
(
'permit_delete_hidden'
,
$question
)
&&
!
$dependcounts
[
$qhiddenpostid
[
$key
]])
{
// Possible values for popup: delete_q_popup, delete_a_popup, delete_c_popup
// Possible values for popup: delete_q_popup, delete_a_popup, delete_c_popup
$buttons
[
'delete'
]
=
array
(
$buttons
[
'delete'
]
=
array
(
'tags'
=>
'name="admin_'
.
qa_html
(
$qhiddenpostid
[
$key
])
.
'_delete" onclick="return qa_admin_click(this);"'
,
'tags'
=>
'name="admin_'
.
qa_html
(
$qhiddenpostid
[
$key
])
.
'_delete" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/delete_button'
),
'label'
=>
qa_lang_html
(
'question/delete_button'
),
'popup'
=>
qa_lang_html
(
sprintf
(
'question/delete_%s_popup'
,
$posttype
)),
'popup'
=>
qa_lang_html
(
sprintf
(
'question/delete_%s_popup'
,
$posttype
)),
);
);
}
}
if
(
count
(
$buttons
))
{
if
(
count
(
$buttons
))
{
$htmlfields
[
'form'
]
=
array
(
$htmlfields
[
'form'
]
=
array
(
'style'
=>
'light'
,
'style'
=>
'light'
,
'buttons'
=>
$buttons
,
'buttons'
=>
$buttons
,
);
);
}
}
$qa_content
[
'q_list'
][
'qs'
][]
=
$htmlfields
;
$qa_content
[
'q_list'
][
'qs'
][]
=
$htmlfields
;
}
}
}
else
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_hidden_found'
);
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_hidden_found'
);
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
return
$qa_content
;
return
$qa_content
;
}
}
qa-
include/pages/admin/admin-m
oderate.php
→
qa-
src/Controllers/Admin/M
oderate.php
View file @
2076b209
...
@@ -3,9 +3,6 @@
...
@@ -3,9 +3,6 @@
Question2Answer by Gideon Greenspan and contributors
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
http://www.question2answer.org/
Description: Controller for admin page showing questions, answers and comments waiting for approval
This program is free software; you can redistribute it and/or
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
as published by the Free Software Foundation; either version 2
...
@@ -19,141 +16,155 @@
...
@@ -19,141 +16,155 @@
More about this license: http://www.question2answer.org/license.php
More about this license: http://www.question2answer.org/license.php
*/
*/
if
(
!
defined
(
'QA_VERSION'
))
{
// don't allow this page to be requested directly from browser
namespace
Q2A\Controllers\Admin
;
header
(
'Location: ../../../'
);
exit
;
}
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
// Find queued questions, answers, comments
$userid
=
qa_get_logged_in_userid
();
list
(
$queuedquestions
,
$queuedanswers
,
$queuedcomments
)
=
qa_db_select_with_pending
(
use
Q2A\Controllers\BaseController
;
qa_db_qs_selectspec
(
$userid
,
'created'
,
0
,
null
,
null
,
'Q_QUEUED'
,
true
),
use
Q2A\Database\DbConnection
;
qa_db_recent_a_qs_selectspec
(
$userid
,
0
,
null
,
null
,
'A_QUEUED'
,
true
),
use
Q2A\Middleware\Auth\MinimumUserLevel
;
qa_db_recent_c_qs_selectspec
(
$userid
,
0
,
null
,
null
,
'C_QUEUED'
,
true
)
);
/**
* Controller for admin page showing questions, answers and comments waiting for approval.
*/
class
Moderate
extends
BaseController
{
public
function
__construct
(
DbConnection
$db
)
{
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
// Check admin privileges (do late to allow one DB query)
parent
::
__construct
(
$db
);
}
if
(
qa_user_maximum_permit_error
(
'permit_moderate'
))
{
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
return
$qa_content
;
}
// Check to see if any were approved/rejected here
public
function
index
()
{
// Find queued questions, answers, comments
$pageerror
=
qa_admin_check_clicks
();
$userid
=
qa_get_logged_in_userid
();
list
(
$queuedquestions
,
$queuedanswers
,
$queuedcomments
)
=
qa_db_select_with_pending
(
qa_db_qs_selectspec
(
$userid
,
'created'
,
0
,
null
,
null
,
'Q_QUEUED'
,
true
),
qa_db_recent_a_qs_selectspec
(
$userid
,
0
,
null
,
null
,
'A_QUEUED'
,
true
),
qa_db_recent_c_qs_selectspec
(
$userid
,
0
,
null
,
null
,
'C_QUEUED'
,
true
)
);
// Combine sets of questions and remove those this user has no permission to moderate
$questions
=
qa_any_sort_by_date
(
array_merge
(
$queuedquestions
,
$queuedanswers
,
$queuedcomments
));
// Check admin privileges (do late to allow one DB query)
if
(
qa_user_permit_error
(
'permit_moderate'
))
{
// if user not allowed to moderate all posts
foreach
(
$questions
as
$index
=>
$question
)
{
if
(
qa_user_post_permit_error
(
'permit_moderate'
,
$question
))
unset
(
$questions
[
$index
]);
}
}
if
(
qa_user_maximum_permit_error
(
'permit_moderate'
))
{
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
return
$qa_content
;
}
// Get information for users
$usershtml
=
qa_userids_handles_html
(
qa_any_get_userids_handles
(
$questions
));
// Check to see if any were approved/rejected here
$pageerror
=
qa_admin_check_clicks
();
// Prepare content for theme
$qa_content
=
qa_content_prepare
();
// Combine sets of questions and remove those this user has no permission to moderate
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/recent_approve_title'
);
$questions
=
qa_any_sort_by_date
(
array_merge
(
$queuedquestions
,
$queuedanswers
,
$queuedcomments
));
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'q_list'
]
=
array
(
if
(
qa_user_permit_error
(
'permit_moderate'
))
{
// if user not allowed to moderate all posts
'form'
=>
array
(
foreach
(
$questions
as
$index
=>
$question
)
{
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
if
(
qa_user_post_permit_error
(
'permit_moderate'
,
$question
))
unset
(
$questions
[
$index
]);
}
}
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
'qs'
=>
array
(),
// Get information for users
);
if
(
count
(
$questions
))
{
$usershtml
=
qa_userids_handles_html
(
qa_any_get_userids_handles
(
$questions
));
foreach
(
$questions
as
$question
)
{
$postid
=
qa_html
(
isset
(
$question
[
'opostid'
])
?
$question
[
'opostid'
]
:
$question
[
'postid'
]);
$elementid
=
'p'
.
$postid
;
$htmloptions
=
qa_post_html_options
(
$question
);
$htmloptions
[
'voteview'
]
=
false
;
$htmloptions
[
'tagsview'
]
=
!
isset
(
$question
[
'opostid'
]);
$htmloptions
[
'answersview'
]
=
false
;
$htmloptions
[
'viewsview'
]
=
false
;
$htmloptions
[
'contentview'
]
=
true
;
$htmloptions
[
'elementid'
]
=
$elementid
;
$htmlfields
=
qa_any_to_q_html_fields
(
$question
,
$userid
,
qa_cookie_get
(),
$usershtml
,
null
,
$htmloptions
);
// Prepare content for theme
if
(
isset
(
$htmlfields
[
'what_url'
]))
// link directly to relevant content
$qa_content
=
qa_content_prepare
();
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
$posttype
=
qa_strtolower
(
isset
(
$question
[
'obasetype'
])
?
$question
[
'obasetype'
]
:
$question
[
'basetype'
]);
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/recent_approve_title'
);
switch
(
$posttype
)
{
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
case
'q'
:
default
:
$approveKey
=
'question/approve_q_popup'
;
$rejectKey
=
'question/reject_q_popup'
;
break
;
case
'a'
:
$approveKey
=
'question/approve_a_popup'
;
$rejectKey
=
'question/reject_a_popup'
;
break
;
case
'c'
:
$approveKey
=
'question/approve_c_popup'
;
$rejectKey
=
'question/reject_c_popup'
;
break
;
}
$htmlfields
[
'form'
]
=
array
(
$qa_content
[
'q_list'
]
=
array
(
'style'
=>
'light'
,
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'buttons'
=>
array
(
'hidden'
=>
array
(
// Possible values for popup: approve_q_popup, approve_a_popup, approve_c_popup
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
'approve'
=>
array
(
'tags'
=>
'name="admin_'
.
$postid
.
'_approve" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/approve_button'
),
'popup'
=>
qa_lang_html
(
$approveKey
),
),
// Possible values for popup: reject_q_popup, reject_a_popup, reject_c_popup
'reject'
=>
array
(
'tags'
=>
'name="admin_'
.
$postid
.
'_reject" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/reject_button'
),
'popup'
=>
qa_lang_html
(
$rejectKey
),
),
),
),
),
'qs'
=>
array
(),
);
);
$qa_content
[
'q_list'
][
'qs'
][]
=
$htmlfields
;
if
(
count
(
$questions
))
{
foreach
(
$questions
as
$question
)
{
$postid
=
qa_html
(
isset
(
$question
[
'opostid'
])
?
$question
[
'opostid'
]
:
$question
[
'postid'
]);
$elementid
=
'p'
.
$postid
;
$htmloptions
=
qa_post_html_options
(
$question
);
$htmloptions
[
'voteview'
]
=
false
;
$htmloptions
[
'tagsview'
]
=
!
isset
(
$question
[
'opostid'
]);
$htmloptions
[
'answersview'
]
=
false
;
$htmloptions
[
'viewsview'
]
=
false
;
$htmloptions
[
'contentview'
]
=
true
;
$htmloptions
[
'elementid'
]
=
$elementid
;
$htmlfields
=
qa_any_to_q_html_fields
(
$question
,
$userid
,
qa_cookie_get
(),
$usershtml
,
null
,
$htmloptions
);
if
(
isset
(
$htmlfields
[
'what_url'
]))
// link directly to relevant content
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
$posttype
=
qa_strtolower
(
isset
(
$question
[
'obasetype'
])
?
$question
[
'obasetype'
]
:
$question
[
'basetype'
]);
switch
(
$posttype
)
{
case
'q'
:
default
:
$approveKey
=
'question/approve_q_popup'
;
$rejectKey
=
'question/reject_q_popup'
;
break
;
case
'a'
:
$approveKey
=
'question/approve_a_popup'
;
$rejectKey
=
'question/reject_a_popup'
;
break
;
case
'c'
:
$approveKey
=
'question/approve_c_popup'
;
$rejectKey
=
'question/reject_c_popup'
;
break
;
}
$htmlfields
[
'form'
]
=
array
(
'style'
=>
'light'
,
'buttons'
=>
array
(
// Possible values for popup: approve_q_popup, approve_a_popup, approve_c_popup
'approve'
=>
array
(
'tags'
=>
'name="admin_'
.
$postid
.
'_approve" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/approve_button'
),
'popup'
=>
qa_lang_html
(
$approveKey
),
),
// Possible values for popup: reject_q_popup, reject_a_popup, reject_c_popup
'reject'
=>
array
(
'tags'
=>
'name="admin_'
.
$postid
.
'_reject" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/reject_button'
),
'popup'
=>
qa_lang_html
(
$rejectKey
),
),
),
);
$qa_content
[
'q_list'
][
'qs'
][]
=
$htmlfields
;
}
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_approve_found'
);
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
return
$qa_content
;
}
}
}
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_approve_found'
);
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
return
$qa_content
;
qa-
include/pages/admin/admin-p
ages.php
→
qa-
src/Controllers/Admin/P
ages.php
View file @
2076b209
...
@@ -3,9 +3,6 @@
...
@@ -3,9 +3,6 @@
Question2Answer by Gideon Greenspan and contributors
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
http://www.question2answer.org/
Description: Controller for admin page for editing custom pages and external links
This program is free software; you can redistribute it and/or
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
as published by the Free Software Foundation; either version 2
...
@@ -19,556 +16,572 @@
...
@@ -19,556 +16,572 @@
More about this license: http://www.question2answer.org/license.php
More about this license: http://www.question2answer.org/license.php
*/
*/
if
(
!
defined
(
'QA_VERSION'
))
{
// don't allow this page to be requested directly from browser
namespace
Q2A\Controllers\Admin
;
header
(
'Location: ../../../'
);
exit
;
}
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
// Get current list of pages and determine the state of this admin page
use
Q2A\Controllers\BaseController
;
use
Q2A\Database\DbConnection
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
$pageid
=
qa_post_text
(
'edit'
);
/**
if
(
!
isset
(
$pageid
))
* Controller for admin page for editing custom pages and external links.
$pageid
=
qa_get
(
'edit'
);
*/
class
Pages
extends
BaseController
{
public
function
__construct
(
DbConnection
$db
)
{
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
list
(
$pages
,
$editpage
)
=
qa_db_select_with_pending
(
parent
::
__construct
(
$db
);
qa_db_pages_selectspec
(),
isset
(
$pageid
)
?
qa_db_page_full_selectspec
(
$pageid
,
true
)
:
null
);
if
((
qa_clicked
(
'doaddpage'
)
||
qa_clicked
(
'doaddlink'
)
||
qa_get
(
'doaddlink'
)
||
qa_clicked
(
'dosavepage'
))
&&
!
isset
(
$editpage
))
{
$editpage
=
array
(
'title'
=>
qa_get
(
'text'
),
'tags'
=>
qa_get
(
'url'
),
'nav'
=>
qa_get
(
'nav'
),
'position'
=>
1
);
$isexternal
=
qa_clicked
(
'doaddlink'
)
||
qa_get
(
'doaddlink'
)
||
qa_post_text
(
'external'
);
}
elseif
(
isset
(
$editpage
))
$isexternal
=
$editpage
[
'flags'
]
&
QA_PAGE_FLAGS_EXTERNAL
;
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
}
// Check admin privileges (do late to allow one DB query)
public
function
index
()
{
// Get current list of pages and determine the state of this admin page
if
(
!
qa_admin_check_privileges
(
$qa_content
))
$pageid
=
qa_post_text
(
'edit'
);
return
$qa_content
;
if
(
!
isset
(
$pageid
))
$pageid
=
qa_get
(
'edit'
);
list
(
$pages
,
$editpage
)
=
qa_db_select_with_pending
(
qa_db_pages_selectspec
(),
isset
(
$pageid
)
?
qa_db_page_full_selectspec
(
$pageid
,
true
)
:
null
);
// Define an array of navigation settings we can change, option name => language key
if
((
qa_clicked
(
'doaddpage'
)
||
qa_clicked
(
'doaddlink'
)
||
qa_get
(
'doaddlink'
)
||
qa_clicked
(
'dosavepage'
))
&&
!
isset
(
$editpage
))
{
$editpage
=
array
(
'title'
=>
qa_get
(
'text'
),
'tags'
=>
qa_get
(
'url'
),
'nav'
=>
qa_get
(
'nav'
),
'position'
=>
1
);
$isexternal
=
qa_clicked
(
'doaddlink'
)
||
qa_get
(
'doaddlink'
)
||
qa_post_text
(
'external'
);
$hascustomhome
=
qa_has_custom_home
();
}
elseif
(
isset
(
$editpage
))
$isexternal
=
$editpage
[
'flags'
]
&
QA_PAGE_FLAGS_EXTERNAL
;
$navoptions
=
array
(
'nav_home'
=>
'main/nav_home'
,
'nav_activity'
=>
'main/nav_activity'
,
$hascustomhome
?
'nav_qa_not_home'
:
'nav_qa_is_home'
=>
$hascustomhome
?
'main/nav_qa'
:
'admin/nav_qa_is_home'
,
'nav_questions'
=>
'main/nav_qs'
,
'nav_hot'
=>
'main/nav_hot'
,
'nav_unanswered'
=>
'main/nav_unanswered'
,
'nav_tags'
=>
'main/nav_tags'
,
'nav_categories'
=>
'main/nav_categories'
,
'nav_users'
=>
'main/nav_users'
,
'nav_ask'
=>
'main/nav_ask'
,
);
$navpaths
=
array
(
// Check admin privileges (do late to allow one DB query)
'nav_home'
=>
''
,
'nav_activity'
=>
'activity'
,
'nav_qa_not_home'
=>
'qa'
,
'nav_qa_is_home'
=>
''
,
'nav_questions'
=>
'questions'
,
'nav_hot'
=>
'hot'
,
'nav_unanswered'
=>
'unanswered'
,
'nav_tags'
=>
'tags'
,
'nav_categories'
=>
'categories'
,
'nav_users'
=>
'users'
,
'nav_ask'
=>
'ask'
,
);
if
(
!
qa_opt
(
'show_custom_home'
))
if
(
!
qa_admin_check_privileges
(
$qa_content
))
unset
(
$navoptions
[
'nav_home'
])
;
return
$qa_content
;
if
(
!
qa_using_categories
())
unset
(
$navoptions
[
'nav_categories'
]);
if
(
!
qa_using_tags
())
// Define an array of navigation settings we can change, option name => language key
unset
(
$navoptions
[
'nav_tags'
]);
$hascustomhome
=
qa_has_custom_home
();
// Process saving an old or new page
$navoptions
=
array
(
'nav_home'
=>
'main/nav_home'
,
'nav_activity'
=>
'main/nav_activity'
,
$hascustomhome
?
'nav_qa_not_home'
:
'nav_qa_is_home'
=>
$hascustomhome
?
'main/nav_qa'
:
'admin/nav_qa_is_home'
,
'nav_questions'
=>
'main/nav_qs'
,
'nav_hot'
=>
'main/nav_hot'
,
'nav_unanswered'
=>
'main/nav_unanswered'
,
'nav_tags'
=>
'main/nav_tags'
,
'nav_categories'
=>
'main/nav_categories'
,
'nav_users'
=>
'main/nav_users'
,
'nav_ask'
=>
'main/nav_ask'
,
);
$securityexpired
=
false
;
$navpaths
=
array
(
'nav_home'
=>
''
,
'nav_activity'
=>
'activity'
,
'nav_qa_not_home'
=>
'qa'
,
'nav_qa_is_home'
=>
''
,
'nav_questions'
=>
'questions'
,
'nav_hot'
=>
'hot'
,
'nav_unanswered'
=>
'unanswered'
,
'nav_tags'
=>
'tags'
,
'nav_categories'
=>
'categories'
,
'nav_users'
=>
'users'
,
'nav_ask'
=>
'ask'
,
);
if
(
qa_clicked
(
'docancel
'
))
if
(
!
qa_opt
(
'show_custom_home
'
))
$editpage
=
null
;
unset
(
$navoptions
[
'nav_home'
])
;
elseif
(
qa_clicked
(
'dosaveoptions'
)
||
qa_clicked
(
'doaddpage'
)
||
qa_clicked
(
'doaddlink'
))
{
if
(
!
qa_using_categories
())
if
(
!
qa_check_form_security_code
(
'admin/pages'
,
qa_post_text
(
'code'
)))
unset
(
$navoptions
[
'nav_categories'
]);
$securityexpired
=
true
;
else
foreach
(
$navoptions
as
$optionname
=>
$langkey
)
qa_set_option
(
$optionname
,
(
int
)
qa_post_text
(
'option_'
.
$optionname
));
}
elseif
(
qa_clicked
(
'dosavepage'
))
{
if
(
!
qa_using_tags
())
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
unset
(
$navoptions
[
'nav_tags'
]);
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
if
(
!
qa_check_form_security_code
(
'admin/pages'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
else
{
$reloadpages
=
false
;
if
(
qa_post_text
(
'dodelete'
))
{
// Process saving an old or new page
qa_db_page_delete
(
$editpage
[
'pageid'
]);
$searchmodules
=
qa_load_modules_with
(
'search'
,
'unindex_page'
);
$securityexpired
=
false
;
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
unindex_page
(
$editpage
[
'pageid'
]);
if
(
qa_clicked
(
'docancel'
))
$editpage
=
null
;
$editpage
=
null
;
$reloadpages
=
true
;
}
else
{
elseif
(
qa_clicked
(
'dosaveoptions'
)
||
qa_clicked
(
'doaddpage'
)
||
qa_clicked
(
'doaddlink'
))
{
$inname
=
qa_post_text
(
'name'
);
if
(
!
qa_check_form_security_code
(
'admin/pages'
,
qa_post_text
(
'code'
)))
$inposition
=
qa_post_text
(
'position'
);
$securityexpired
=
true
;
$inpermit
=
(
int
)
qa_post_text
(
'permit'
);
else
foreach
(
$navoptions
as
$optionname
=>
$langkey
)
$inurl
=
qa_post_text
(
'url'
);
qa_set_option
(
$optionname
,
(
int
)
qa_post_text
(
'option_'
.
$optionname
));
$innewwindow
=
qa_post_text
(
'newwindow'
);
$inheading
=
qa_post_text
(
'heading'
);
$incontent
=
qa_post_text
(
'content'
);
$errors
=
array
();
}
elseif
(
qa_clicked
(
'dosavepage'
))
{
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
// Verify the name (navigation link) is legitimate
if
(
!
qa_check_form_security_code
(
'admin/pages'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
else
{
$reloadpages
=
false
;
if
(
empty
(
$inname
))
if
(
qa_post_text
(
'dodelete'
))
{
$errors
[
'name'
]
=
qa_lang
(
'main/field_required'
);
qa_db_page_delete
(
$editpage
[
'pageid'
]);
elseif
(
qa_strlen
(
$inname
)
>
QA_DB_MAX_CAT_PAGE_TITLE_LENGTH
)
$errors
[
'name'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_CAT_PAGE_TITLE_LENGTH
);
if
(
$isexternal
)
{
$searchmodules
=
qa_load_modules_with
(
'search'
,
'unindex_page'
);
// Verify the url is legitimate (vaguely)
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
unindex_page
(
$editpage
[
'pageid'
]);
if
(
empty
(
$inurl
))
$editpage
=
null
;
$errors
[
'url'
]
=
qa_lang
(
'main/field_required'
);
$reloadpages
=
true
;
elseif
(
qa_strlen
(
$inurl
)
>
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
)
$errors
[
'url'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
);
}
else
{
}
else
{
// Verify the heading is legitimate
$inname
=
qa_post_text
(
'name'
);
$inposition
=
qa_post_text
(
'position'
);
$inpermit
=
(
int
)
qa_post_text
(
'permit'
);
$inurl
=
qa_post_text
(
'url'
);
$innewwindow
=
qa_post_text
(
'newwindow'
);
$inheading
=
qa_post_text
(
'heading'
);
$incontent
=
qa_post_text
(
'content'
);
$errors
=
array
();
if
(
qa_strlen
(
$inheading
)
>
QA_DB_MAX_TITLE_LENGTH
)
// Verify the name (navigation link) is legitimate
$errors
[
'heading'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_TITLE_LENGTH
);
// Verify the slug is legitimate (and try some defaults if we're creating a new page, and it's not)
if
(
empty
(
$inname
))
$errors
[
'name'
]
=
qa_lang
(
'main/field_required'
);
elseif
(
qa_strlen
(
$inname
)
>
QA_DB_MAX_CAT_PAGE_TITLE_LENGTH
)
$errors
[
'name'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_CAT_PAGE_TITLE_LENGTH
);
for
(
$attempt
=
0
;
$attempt
<
100
;
$attempt
++
)
{
if
(
$isexternal
)
{
switch
(
$attempt
)
{
// Verify the url is legitimate (vaguely)
case
0
:
$inslug
=
qa_post_text
(
'slug'
);
if
(
!
isset
(
$inslug
))
$inslug
=
implode
(
'-'
,
qa_string_to_words
(
$inname
));
break
;
case
1
:
if
(
empty
(
$inurl
))
$inslug
=
qa_lang_sub
(
'admin/page_default_slug'
,
$inslug
);
$errors
[
'url'
]
=
qa_lang
(
'main/field_required'
);
break
;
elseif
(
qa_strlen
(
$inurl
)
>
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
)
$errors
[
'url'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
);
default
:
}
else
{
$inslug
=
qa_lang_sub
(
'admin/page_default_slug'
,
$attempt
-
1
);
// Verify the heading is legitimate
break
;
if
(
qa_strlen
(
$inheading
)
>
QA_DB_MAX_TITLE_LENGTH
)
$errors
[
'heading'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_TITLE_LENGTH
);
// Verify the slug is legitimate (and try some defaults if we're creating a new page, and it's not)
for
(
$attempt
=
0
;
$attempt
<
100
;
$attempt
++
)
{
switch
(
$attempt
)
{
case
0
:
$inslug
=
qa_post_text
(
'slug'
);
if
(
!
isset
(
$inslug
))
$inslug
=
implode
(
'-'
,
qa_string_to_words
(
$inname
));
break
;
case
1
:
$inslug
=
qa_lang_sub
(
'admin/page_default_slug'
,
$inslug
);
break
;
default
:
$inslug
=
qa_lang_sub
(
'admin/page_default_slug'
,
$attempt
-
1
);
break
;
}
list
(
$matchcategoryid
,
$matchpage
)
=
qa_db_select_with_pending
(
qa_db_slugs_to_category_id_selectspec
(
$inslug
),
qa_db_page_full_selectspec
(
$inslug
,
false
)
);
if
(
empty
(
$inslug
))
$errors
[
'slug'
]
=
qa_lang
(
'main/field_required'
);
elseif
(
qa_strlen
(
$inslug
)
>
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
)
$errors
[
'slug'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
);
elseif
(
preg_match
(
'/[\\+\\/]/'
,
$inslug
))
$errors
[
'slug'
]
=
qa_lang_sub
(
'admin/slug_bad_chars'
,
'+ /'
);
elseif
(
qa_admin_is_slug_reserved
(
$inslug
))
$errors
[
'slug'
]
=
qa_lang
(
'admin/slug_reserved'
);
elseif
(
isset
(
$matchpage
)
&&
(
$matchpage
[
'pageid'
]
!=
@
$editpage
[
'pageid'
]))
$errors
[
'slug'
]
=
qa_lang
(
'admin/page_already_used'
);
elseif
(
isset
(
$matchcategoryid
))
$errors
[
'slug'
]
=
qa_lang
(
'admin/category_already_used'
);
else
unset
(
$errors
[
'slug'
]);
if
(
isset
(
$editpage
[
'pageid'
])
||
!
isset
(
$errors
[
'slug'
]))
// don't try other options if editing existing page
break
;
}
}
}
list
(
$matchcategoryid
,
$matchpage
)
=
qa_db_select_with_pending
(
// Perform appropriate database action
qa_db_slugs_to_category_id_selectspec
(
$inslug
),
qa_db_page_full_selectspec
(
$inslug
,
false
)
);
if
(
empty
(
$inslug
))
$errors
[
'slug'
]
=
qa_lang
(
'main/field_required'
);
elseif
(
qa_strlen
(
$inslug
)
>
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
)
$errors
[
'slug'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_CAT_PAGE_TAGS_LENGTH
);
elseif
(
preg_match
(
'/[\\+\\/]/'
,
$inslug
))
$errors
[
'slug'
]
=
qa_lang_sub
(
'admin/slug_bad_chars'
,
'+ /'
);
elseif
(
qa_admin_is_slug_reserved
(
$inslug
))
$errors
[
'slug'
]
=
qa_lang
(
'admin/slug_reserved'
);
elseif
(
isset
(
$matchpage
)
&&
(
$matchpage
[
'pageid'
]
!=
@
$editpage
[
'pageid'
]))
$errors
[
'slug'
]
=
qa_lang
(
'admin/page_already_used'
);
elseif
(
isset
(
$matchcategoryid
))
$errors
[
'slug'
]
=
qa_lang
(
'admin/category_already_used'
);
else
unset
(
$errors
[
'slug'
]);
if
(
isset
(
$editpage
[
'pageid'
])
||
!
isset
(
$errors
[
'slug'
]))
// don't try other options if editing existing page
break
;
}
}
// Perform appropriate database action
if
(
isset
(
$editpage
[
'pageid'
]))
{
// changing existing page
if
(
$isexternal
)
{
qa_db_page_set_fields
(
$editpage
[
'pageid'
],
isset
(
$errors
[
'name'
])
?
$editpage
[
'title'
]
:
$inname
,
QA_PAGE_FLAGS_EXTERNAL
|
(
$innewwindow
?
QA_PAGE_FLAGS_NEW_WINDOW
:
0
),
isset
(
$errors
[
'url'
])
?
$editpage
[
'tags'
]
:
$inurl
,
null
,
null
,
$inpermit
);
if
(
isset
(
$editpage
[
'pageid'
]))
{
// changing existing page
}
else
{
if
(
$isexternal
)
{
$setheading
=
isset
(
$errors
[
'heading'
])
?
$editpage
[
'heading'
]
:
$inheading
;
qa_db_page_set_fields
(
$editpage
[
'pageid'
],
$setslug
=
isset
(
$errors
[
'slug'
])
?
$editpage
[
'tags'
]
:
$inslug
;
isset
(
$errors
[
'name'
])
?
$editpage
[
'title'
]
:
$inname
,
$setcontent
=
isset
(
$errors
[
'content'
])
?
$editpage
[
'content'
]
:
$incontent
;
QA_PAGE_FLAGS_EXTERNAL
|
(
$innewwindow
?
QA_PAGE_FLAGS_NEW_WINDOW
:
0
),
isset
(
$errors
[
'url'
])
?
$editpage
[
'tags'
]
:
$inurl
,
null
,
null
,
$inpermit
);
}
else
{
qa_db_page_set_fields
(
$editpage
[
'pageid'
],
$setheading
=
isset
(
$errors
[
'heading'
])
?
$editpage
[
'heading'
]
:
$inheading
;
isset
(
$errors
[
'name'
])
?
$editpage
[
'title'
]
:
$inname
,
$setslug
=
isset
(
$errors
[
'slug'
])
?
$editpage
[
'tags'
]
:
$inslug
;
0
,
$setcontent
=
isset
(
$errors
[
'content'
])
?
$editpage
[
'content'
]
:
$incontent
;
$setslug
,
$setheading
,
$setcontent
,
$inpermit
)
;
qa_db_page_set_fields
(
$editpage
[
'pageid'
],
$searchmodules
=
qa_load_modules_with
(
'search'
,
'unindex_page'
);
isset
(
$errors
[
'name'
])
?
$editpage
[
'title'
]
:
$inname
,
foreach
(
$searchmodules
as
$searchmodule
)
0
,
$searchmodule
->
unindex_page
(
$editpage
[
'pageid'
]);
$setslug
,
$setheading
,
$setcontent
,
$inpermit
);
$searchmodules
=
qa_load_modules_with
(
'search'
,
'unindex_page'
);
$indextext
=
qa_viewer_text
(
$setcontent
,
'html'
);
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
unindex_page
(
$editpage
[
'pageid'
]);
$indextext
=
qa_viewer_text
(
$setcontent
,
'html'
);
$searchmodules
=
qa_load_modules_with
(
'search'
,
'index_page'
);
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
index_page
(
$editpage
[
'pageid'
],
$setslug
,
$setheading
,
$setcontent
,
'html'
,
$indextext
);
}
$searchmodules
=
qa_load_modules_with
(
'search'
,
'index_page'
);
qa_db_page_move
(
$editpage
[
'pageid'
],
substr
(
$inposition
,
0
,
1
),
substr
(
$inposition
,
1
));
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
index_page
(
$editpage
[
'pageid'
],
$setslug
,
$setheading
,
$setcontent
,
'html'
,
$indextext
);
}
qa_db_page_move
(
$editpage
[
'pageid'
],
substr
(
$inposition
,
0
,
1
),
substr
(
$inposition
,
1
))
;
$reloadpages
=
true
;
$reloadpages
=
true
;
if
(
empty
(
$errors
))
$editpage
=
null
;
else
$editpage
=
@
$pages
[
$editpage
[
'pageid'
]];
if
(
empty
(
$errors
))
}
else
{
// creating a new one
$editpage
=
null
;
if
(
empty
(
$errors
))
{
else
if
(
$isexternal
)
{
$editpage
=
@
$pages
[
$editpage
[
'pageid'
]];
$pageid
=
qa_db_page_create
(
$inname
,
QA_PAGE_FLAGS_EXTERNAL
|
(
$innewwindow
?
QA_PAGE_FLAGS_NEW_WINDOW
:
0
),
$inurl
,
null
,
null
,
$inpermit
);
}
else
{
$pageid
=
qa_db_page_create
(
$inname
,
0
,
$inslug
,
$inheading
,
$incontent
,
$inpermit
);
}
else
{
// creating a new one
$indextext
=
qa_viewer_text
(
$incontent
,
'html'
);
if
(
empty
(
$errors
))
{
if
(
$isexternal
)
{
$pageid
=
qa_db_page_create
(
$inname
,
QA_PAGE_FLAGS_EXTERNAL
|
(
$innewwindow
?
QA_PAGE_FLAGS_NEW_WINDOW
:
0
),
$inurl
,
null
,
null
,
$inpermit
);
}
else
{
$pageid
=
qa_db_page_create
(
$inname
,
0
,
$inslug
,
$inheading
,
$incontent
,
$inpermit
);
$indextext
=
qa_viewer_text
(
$incontent
,
'html'
);
$searchmodules
=
qa_load_modules_with
(
'search'
,
'index_page'
);
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
index_page
(
$pageid
,
$inslug
,
$inheading
,
$incontent
,
'html'
,
$indextext
);
}
$searchmodules
=
qa_load_modules_with
(
'search'
,
'index_page'
);
qa_db_page_move
(
$pageid
,
substr
(
$inposition
,
0
,
1
),
substr
(
$inposition
,
1
));
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
index_page
(
$pageid
,
$inslug
,
$inheading
,
$incontent
,
'html'
,
$indextext
);
$editpage
=
null
;
$reloadpages
=
true
;
}
}
}
qa_db_page_move
(
$pageid
,
substr
(
$inposition
,
0
,
1
),
substr
(
$inposition
,
1
));
if
(
qa_clicked
(
'dosaveview'
)
&&
empty
(
$errors
)
&&
!
$isexternal
)
qa_redirect
(
$inslug
);
}
$editpage
=
null
;
if
(
$reloadpages
)
{
$reloadpages
=
true
;
qa_db_flush_pending_result
(
'navpages'
);
$pages
=
qa_db_select_with_pending
(
qa_db_pages_selectspec
());
}
}
}
}
if
(
qa_clicked
(
'dosaveview'
)
&&
empty
(
$errors
)
&&
!
$isexternal
)
qa_redirect
(
$inslug
);
}
}
if
(
$reloadpages
)
{
qa_db_flush_pending_result
(
'navpages'
);
$pages
=
qa_db_select_with_pending
(
qa_db_pages_selectspec
());
}
}
}
// Prepare content for theme
// Prepare content for theme
$qa_content
=
qa_content_prepare
();
$qa_content
=
qa_content_prepare
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/pages_title'
);
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/pages_title'
);
if
(
isset
(
$editpage
))
{
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
$positionoptions
=
array
();
if
(
isset
(
$editpage
))
{
if
(
!
$isexternal
)
$positionoptions
=
array
(
);
$positionoptions
[
'_'
.
max
(
1
,
@
$editpage
[
'position'
])]
=
qa_lang_html
(
'admin/no_link'
);
if
(
!
$isexternal
)
$navlangkey
=
array
(
$positionoptions
[
'_'
.
max
(
1
,
@
$editpage
[
'position'
])]
=
qa_lang_html
(
'admin/no_link'
);
'B'
=>
'admin/before_main_menu'
,
'M'
=>
'admin/after_main_menu'
,
'O'
=>
'admin/opposite_main_menu'
,
'F'
=>
'admin/after_footer'
,
);
$navlangkey
=
array
(
foreach
(
$navlangkey
as
$nav
=>
$langkey
)
{
'B'
=>
'admin/before_main_menu'
,
$previous
=
null
;
'M'
=>
'admin/after_main_menu'
,
$passedself
=
false
;
'O'
=>
'admin/opposite_main_menu'
,
$maxposition
=
0
;
'F'
=>
'admin/after_footer'
,
);
foreach
(
$navlangkey
as
$nav
=>
$langkey
)
{
foreach
(
$pages
as
$key
=>
$page
)
{
$previous
=
null
;
if
(
$page
[
'nav'
]
==
$nav
)
{
$passedself
=
false
;
if
(
isset
(
$previous
))
$maxposition
=
0
;
$positionhtml
=
qa_lang_html_sub
(
'admin/after_x_tab'
,
qa_html
(
$passedself
?
$page
[
'title'
]
:
$previous
[
'title'
]));
else
$positionhtml
=
qa_lang_html
(
$langkey
);
foreach
(
$pages
as
$key
=>
$page
)
{
if
(
$page
[
'pageid'
]
==
@
$editpage
[
'pageid'
])
if
(
$page
[
'nav'
]
==
$nav
)
{
$passedself
=
true
;
if
(
isset
(
$previous
))
$positionhtml
=
qa_lang_html_sub
(
'admin/after_x_tab'
,
qa_html
(
$passedself
?
$page
[
'title'
]
:
$previous
[
'title'
]));
else
$positionhtml
=
qa_lang_html
(
$langkey
);
if
(
$page
[
'pageid'
]
==
@
$editpage
[
'pageid'
])
$maxposition
=
max
(
$maxposition
,
$page
[
'position'
]);
$passedself
=
true
;
$positionoptions
[
$nav
.
$page
[
'position'
]]
=
$positionhtml
;
$maxposition
=
max
(
$maxposition
,
$page
[
'position'
]);
$previous
=
$page
;
$positionoptions
[
$nav
.
$page
[
'position'
]]
=
$positionhtml
;
}
}
$previous
=
$page
;
if
(
!
isset
(
$editpage
[
'pageid'
])
||
$nav
!=
@
$editpage
[
'nav'
])
{
$positionvalue
=
isset
(
$previous
)
?
qa_lang_html_sub
(
'admin/after_x_tab'
,
qa_html
(
$previous
[
'title'
]))
:
qa_lang_html
(
$langkey
);
$positionoptions
[
$nav
.
(
isset
(
$previous
)
?
(
1
+
$maxposition
)
:
1
)]
=
$positionvalue
;
}
}
}
}
if
(
!
isset
(
$editpage
[
'pageid'
])
||
$nav
!=
@
$editpage
[
'nav'
])
{
$positionvalue
=
@
$positionoptions
[
$editpage
[
'nav'
]
.
$editpage
[
'position'
]];
$positionvalue
=
isset
(
$previous
)
?
qa_lang_html_sub
(
'admin/after_x_tab'
,
qa_html
(
$previous
[
'title'
]))
:
qa_lang_html
(
$langkey
);
$positionoptions
[
$nav
.
(
isset
(
$previous
)
?
(
1
+
$maxposition
)
:
1
)]
=
$positionvalue
;
$permitoptions
=
qa_admin_permit_options
(
QA_PERMIT_ALL
,
QA_PERMIT_ADMINS
,
false
,
false
);
}
$permitvalue
=
@
$permitoptions
[
isset
(
$inpermit
)
?
$inpermit
:
$editpage
[
'permit'
]];
}
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'fields'
=>
array
(
'name'
=>
array
(
'tags'
=>
'name="name" id="name"'
,
'label'
=>
qa_lang_html
(
$isexternal
?
'admin/link_name'
:
'admin/page_name'
),
'value'
=>
qa_html
(
isset
(
$inname
)
?
$inname
:
@
$editpage
[
'title'
]),
'error'
=>
qa_html
(
@
$errors
[
'name'
]),
),
'delete'
=>
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
$isexternal
?
'admin/delete_link'
:
'admin/delete_page'
),
'value'
=>
0
,
'type'
=>
'checkbox'
,
),
'position'
=>
array
(
'id'
=>
'position_display'
,
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
),
'permit'
=>
array
(
'id'
=>
'permit_display'
,
'tags'
=>
'name="permit"'
,
'label'
=>
qa_lang_html
(
'admin/permit_to_view'
),
'type'
=>
'select'
,
'options'
=>
$permitoptions
,
'value'
=>
$permitvalue
,
),
'slug'
=>
array
(
'id'
=>
'slug_display'
,
'tags'
=>
'name="slug"'
,
'label'
=>
qa_lang_html
(
'admin/page_slug'
),
'value'
=>
qa_html
(
isset
(
$inslug
)
?
$inslug
:
@
$editpage
[
'tags'
]),
'error'
=>
qa_html
(
@
$errors
[
'slug'
]),
),
'url'
=>
array
(
'id'
=>
'url_display'
,
'tags'
=>
'name="url"'
,
'label'
=>
qa_lang_html
(
'admin/link_url'
),
'value'
=>
qa_html
(
isset
(
$inurl
)
?
$inurl
:
@
$editpage
[
'tags'
]),
'error'
=>
qa_html
(
@
$errors
[
'url'
]),
),
'newwindow'
=>
array
(
'id'
=>
'newwindow_display'
,
'tags'
=>
'name="newwindow"'
,
'label'
=>
qa_lang_html
(
'admin/link_new_window'
),
'value'
=>
(
isset
(
$innewwindow
)
?
$innewwindow
:
(
@
$editpage
[
'flags'
]
&
QA_PAGE_FLAGS_NEW_WINDOW
))
?
1
:
0
,
'type'
=>
'checkbox'
,
),
'heading'
=>
array
(
'id'
=>
'heading_display'
,
'tags'
=>
'name="heading"'
,
'label'
=>
qa_lang_html
(
'admin/page_heading'
),
'value'
=>
qa_html
(
isset
(
$inheading
)
?
$inheading
:
@
$editpage
[
'heading'
]),
'error'
=>
qa_html
(
@
$errors
[
'heading'
]),
),
'content'
=>
array
(
'id'
=>
'content_display'
,
'tags'
=>
'name="content"'
,
'label'
=>
qa_lang_html
(
'admin/page_content_html'
),
'value'
=>
qa_html
(
isset
(
$incontent
)
?
$incontent
:
@
$editpage
[
'content'
]),
'error'
=>
qa_html
(
@
$errors
[
'content'
]),
'rows'
=>
16
,
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'label'
=>
qa_lang_html
(
isset
(
$editpage
[
'pageid'
])
?
'main/save_button'
:
(
$isexternal
?
'admin/add_link_button'
:
'admin/add_page_button'
)),
),
'saveview'
=>
array
(
'tags'
=>
'name="dosaveview"'
,
'label'
=>
qa_lang_html
(
'admin/save_view_button'
),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosavepage'
=>
'1'
,
// for IE
'edit'
=>
@
$editpage
[
'pageid'
],
'external'
=>
(
int
)
$isexternal
,
'code'
=>
qa_get_form_security_code
(
'admin/pages'
),
),
);
$positionvalue
=
@
$positionoptions
[
$editpage
[
'nav'
]
.
$editpage
[
'position'
]];
if
(
$isexternal
)
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'slug'
]);
$permitoptions
=
qa_admin_permit_options
(
QA_PERMIT_ALL
,
QA_PERMIT_ADMINS
,
false
,
false
);
unset
(
$qa_content
[
'form'
][
'fields'
][
'heading'
]);
$permitvalue
=
@
$permitoptions
[
isset
(
$inpermit
)
?
$inpermit
:
$editpage
[
'permit'
]];
unset
(
$qa_content
[
'form'
][
'fields'
][
'content'
]);
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'fields'
=>
array
(
'name'
=>
array
(
'tags'
=>
'name="name" id="name"'
,
'label'
=>
qa_lang_html
(
$isexternal
?
'admin/link_name'
:
'admin/page_name'
),
'value'
=>
qa_html
(
isset
(
$inname
)
?
$inname
:
@
$editpage
[
'title'
]),
'error'
=>
qa_html
(
@
$errors
[
'name'
]),
),
'delete'
=>
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
$isexternal
?
'admin/delete_link'
:
'admin/delete_page'
),
'value'
=>
0
,
'type'
=>
'checkbox'
,
),
'position'
=>
array
(
'id'
=>
'position_display'
,
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
),
'permit'
=>
array
(
'id'
=>
'permit_display'
,
'tags'
=>
'name="permit"'
,
'label'
=>
qa_lang_html
(
'admin/permit_to_view'
),
'type'
=>
'select'
,
'options'
=>
$permitoptions
,
'value'
=>
$permitvalue
,
),
'slug'
=>
array
(
'id'
=>
'slug_display'
,
'tags'
=>
'name="slug"'
,
'label'
=>
qa_lang_html
(
'admin/page_slug'
),
'value'
=>
qa_html
(
isset
(
$inslug
)
?
$inslug
:
@
$editpage
[
'tags'
]),
'error'
=>
qa_html
(
@
$errors
[
'slug'
]),
),
'url'
=>
array
(
'id'
=>
'url_display'
,
'tags'
=>
'name="url"'
,
'label'
=>
qa_lang_html
(
'admin/link_url'
),
'value'
=>
qa_html
(
isset
(
$inurl
)
?
$inurl
:
@
$editpage
[
'tags'
]),
'error'
=>
qa_html
(
@
$errors
[
'url'
]),
),
'newwindow'
=>
array
(
'id'
=>
'newwindow_display'
,
'tags'
=>
'name="newwindow"'
,
'label'
=>
qa_lang_html
(
'admin/link_new_window'
),
'value'
=>
(
isset
(
$innewwindow
)
?
$innewwindow
:
(
@
$editpage
[
'flags'
]
&
QA_PAGE_FLAGS_NEW_WINDOW
))
?
1
:
0
,
'type'
=>
'checkbox'
,
),
'heading'
=>
array
(
'id'
=>
'heading_display'
,
'tags'
=>
'name="heading"'
,
'label'
=>
qa_lang_html
(
'admin/page_heading'
),
'value'
=>
qa_html
(
isset
(
$inheading
)
?
$inheading
:
@
$editpage
[
'heading'
]),
'error'
=>
qa_html
(
@
$errors
[
'heading'
]),
),
'content'
=>
array
(
'id'
=>
'content_display'
,
'tags'
=>
'name="content"'
,
'label'
=>
qa_lang_html
(
'admin/page_content_html'
),
'value'
=>
qa_html
(
isset
(
$incontent
)
?
$incontent
:
@
$editpage
[
'content'
]),
'error'
=>
qa_html
(
@
$errors
[
'content'
]),
'rows'
=>
16
,
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'label'
=>
qa_lang_html
(
isset
(
$editpage
[
'pageid'
])
?
'main/save_button'
:
(
$isexternal
?
'admin/add_link_button'
:
'admin/add_page_button'
)),
),
'saveview'
=>
array
(
'tags'
=>
'name="dosaveview"'
,
'label'
=>
qa_lang_html
(
'admin/save_view_button'
),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosavepage'
=>
'1'
,
// for IE
'edit'
=>
@
$editpage
[
'pageid'
],
'external'
=>
(
int
)
$isexternal
,
'code'
=>
qa_get_form_security_code
(
'admin/pages'
),
),
);
if
(
$isexternal
)
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'slug'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'heading'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'content'
]);
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'url'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'newwindow'
]);
}
if
(
isset
(
$editpage
[
'pageid'
]))
{
}
else
{
qa_set_display_rules
(
$qa_content
,
array
(
unset
(
$qa_content
[
'form'
][
'fields'
][
'url'
]);
'position_display'
=>
'!dodelete'
,
unset
(
$qa_content
[
'form'
][
'fields'
][
'newwindow'
]);
'permit_display'
=>
'!dodelete'
,
}
(
$isexternal
?
'url_display'
:
'slug_display'
)
=>
'!dodelete'
,
(
$isexternal
?
'newwindow_display'
:
'heading_display'
)
=>
'!dodelete'
,
'content_display'
=>
'!dodelete'
,
));
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'slug'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
}
if
(
$isexternal
||
!
isset
(
$editpage
[
'pageid'
]))
if
(
isset
(
$editpage
[
'pageid'
]))
{
unset
(
$qa_content
[
'form'
][
'buttons'
][
'saveview'
]);
qa_set_display_rules
(
$qa_content
,
array
(
'position_display'
=>
'!dodelete'
,
$qa_content
[
'focusid'
]
=
'name'
;
'permit_display'
=>
'!dodelete'
,
(
$isexternal
?
'url_display'
:
'slug_display'
)
=>
'!dodelete'
,
}
else
{
(
$isexternal
?
'newwindow_display'
:
'heading_display'
)
=>
'!dodelete'
,
// List of standard navigation links
'content_display'
=>
'!dodelete'
,
$qa_content
[
'form'
]
=
array
(
));
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
}
else
{
'style'
=>
'tall'
,
unset
(
$qa_content
[
'form'
][
'fields'
][
'slug'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
'fields'
=>
array
(),
}
'buttons'
=>
array
(
'save'
=>
array
(
'tags'
=>
'name="dosaveoptions"'
,
'label'
=>
qa_lang_html
(
'main/save_button'
),
),
'addpage'
=>
array
(
'tags'
=>
'name="doaddpage"'
,
'label'
=>
qa_lang_html
(
'admin/add_page_button'
),
),
'addlink'
=>
array
(
'tags'
=>
'name="doaddlink"'
,
'label'
=>
qa_lang_html
(
'admin/add_link_button'
),
),
),
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/pages'
),
),
);
$qa_content
[
'form'
][
'fields'
][
'navlinks'
]
=
array
(
'label'
=>
qa_lang_html
(
'admin/nav_links_explanation'
),
'type'
=>
'static'
,
'tight'
=>
true
,
);
foreach
(
$navoptions
as
$optionname
=>
$langkey
)
{
$qa_content
[
'form'
][
'fields'
][
$optionname
]
=
array
(
'label'
=>
'<a href="'
.
qa_path_html
(
$navpaths
[
$optionname
])
.
'">'
.
qa_lang_html
(
$langkey
)
.
'</a>'
,
'tags'
=>
'name="option_'
.
$optionname
.
'"'
,
'type'
=>
'checkbox'
,
'value'
=>
qa_opt
(
$optionname
),
);
}
$qa_content
[
'form'
][
'fields'
][]
=
array
(
if
(
$isexternal
||
!
isset
(
$editpage
[
'pageid'
]))
'type'
=>
'blank'
unset
(
$qa_content
[
'form'
][
'buttons'
][
'saveview'
]);
);
// List of suggested plugin pages
$qa_content
[
'focusid'
]
=
'name'
;
$listhtml
=
''
;
}
else
{
// List of standard navigation links
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'style'
=>
'tall'
,
'fields'
=>
array
(),
'buttons'
=>
array
(
'save'
=>
array
(
'tags'
=>
'name="dosaveoptions"'
,
'label'
=>
qa_lang_html
(
'main/save_button'
),
),
'addpage'
=>
array
(
'tags'
=>
'name="doaddpage"'
,
'label'
=>
qa_lang_html
(
'admin/add_page_button'
),
),
'addlink'
=>
array
(
'tags'
=>
'name="doaddlink"'
,
'label'
=>
qa_lang_html
(
'admin/add_link_button'
),
),
),
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/pages'
),
),
);
$qa_content
[
'form'
][
'fields'
][
'navlinks'
]
=
array
(
'label'
=>
qa_lang_html
(
'admin/nav_links_explanation'
),
'type'
=>
'static'
,
'tight'
=>
true
,
);
foreach
(
$navoptions
as
$optionname
=>
$langkey
)
{
$qa_content
[
'form'
][
'fields'
][
$optionname
]
=
array
(
'label'
=>
'<a href="'
.
qa_path_html
(
$navpaths
[
$optionname
])
.
'">'
.
qa_lang_html
(
$langkey
)
.
'</a>'
,
'tags'
=>
'name="option_'
.
$optionname
.
'"'
,
'type'
=>
'checkbox'
,
'value'
=>
qa_opt
(
$optionname
),
);
}
$pagemodules
=
qa_load_modules_with
(
'page'
,
'suggest_requests'
);
$qa_content
[
'form'
][
'fields'
][]
=
array
(
'type'
=>
'blank'
);
foreach
(
$pagemodules
as
$tryname
=>
$trypage
)
{
// List of suggested plugin pages
$suggestrequests
=
$trypage
->
suggest_requests
();
foreach
(
$suggestrequests
as
$suggestrequest
)
{
$listhtml
=
''
;
$listhtml
.=
'<li><b><a href="'
.
qa_path_html
(
$suggestrequest
[
'request'
])
.
'">'
.
qa_html
(
$suggestrequest
[
'title'
])
.
'</a></b>'
;
$
listhtml
.=
qa_lang_html_sub
(
'admin/plugin_module'
,
qa_html
(
$tryname
)
);
$
pagemodules
=
qa_load_modules_with
(
'page'
,
'suggest_requests'
);
$listhtml
.=
strtr
(
qa_lang_html
(
'admin/add_link_link'
),
array
(
foreach
(
$pagemodules
as
$tryname
=>
$trypage
)
{
'^1'
=>
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'doaddlink'
=>
1
,
'text'
=>
$suggestrequest
[
'title'
],
'url'
=>
$suggestrequest
[
'request'
],
'nav'
=>
@
$suggestrequest
[
'nav'
]))
.
'">'
,
$suggestrequests
=
$trypage
->
suggest_requests
();
'^2'
=>
'</a>'
,
));
if
(
method_exists
(
$trypage
,
'admin_form'
))
foreach
(
$suggestrequests
as
$suggestrequest
)
{
$listhtml
.=
' - <a href="'
.
qa_admin_module_options_path
(
'page'
,
$tryname
)
.
'">'
.
qa_lang_html
(
'admin/options'
)
.
'</a
>'
;
$listhtml
.=
'<li><b><a href="'
.
qa_path_html
(
$suggestrequest
[
'request'
])
.
'">'
.
qa_html
(
$suggestrequest
[
'title'
])
.
'</a></b
>'
;
$listhtml
.=
'</li>'
;
$listhtml
.=
qa_lang_html_sub
(
'admin/plugin_module'
,
qa_html
(
$tryname
));
}
}
if
(
strlen
(
$listhtml
))
{
$listhtml
.=
strtr
(
qa_lang_html
(
'admin/add_link_link'
),
array
(
$qa_content
[
'form'
][
'fields'
][
'plugins'
]
=
array
(
'^1'
=>
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'doaddlink'
=>
1
,
'text'
=>
$suggestrequest
[
'title'
],
'url'
=>
$suggestrequest
[
'request'
],
'nav'
=>
@
$suggestrequest
[
'nav'
]))
.
'">'
,
'label'
=>
qa_lang_html
(
'admin/plugin_pages_explanation'
),
'^2'
=>
'</a>'
,
'type'
=>
'custom'
,
));
'html'
=>
'<ul style="margin-bottom:0;">'
.
$listhtml
.
'</ul>'
,
);
}
// List of custom pages or links
if
(
method_exists
(
$trypage
,
'admin_form'
))
$listhtml
.=
' - <a href="'
.
qa_admin_module_options_path
(
'page'
,
$tryname
)
.
'">'
.
qa_lang_html
(
'admin/options'
)
.
'</a>'
;
$listhtml
=
''
;
$listhtml
.=
'</li>'
;
}
}
foreach
(
$pages
as
$page
)
{
if
(
strlen
(
$listhtml
))
{
$listhtml
.=
'<li><b><a href="'
.
qa_custom_page_url
(
$page
)
.
'">'
.
qa_html
(
$page
[
'title'
])
.
'</a></b>'
;
$qa_content
[
'form'
][
'fields'
][
'plugins'
]
=
array
(
'label'
=>
qa_lang_html
(
'admin/plugin_pages_explanation'
),
'type'
=>
'custom'
,
'html'
=>
'<ul style="margin-bottom:0;">'
.
$listhtml
.
'</ul>'
,
);
}
$listhtml
.=
strtr
(
qa_lang_html
((
$page
[
'flags'
]
&
QA_PAGE_FLAGS_EXTERNAL
)
?
'admin/edit_link'
:
'admin/edit_page'
),
array
(
// List of custom pages or links
'^1'
=>
'<a href="'
.
qa_path_html
(
'admin/pages'
,
array
(
'edit'
=>
$page
[
'pageid'
]))
.
'">'
,
'^2'
=>
'</a>'
,
));
$listhtml
.=
'</li>'
;
$listhtml
=
''
;
}
$qa_content
[
'form'
][
'fields'
][
'pages'
]
=
array
(
foreach
(
$pages
as
$page
)
{
'label'
=>
strlen
(
$listhtml
)
?
qa_lang_html
(
'admin/click_name_edit'
)
:
qa_lang_html
(
'admin/pages_explanation'
),
$listhtml
.=
'<li><b><a href="'
.
qa_custom_page_url
(
$page
)
.
'">'
.
qa_html
(
$page
[
'title'
])
.
'</a></b>'
;
'type'
=>
'custom'
,
'html'
=>
strlen
(
$listhtml
)
?
'<ul style="margin-bottom:0;">'
.
$listhtml
.
'</ul>'
:
null
,
);
}
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$listhtml
.=
strtr
(
qa_lang_html
((
$page
[
'flags'
]
&
QA_PAGE_FLAGS_EXTERNAL
)
?
'admin/edit_link'
:
'admin/edit_page'
),
array
(
'^1'
=>
'<a href="'
.
qa_path_html
(
'admin/pages'
,
array
(
'edit'
=>
$page
[
'pageid'
]))
.
'">'
,
'^2'
=>
'</a>'
,
));
$listhtml
.=
'</li>'
;
}
$qa_content
[
'form'
][
'fields'
][
'pages'
]
=
array
(
'label'
=>
strlen
(
$listhtml
)
?
qa_lang_html
(
'admin/click_name_edit'
)
:
qa_lang_html
(
'admin/pages_explanation'
),
'type'
=>
'custom'
,
'html'
=>
strlen
(
$listhtml
)
?
'<ul style="margin-bottom:0;">'
.
$listhtml
.
'</ul>'
:
null
,
);
}
return
$qa_content
;
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
return
$qa_content
;
}
}
qa-
include/pages/admin/admin-p
lugins.php
→
qa-
src/Controllers/Admin/P
lugins.php
View file @
2076b209
...
@@ -3,9 +3,6 @@
...
@@ -3,9 +3,6 @@
Question2Answer by Gideon Greenspan and contributors
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
http://www.question2answer.org/
Description: Controller for admin page listing plugins and showing their options
This program is free software; you can redistribute it and/or
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
as published by the Free Software Foundation; either version 2
...
@@ -19,254 +16,265 @@
...
@@ -19,254 +16,265 @@
More about this license: http://www.question2answer.org/license.php
More about this license: http://www.question2answer.org/license.php
*/
*/
if
(
!
defined
(
'QA_VERSION'
))
{
// don't allow this page to be requested directly from browser
namespace
Q2A\Controllers\Admin
;
header
(
'Location: ../../../'
);
exit
;
}
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
use
Q2A\Controllers\BaseController
;
use
Q2A\Database\DbConnection
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
/**
* Controller for admin page listing plugins and showing their options.
*/
class
Plugins
extends
BaseController
{
public
function
__construct
(
DbConnection
$db
)
{
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
// Check admin privileges
parent
::
__construct
(
$db
);
if
(
!
qa_admin_check_privileges
(
$qa_content
))
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
return
$qa_content
;
}
// Prepare content for theme
public
function
index
()
{
// Prepare content for theme
$qa_content
=
qa_content_prepare
();
$qa_content
=
qa_content_prepare
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/plugins_title'
);
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/plugins_title'
);
$qa_content
[
'error'
]
=
qa_admin_page_error
();
$qa_content
[
'error'
]
=
qa_admin_page_error
();
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
$pluginManager
=
new
\Q2A\Plugin\PluginManager
();
$pluginManager
=
new
\Q2A\Plugin\PluginManager
();
$pluginManager
->
cleanRemovedPlugins
();
$pluginManager
->
cleanRemovedPlugins
();
$enabledPlugins
=
$pluginManager
->
getEnabledPlugins
();
$enabledPlugins
=
$pluginManager
->
getEnabledPlugins
();
$fileSystemPlugins
=
$pluginManager
->
getFilesystemPlugins
();
$fileSystemPlugins
=
$pluginManager
->
getFilesystemPlugins
();
$pluginHashes
=
$pluginManager
->
getHashesForPlugins
(
$fileSystemPlugins
);
$pluginHashes
=
$pluginManager
->
getHashesForPlugins
(
$fileSystemPlugins
);
$showpluginforms
=
true
;
$showpluginforms
=
true
;
if
(
qa_is_http_post
())
{
if
(
qa_is_http_post
())
{
if
(
!
qa_check_form_security_code
(
'admin/plugins'
,
qa_post_text
(
'qa_form_security_code'
)))
{
if
(
!
qa_check_form_security_code
(
'admin/plugins'
,
qa_post_text
(
'qa_form_security_code'
)))
{
$qa_content
[
'error'
]
=
qa_lang_html
(
'misc/form_security_reload'
);
$qa_content
[
'error'
]
=
qa_lang_html
(
'misc/form_security_reload'
);
$showpluginforms
=
false
;
$showpluginforms
=
false
;
}
else
{
}
else
{
if
(
qa_clicked
(
'dosave'
))
{
if
(
qa_clicked
(
'dosave'
))
{
$enabledPluginHashes
=
qa_post_text
(
'enabled_plugins_hashes'
);
$enabledPluginHashes
=
qa_post_text
(
'enabled_plugins_hashes'
);
$enabledPluginHashesArray
=
explode
(
';'
,
$enabledPluginHashes
);
$enabledPluginHashesArray
=
explode
(
';'
,
$enabledPluginHashes
);
$pluginDirectories
=
array_keys
(
array_intersect
(
$pluginHashes
,
$enabledPluginHashesArray
));
$pluginDirectories
=
array_keys
(
array_intersect
(
$pluginHashes
,
$enabledPluginHashesArray
));
$pluginManager
->
setEnabledPlugins
(
$pluginDirectories
);
$pluginManager
->
setEnabledPlugins
(
$pluginDirectories
);
qa_redirect
(
'admin/plugins'
);
qa_redirect
(
'admin/plugins'
);
}
}
}
}
}
}
// Map modules with options to their containing plugins
// Map modules with options to their containing plugins
$pluginoptionmodules
=
array
();
$pluginoptionmodules
=
array
();
$tables
=
qa_db_list_tables
();
$tables
=
qa_db_list_tables
();
$moduletypes
=
qa_list_module_types
();
$moduletypes
=
qa_list_module_types
();
foreach
(
$moduletypes
as
$type
)
{
foreach
(
$moduletypes
as
$type
)
{
$modules
=
qa_list_modules
(
$type
);
$modules
=
qa_list_modules
(
$type
);
foreach
(
$modules
as
$name
)
{
$module
=
qa_load_module
(
$type
,
$name
);
foreach
(
$modules
as
$name
)
{
if
(
method_exists
(
$module
,
'admin_form'
))
{
$module
=
qa_load_module
(
$type
,
$name
);
$info
=
qa_get_module_info
(
$type
,
$name
);
$dir
=
rtrim
(
$info
[
'directory'
],
'/'
);
$pluginoptionmodules
[
$dir
][]
=
array
(
'type'
=>
$type
,
'name'
=>
$name
,
);
}
}
}
if
(
method_exists
(
$module
,
'admin_form'
))
{
foreach
(
$moduletypes
as
$type
)
{
$info
=
qa_get_module_info
(
$type
,
$name
);
$modules
=
qa_load_modules_with
(
$type
,
'init_queries'
);
$dir
=
rtrim
(
$info
[
'directory'
],
'/'
);
$pluginoptionmodules
[
$dir
][]
=
array
(
foreach
(
$modules
as
$name
=>
$module
)
{
'type'
=>
$type
,
$queries
=
$module
->
init_queries
(
$tables
);
'name'
=>
$name
,
);
if
(
!
empty
(
$queries
))
{
if
(
qa_is_http_post
())
qa_redirect
(
'install'
);
else
{
$qa_content
[
'error'
]
=
strtr
(
qa_lang_html
(
'admin/module_x_database_init'
),
array
(
'^1'
=>
qa_html
(
$name
),
'^2'
=>
qa_html
(
$type
),
'^3'
=>
'<a href="'
.
qa_path_html
(
'install'
)
.
'">'
,
'^4'
=>
'</a>'
,
));
}
}
}
}
}
}
}
foreach
(
$moduletypes
as
$type
)
{
$modules
=
qa_load_modules_with
(
$type
,
'init_queries'
);
foreach
(
$modules
as
$name
=>
$module
)
{
if
(
!
empty
(
$fileSystemPlugins
))
{
$queries
=
$module
->
init_queries
(
$tables
);
$metadataUtil
=
new
\Q2A\Util\Metadata
();
$sortedPluginFiles
=
array
();
if
(
!
empty
(
$queries
))
{
foreach
(
$fileSystemPlugins
as
$pluginDirectory
)
{
if
(
qa_is_http_post
())
$pluginDirectoryPath
=
QA_PLUGIN_DIR
.
$pluginDirectory
;
qa_redirect
(
'install'
);
$metadata
=
$metadataUtil
->
fetchFromAddonPath
(
$pluginDirectoryPath
);
if
(
empty
(
$metadata
))
{
$pluginFile
=
$pluginDirectoryPath
.
'/qa-plugin.php'
;
else
{
// limit plugin parsing to first 8kB
$qa_content
[
'error'
]
=
strtr
(
qa_lang_html
(
'admin/module_x_database_init'
),
array
(
$contents
=
file_get_contents
(
$pluginFile
,
false
,
null
,
0
,
8192
);
'^1'
=>
qa_html
(
$name
),
$metadata
=
qa_addon_metadata
(
$contents
,
'Plugin'
);
'^2'
=>
qa_html
(
$type
),
}
'^3'
=>
'<a href="'
.
qa_path_html
(
'install'
)
.
'">'
,
'^4'
=>
'</a>'
,
));
}
}
}
}
$metadata
[
'name'
]
=
isset
(
$metadata
[
'name'
])
&&
!
empty
(
$metadata
[
'name'
])
?
qa_html
(
$metadata
[
'name'
])
:
qa_lang_html
(
'admin/unnamed_plugin'
);
$sortedPluginFiles
[
$pluginDirectory
]
=
$metadata
;
}
if
(
!
empty
(
$fileSystemPlugins
))
{
qa_sort_by
(
$sortedPluginFiles
,
'name'
);
$metadataUtil
=
new
\Q2A\Util\Metadata
();
$sortedPluginFiles
=
array
();
foreach
(
$fileSystemPlugins
as
$pluginDirectory
)
{
$pluginIndex
=
-
1
;
$pluginDirectoryPath
=
QA_PLUGIN_DIR
.
$pluginDirectory
;
foreach
(
$sortedPluginFiles
as
$pluginDirectory
=>
$metadata
)
{
$metadata
=
$metadataUtil
->
fetchFromAddonPath
(
$pluginDirectoryPath
);
$pluginIndex
++
;
if
(
empty
(
$metadata
))
{
$pluginFile
=
$pluginDirectoryPath
.
'/qa-plugin.php'
;
// limit plugin parsing to first 8kB
$pluginDirectoryPath
=
QA_PLUGIN_DIR
.
$pluginDirectory
;
$contents
=
file_get_contents
(
$pluginFile
,
false
,
null
,
0
,
8192
);
$hash
=
$pluginHashes
[
$pluginDirectory
];
$metadata
=
qa_addon_metadata
(
$contents
,
'Plugin'
);
$showthisform
=
$showpluginforms
&&
(
qa_get
(
'show'
)
==
$hash
);
}
$metadata
[
'name'
]
=
isset
(
$metadata
[
'name'
])
&&
!
empty
(
$metadata
[
'name'
])
$namehtml
=
$metadata
[
'name'
];
?
qa_html
(
$metadata
[
'name'
])
:
qa_lang_html
(
'admin/unnamed_plugin'
);
$sortedPluginFiles
[
$pluginDirectory
]
=
$metadata
;
}
qa_sort_by
(
$sortedPluginFiles
,
'name'
);
if
(
isset
(
$metadata
[
'uri'
])
&&
strlen
(
$metadata
[
'uri'
]))
$namehtml
=
'<a href="'
.
qa_html
(
$metadata
[
'uri'
])
.
'">'
.
$namehtml
.
'</a>'
;
$pluginIndex
=
-
1
;
$namehtml
=
'<b>'
.
$namehtml
.
'</b>'
;
foreach
(
$sortedPluginFiles
as
$pluginDirectory
=>
$metadata
)
{
$pluginIndex
++
;
$pluginDirectoryPath
=
QA_PLUGIN_DIR
.
$pluginDirectory
;
$metaver
=
isset
(
$metadata
[
'version'
])
&&
strlen
(
$metadata
[
'version'
])
;
$hash
=
$pluginHashes
[
$pluginDirectory
];
if
(
$metaver
)
$showthisform
=
$showpluginforms
&&
(
qa_get
(
'show'
)
==
$hash
);
$namehtml
.=
' v'
.
qa_html
(
$metadata
[
'version'
]
);
$namehtml
=
$metadata
[
'name'
];
if
(
isset
(
$metadata
[
'author'
])
&&
strlen
(
$metadata
[
'author'
]))
{
$authorhtml
=
qa_html
(
$metadata
[
'author'
]);
if
(
isset
(
$metadata
[
'uri'
])
&&
strlen
(
$metadata
[
'
uri'
]))
if
(
isset
(
$metadata
[
'author_uri'
])
&&
strlen
(
$metadata
[
'author_
uri'
]))
$namehtml
=
'<a href="'
.
qa_html
(
$metadata
[
'uri'
])
.
'">'
.
$name
html
.
'</a>'
;
$authorhtml
=
'<a href="'
.
qa_html
(
$metadata
[
'author_uri'
])
.
'">'
.
$author
html
.
'</a>'
;
$namehtml
=
'<b>'
.
$namehtml
.
'</b>'
;
$authorhtml
=
qa_lang_html_sub
(
'main/by_x'
,
$authorhtml
)
;
$metaver
=
isset
(
$metadata
[
'version'
])
&&
strlen
(
$metadata
[
'version'
]);
}
else
if
(
$metaver
)
$authorhtml
=
''
;
$namehtml
.=
' v'
.
qa_html
(
$metadata
[
'version'
]);
if
(
isset
(
$metadata
[
'author'
])
&&
strlen
(
$metadata
[
'author
'
]))
{
if
(
$metaver
&&
isset
(
$metadata
[
'update_uri'
])
&&
strlen
(
$metadata
[
'update_uri
'
]))
{
$authorhtml
=
qa_html
(
$metadata
[
'author'
]
);
$elementid
=
'version_check_'
.
md5
(
$pluginDirectory
);
if
(
isset
(
$metadata
[
'author_uri'
])
&&
strlen
(
$metadata
[
'author_uri'
]))
$updatehtml
=
'(<span id="'
.
$elementid
.
'">...</span>)'
;
$authorhtml
=
'<a href="'
.
qa_html
(
$metadata
[
'author_uri'
])
.
'">'
.
$authorhtml
.
'</a>'
;
$authorhtml
=
qa_lang_html_sub
(
'main/by_x'
,
$authorhtml
);
$qa_content
[
'script_onloads'
][]
=
array
(
"qa_version_check("
.
qa_js
(
$metadata
[
'update_uri'
])
.
", "
.
qa_js
(
$metadata
[
'version'
],
true
)
.
", "
.
qa_js
(
$elementid
)
.
", false);"
);
}
else
$updatehtml
=
''
;
}
else
if
(
isset
(
$metadata
[
'description'
]))
$authorhtml
=
''
;
$deschtml
=
qa_html
(
$metadata
[
'description'
]);
else
$deschtml
=
''
;
if
(
$metaver
&&
isset
(
$metadata
[
'update_uri'
])
&&
strlen
(
$metadata
[
'update_uri'
]))
{
if
(
isset
(
$pluginoptionmodules
[
$pluginDirectoryPath
])
&&
!
$showthisform
)
{
$elementid
=
'version_check_'
.
md5
(
$pluginDirectory
);
$deschtml
.=
(
strlen
(
$deschtml
)
?
' - '
:
''
)
.
'<a href="'
.
qa_admin_plugin_options_path
(
$pluginDirectory
)
.
'">'
.
qa_lang_html
(
'admin/options'
)
.
'</a>'
;
}
$updatehtml
=
'(<span id="'
.
$elementid
.
'">...</span>)'
;
$allowDisable
=
isset
(
$metadata
[
'load_order'
])
&&
$metadata
[
'load_order'
]
===
'after_db_init'
;
$beforeDbInit
=
isset
(
$metadata
[
'load_order'
])
&&
$metadata
[
'load_order'
]
===
'before_db_init'
;
$enabled
=
$beforeDbInit
||
!
$allowDisable
||
in_array
(
$pluginDirectory
,
$enabledPlugins
);
$qa_content
[
'script_onloads'
][]
=
array
(
$pluginhtml
=
$namehtml
.
' '
.
$authorhtml
.
' '
.
$updatehtml
.
'<br>'
;
"qa_version_check("
.
qa_js
(
$metadata
[
'update_uri'
])
.
", "
.
qa_js
(
$metadata
[
'version'
],
true
)
.
", "
.
qa_js
(
$elementid
)
.
", false);"
$pluginhtml
.=
$deschtml
.
(
strlen
(
$deschtml
)
>
0
?
'<br>'
:
''
);
);
$pluginhtml
.=
'<small style="color:#666">'
.
qa_html
(
$pluginDirectoryPath
)
.
'/</small>'
;
}
else
$updatehtml
=
''
;
if
(
isset
(
$metadata
[
'description'
]))
if
(
qa_qa_version_below
(
@
$metadata
[
'min_q2a'
]))
$deschtml
=
qa_html
(
$metadata
[
'description'
]);
$pluginhtml
=
'<s style="color:#999">'
.
$pluginhtml
.
'</s><br><span style="color:#f00">'
.
else
qa_lang_html_sub
(
'admin/requires_q2a_version'
,
qa_html
(
$metadata
[
'min_q2a'
]))
.
'</span>'
;
$deschtml
=
''
;
if
(
isset
(
$pluginoptionmodules
[
$pluginDirectoryPath
])
&&
!
$showthisform
)
{
elseif
(
qa_php_version_below
(
@
$metadata
[
'min_php'
]))
$deschtml
.=
(
strlen
(
$deschtml
)
?
' - '
:
''
)
.
'<a href="'
.
qa_admin_plugin_options_path
(
$pluginDirectory
)
.
'">'
.
$pluginhtml
=
'<s style="color:#999">'
.
$pluginhtml
.
'</s><br><span style="color:#f00">'
.
qa_lang_html
(
'admin/options'
)
.
'</a>'
;
qa_lang_html_sub
(
'admin/requires_php_version'
,
qa_html
(
$metadata
[
'min_php'
]))
.
'</span>'
;
}
$allowDisable
=
isset
(
$metadata
[
'load_order'
])
&&
$metadata
[
'load_order'
]
===
'after_db_init'
;
$qa_content
[
'form_plugin_'
.
$pluginIndex
]
=
array
(
$beforeDbInit
=
isset
(
$metadata
[
'load_order'
])
&&
$metadata
[
'load_order'
]
===
'before_db_init'
;
'tags'
=>
'id="'
.
qa_html
(
$hash
)
.
'"'
,
$enabled
=
$beforeDbInit
||
!
$allowDisable
||
in_array
(
$pluginDirectory
,
$enabledPlugins
);
'style'
=>
'tall'
,
'fields'
=>
array
(
$pluginhtml
=
$namehtml
.
' '
.
$authorhtml
.
' '
.
$updatehtml
.
'<br>'
;
array
(
$pluginhtml
.=
$deschtml
.
(
strlen
(
$deschtml
)
>
0
?
'<br>'
:
''
);
'type'
=>
'checkbox'
,
$pluginhtml
.=
'<small style="color:#666">'
.
qa_html
(
$pluginDirectoryPath
)
.
'/</small>'
;
'label'
=>
qa_lang_html
(
'admin/enabled'
),
'value'
=>
$enabled
,
if
(
qa_qa_version_below
(
@
$metadata
[
'min_q2a'
]))
'tags'
=>
sprintf
(
'id="plugin_enabled_%s"%s'
,
$hash
,
$allowDisable
?
''
:
' disabled'
),
$pluginhtml
=
'<s style="color:#999">'
.
$pluginhtml
.
'</s><br><span style="color:#f00">'
.
),
qa_lang_html_sub
(
'admin/requires_q2a_version'
,
qa_html
(
$metadata
[
'min_q2a'
]))
.
'</span>'
;
array
(
'type'
=>
'custom'
,
elseif
(
qa_php_version_below
(
@
$metadata
[
'min_php'
]))
'html'
=>
$pluginhtml
,
$pluginhtml
=
'<s style="color:#999">'
.
$pluginhtml
.
'</s><br><span style="color:#f00">'
.
),
qa_lang_html_sub
(
'admin/requires_php_version'
,
qa_html
(
$metadata
[
'min_php'
]))
.
'</span>'
;
),
);
$qa_content
[
'form_plugin_'
.
$pluginIndex
]
=
array
(
'tags'
=>
'id="'
.
qa_html
(
$hash
)
.
'"'
,
'style'
=>
'tall'
,
'fields'
=>
array
(
array
(
'type'
=>
'checkbox'
,
'label'
=>
qa_lang_html
(
'admin/enabled'
),
'value'
=>
$enabled
,
'tags'
=>
sprintf
(
'id="plugin_enabled_%s"%s'
,
$hash
,
$allowDisable
?
''
:
' disabled'
),
),
array
(
'type'
=>
'custom'
,
'html'
=>
$pluginhtml
,
),
),
);
if
(
$showthisform
&&
isset
(
$pluginoptionmodules
[
$pluginDirectoryPath
]))
{
if
(
$showthisform
&&
isset
(
$pluginoptionmodules
[
$pluginDirectoryPath
]))
{
foreach
(
$pluginoptionmodules
[
$pluginDirectoryPath
]
as
$pluginoptionmodule
)
{
foreach
(
$pluginoptionmodules
[
$pluginDirectoryPath
]
as
$pluginoptionmodule
)
{
$type
=
$pluginoptionmodule
[
'type'
];
$type
=
$pluginoptionmodule
[
'type'
];
$name
=
$pluginoptionmodule
[
'name'
];
$name
=
$pluginoptionmodule
[
'name'
];
$module
=
qa_load_module
(
$type
,
$name
);
$module
=
qa_load_module
(
$type
,
$name
);
$form
=
$module
->
admin_form
(
$qa_content
);
$form
=
$module
->
admin_form
(
$qa_content
);
if
(
!
isset
(
$form
[
'tags'
]))
if
(
!
isset
(
$form
[
'tags'
]))
$form
[
'tags'
]
=
'method="post" action="'
.
qa_admin_plugin_options_path
(
$pluginDirectory
)
.
'"'
;
$form
[
'tags'
]
=
'method="post" action="'
.
qa_admin_plugin_options_path
(
$pluginDirectory
)
.
'"'
;
if
(
!
isset
(
$form
[
'style'
]))
if
(
!
isset
(
$form
[
'style'
]))
$form
[
'style'
]
=
'tall'
;
$form
[
'style'
]
=
'tall'
;
$form
[
'boxed'
]
=
true
;
$form
[
'boxed'
]
=
true
;
$form
[
'hidden'
][
'qa_form_security_code'
]
=
qa_get_form_security_code
(
'admin/plugins'
);
$form
[
'hidden'
][
'qa_form_security_code'
]
=
qa_get_form_security_code
(
'admin/plugins'
);
$qa_content
[
'form_plugin_options'
]
=
$form
;
$qa_content
[
'form_plugin_options'
]
=
$form
;
}
}
}
}
}
}
}
}
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'form'
]
=
array
(
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'" name="plugins_form" onsubmit="qa_get_enabled_plugins_hashes(); return true;"'
,
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'" name="plugins_form" onsubmit="qa_get_enabled_plugins_hashes(); return true;"'
,
'style'
=>
'wide'
,
'style'
=>
'wide'
,
'buttons'
=>
array
(
'buttons'
=>
array
(
'dosave'
=>
array
(
'dosave'
=>
array
(
'tags'
=>
'name="dosave"'
,
'tags'
=>
'name="dosave"'
,
'label'
=>
qa_lang_html
(
'admin/save_options_button'
),
'label'
=>
qa_lang_html
(
'admin/save_options_button'
),
),
),
),
),
'hidden'
=>
array
(
'hidden'
=>
array
(
'qa_form_security_code'
=>
qa_get_form_security_code
(
'admin/plugins'
),
'qa_form_security_code'
=>
qa_get_form_security_code
(
'admin/plugins'
),
'enabled_plugins_hashes'
=>
''
,
'enabled_plugins_hashes'
=>
''
,
),
),
);
);
return
$qa_content
;
return
$qa_content
;
}
}
qa-
include/pages/admin/admin-userf
ields.php
→
qa-
src/Controllers/Admin/UserF
ields.php
View file @
2076b209
...
@@ -3,9 +3,6 @@
...
@@ -3,9 +3,6 @@
Question2Answer by Gideon Greenspan and contributors
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
http://www.question2answer.org/
Description: Controller for admin page for editing custom user fields
This program is free software; you can redistribute it and/or
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
as published by the Free Software Foundation; either version 2
...
@@ -19,240 +16,256 @@
...
@@ -19,240 +16,256 @@
More about this license: http://www.question2answer.org/license.php
More about this license: http://www.question2answer.org/license.php
*/
*/
if
(
!
defined
(
'QA_VERSION'
))
{
// don't allow this page to be requested directly from browser
namespace
Q2A\Controllers\Admin
;
header
(
'Location: ../../../'
);
exit
;
}
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
use
Q2A\Controllers\BaseController
;
use
Q2A\Database\DbConnection
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
// Get current list of user fields and determine the state of this admin page
/**
* Controller for admin page for editing custom user fields.
*/
class
UserFields
extends
BaseController
{
public
function
__construct
(
DbConnection
$db
)
{
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
$fieldid
=
qa_post_text
(
'edit'
);
parent
::
__construct
(
$db
);
if
(
!
isset
(
$fieldid
))
$fieldid
=
qa_get
(
'edit'
);
$userfields
=
qa_db_select_with_pending
(
qa_db_userfields_selectspec
());
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
}
$editfield
=
null
;
public
function
index
()
foreach
(
$userfields
as
$userfield
)
{
{
if
(
$userfield
[
'fieldid'
]
==
$fieldid
)
// Get current list of user fields and determine the state of this admin page
$editfield
=
$userfield
;
}
$fieldid
=
qa_post_text
(
'edit'
);
if
(
!
isset
(
$fieldid
))
$fieldid
=
qa_get
(
'edit'
);
// Check admin privileges (do late to allow one DB query)
$userfields
=
qa_db_select_with_pending
(
qa_db_userfields_selectspec
());
if
(
!
qa_admin_check_privileges
(
$qa_content
))
$editfield
=
null
;
return
$qa_content
;
foreach
(
$userfields
as
$userfield
)
{
if
(
$userfield
[
'fieldid'
]
==
$fieldid
)
$editfield
=
$userfield
;
}
// Process saving an old or new user field
// Check admin privileges (do late to allow one DB query)
$securityexpired
=
false
;
if
(
!
qa_admin_check_privileges
(
$qa_content
))
return
$qa_content
;
if
(
qa_clicked
(
'docancel'
))
qa_redirect
(
'admin/users'
);
elseif
(
qa_clicked
(
'dosavefield'
))
{
// Process saving an old or new user field
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
if
(
!
qa_check_form_security_code
(
'admin/userfields'
,
qa_post_text
(
'code'
)))
$securityexpired
=
false
;
$securityexpired
=
true
;
else
{
if
(
qa_clicked
(
'docancel'
))
if
(
qa_post_text
(
'dodelete'
))
{
qa_db_userfield_delete
(
$editfield
[
'fieldid'
]);
qa_redirect
(
'admin/users'
);
qa_redirect
(
'admin/users'
);
}
else
{
elseif
(
qa_clicked
(
'dosavefield'
))
{
$inname
=
qa_post_text
(
'name'
);
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
$intype
=
qa_post_text
(
'type'
);
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
$inonregister
=
(
int
)
qa_post_text
(
'onregister'
);
$inflags
=
$intype
|
(
$inonregister
?
QA_FIELD_FLAGS_ON_REGISTER
:
0
);
$inposition
=
qa_post_text
(
'position'
);
$inpermit
=
(
int
)
qa_post_text
(
'permit'
);
$errors
=
array
();
if
(
!
qa_check_form_security_code
(
'admin/userfields'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
// Verify the name is legitimate
else
{
if
(
qa_post_text
(
'dodelete'
))
{
qa_db_userfield_delete
(
$editfield
[
'fieldid'
]);
qa_redirect
(
'admin/users'
);
if
(
qa_strlen
(
$inname
)
>
QA_DB_MAX_PROFILE_TITLE_LENGTH
)
}
else
{
$errors
[
'name'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_PROFILE_TITLE_LENGTH
);
$inname
=
qa_post_text
(
'name'
);
$intype
=
qa_post_text
(
'type'
);
$inonregister
=
(
int
)
qa_post_text
(
'onregister'
);
$inflags
=
$intype
|
(
$inonregister
?
QA_FIELD_FLAGS_ON_REGISTER
:
0
);
$inposition
=
qa_post_text
(
'position'
);
$inpermit
=
(
int
)
qa_post_text
(
'permit'
);
// Perform appropriate database action
$errors
=
array
();
if
(
isset
(
$editfield
[
'fieldid'
]))
{
// changing existing user field
// Verify the name is legitimate
qa_db_userfield_set_fields
(
$editfield
[
'fieldid'
],
isset
(
$errors
[
'name'
])
?
$editfield
[
'content'
]
:
$inname
,
$inflags
,
$inpermit
);
qa_db_userfield_move
(
$editfield
[
'fieldid'
],
$inposition
);
if
(
empty
(
$errors
)
)
if
(
qa_strlen
(
$inname
)
>
QA_DB_MAX_PROFILE_TITLE_LENGTH
)
qa_redirect
(
'admin/users'
);
$errors
[
'name'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_PROFILE_TITLE_LENGTH
);
else
{
// Perform appropriate database action
$userfields
=
qa_db_select_with_pending
(
qa_db_userfields_selectspec
());
// reload after changes
foreach
(
$userfields
as
$userfield
)
if
(
$userfield
[
'fieldid'
]
==
$editfield
[
'fieldid'
])
$editfield
=
$userfield
;
}
}
elseif
(
empty
(
$errors
))
{
// creating a new user field
if
(
isset
(
$editfield
[
'fieldid'
]))
{
// changing existing user field
for
(
$attempt
=
0
;
$attempt
<
1000
;
$attempt
++
)
{
qa_db_userfield_set_fields
(
$editfield
[
'fieldid'
],
isset
(
$errors
[
'name'
])
?
$editfield
[
'content'
]
:
$inname
,
$inflags
,
$inpermit
);
$suffix
=
$attempt
?
(
'-'
.
(
1
+
$attempt
))
:
''
;
qa_db_userfield_move
(
$editfield
[
'fieldid'
],
$inposition
);
$newtag
=
qa_substr
(
implode
(
'-'
,
qa_string_to_words
(
$inname
)),
0
,
QA_DB_MAX_PROFILE_TITLE_LENGTH
-
strlen
(
$suffix
))
.
$suffix
;
$uniquetag
=
true
;
foreach
(
$userfields
as
$userfield
)
{
if
(
empty
(
$errors
))
if
(
qa_strtolower
(
trim
(
$newtag
))
==
qa_strtolower
(
trim
(
$userfield
[
'title'
])))
qa_redirect
(
'admin/users'
);
$uniquetag
=
false
;
}
else
{
$userfields
=
qa_db_select_with_pending
(
qa_db_userfields_selectspec
());
// reload after changes
foreach
(
$userfields
as
$userfield
)
if
(
$userfield
[
'fieldid'
]
==
$editfield
[
'fieldid'
])
$editfield
=
$userfield
;
}
}
elseif
(
empty
(
$errors
))
{
// creating a new user field
for
(
$attempt
=
0
;
$attempt
<
1000
;
$attempt
++
)
{
$suffix
=
$attempt
?
(
'-'
.
(
1
+
$attempt
))
:
''
;
$newtag
=
qa_substr
(
implode
(
'-'
,
qa_string_to_words
(
$inname
)),
0
,
QA_DB_MAX_PROFILE_TITLE_LENGTH
-
strlen
(
$suffix
))
.
$suffix
;
$uniquetag
=
true
;
if
(
$uniquetag
)
{
foreach
(
$userfields
as
$userfield
)
{
$fieldid
=
qa_db_userfield_create
(
$newtag
,
$inname
,
$inflags
,
$inpermit
);
if
(
qa_strtolower
(
trim
(
$newtag
))
==
qa_strtolower
(
trim
(
$userfield
[
'title'
])))
qa_db_userfield_move
(
$fieldid
,
$inposition
);
$uniquetag
=
false
;
qa_redirect
(
'admin/users'
);
}
if
(
$uniquetag
)
{
$fieldid
=
qa_db_userfield_create
(
$newtag
,
$inname
,
$inflags
,
$inpermit
);
qa_db_userfield_move
(
$fieldid
,
$inposition
);
qa_redirect
(
'admin/users'
);
}
}
qa_fatal_error
(
'Could not create a unique database tag'
);
}
}
}
}
qa_fatal_error
(
'Could not create a unique database tag'
);
}
}
}
}
}
}
// Prepare content for theme
// Prepare content for theme
$qa_content
=
qa_content_prepare
();
$qa_content
=
qa_content_prepare
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/users_title'
);
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/users_title'
);
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
$positionoptions
=
array
();
$positionoptions
=
array
();
$previous
=
null
;
$previous
=
null
;
$passedself
=
false
;
$passedself
=
false
;
foreach
(
$userfields
as
$userfield
)
{
foreach
(
$userfields
as
$userfield
)
{
if
(
isset
(
$previous
))
if
(
isset
(
$previous
))
$positionhtml
=
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
qa_user_userfield_label
(
$passedself
?
$userfield
:
$previous
)));
$positionhtml
=
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
qa_user_userfield_label
(
$passedself
?
$userfield
:
$previous
)));
else
else
$positionhtml
=
qa_lang_html
(
'admin/first'
);
$positionhtml
=
qa_lang_html
(
'admin/first'
);
$positionoptions
[
$userfield
[
'position'
]]
=
$positionhtml
;
$positionoptions
[
$userfield
[
'position'
]]
=
$positionhtml
;
if
(
$userfield
[
'fieldid'
]
==
@
$editfield
[
'fieldid'
])
if
(
$userfield
[
'fieldid'
]
==
@
$editfield
[
'fieldid'
])
$passedself
=
true
;
$passedself
=
true
;
$previous
=
$userfield
;
$previous
=
$userfield
;
}
}
if
(
isset
(
$editfield
[
'position'
]))
if
(
isset
(
$editfield
[
'position'
]))
$positionvalue
=
$positionoptions
[
$editfield
[
'position'
]];
$positionvalue
=
$positionoptions
[
$editfield
[
'position'
]];
else
{
else
{
$positionvalue
=
isset
(
$previous
)
?
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
qa_user_userfield_label
(
$previous
)))
:
qa_lang_html
(
'admin/first'
);
$positionvalue
=
isset
(
$previous
)
?
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
qa_user_userfield_label
(
$previous
)))
:
qa_lang_html
(
'admin/first'
);
$positionoptions
[
1
+
@
max
(
array_keys
(
$positionoptions
))]
=
$positionvalue
;
$positionoptions
[
1
+
@
max
(
array_keys
(
$positionoptions
))]
=
$positionvalue
;
}
}
$typeoptions
=
array
(
$typeoptions
=
array
(
0
=>
qa_lang_html
(
'admin/field_single_line'
),
0
=>
qa_lang_html
(
'admin/field_single_line'
),
QA_FIELD_FLAGS_MULTI_LINE
=>
qa_lang_html
(
'admin/field_multi_line'
),
QA_FIELD_FLAGS_MULTI_LINE
=>
qa_lang_html
(
'admin/field_multi_line'
),
QA_FIELD_FLAGS_LINK_URL
=>
qa_lang_html
(
'admin/field_link_url'
),
QA_FIELD_FLAGS_LINK_URL
=>
qa_lang_html
(
'admin/field_link_url'
),
);
);
$permitoptions
=
qa_admin_permit_options
(
QA_PERMIT_ALL
,
QA_PERMIT_ADMINS
,
false
,
false
);
$permitoptions
=
qa_admin_permit_options
(
QA_PERMIT_ALL
,
QA_PERMIT_ADMINS
,
false
,
false
);
$permitvalue
=
@
$permitoptions
[
isset
(
$inpermit
)
?
$inpermit
:
$editfield
[
'permit'
]];
$permitvalue
=
@
$permitoptions
[
isset
(
$inpermit
)
?
$inpermit
:
$editfield
[
'permit'
]];
$qa_content
[
'form'
]
=
array
(
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'style'
=>
'tall'
,
'fields'
=>
array
(
'fields'
=>
array
(
'name'
=>
array
(
'name'
=>
array
(
'tags'
=>
'name="name" id="name"'
,
'tags'
=>
'name="name" id="name"'
,
'label'
=>
qa_lang_html
(
'admin/field_name'
),
'label'
=>
qa_lang_html
(
'admin/field_name'
),
'value'
=>
qa_html
(
isset
(
$inname
)
?
$inname
:
qa_user_userfield_label
(
$editfield
)),
'value'
=>
qa_html
(
isset
(
$inname
)
?
$inname
:
qa_user_userfield_label
(
$editfield
)),
'error'
=>
qa_html
(
@
$errors
[
'name'
]),
'error'
=>
qa_html
(
@
$errors
[
'name'
]),
),
),
'delete'
=>
array
(
'delete'
=>
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
'admin/delete_field'
),
'label'
=>
qa_lang_html
(
'admin/delete_field'
),
'value'
=>
0
,
'value'
=>
0
,
'type'
=>
'checkbox'
,
'type'
=>
'checkbox'
,
),
),
'type'
=>
array
(
'type'
=>
array
(
'id'
=>
'type_display'
,
'id'
=>
'type_display'
,
'tags'
=>
'name="type"'
,
'tags'
=>
'name="type"'
,
'label'
=>
qa_lang_html
(
'admin/field_type'
),
'label'
=>
qa_lang_html
(
'admin/field_type'
),
'type'
=>
'select'
,
'type'
=>
'select'
,
'options'
=>
$typeoptions
,
'options'
=>
$typeoptions
,
'value'
=>
@
$typeoptions
[
isset
(
$intype
)
?
$intype
:
(
@
$editfield
[
'flags'
]
&
(
QA_FIELD_FLAGS_MULTI_LINE
|
QA_FIELD_FLAGS_LINK_URL
))],
'value'
=>
@
$typeoptions
[
isset
(
$intype
)
?
$intype
:
(
@
$editfield
[
'flags'
]
&
(
QA_FIELD_FLAGS_MULTI_LINE
|
QA_FIELD_FLAGS_LINK_URL
))],
),
),
'permit'
=>
array
(
'permit'
=>
array
(
'id'
=>
'permit_display'
,
'id'
=>
'permit_display'
,
'tags'
=>
'name="permit"'
,
'tags'
=>
'name="permit"'
,
'label'
=>
qa_lang_html
(
'admin/permit_to_view'
),
'label'
=>
qa_lang_html
(
'admin/permit_to_view'
),
'type'
=>
'select'
,
'type'
=>
'select'
,
'options'
=>
$permitoptions
,
'options'
=>
$permitoptions
,
'value'
=>
$permitvalue
,
'value'
=>
$permitvalue
,
),
),
'position'
=>
array
(
'position'
=>
array
(
'id'
=>
'position_display'
,
'id'
=>
'position_display'
,
'tags'
=>
'name="position"'
,
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'label'
=>
qa_lang_html
(
'admin/position'
),
'type'
=>
'select'
,
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
'value'
=>
$positionvalue
,
),
),
'onregister'
=>
array
(
'onregister'
=>
array
(
'id'
=>
'register_display'
,
'id'
=>
'register_display'
,
'tags'
=>
'name="onregister"'
,
'tags'
=>
'name="onregister"'
,
'label'
=>
qa_lang_html
(
'admin/show_on_register_form'
),
'label'
=>
qa_lang_html
(
'admin/show_on_register_form'
),
'type'
=>
'checkbox'
,
'type'
=>
'checkbox'
,
'value'
=>
isset
(
$inonregister
)
?
$inonregister
:
(
@
$editfield
[
'flags'
]
&
QA_FIELD_FLAGS_ON_REGISTER
),
'value'
=>
isset
(
$inonregister
)
?
$inonregister
:
(
@
$editfield
[
'flags'
]
&
QA_FIELD_FLAGS_ON_REGISTER
),
),
),
),
),
'buttons'
=>
array
(
'buttons'
=>
array
(
'save'
=>
array
(
'save'
=>
array
(
'label'
=>
qa_lang_html
(
isset
(
$editfield
[
'fieldid'
])
?
'main/save_button'
:
(
'admin/add_field_button'
)),
'label'
=>
qa_lang_html
(
isset
(
$editfield
[
'fieldid'
])
?
'main/save_button'
:
(
'admin/add_field_button'
)),
),
),
'cancel'
=>
array
(
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
),
),
'hidden'
=>
array
(
'hidden'
=>
array
(
'dosavefield'
=>
'1'
,
// for IE
'dosavefield'
=>
'1'
,
// for IE
'edit'
=>
@
$editfield
[
'fieldid'
],
'edit'
=>
@
$editfield
[
'fieldid'
],
'code'
=>
qa_get_form_security_code
(
'admin/userfields'
),
'code'
=>
qa_get_form_security_code
(
'admin/userfields'
),
),
),
);
);
if
(
isset
(
$editfield
[
'fieldid'
]))
{
if
(
isset
(
$editfield
[
'fieldid'
]))
{
qa_set_display_rules
(
$qa_content
,
array
(
qa_set_display_rules
(
$qa_content
,
array
(
'type_display'
=>
'!dodelete'
,
'type_display'
=>
'!dodelete'
,
'position_display'
=>
'!dodelete'
,
'position_display'
=>
'!dodelete'
,
'register_display'
=>
'!dodelete'
,
'register_display'
=>
'!dodelete'
,
'permit_display'
=>
'!dodelete'
,
'permit_display'
=>
'!dodelete'
,
));
));
}
else
{
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
}
}
$qa_content
[
'focusid'
]
=
'name'
;
$qa_content
[
'focusid'
]
=
'name'
;
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
return
$qa_content
;
return
$qa_content
;
}
}
qa-
include/pages/admin/admin-usert
itles.php
→
qa-
src/Controllers/Admin/UserT
itles.php
View file @
2076b209
...
@@ -3,9 +3,6 @@
...
@@ -3,9 +3,6 @@
Question2Answer by Gideon Greenspan and contributors
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
http://www.question2answer.org/
Description: Controller for admin page for editing custom user titles
This program is free software; you can redistribute it and/or
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
as published by the Free Software Foundation; either version 2
...
@@ -19,162 +16,178 @@
...
@@ -19,162 +16,178 @@
More about this license: http://www.question2answer.org/license.php
More about this license: http://www.question2answer.org/license.php
*/
*/
if
(
!
defined
(
'QA_VERSION'
))
{
// don't allow this page to be requested directly from browser
namespace
Q2A\Controllers\Admin
;
header
(
'Location: ../../../'
);
exit
;
}
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
use
Q2A\Controllers\BaseController
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
use
Q2A\Database\DbConnection
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
/**
* Controller for admin page for editing custom user titles.
*/
class
UserTitles
extends
BaseController
{
public
function
__construct
(
DbConnection
$db
)
{
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
// Get current list of user titles and determine the state of this admin page
parent
::
__construct
(
$db
);
$oldpoints
=
qa_post_text
(
'edit'
);
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
if
(
!
isset
(
$oldpoints
))
}
$oldpoints
=
qa_get
(
'edit'
);
$pointstitle
=
qa_get_points_to_titles
();
public
function
index
()
{
// Get current list of user titles and determine the state of this admin page
$oldpoints
=
qa_post_text
(
'edit'
);
if
(
!
isset
(
$oldpoints
))
$oldpoints
=
qa_get
(
'edit'
);
// Check admin privileges (do late to allow one DB query)
$pointstitle
=
qa_get_points_to_titles
();
if
(
!
qa_admin_check_privileges
(
$qa_content
))
return
$qa_content
;
// Check admin privileges (do late to allow one DB query)
// Process saving an old or new user title
if
(
!
qa_admin_check_privileges
(
$qa_content
))
return
$qa_content
;
$securityexpired
=
false
;
if
(
qa_clicked
(
'docancel'
))
// Process saving an old or new user title
qa_redirect
(
'admin/users'
);
elseif
(
qa_clicked
(
'dosavetitle'
))
{
$securityexpired
=
false
;
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
if
(
!
qa_check_form_security_code
(
'admin/usertitles'
,
qa_post_text
(
'code'
)
))
if
(
qa_clicked
(
'docancel'
))
$securityexpired
=
true
;
qa_redirect
(
'admin/users'
)
;
else
{
elseif
(
qa_clicked
(
'dosavetitle'
))
{
if
(
qa_post_text
(
'dodelete'
))
{
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
unset
(
$pointstitle
[
$oldpoints
]);
}
else
{
if
(
!
qa_check_form_security_code
(
'admin/usertitles'
,
qa_post_text
(
'code'
)))
$intitle
=
qa_post_text
(
'title'
);
$securityexpired
=
true
;
$inpoints
=
qa_post_text
(
'points'
);
$errors
=
array
();
else
{
if
(
qa_post_text
(
'dodelete'
))
{
unset
(
$pointstitle
[
$oldpoints
]);
// Verify the title and points are legitimate
}
else
{
$intitle
=
qa_post_text
(
'title'
);
$inpoints
=
qa_post_text
(
'points'
);
if
(
!
strlen
(
$intitle
))
$errors
=
array
();
$errors
[
'title'
]
=
qa_lang
(
'main/field_required'
);
if
(
!
is_numeric
(
$inpoints
))
// Verify the title and points are legitimate
$errors
[
'points'
]
=
qa_lang
(
'main/field_required'
);
else
{
$inpoints
=
(
int
)
$inpoints
;
if
(
isset
(
$pointstitle
[
$inpoints
])
&&
((
!
strlen
(
@
$oldpoints
))
||
(
$inpoints
!=
$oldpoints
)))
if
(
!
strlen
(
$intitle
))
$errors
[
'points'
]
=
qa_lang
(
'admin/title_already_used'
);
$errors
[
'title'
]
=
qa_lang
(
'main/field_required'
);
}
// Perform appropriate action
if
(
!
is_numeric
(
$inpoints
))
$errors
[
'points'
]
=
qa_lang
(
'main/field_required'
);
else
{
$inpoints
=
(
int
)
$inpoints
;
if
(
isset
(
$pointstitle
[
$oldpoints
]))
{
// changing existing user title
if
(
isset
(
$pointstitle
[
$inpoints
])
&&
((
!
strlen
(
@
$oldpoints
))
||
(
$inpoints
!=
$oldpoints
)))
$newpoints
=
isset
(
$errors
[
'points'
])
?
$oldpoints
:
$inpoints
;
$errors
[
'points'
]
=
qa_lang
(
'admin/title_already_used'
)
;
$newtitle
=
isset
(
$errors
[
'title'
])
?
$pointstitle
[
$oldpoints
]
:
$intitle
;
}
unset
(
$pointstitle
[
$oldpoints
]);
// Perform appropriate action
$pointstitle
[
$newpoints
]
=
$newtitle
;
}
elseif
(
empty
(
$errors
))
// creating a new
user title
if
(
isset
(
$pointstitle
[
$oldpoints
]))
{
// changing existing
user title
$pointstitle
[
$inpoints
]
=
$intitle
;
$newpoints
=
isset
(
$errors
[
'points'
])
?
$oldpoints
:
$inpoints
;
}
$newtitle
=
isset
(
$errors
[
'title'
])
?
$pointstitle
[
$oldpoints
]
:
$intitle
;
// Save the new option value
unset
(
$pointstitle
[
$oldpoints
]);
$pointstitle
[
$newpoints
]
=
$newtitle
;
krsort
(
$pointstitle
,
SORT_NUMERIC
);
}
elseif
(
empty
(
$errors
))
// creating a new user title
$pointstitle
[
$inpoints
]
=
$intitle
;
}
$option
=
''
;
// Save the new option value
foreach
(
$pointstitle
as
$points
=>
$title
)
$option
.=
(
strlen
(
$option
)
?
','
:
''
)
.
$points
.
' '
.
$title
;
qa_set_option
(
'points_to_titles'
,
$option
);
krsort
(
$pointstitle
,
SORT_NUMERIC
);
if
(
empty
(
$errors
))
$option
=
''
;
qa_redirect
(
'admin/users'
);
foreach
(
$pointstitle
as
$points
=>
$title
)
}
$option
.=
(
strlen
(
$option
)
?
','
:
''
)
.
$points
.
' '
.
$title
;
}
qa_set_option
(
'points_to_titles'
,
$option
);
// Prepare content for theme
if
(
empty
(
$errors
))
qa_redirect
(
'admin/users'
);
$qa_content
=
qa_content_prepare
();
}
}
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/users_title'
);
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'fields'
=>
array
(
'title'
=>
array
(
'tags'
=>
'name="title" id="title"'
,
'label'
=>
qa_lang_html
(
'admin/user_title'
),
'value'
=>
qa_html
(
isset
(
$intitle
)
?
$intitle
:
@
$pointstitle
[
$oldpoints
]),
'error'
=>
qa_html
(
@
$errors
[
'title'
]),
),
'delete'
=>
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
'admin/delete_title'
),
'value'
=>
0
,
'type'
=>
'checkbox'
,
),
'points'
=>
array
(
'id'
=>
'points_display'
,
'tags'
=>
'name="points"'
,
'label'
=>
qa_lang_html
(
'admin/points_required'
),
'type'
=>
'number'
,
'value'
=>
qa_html
(
isset
(
$inpoints
)
?
$inpoints
:
@
$oldpoints
),
'error'
=>
qa_html
(
@
$errors
[
'points'
]),
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'label'
=>
qa_lang_html
(
isset
(
$pointstitle
[
$oldpoints
])
?
'main/save_button'
:
(
'admin/add_title_button'
)),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosavetitle'
=>
'1'
,
// for IE
'edit'
=>
@
$oldpoints
,
'code'
=>
qa_get_form_security_code
(
'admin/usertitles'
),
),
);
if
(
isset
(
$pointstitle
[
$oldpoints
]))
{
qa_set_display_rules
(
$qa_content
,
array
(
'points_display'
=>
'!dodelete'
,
));
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
}
$qa_content
[
'focusid'
]
=
'title'
;
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
// Prepare content for theme
$qa_content
=
qa_content_prepare
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/users_title'
);
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'fields'
=>
array
(
'title'
=>
array
(
'tags'
=>
'name="title" id="title"'
,
'label'
=>
qa_lang_html
(
'admin/user_title'
),
'value'
=>
qa_html
(
isset
(
$intitle
)
?
$intitle
:
@
$pointstitle
[
$oldpoints
]),
'error'
=>
qa_html
(
@
$errors
[
'title'
]),
),
'delete'
=>
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
'admin/delete_title'
),
'value'
=>
0
,
'type'
=>
'checkbox'
,
),
'points'
=>
array
(
'id'
=>
'points_display'
,
'tags'
=>
'name="points"'
,
'label'
=>
qa_lang_html
(
'admin/points_required'
),
'type'
=>
'number'
,
'value'
=>
qa_html
(
isset
(
$inpoints
)
?
$inpoints
:
@
$oldpoints
),
'error'
=>
qa_html
(
@
$errors
[
'points'
]),
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'label'
=>
qa_lang_html
(
isset
(
$pointstitle
[
$oldpoints
])
?
'main/save_button'
:
(
'admin/add_title_button'
)),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosavetitle'
=>
'1'
,
// for IE
'edit'
=>
@
$oldpoints
,
'code'
=>
qa_get_form_security_code
(
'admin/usertitles'
),
),
);
if
(
isset
(
$pointstitle
[
$oldpoints
]))
{
qa_set_display_rules
(
$qa_content
,
array
(
'points_display'
=>
'!dodelete'
,
));
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
}
$qa_content
[
'focusid'
]
=
'title'
;
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
return
$qa_content
;
return
$qa_content
;
}
}
qa-
include/pages/admin/admin-w
idgets.php
→
qa-
src/Controllers/Admin/W
idgets.php
View file @
2076b209
...
@@ -3,9 +3,6 @@
...
@@ -3,9 +3,6 @@
Question2Answer by Gideon Greenspan and contributors
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
http://www.question2answer.org/
Description: Controller for admin page for editing widgets
This program is free software; you can redistribute it and/or
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
as published by the Free Software Foundation; either version 2
...
@@ -19,328 +16,344 @@
...
@@ -19,328 +16,344 @@
More about this license: http://www.question2answer.org/license.php
More about this license: http://www.question2answer.org/license.php
*/
*/
if
(
!
defined
(
'QA_VERSION'
))
{
// don't allow this page to be requested directly from browser
namespace
Q2A\Controllers\Admin
;
header
(
'Location: ../../../'
);
exit
;
}
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
use
Q2A\Controllers\BaseController
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
use
Q2A\Database\DbConnection
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
/**
* Controller for admin page for editing widgets.
*/
class
Widgets
extends
BaseController
{
public
function
__construct
(
DbConnection
$db
)
{
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
// Get current list of widgets and determine the state of this admin page
parent
::
__construct
(
$db
);
$widgetid
=
qa_post_text
(
'edit'
);
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
if
(
!
strlen
(
$widgetid
))
}
$widgetid
=
qa_get
(
'edit'
);
list
(
$widgets
,
$pages
)
=
qa_db_select_with_pending
(
public
function
index
()
qa_db_widgets_selectspec
(),
{
qa_db_pages_selectspec
()
// Get current list of widgets and determine the state of this admin page
);
if
(
isset
(
$widgetid
))
{
$widgetid
=
qa_post_text
(
'edit'
);
$editwidget
=
null
;
if
(
!
strlen
(
$widgetid
))
foreach
(
$widgets
as
$widget
)
{
$widgetid
=
qa_get
(
'edit'
);
if
(
$widget
[
'widgetid'
]
==
$widgetid
)
$editwidget
=
$widget
;
}
}
else
{
list
(
$widgets
,
$pages
)
=
qa_db_select_with_pending
(
$editwidget
=
array
(
'title'
=>
qa_post_text
(
'title'
));
qa_db_widgets_selectspec
(),
if
(
!
isset
(
$editwidget
[
'title'
]))
qa_db_pages_selectspec
()
$editwidget
[
'title'
]
=
qa_get
(
'title'
);
);
}
$module
=
qa_load_module
(
'widget'
,
@
$editwidget
[
'title'
]);
if
(
isset
(
$widgetid
))
{
$editwidget
=
null
;
foreach
(
$widgets
as
$widget
)
{
if
(
$widget
[
'widgetid'
]
==
$widgetid
)
$editwidget
=
$widget
;
}
}
else
{
$editwidget
=
array
(
'title'
=>
qa_post_text
(
'title'
));
if
(
!
isset
(
$editwidget
[
'title'
]))
$editwidget
[
'title'
]
=
qa_get
(
'title'
);
}
$widgetfound
=
isset
(
$module
);
$module
=
qa_load_module
(
'widget'
,
@
$editwidget
[
'title'
]
);
$widgetfound
=
isset
(
$module
);
// Check admin privileges (do late to allow one DB query)
if
(
!
qa_admin_check_privileges
(
$qa_content
))
// Check admin privileges (do late to allow one DB query)
return
$qa_content
;
if
(
!
qa_admin_check_privileges
(
$qa_content
))
return
$qa_content
;
// Define an array of relevant templates we can use
$templatelangkeys
=
array
(
// Define an array of relevant templates we can use
'question'
=>
'admin/question_pages'
,
'qa'
=>
'main/recent_qs_as_title'
,
$templatelangkeys
=
array
(
'activity'
=>
'main/recent_activity_title'
,
'question'
=>
'admin/question_pages'
,
'questions'
=>
'admin/question_lists'
,
'hot'
=>
'main/hot_qs_title'
,
'unanswered'
=>
'main/unanswered_qs_title'
,
'tags'
=>
'main/popular_tags'
,
'qa'
=>
'main/recent_qs_as_title'
,
'categories'
=>
'misc/browse_categories'
,
'activity'
=>
'main/recent_activity_title'
,
'users'
=>
'main/highest_users'
,
'questions'
=>
'admin/question_lists'
,
'ask'
=>
'question/ask_title'
,
'hot'
=>
'main/hot_qs_title'
,
'unanswered'
=>
'main/unanswered_qs_title'
,
'tag'
=>
'admin/tag_pages'
,
'tags'
=>
'main/popular_tags'
,
'user'
=>
'admin/user_pages'
,
'categories'
=>
'misc/browse_categories'
,
'message'
=>
'misc/private_message_title'
,
'users'
=>
'main/highest_users'
,
'ask'
=>
'question/ask_title'
,
'search'
=>
'main/search_title'
,
'tag'
=>
'admin/tag_pages'
,
'feedback'
=>
'misc/feedback_title'
,
'user'
=>
'admin/user_pages'
,
'message'
=>
'misc/private_message_title'
,
'login'
=>
'users/login_title'
,
'search'
=>
'main/search_title'
,
'register'
=>
'users/register_title'
,
'feedback'
=>
'misc/feedback_title'
,
'account'
=>
'profile/my_account_title'
,
'favorites'
=>
'misc/my_favorites_title'
,
'updates'
=>
'misc/recent_updates_title'
,
'ip'
=>
'admin/ip_address_pages'
,
'login'
=>
'users/login_title'
,
'admin'
=>
'admin/admin_title'
,
'register'
=>
'users/register_title'
,
);
'account'
=>
'profile/my_account_title'
,
'favorites'
=>
'misc/my_favorites_title'
,
'updates'
=>
'misc/recent_updates_title'
,
$templateoptions
=
array
();
'ip'
=>
'admin/ip_address_pages'
,
'admin'
=>
'admin/admin_title'
,
);
if
(
isset
(
$module
)
&&
method_exists
(
$module
,
'allow_template'
))
{
$templateoptions
=
array
();
foreach
(
$templatelangkeys
as
$template
=>
$langkey
)
{
if
(
$module
->
allow_template
(
$template
))
$templateoptions
[
$template
]
=
qa_lang_html
(
$langkey
);
}
if
(
$module
->
allow_template
(
'custom'
))
{
if
(
isset
(
$module
)
&&
method_exists
(
$module
,
'allow_template'
))
{
$pagemodules
=
qa_load_modules_with
(
'page'
,
'match_request'
);
foreach
(
$templatelangkeys
as
$template
=>
$langkey
)
{
foreach
(
$pages
as
$page
)
{
if
(
$module
->
allow_template
(
$template
))
// check if this is a page plugin by fetching all plugin classes and matching requests - currently quite convoluted!
$templateoptions
[
$template
]
=
qa_lang_html
(
$langkey
);
$isPagePlugin
=
false
;
foreach
(
$pagemodules
as
$pagemodule
)
{
if
(
$pagemodule
->
match_request
(
$page
[
'tags'
]))
{
$isPagePlugin
=
true
;
}
}
}
if
(
$isPagePlugin
||
!
(
$page
[
'flags'
]
&
QA_PAGE_FLAGS_EXTERNAL
))
if
(
$module
->
allow_template
(
'custom'
))
{
$templateoptions
[
'custom-'
.
$page
[
'pageid'
]]
=
qa_html
(
$page
[
'title'
]);
$pagemodules
=
qa_load_modules_with
(
'page'
,
'match_request'
);
foreach
(
$pages
as
$page
)
{
// check if this is a page plugin by fetching all plugin classes and matching requests - currently quite convoluted!
$isPagePlugin
=
false
;
foreach
(
$pagemodules
as
$pagemodule
)
{
if
(
$pagemodule
->
match_request
(
$page
[
'tags'
]))
{
$isPagePlugin
=
true
;
}
}
if
(
$isPagePlugin
||
!
(
$page
[
'flags'
]
&
QA_PAGE_FLAGS_EXTERNAL
))
$templateoptions
[
'custom-'
.
$page
[
'pageid'
]]
=
qa_html
(
$page
[
'title'
]);
}
}
}
}
}
}
// Process saving an old or new widget
// Process saving an old or new widget
$securityexpired
=
false
;
$securityexpired
=
false
;
if
(
qa_clicked
(
'docancel'
))
qa_redirect
(
'admin/layout'
);
if
(
qa_clicked
(
'docancel'
))
elseif
(
qa_clicked
(
'dosavewidget'
))
{
qa_redirect
(
'admin/layout'
)
;
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
elseif
(
qa_clicked
(
'dosavewidget'
))
{
if
(
!
qa_check_form_security_code
(
'admin/widgets'
,
qa_post_text
(
'code'
)))
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
$securityexpired
=
true
;
if
(
!
qa_check_form_security_code
(
'admin/widgets'
,
qa_post_text
(
'code'
)))
else
{
$securityexpired
=
true
;
if
(
qa_post_text
(
'dodelete'
))
{
qa_db_widget_delete
(
$editwidget
[
'widgetid'
]);
qa_redirect
(
'admin/layout'
);
else
{
}
else
{
if
(
qa_post_text
(
'dodelete'
))
{
if
(
$widgetfound
)
{
qa_db_widget_delete
(
$editwidget
[
'widgetid'
]);
$intitle
=
qa_post_text
(
'title'
);
qa_redirect
(
'admin/layout'
);
$inposition
=
qa_post_text
(
'position'
);
$intemplates
=
array
();
}
else
{
if
(
qa_post_text
(
'template_all'
))
if
(
$widgetfound
)
{
$intemplates
[]
=
'all'
;
$intitle
=
qa_post_text
(
'title'
);
$inposition
=
qa_post_text
(
'position'
);
$intemplates
=
array
();
if
(
qa_post_text
(
'template_all'
))
foreach
(
array_keys
(
$templateoptions
)
as
$template
)
{
$intemplates
[]
=
'all'
;
if
(
qa_post_text
(
'template_'
.
$template
))
$intemplates
[]
=
$template
;
}
foreach
(
array_keys
(
$templateoptions
)
as
$template
)
{
$intags
=
implode
(
','
,
$intemplates
);
if
(
qa_post_text
(
'template_'
.
$template
))
$intemplates
[]
=
$template
;
}
$intags
=
implode
(
','
,
$intemplates
);
// Perform appropriate database action
// Perform appropriate database action
if
(
isset
(
$editwidget
[
'widgetid'
]))
{
// changing existing widget
$widgetid
=
$editwidget
[
'widgetid'
];
qa_db_widget_set_fields
(
$widgetid
,
$intags
);
if
(
isset
(
$editwidget
[
'widgetid'
]))
{
// changing existing widget
}
else
$widgetid
=
$editwidget
[
'widgetid'
];
$widgetid
=
qa_db_widget_create
(
$intitle
,
$intags
);
qa_db_widget_set_fields
(
$widgetid
,
$intags
);
}
else
qa_db_widget_move
(
$widgetid
,
substr
(
$inposition
,
0
,
2
),
substr
(
$inposition
,
2
));
$widgetid
=
qa_db_widget_create
(
$intitle
,
$intags
);
}
qa_db_widget_move
(
$widgetid
,
substr
(
$inposition
,
0
,
2
),
substr
(
$inposition
,
2
));
qa_redirect
(
'admin/layout'
);
}
}
}
qa_redirect
(
'admin/layout'
);
}
}
}
}
// Prepare content for theme
// Prepare content for theme
$qa_content
=
qa_content_prepare
();
$qa_content
=
qa_content_prepare
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/layout_title'
);
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/admin_title'
)
.
' - '
.
qa_lang_html
(
'admin/layout_title'
);
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
$positionoptions
=
array
();
$positionoptions
=
array
();
$placeoptionhtml
=
qa_admin_place_options
();
$placeoptionhtml
=
qa_admin_place_options
();
$regioncodes
=
array
(
$regioncodes
=
array
(
'F'
=>
'full'
,
'F'
=>
'full'
,
'M'
=>
'main'
,
'M'
=>
'main'
,
'S'
=>
'side'
,
'S'
=>
'side'
,
);
);
foreach
(
$placeoptionhtml
as
$place
=>
$optionhtml
)
{
foreach
(
$placeoptionhtml
as
$place
=>
$optionhtml
)
{
$region
=
$regioncodes
[
substr
(
$place
,
0
,
1
)];
$region
=
$regioncodes
[
substr
(
$place
,
0
,
1
)];
$widgetallowed
=
method_exists
(
$module
,
'allow_region'
)
&&
$module
->
allow_region
(
$region
);
$widgetallowed
=
method_exists
(
$module
,
'allow_region'
)
&&
$module
->
allow_region
(
$region
);
if
(
$widgetallowed
)
{
if
(
$widgetallowed
)
{
foreach
(
$widgets
as
$widget
)
{
foreach
(
$widgets
as
$widget
)
{
if
(
$widget
[
'place'
]
==
$place
&&
$widget
[
'title'
]
==
$editwidget
[
'title'
]
&&
$widget
[
'widgetid'
]
!==
@
$editwidget
[
'widgetid'
])
if
(
$widget
[
'place'
]
==
$place
&&
$widget
[
'title'
]
==
$editwidget
[
'title'
]
&&
$widget
[
'widgetid'
]
!==
@
$editwidget
[
'widgetid'
])
$widgetallowed
=
false
;
// don't allow two instances of same widget in same place
$widgetallowed
=
false
;
// don't allow two instances of same widget in same place
}
}
}
}
if
(
$widgetallowed
)
{
if
(
$widgetallowed
)
{
$previous
=
null
;
$previous
=
null
;
$passedself
=
false
;
$passedself
=
false
;
$maxposition
=
0
;
$maxposition
=
0
;
foreach
(
$widgets
as
$widget
)
{
foreach
(
$widgets
as
$widget
)
{
if
(
$widget
[
'place'
]
==
$place
)
{
if
(
$widget
[
'place'
]
==
$place
)
{
$positionhtml
=
$optionhtml
;
$positionhtml
=
$optionhtml
;
if
(
isset
(
$previous
))
if
(
isset
(
$previous
))
$positionhtml
.=
' - '
.
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
$passedself
?
$widget
[
'title'
]
:
$previous
[
'title'
]));
$positionhtml
.=
' - '
.
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
$passedself
?
$widget
[
'title'
]
:
$previous
[
'title'
]));
if
(
$widget
[
'widgetid'
]
==
@
$editwidget
[
'widgetid'
])
if
(
$widget
[
'widgetid'
]
==
@
$editwidget
[
'widgetid'
])
$passedself
=
true
;
$passedself
=
true
;
$maxposition
=
max
(
$maxposition
,
$widget
[
'position'
]);
$maxposition
=
max
(
$maxposition
,
$widget
[
'position'
]);
$positionoptions
[
$place
.
$widget
[
'position'
]]
=
$positionhtml
;
$positionoptions
[
$place
.
$widget
[
'position'
]]
=
$positionhtml
;
$previous
=
$widget
;
$previous
=
$widget
;
}
}
}
}
if
(
!
isset
(
$editwidget
[
'widgetid'
])
||
$place
!=
@
$editwidget
[
'place'
])
{
if
(
!
isset
(
$editwidget
[
'widgetid'
])
||
$place
!=
@
$editwidget
[
'place'
])
{
$positionhtml
=
$optionhtml
;
$positionhtml
=
$optionhtml
;
if
(
isset
(
$previous
))
if
(
isset
(
$previous
))
$positionhtml
.=
' - '
.
qa_lang_html_sub
(
'admin/after_x'
,
$previous
[
'title'
]);
$positionhtml
.=
' - '
.
qa_lang_html_sub
(
'admin/after_x'
,
$previous
[
'title'
]);
$positionoptions
[
$place
.
(
isset
(
$previous
)
?
(
1
+
$maxposition
)
:
1
)]
=
$positionhtml
;
$positionoptions
[
$place
.
(
isset
(
$previous
)
?
(
1
+
$maxposition
)
:
1
)]
=
$positionhtml
;
}
}
}
}
}
}
$positionvalue
=
@
$positionoptions
[
$editwidget
[
'place'
]
.
$editwidget
[
'position'
]];
$positionvalue
=
@
$positionoptions
[
$editwidget
[
'place'
]
.
$editwidget
[
'position'
]];
$qa_content
[
'form'
]
=
array
(
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'style'
=>
'tall'
,
'fields'
=>
array
(
'fields'
=>
array
(
'title'
=>
array
(
'title'
=>
array
(
'label'
=>
qa_lang_html
(
'admin/widget_name'
)
.
' '
.
qa_html
(
$editwidget
[
'title'
]),
'label'
=>
qa_lang_html
(
'admin/widget_name'
)
.
' '
.
qa_html
(
$editwidget
[
'title'
]),
'type'
=>
'static'
,
'type'
=>
'static'
,
'tight'
=>
true
,
'tight'
=>
true
,
),
),
'position'
=>
array
(
'position'
=>
array
(
'id'
=>
'position_display'
,
'id'
=>
'position_display'
,
'tags'
=>
'name="position"'
,
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'label'
=>
qa_lang_html
(
'admin/position'
),
'type'
=>
'select'
,
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
'value'
=>
$positionvalue
,
),
),
'delete'
=>
array
(
'delete'
=>
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
'admin/delete_widget_position'
),
'label'
=>
qa_lang_html
(
'admin/delete_widget_position'
),
'value'
=>
0
,
'value'
=>
0
,
'type'
=>
'checkbox'
,
'type'
=>
'checkbox'
,
),
),
'all'
=>
array
(
'all'
=>
array
(
'id'
=>
'all_display'
,
'id'
=>
'all_display'
,
'label'
=>
qa_lang_html
(
'admin/widget_all_pages'
),
'label'
=>
qa_lang_html
(
'admin/widget_all_pages'
),
'type'
=>
'checkbox'
,
'type'
=>
'checkbox'
,
'tags'
=>
'name="template_all" id="template_all"'
,
'tags'
=>
'name="template_all" id="template_all"'
,
'value'
=>
is_numeric
(
strpos
(
','
.
@
$editwidget
[
'tags'
]
.
','
,
',all,'
)),
'value'
=>
is_numeric
(
strpos
(
','
.
@
$editwidget
[
'tags'
]
.
','
,
',all,'
)),
),
),
'templates'
=>
array
(
'templates'
=>
array
(
'id'
=>
'templates_display'
,
'id'
=>
'templates_display'
,
'label'
=>
qa_lang_html
(
'admin/widget_pages_explanation'
),
'label'
=>
qa_lang_html
(
'admin/widget_pages_explanation'
),
'type'
=>
'custom'
,
'type'
=>
'custom'
,
'html'
=>
''
,
'html'
=>
''
,
),
),
),
),
'buttons'
=>
array
(
'buttons'
=>
array
(
'save'
=>
array
(
'save'
=>
array
(
'label'
=>
qa_lang_html
(
isset
(
$editwidget
[
'widgetid'
])
?
'main/save_button'
:
(
'admin/add_widget_button'
)),
'label'
=>
qa_lang_html
(
isset
(
$editwidget
[
'widgetid'
])
?
'main/save_button'
:
(
'admin/add_widget_button'
)),
),
),
'cancel'
=>
array
(
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
),
),
'hidden'
=>
array
(
'hidden'
=>
array
(
'dosavewidget'
=>
'1'
,
// for IE
'dosavewidget'
=>
'1'
,
// for IE
'edit'
=>
@
$editwidget
[
'widgetid'
],
'edit'
=>
@
$editwidget
[
'widgetid'
],
'title'
=>
@
$editwidget
[
'title'
],
'title'
=>
@
$editwidget
[
'title'
],
'code'
=>
qa_get_form_security_code
(
'admin/widgets'
),
'code'
=>
qa_get_form_security_code
(
'admin/widgets'
),
),
),
);
);
foreach
(
$templateoptions
as
$template
=>
$optionhtml
)
{
foreach
(
$templateoptions
as
$template
=>
$optionhtml
)
{
$qa_content
[
'form'
][
'fields'
][
'templates'
][
'html'
]
.=
$qa_content
[
'form'
][
'fields'
][
'templates'
][
'html'
]
.=
'<input type="checkbox" name="template_'
.
qa_html
(
$template
)
.
'"'
.
'<input type="checkbox" name="template_'
.
qa_html
(
$template
)
.
'"'
.
(
is_numeric
(
strpos
(
','
.
@
$editwidget
[
'tags'
]
.
','
,
','
.
$template
.
','
))
?
' checked'
:
''
)
.
(
is_numeric
(
strpos
(
','
.
@
$editwidget
[
'tags'
]
.
','
,
','
.
$template
.
','
))
?
' checked'
:
''
)
.
'/> '
.
$optionhtml
.
'<br/>'
;
'/> '
.
$optionhtml
.
'<br/>'
;
}
}
if
(
isset
(
$editwidget
[
'widgetid'
]))
{
if
(
isset
(
$editwidget
[
'widgetid'
]))
{
qa_set_display_rules
(
$qa_content
,
array
(
qa_set_display_rules
(
$qa_content
,
array
(
'templates_display'
=>
'!(dodelete||template_all)'
,
'templates_display'
=>
'!(dodelete||template_all)'
,
'all_display'
=>
'!dodelete'
,
'all_display'
=>
'!dodelete'
,
));
));
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
qa_set_display_rules
(
$qa_content
,
array
(
'templates_display'
=>
'!template_all'
,
));
}
if
(
!
$widgetfound
)
{
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'title'
][
'tight'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
$qa_content
[
'form'
][
'fields'
][
'title'
][
'error'
]
=
qa_lang_html
(
'admin/widget_not_available'
);
qa_set_display_rules
(
$qa_content
,
array
(
unset
(
$qa_content
[
'form'
][
'fields'
][
'position'
]);
'templates_display'
=>
'!template_all'
,
unset
(
$qa_content
[
'form'
][
'fields'
][
'all'
]);
));
unset
(
$qa_content
[
'form'
][
'fields'
][
'templates'
]);
}
if
(
!
isset
(
$editwidget
[
'widgetid'
]))
unset
(
$qa_content
[
'form'
][
'buttons'
][
'save'
]);
if
(
!
$widgetfound
)
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'title'
][
'tight'
]);
}
elseif
(
!
count
(
$positionoptions
))
{
$qa_content
[
'form'
][
'fields'
][
'title'
][
'error'
]
=
qa_lang_html
(
'admin/widget_not_available'
);
unset
(
$qa_content
[
'form'
][
'fields'
][
'title'
][
'tight'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'position'
]);
$qa_content
[
'form'
][
'fields'
][
'title'
][
'error'
]
=
qa_lang_html
(
'admin/widget_no_positions'
);
unset
(
$qa_content
[
'form'
][
'fields'
][
'all'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'position'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'templates'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'all'
]);
if
(
!
isset
(
$editwidget
[
'widgetid'
]))
unset
(
$qa_content
[
'form'
][
'fields'
][
'templates'
]);
unset
(
$qa_content
[
'form'
][
'buttons'
][
'save'
]);
unset
(
$qa_content
[
'form'
][
'buttons'
][
'save'
]);
}
}
elseif
(
!
count
(
$positionoptions
))
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'title'
][
'tight'
]);
$qa_content
[
'form'
][
'fields'
][
'title'
][
'error'
]
=
qa_lang_html
(
'admin/widget_no_positions'
);
unset
(
$qa_content
[
'form'
][
'fields'
][
'position'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'all'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'templates'
]);
unset
(
$qa_content
[
'form'
][
'buttons'
][
'save'
]);
}
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
return
$qa_content
;
return
$qa_content
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment