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)
$router
->
addRoute
(
'GET'
,
'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
(
'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()
'account'
=>
'pages/account.php'
,
'activity/'
=>
'pages/activity.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/userfields'
=>
'pages/admin/admin-userfields.php'
,
'admin/usertitles'
=>
'pages/admin/admin-usertitles.php'
,
'answers/'
=>
'pages/answers.php'
,
'ask'
=>
'pages/ask.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 @@
Question2Answer by Gideon Greenspan and contributors
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
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
...
...
@@ -19,118 +16,132 @@
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
header
(
'Location: ../../../'
);
exit
;
}
namespace
Q2A\Controllers\Admin
;
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
use
Q2A\Controllers\BaseController
;
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
)
qa_fatal_error
(
'User accounts are handled by external code'
);
// Check we're not using single-sign on integration
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'
));
$userfields
=
qa_db_select_with_pending
(
qa_db_userfields_selectspec
());
$users
=
qa_db_get_unapproved_users
(
qa_opt
(
'page_size_users'
));
$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
)
{
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
return
$qa_content
;
}
if
(
qa_get_logged_in_level
()
<
QA_USER_LEVEL_MODERATOR
)
{
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
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
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/recent_users_title'
);
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'message_list'
]
=
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
$qa_content
[
'message_list'
]
=
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
'messages'
=>
array
(),
);
'messages'
=>
array
(),
);
if
(
count
(
$users
))
{
foreach
(
$users
as
$user
)
{
$message
=
array
();
if
(
count
(
$users
))
{
foreach
(
$users
as
$user
)
{
$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'
)
.
' '
.
strtr
(
qa_lang_html
(
'users/x_ago_from_y'
),
array
(
'^1'
=>
qa_time_to_string
(
qa_opt
(
'db_time'
)
-
$user
[
'created'
]),
'^2'
=>
qa_ip_anchor_html
(
@
inet_ntop
(
$user
[
'createip'
])),
))
.
'<br/>'
;
$message
[
'content'
]
=
qa_lang_html
(
'users/registered_label'
)
.
' '
.
strtr
(
qa_lang_html
(
'users/x_ago_from_y'
),
array
(
'^1'
=>
qa_time_to_string
(
qa_opt
(
'db_time'
)
-
$user
[
'created'
]),
'^2'
=>
qa_ip_anchor_html
(
@
inet_ntop
(
$user
[
'createip'
])),
))
.
'<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'
))
{
$message
[
'content'
]
.=
'<small> - '
.
qa_lang_html
((
$user
[
'flags'
]
&
QA_USER_FLAGS_EMAIL_CONFIRMED
)
?
'users/email_confirmed'
:
'users/email_not_confirmed'
)
.
'</small>'
;
}
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>'
;
}
foreach
(
$userfields
as
$userfield
)
{
if
(
strlen
(
@
$user
[
'profile'
][
$userfield
[
'title'
]]))
$message
[
'content'
]
.=
'<br/>'
.
qa_html
(
$userfield
[
'content'
]
.
': '
.
$user
[
'profile'
][
$userfield
[
'title'
]]);
}
foreach
(
$userfields
as
$userfield
)
{
if
(
strlen
(
@
$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
[
'who'
][
'data'
]
=
qa_get_one_user_html
(
$user
[
'handle'
]);
$message
[
'meta_order'
]
=
qa_lang_html
(
'main/meta_order'
);
$message
[
'who'
][
'data'
]
=
qa_get_one_user_html
(
$user
[
'handle'
]);
$message
[
'form'
]
=
array
(
'style'
=>
'light'
,
$message
[
'form'
]
=
array
(
'style'
=>
'light'
,
'buttons'
=>
array
(
'approve'
=>
array
(
'tags'
=>
'name="admin_'
.
$user
[
'userid'
]
.
'_userapprove" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/approve_button'
),
'popup'
=>
qa_lang_html
(
'admin/approve_user_popup'
),
),
'buttons'
=>
array
(
'approve'
=>
array
(
'tags'
=>
'name="admin_'
.
$user
[
'userid'
]
.
'_userapprove" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/approve_button'
),
'popup'
=>
qa_lang_html
(
'admin/approve_user_popup'
),
),
'block'
=>
array
(
'tags'
=>
'name="admin_'
.
$user
[
'userid'
]
.
'_userblock" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'admin/block_button'
),
'popup'
=>
qa_lang_html
(
'admin/block_user_popup'
),
),
),
);
'block'
=>
array
(
'tags'
=>
'name="admin_'
.
$user
[
'userid'
]
.
'_userblock" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'admin/block_button'
),
'popup'
=>
qa_lang_html
(
'admin/block_user_popup'
),
),
),
);
$qa_content
[
'message_list'
][
'messages'
][]
=
$message
;
}
$qa_content
[
'message_list'
][
'messages'
][]
=
$message
;
}
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_unapproved_found'
);
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_unapproved_found'
);
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$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 @@
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
Description: Controller for admin page for editing categories
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
...
...
@@ -19,631 +16,647 @@
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
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'
);
namespace
Q2A\Controllers\Admin
;
$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
))
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
);
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
}
}
$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
;
foreach
(
$categories
as
$category
)
{
if
(
!
strcmp
(
$category
[
'parentid'
],
$editcategoryid
))
$hassubcategory
=
true
;
}
$categories
=
qa_db_select_with_pending
(
qa_db_category_nav_selectspec
(
$editcategoryid
,
true
,
false
,
true
));
// Process saving options
// Check admin privileges (do late to allow one DB query)
$savedoptions
=
false
;
$securityexpired
=
false
;
if
(
!
qa_admin_check_privileges
(
$qa_content
))
return
$qa_content
;
if
(
qa_clicked
(
'dosaveoptions'
))
{
if
(
!
qa_check_form_security_code
(
'admin/categories'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
else
{
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
;
}
}
// Work out the appropriate state for the page
$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'
))
{
if
(
$setmissing
||
$setparent
)
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'
]));
}
else
{
if
(
qa_clicked
(
'doaddcategory'
))
$editcategory
=
array
();
}
elseif
(
qa_clicked
(
'dosetmissing'
))
{
if
(
!
qa_check_form_security_code
(
'admin/categories'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
elseif
(
qa_clicked
(
'dosavecategory'
))
{
$parentid
=
qa_post_text
(
'parent'
);
$editcategory
=
array
(
'parentid'
=>
strlen
(
$parentid
)
?
$parentid
:
null
);
}
}
else
{
$inreassign
=
qa_get_category_field_value
(
'reassign'
);
qa_db_category_reassign
(
$editcategory
[
'categoryid'
],
$inreassign
);
qa_redirect
(
qa_request
(),
array
(
'recalc'
=>
1
,
'edit'
=>
$editcategory
[
'categoryid'
]));
}
$setmissing
=
qa_post_text
(
'missing'
)
||
qa_get
(
'missing'
);
}
elseif
(
qa_clicked
(
'dosavecategory'
))
{
if
(
!
qa_check_form_security_code
(
'admin/categories'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
$setparent
=
!
$setmissing
&&
(
qa_post_text
(
'setparent'
)
||
qa_get
(
'setparent'
))
&&
isset
(
$editcategory
[
'categoryid'
]);
elseif
(
qa_post_text
(
'dodelete'
))
{
if
(
!
$hassubcategory
)
{
$inreassign
=
qa_get_category_field_value
(
'reassign'
);
qa_db_category_reassign
(
$editcategory
[
'categoryid'
],
$inreassign
);
qa_db_category_delete
(
$editcategory
[
'categoryid'
]);
qa_redirect
(
qa_request
(),
array
(
'recalc'
=>
1
,
'edit'
=>
$editcategory
[
'parentid'
]));
$hassubcategory
=
false
;
foreach
(
$categories
as
$category
)
{
if
(
!
strcmp
(
$category
[
'parentid'
],
$editcategoryid
))
$hassubcategory
=
true
;
}
}
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
))
$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'
);
}
else
{
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
;
}
}
// Verify the slug is legitimate for that parent ID
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
;
// Process saving an old or new category
case
1
:
$inslug
=
qa_lang_sub
(
'admin/category_default_slug'
,
$inslug
);
break
;
if
(
qa_clicked
(
'docancel'
))
{
if
(
$setmissing
||
$setparent
)
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
:
$inslug
=
qa_lang_sub
(
'admin/category_default_slug'
,
$attempt
-
1
);
break
;
else
{
$inreassign
=
qa_get_category_field_value
(
'reassign'
);
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
))
$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'
]);
elseif
(
qa_post_text
(
'dodelete'
))
{
if
(
!
$hassubcategory
)
{
$inreassign
=
qa_get_category_field_value
(
'reassign'
);
qa_db_category_reassign
(
$editcategory
[
'categoryid'
],
$inreassign
);
qa_db_category_delete
(
$editcategory
[
'categoryid'
]);
qa_redirect
(
qa_request
(),
array
(
'recalc'
=>
1
,
'edit'
=>
$editcategory
[
'parentid'
]));
}
if
(
isset
(
$editcategory
[
'categoryid'
])
||
!
isset
(
$errors
[
'slug'
]))
// don't try other options if editing existing category
break
;
}
}
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
$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
))
{
require_once
QA_INCLUDE_DIR
.
'app/cookies.php'
;
if
(
isset
(
$editcategory
[
'categoryid'
]))
{
// changing existing category
qa_db_category_rename
(
$editcategory
[
'categoryid'
],
$inname
,
$inslug
);
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
;
$recalc
=
false
;
case
1
:
$inslug
=
qa_lang_sub
(
'admin/category_default_slug'
,
$inslug
);
break
;
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'
];
default
:
$inslug
=
qa_lang_sub
(
'admin/category_default_slug'
,
$attempt
-
1
);
break
;
}
$matchcategoryid
=
qa_db_category_slug_to_id
(
$inparentid
,
$inslug
);
// query against DB since MySQL ignores accents, etc...
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
(
'categoryid'
=>
$editcategory
[
'categoryid'
],
'parentid'
=>
isset
(
$inparentid
)
?
$inparentid
:
null
,
'content'
=>
isset
(
$incontent
)
?
$incontent
:
null
,
'position'
=>
isset
(
$inposition
)
?
$inposition
:
null
,
'name'
=>
$inname
,
'slug'
=>
$inslug
,
));
// Perform appropriate database action
if
(
empty
(
$errors
))
{
require_once
QA_INCLUDE_DIR
.
'app/cookies.php'
;
if
(
isset
(
$editcategory
[
'categoryid'
]))
{
// changing existing category
qa_db_category_rename
(
$editcategory
[
'categoryid'
],
$inname
,
$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
$categoryid
=
qa_db_category_create
(
$inparentid
,
$inname
,
$inslug
);
// Prepare content for theme
qa_db_category_set_content
(
$categoryid
,
$incontent
);
$qa_content
=
qa_content_prepare
(
);
if
(
isset
(
$inposition
))
qa_db_category_set_position
(
$categoryid
,
$inposition
);
$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
(
);
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
,
));
if
(
$setmissing
)
{
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
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
$qa_content
=
qa_content_prepare
();
$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'
]);
'buttons'
=>
array
(
'save'
=>
array
(
'tags'
=>
'id="dosaveoptions"'
,
// just used for qa_recalc_click()
'label'
=>
qa_lang_html
(
'main/save_button'
),
),
}
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'
,
);
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
$qa_content
[
'form'
][
'fields'
][
'reassign'
]
=
array
(
'id'
=>
'reassign_display'
,
'tags'
=>
'name="reassign"'
,
'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
[
'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
(
'position_display'
=>
'!dodelete'
,
'slug_display'
=>
'!dodelete'
,
'content_display'
=>
'!dodelete'
,
'parent_display'
=>
'!dodelete'
,
'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
)
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'reassign'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'questions'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'content'
]);
if
(
!
$setparent
)
{
$pathhtml
=
qa_category_path_html
(
$categories
,
@
$editcategory
[
'parentid'
]);
$qa_content
[
'form'
][
'fields'
][
'parent'
]
=
array
(
'label'
=>
qa_lang_html
(
'admin/category_parent'
),
);
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'
)),
);
$childdepth
=
qa_db_category_child_depth
(
$editcategory
[
'categoryid'
]);
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'value'
]
=
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'edit'
=>
@
$editcategory
[
'parentid'
]))
.
'">'
.
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'value'
]
.
'</a>'
;
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'
])
;
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>'
;
}
}
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'options'
][
''
]
=
qa_lang_html
(
'admin/category_top_level'
);
$positionoptions
=
array
(
);
@
$qa_content
[
'form'
][
'fields'
][
'parent'
][
'note'
]
.=
qa_lang_html_sub
(
'admin/category_max_depth_x'
,
QA_CATEGORY_DEPTH
);
$previous
=
null
;
$passedself
=
false
;
}
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
{
$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
)
{
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'
);
$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>'
,
));
}
}
$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'
]))
$passedself
=
true
;
}
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'
]);
$
previous
=
$category
;
$
qa_content
[
'focusid'
]
=
'name'
;
}
}
if
(
isset
(
$editcategory
[
'position'
]))
$positionvalue
=
$positionoptions
[
$editcategory
[
'position'
]];
if
(
!
$setparent
)
{
$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
{
$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
;
}
$positionoptions
=
array
();
$qa_content
[
'form'
][
'fields'
][
'position'
]
=
array
(
'id'
=>
'position_display'
,
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
);
$previous
=
null
;
$passedself
=
false
;
if
(
isset
(
$editcategory
[
'categoryid'
]))
{
$catdepth
=
count
(
qa_category_path
(
$categories
,
$editcategory
[
'categoryid'
]));
foreach
(
$categories
as
$key
=>
$category
)
{
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
)
{
$childrenhtml
=
''
;
$positionoptions
[
$category
[
'position'
]]
=
$positionhtml
;
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
(
!
strcmp
(
$category
[
'categoryid'
],
@
$editcategory
[
'categoryid'
]))
$passedself
=
true
;
$previous
=
$category
;
}
}
if
(
!
strlen
(
$childrenhtml
))
$
childrenhtml
=
qa_lang_html
(
'admin/category_no_subs'
)
;
if
(
isset
(
$editcategory
[
'position'
]
))
$
positionvalue
=
$positionoptions
[
$editcategory
[
'position'
]]
;
$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>'
;
else
{
$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
(
'id'
=>
'children_display'
,
'label'
=>
qa_lang_html
(
'admin/category_subs'
),
'type'
=>
'static'
,
'value'
=>
$childrenhtml
,
$qa_content
[
'form'
][
'fields'
][
'position'
]
=
array
(
'id'
=>
'position_display'
,
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'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
(
'intro'
=>
array
(
'label'
=>
qa_lang_html
(
'admin/categories_introduction'
),
'type'
=>
'static'
,
),
),
$navcategoryhtml
=
''
;
'buttons'
=>
array
(
'save'
=>
array
(
'tags'
=>
'name="dosaveoptions" id="dosaveoptions"'
,
'label'
=>
qa_lang_html
(
'main/save_button'
),
),
foreach
(
$categories
as
$category
)
{
if
(
!
isset
(
$category
[
'parentid'
]))
{
$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
(
'label'
=>
qa_lang_html
(
'admin/top_level_categories'
),
'type'
=>
'static'
,
'value'
=>
$navcategoryhtml
,
);
'add'
=>
array
(
'tags'
=>
'name="doaddcategory"'
,
'label'
=>
qa_lang_html
(
'admin/add_category_button'
),
),
),
$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'
),
);
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/categories'
),
),
);
if
(
!
qa_opt
(
'allow_no_category'
))
{
$nocatcount
=
qa_db_count_categoryid_qs
(
null
);
if
(
count
(
$categories
))
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'intro'
]);
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>'
,
));
}
}
$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
)
{
if
(
!
isset
(
$category
[
'parentid'
]))
{
$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/>'
;
}
}
else
unset
(
$qa_content
[
'form'
][
'buttons'
][
'save'
]);
}
$qa_content
[
'form'
][
'fields'
][
'nav'
]
=
array
(
'label'
=>
qa_lang_html
(
'admin/top_level_categories'
),
'type'
=>
'static'
,
'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>'
,
));
}
}
if
(
qa_get
(
'recalc'
))
{
$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
[
'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'
),
);
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
$qa_content
[
'script_var'
][
'qa_warning_recalc'
]
=
qa_lang
(
'admin/stop_recalc_warning'
);
}
else
unset
(
$qa_content
[
'form'
][
'buttons'
][
'save'
]);
}
$qa_content
[
'script_onloads'
][]
=
array
(
"qa_recalc_click('dorecalccategories', document.getElementById('dosaveoptions'), null, 'recalc_ok');"
);
}
if
(
qa_get
(
'recalc'
))
{
$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
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$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
(
"qa_recalc_click('dorecalccategories', document.getElementById('dosaveoptions'), null, 'recalc_ok');"
);
return
$qa_content
;
}
}
$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 @@
Question2Answer by Gideon Greenspan and contributors
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
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
...
...
@@ -19,119 +16,133 @@
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
header
(
'Location: ../../../'
);
exit
;
}
namespace
Q2A\Controllers\Admin
;
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
require_once
QA_INCLUDE_DIR
.
'app/format.php'
;
use
Q2A\Controllers\BaseController
;
use
Q2A\Database\DbConnection
;
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
(
qa_db_flagged_post_qs_selectspec
(
$userid
,
0
,
true
)
);
$questions
=
qa_db_select_with_pending
(
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'
))
{
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
return
$qa_content
;
}
if
(
qa_user_maximum_permit_error
(
'permit_hide_show'
))
{
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
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
foreach
(
$questions
as
$index
=>
$question
)
{
if
(
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
))
{
unset
(
$questions
[
$index
]);
if
(
qa_user_permit_error
(
'permit_hide_show'
))
{
// if user not allowed to show/hide all posts
foreach
(
$questions
as
$index
=>
$question
)
{
if
(
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
))
{
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
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/most_flagged_title'
);
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'q_list'
]
=
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
$qa_content
[
'q_list'
]
=
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
'qs'
=>
array
(),
);
'qs'
=>
array
(),
);
if
(
count
(
$questions
))
{
foreach
(
$questions
as
$question
)
{
$postid
=
qa_html
(
isset
(
$question
[
'opostid'
])
?
$question
[
'opostid'
]
:
$question
[
'postid'
]);
$elementid
=
'p'
.
$postid
;
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'
]
=
(
$question
[
'obasetype'
]
==
'Q'
);
$htmloptions
[
'answersview'
]
=
false
;
$htmloptions
[
'viewsview'
]
=
false
;
$htmloptions
[
'contentview'
]
=
true
;
$htmloptions
[
'flagsview'
]
=
true
;
$htmloptions
[
'elementid'
]
=
$elementid
;
$htmloptions
=
qa_post_html_options
(
$question
);
$htmloptions
[
'voteview'
]
=
false
;
$htmloptions
[
'tagsview'
]
=
(
$question
[
'obasetype'
]
==
'Q'
);
$htmloptions
[
'answersview'
]
=
false
;
$htmloptions
[
'viewsview'
]
=
false
;
$htmloptions
[
'contentview'
]
=
true
;
$htmloptions
[
'flagsview'
]
=
true
;
$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
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
if
(
isset
(
$htmlfields
[
'what_url'
]))
// link directly to relevant content
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
$htmlfields
[
'form'
]
=
array
(
'style'
=>
'light'
,
$htmlfields
[
'form'
]
=
array
(
'style'
=>
'light'
,
'buttons'
=>
array
(
'clearflags'
=>
array
(
'tags'
=>
'name="admin_'
.
$postid
.
'_clearflags" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/clear_flags_button'
),
),
'buttons'
=>
array
(
'clearflags'
=>
array
(
'tags'
=>
'name="admin_'
.
$postid
.
'_clearflags" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/clear_flags_button'
),
),
'hide'
=>
array
(
'tags'
=>
'name="admin_'
.
$postid
.
'_hide" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/hide_button'
),
),
),
);
'hide'
=>
array
(
'tags'
=>
'name="admin_'
.
$postid
.
'_hide" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/hide_button'
),
),
),
);
$qa_content
[
'q_list'
][
'qs'
][]
=
$htmlfields
;
}
$qa_content
[
'q_list'
][
'qs'
][]
=
$htmlfields
;
}
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_flagged_found'
);
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_flagged_found'
);
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$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 @@
Question2Answer by Gideon Greenspan and contributors
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
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
...
...
@@ -19,153 +16,167 @@
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
header
(
'Location: ../../../'
);
exit
;
}
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'
;
namespace
Q2A\Controllers\Admin
;
use
Q2A\Controllers\BaseController
;
use
Q2A\Database\DbConnection
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
/**
* Controller for admin page showing hidden questions, answers and comments.
*/
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
(
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_c_qs_selectspec
(
$userid
,
0
,
null
,
null
,
'C_HIDDEN'
,
true
)
);
list
(
$hiddenquestions
,
$hiddenanswers
,
$hiddencomments
)
=
qa_db_select_with_pending
(
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_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'
))
{
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
return
$qa_content
;
}
if
(
qa_user_maximum_permit_error
(
'permit_hide_show'
)
&&
qa_user_maximum_permit_error
(
'permit_delete_hidden'
))
{
$qa_content
=
qa_content_prepare
();
$qa_content
[
'error'
]
=
qa_lang_html
(
'users/no_permission'
);
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
foreach
(
$questions
as
$index
=>
$question
)
{
if
(
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
)
&&
qa_user_post_permit_error
(
'permit_delete_hidden'
,
$question
))
{
unset
(
$questions
[
$index
]);
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
)
{
if
(
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
)
&&
qa_user_post_permit_error
(
'permit_delete_hidden'
,
$question
))
{
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
();
foreach
(
$questions
as
$key
=>
$question
)
$qhiddenpostid
[
$key
]
=
isset
(
$question
[
'opostid'
])
?
$question
[
'opostid'
]
:
$question
[
'postid'
];
$qhiddenpostid
=
array
();
foreach
(
$questions
as
$key
=>
$question
)
$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
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/recent_hidden_title'
);
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$qa_content
[
'q_list'
]
=
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
$qa_content
[
'q_list'
]
=
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
'qs'
=>
array
(),
);
'qs'
=>
array
(),
);
if
(
count
(
$questions
))
{
foreach
(
$questions
as
$key
=>
$question
)
{
$elementid
=
'p'
.
$qhiddenpostid
[
$key
];
if
(
count
(
$questions
))
{
foreach
(
$questions
as
$key
=>
$question
)
{
$elementid
=
'p'
.
$qhiddenpostid
[
$key
];
$htmloptions
=
qa_post_html_options
(
$question
);
$htmloptions
[
'voteview'
]
=
false
;
$htmloptions
[
'tagsview'
]
=
!
isset
(
$question
[
'opostid'
]);
$htmloptions
[
'answersview'
]
=
false
;
$htmloptions
[
'viewsview'
]
=
false
;
$htmloptions
[
'updateview'
]
=
false
;
$htmloptions
[
'contentview'
]
=
true
;
$htmloptions
[
'flagsview'
]
=
true
;
$htmloptions
[
'elementid'
]
=
$elementid
;
$htmloptions
=
qa_post_html_options
(
$question
);
$htmloptions
[
'voteview'
]
=
false
;
$htmloptions
[
'tagsview'
]
=
!
isset
(
$question
[
'opostid'
]);
$htmloptions
[
'answersview'
]
=
false
;
$htmloptions
[
'viewsview'
]
=
false
;
$htmloptions
[
'updateview'
]
=
false
;
$htmloptions
[
'contentview'
]
=
true
;
$htmloptions
[
'flagsview'
]
=
true
;
$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
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
if
(
isset
(
$htmlfields
[
'what_url'
]))
// link directly to relevant content
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
$htmlfields
[
'what_2'
]
=
qa_lang_html
(
'main/hidden'
);
$htmlfields
[
'what_2'
]
=
qa_lang_html
(
'main/hidden'
);
if
(
@
$htmloptions
[
'whenview'
])
{
$updated
=
@
$question
[
isset
(
$question
[
'opostid'
])
?
'oupdated'
:
'updated'
];
if
(
isset
(
$updated
))
$htmlfields
[
'when_2'
]
=
qa_when_to_html
(
$updated
,
@
$htmloptions
[
'fulldatedays'
]);
}
if
(
@
$htmloptions
[
'whenview'
])
{
$updated
=
@
$question
[
isset
(
$question
[
'opostid'
])
?
'oupdated'
:
'updated'
];
if
(
isset
(
$updated
))
$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
))
{
// Possible values for popup: reshow_q_popup, reshow_a_popup, reshow_c_popup
$buttons
[
'reshow'
]
=
array
(
'tags'
=>
'name="admin_'
.
qa_html
(
$qhiddenpostid
[
$key
])
.
'_reshow" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/reshow_button'
),
'popup'
=>
qa_lang_html
(
sprintf
(
'question/reshow_%s_popup'
,
$posttype
)),
);
}
if
(
!
qa_user_post_permit_error
(
'permit_hide_show'
,
$question
))
{
// Possible values for popup: reshow_q_popup, reshow_a_popup, reshow_c_popup
$buttons
[
'reshow'
]
=
array
(
'tags'
=>
'name="admin_'
.
qa_html
(
$qhiddenpostid
[
$key
])
.
'_reshow" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/reshow_button'
),
'popup'
=>
qa_lang_html
(
sprintf
(
'question/reshow_%s_popup'
,
$posttype
)),
);
}
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
$buttons
[
'delete'
]
=
array
(
'tags'
=>
'name="admin_'
.
qa_html
(
$qhiddenpostid
[
$key
])
.
'_delete" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/delete_button'
),
'popup'
=>
qa_lang_html
(
sprintf
(
'question/delete_%s_popup'
,
$posttype
)),
);
}
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
$buttons
[
'delete'
]
=
array
(
'tags'
=>
'name="admin_'
.
qa_html
(
$qhiddenpostid
[
$key
])
.
'_delete" onclick="return qa_admin_click(this);"'
,
'label'
=>
qa_lang_html
(
'question/delete_button'
),
'popup'
=>
qa_lang_html
(
sprintf
(
'question/delete_%s_popup'
,
$posttype
)),
);
}
if
(
count
(
$buttons
))
{
$htmlfields
[
'form'
]
=
array
(
'style'
=>
'light'
,
'buttons'
=>
$buttons
,
);
}
if
(
count
(
$buttons
))
{
$htmlfields
[
'form'
]
=
array
(
'style'
=>
'light'
,
'buttons'
=>
$buttons
,
);
}
$qa_content
[
'q_list'
][
'qs'
][]
=
$htmlfields
;
}
$qa_content
[
'q_list'
][
'qs'
][]
=
$htmlfields
;
}
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_hidden_found'
);
}
else
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/no_hidden_found'
);
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$qa_content
[
'script_rel'
][]
=
'qa-content/qa-admin.js?'
.
QA_VERSION
;
$qa_content
[
'navigation'
][
'sub'
]
=
qa_admin_sub_navigation
();
$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 @@
Question2Answer by Gideon Greenspan and contributors
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
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
...
...
@@ -19,141 +16,155 @@
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
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
();
namespace
Q2A\Controllers\Admin
;
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
)
);
use
Q2A\Controllers\BaseController
;
use
Q2A\Database\DbConnection
;
use
Q2A\Middleware\Auth\MinimumUserLevel
;
/**
* 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)
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
;
}
parent
::
__construct
(
$db
);
}
// 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
));
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
]);
}
}
// Check admin privileges (do late to allow one DB query)
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'
);
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$questions
=
qa_any_sort_by_date
(
array_merge
(
$queuedquestions
,
$queuedanswers
,
$queuedcomments
));
$qa_content
[
'q_list'
]
=
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
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
]);
}
}
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
'qs'
=>
array
(),
);
// Get information for users
if
(
count
(
$questions
))
{
foreach
(
$questions
as
$question
)
{
$postid
=
qa_html
(
isset
(
$question
[
'opostid'
])
?
$question
[
'opostid'
]
:
$question
[
'postid'
]);
$elementid
=
'p'
.
$postid
;
$usershtml
=
qa_userids_handles_html
(
qa_any_get_userids_handles
(
$questions
));
$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
$htmlfields
[
'url'
]
=
$htmlfields
[
'what_url'
];
$qa_content
=
qa_content_prepare
();
$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
;
}
$qa_content
[
'title'
]
=
qa_lang_html
(
'admin/recent_approve_title'
);
$qa_content
[
'error'
]
=
isset
(
$pageerror
)
?
$pageerror
:
qa_admin_page_error
();
$htmlfields
[
'form'
]
=
array
(
'style'
=>
'light'
,
$qa_content
[
'q_list'
]
=
array
(
'form'
=>
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'"'
,
'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
),
'hidden'
=>
array
(
'code'
=>
qa_get_form_security_code
(
'admin/click'
),
),
),
'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 @@
Question2Answer by Gideon Greenspan and contributors
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
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
...
...
@@ -19,556 +16,572 @@
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
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'
;
namespace
Q2A\Controllers\Admin
;
// 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
))
$pageid
=
qa_get
(
'edit'
);
/**
* Controller for admin page for editing custom pages and external links.
*/
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
(
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
;
parent
::
__construct
(
$db
);
$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
))
return
$qa_content
;
$pageid
=
qa_post_text
(
'edit'
);
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
(
'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'
,
);
// Check admin privileges (do late to allow one DB query)
if
(
!
qa_opt
(
'show_custom_home'
))
unset
(
$navoptions
[
'nav_home'
])
;
if
(
!
qa_admin_check_privileges
(
$qa_content
))
return
$qa_content
;
if
(
!
qa_using_categories
())
unset
(
$navoptions
[
'nav_categories'
]);
if
(
!
qa_using_tags
())
unset
(
$navoptions
[
'nav_tags'
]);
// Define an array of navigation settings we can change, option name => language key
$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
'
))
$editpage
=
null
;
if
(
!
qa_opt
(
'show_custom_home
'
))
unset
(
$navoptions
[
'nav_home'
])
;
elseif
(
qa_clicked
(
'dosaveoptions'
)
||
qa_clicked
(
'doaddpage'
)
||
qa_clicked
(
'doaddlink'
))
{
if
(
!
qa_check_form_security_code
(
'admin/pages'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
else
foreach
(
$navoptions
as
$optionname
=>
$langkey
)
qa_set_option
(
$optionname
,
(
int
)
qa_post_text
(
'option_'
.
$optionname
));
if
(
!
qa_using_categories
())
unset
(
$navoptions
[
'nav_categories'
]);
}
elseif
(
qa_clicked
(
'dosavepage'
))
{
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
if
(
!
qa_using_tags
())
unset
(
$navoptions
[
'nav_tags'
]);
if
(
!
qa_check_form_security_code
(
'admin/pages'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
else
{
$reloadpages
=
false
;
if
(
qa_post_text
(
'dodelete'
))
{
qa_db_page_delete
(
$editpage
[
'pageid'
]);
// Process saving an old or new page
$searchmodules
=
qa_load_modules_with
(
'search'
,
'unindex_page'
);
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
unindex_page
(
$editpage
[
'pageid'
]);
$securityexpired
=
false
;
if
(
qa_clicked
(
'docancel'
))
$editpage
=
null
;
$reloadpages
=
true
;
}
else
{
$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'
);
elseif
(
qa_clicked
(
'dosaveoptions'
)
||
qa_clicked
(
'doaddpage'
)
||
qa_clicked
(
'doaddlink'
))
{
if
(
!
qa_check_form_security_code
(
'admin/pages'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
else
foreach
(
$navoptions
as
$optionname
=>
$langkey
)
qa_set_option
(
$optionname
,
(
int
)
qa_post_text
(
'option_'
.
$optionname
));
$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
))
$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
);
if
(
qa_post_text
(
'dodelete'
))
{
qa_db_page_delete
(
$editpage
[
'pageid'
]);
if
(
$isexternal
)
{
// Verify the url is legitimate (vaguely)
$searchmodules
=
qa_load_modules_with
(
'search'
,
'unindex_page'
);
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
unindex_page
(
$editpage
[
'pageid'
]);
if
(
empty
(
$inurl
))
$errors
[
'url'
]
=
qa_lang
(
'main/field_required'
);
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
);
$editpage
=
null
;
$reloadpages
=
true
;
}
else
{
// Verify the heading is legitimate
}
else
{
$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
)
$errors
[
'heading'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_TITLE_LENGTH
);
// Verify the name (navigation link) is legitimate
// 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
++
)
{
switch
(
$attempt
)
{
case
0
:
$inslug
=
qa_post_text
(
'slug'
);
if
(
!
isset
(
$inslug
))
$inslug
=
implode
(
'-'
,
qa_string_to_words
(
$inname
));
break
;
if
(
$isexternal
)
{
// Verify the url is legitimate (vaguely)
case
1
:
$inslug
=
qa_lang_sub
(
'admin/page_default_slug'
,
$inslug
);
break
;
if
(
empty
(
$inurl
))
$errors
[
'url'
]
=
qa_lang
(
'main/field_required'
);
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
:
$inslug
=
qa_lang_sub
(
'admin/page_default_slug'
,
$attempt
-
1
);
break
;
}
else
{
// Verify the heading is legitimate
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
(
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
// 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
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
);
}
else
{
$setheading
=
isset
(
$errors
[
'heading'
])
?
$editpage
[
'heading'
]
:
$inheading
;
$setslug
=
isset
(
$errors
[
'slug'
])
?
$editpage
[
'tags'
]
:
$inslug
;
$setcontent
=
isset
(
$errors
[
'content'
])
?
$editpage
[
'content'
]
:
$incontent
;
}
else
{
$setheading
=
isset
(
$errors
[
'heading'
])
?
$editpage
[
'heading'
]
:
$inheading
;
$setslug
=
isset
(
$errors
[
'slug'
])
?
$editpage
[
'tags'
]
:
$inslug
;
$setcontent
=
isset
(
$errors
[
'content'
])
?
$editpage
[
'content'
]
:
$incontent
;
qa_db_page_set_fields
(
$editpage
[
'pageid'
],
isset
(
$errors
[
'name'
])
?
$editpage
[
'title'
]
:
$inname
,
0
,
$setslug
,
$setheading
,
$setcontent
,
$inpermit
)
;
qa_db_page_set_fields
(
$editpage
[
'pageid'
],
isset
(
$errors
[
'name'
])
?
$editpage
[
'title'
]
:
$inname
,
0
,
$setslug
,
$setheading
,
$setcontent
,
$inpermit
);
$searchmodules
=
qa_load_modules_with
(
'search'
,
'unindex_page'
);
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
unindex_page
(
$editpage
[
'pageid'
]);
$searchmodules
=
qa_load_modules_with
(
'search'
,
'unindex_page'
);
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
unindex_page
(
$editpage
[
'pageid'
]);
$indextext
=
qa_viewer_text
(
$setcontent
,
'html'
);
$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'
);
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
));
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
))
$editpage
=
null
;
else
$editpage
=
@
$pages
[
$editpage
[
'pageid'
]];
}
else
{
// creating a new one
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
);
}
else
{
// creating a new one
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'
);
$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'
);
foreach
(
$searchmodules
as
$searchmodule
)
$searchmodule
->
index_page
(
$pageid
,
$inslug
,
$inheading
,
$incontent
,
'html'
,
$indextext
);
qa_db_page_move
(
$pageid
,
substr
(
$inposition
,
0
,
1
),
substr
(
$inposition
,
1
));
$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
;
$reloadpages
=
true
;
if
(
$reloadpages
)
{
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'
);
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
if
(
isset
(
$editpage
))
{
$positionoptions
=
array
();
if
(
isset
(
$editpage
))
{
$positionoptions
=
array
(
);
if
(
!
$isexternal
)
$positionoptions
[
'_'
.
max
(
1
,
@
$editpage
[
'position'
])]
=
qa_lang_html
(
'admin/no_link'
);
if
(
!
$isexternal
)
$positionoptions
[
'_'
.
max
(
1
,
@
$editpage
[
'position'
])]
=
qa_lang_html
(
'admin/no_link'
);
$navlangkey
=
array
(
'B'
=>
'admin/before_main_menu'
,
'M'
=>
'admin/after_main_menu'
,
'O'
=>
'admin/opposite_main_menu'
,
'F'
=>
'admin/after_footer'
,
);
$navlangkey
=
array
(
'B'
=>
'admin/before_main_menu'
,
'M'
=>
'admin/after_main_menu'
,
'O'
=>
'admin/opposite_main_menu'
,
'F'
=>
'admin/after_footer'
,
);
foreach
(
$navlangkey
as
$nav
=>
$langkey
)
{
$previous
=
null
;
$passedself
=
false
;
$maxposition
=
0
;
foreach
(
$navlangkey
as
$nav
=>
$langkey
)
{
$previous
=
null
;
$passedself
=
false
;
$maxposition
=
0
;
foreach
(
$pages
as
$key
=>
$page
)
{
if
(
$page
[
'nav'
]
==
$nav
)
{
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
);
foreach
(
$pages
as
$key
=>
$page
)
{
if
(
$page
[
'nav'
]
==
$nav
)
{
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'
])
$passedself
=
true
;
if
(
$page
[
'pageid'
]
==
@
$editpage
[
'pageid'
])
$passedself
=
true
;
$maxposition
=
max
(
$maxposition
,
$page
[
'position'
]);
$positionoptions
[
$nav
.
$page
[
'position'
]]
=
$positionhtml
;
$maxposition
=
max
(
$maxposition
,
$page
[
'position'
]);
$positionoptions
[
$nav
.
$page
[
'position'
]]
=
$positionhtml
;
$previous
=
$page
;
}
}
$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
=
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
;
}
}
$positionvalue
=
@
$positionoptions
[
$editpage
[
'nav'
]
.
$editpage
[
'position'
]];
$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'
]];
$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'
),
),
);
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
(
$isexternal
)
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'slug'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'heading'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'content'
]);
if
(
isset
(
$editpage
[
'pageid'
]))
{
qa_set_display_rules
(
$qa_content
,
array
(
'position_display'
=>
'!dodelete'
,
'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'
]);
}
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'url'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'newwindow'
]);
}
if
(
$isexternal
||
!
isset
(
$editpage
[
'pageid'
]))
unset
(
$qa_content
[
'form'
][
'buttons'
][
'saveview'
]);
$qa_content
[
'focusid'
]
=
'name'
;
}
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
),
);
}
if
(
isset
(
$editpage
[
'pageid'
]))
{
qa_set_display_rules
(
$qa_content
,
array
(
'position_display'
=>
'!dodelete'
,
'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'
]);
}
$qa_content
[
'form'
][
'fields'
][]
=
array
(
'type'
=>
'blank'
);
if
(
$isexternal
||
!
isset
(
$editpage
[
'pageid'
]))
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
)
{
$suggestrequests
=
$trypage
->
suggest_requests
();
// List of suggested plugin pages
foreach
(
$suggestrequests
as
$suggestrequest
)
{
$listhtml
.=
'<li><b><a href="'
.
qa_path_html
(
$suggestrequest
[
'request'
])
.
'">'
.
qa_html
(
$suggestrequest
[
'title'
])
.
'</a></b>'
;
$listhtml
=
''
;
$
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
(
'^1'
=>
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'doaddlink'
=>
1
,
'text'
=>
$suggestrequest
[
'title'
],
'url'
=>
$suggestrequest
[
'request'
],
'nav'
=>
@
$suggestrequest
[
'nav'
]))
.
'">'
,
'^2'
=>
'</a>'
,
));
foreach
(
$pagemodules
as
$tryname
=>
$trypage
)
{
$suggestrequests
=
$trypage
->
suggest_requests
();
if
(
method_exists
(
$trypage
,
'admin_form'
))
$listhtml
.=
' - <a href="'
.
qa_admin_module_options_path
(
'page'
,
$tryname
)
.
'">'
.
qa_lang_html
(
'admin/options'
)
.
'</a
>'
;
foreach
(
$suggestrequests
as
$suggestrequest
)
{
$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
))
{
$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
(
'admin/add_link_link'
),
array
(
'^1'
=>
'<a href="'
.
qa_path_html
(
qa_request
(),
array
(
'doaddlink'
=>
1
,
'text'
=>
$suggestrequest
[
'title'
],
'url'
=>
$suggestrequest
[
'request'
],
'nav'
=>
@
$suggestrequest
[
'nav'
]))
.
'">'
,
'^2'
=>
'</a>'
,
));
// 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
)
{
$listhtml
.=
'<li><b><a href="'
.
qa_custom_page_url
(
$page
)
.
'">'
.
qa_html
(
$page
[
'title'
])
.
'</a></b>'
;
if
(
strlen
(
$listhtml
))
{
$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
(
'^1'
=>
'<a href="'
.
qa_path_html
(
'admin/pages'
,
array
(
'edit'
=>
$page
[
'pageid'
]))
.
'">'
,
'^2'
=>
'</a>'
,
));
// List of custom pages or links
$listhtml
.=
'</li>'
;
}
$listhtml
=
''
;
$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
,
);
}
foreach
(
$pages
as
$page
)
{
$listhtml
.=
'<li><b><a href="'
.
qa_custom_page_url
(
$page
)
.
'">'
.
qa_html
(
$page
[
'title'
])
.
'</a></b>'
;
$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 @@
Question2Answer by Gideon Greenspan and contributors
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
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
...
...
@@ -19,254 +16,265 @@
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
header
(
'Location: ../../../'
);
exit
;
}
namespace
Q2A\Controllers\Admin
;
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
))
return
$qa_content
;
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
}
// 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
->
cleanRemovedPlugins
();
$pluginManager
=
new
\Q2A\Plugin\PluginManager
();
$pluginManager
->
cleanRemovedPlugins
();
$enabledPlugins
=
$pluginManager
->
getEnabledPlugins
();
$fileSystemPlugins
=
$pluginManager
->
getFilesystemPlugins
();
$enabledPlugins
=
$pluginManager
->
getEnabledPlugins
();
$fileSystemPlugins
=
$pluginManager
->
getFilesystemPlugins
();
$pluginHashes
=
$pluginManager
->
getHashesForPlugins
(
$fileSystemPlugins
);
$pluginHashes
=
$pluginManager
->
getHashesForPlugins
(
$fileSystemPlugins
);
$showpluginforms
=
true
;
if
(
qa_is_http_post
())
{
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'
);
$showpluginforms
=
false
;
}
else
{
if
(
qa_clicked
(
'dosave'
))
{
$enabledPluginHashes
=
qa_post_text
(
'enabled_plugins_hashes'
);
$enabledPluginHashesArray
=
explode
(
';'
,
$enabledPluginHashes
);
$pluginDirectories
=
array_keys
(
array_intersect
(
$pluginHashes
,
$enabledPluginHashesArray
));
$pluginManager
->
setEnabledPlugins
(
$pluginDirectories
);
$showpluginforms
=
true
;
if
(
qa_is_http_post
())
{
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'
);
$showpluginforms
=
false
;
}
else
{
if
(
qa_clicked
(
'dosave'
))
{
$enabledPluginHashes
=
qa_post_text
(
'enabled_plugins_hashes'
);
$enabledPluginHashesArray
=
explode
(
';'
,
$enabledPluginHashes
);
$pluginDirectories
=
array_keys
(
array_intersect
(
$pluginHashes
,
$enabledPluginHashesArray
));
$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
();
$moduletypes
=
qa_list_module_types
();
$tables
=
qa_db_list_tables
();
$moduletypes
=
qa_list_module_types
();
foreach
(
$moduletypes
as
$type
)
{
$modules
=
qa_list_modules
(
$type
);
foreach
(
$moduletypes
as
$type
)
{
$modules
=
qa_list_modules
(
$type
);
foreach
(
$modules
as
$name
)
{
$module
=
qa_load_module
(
$type
,
$name
);
foreach
(
$modules
as
$name
)
{
$module
=
qa_load_module
(
$type
,
$name
);
if
(
method_exists
(
$module
,
'admin_form'
))
{
$info
=
qa_get_module_info
(
$type
,
$name
);
$dir
=
rtrim
(
$info
[
'directory'
],
'/'
);
$pluginoptionmodules
[
$dir
][]
=
array
(
'type'
=>
$type
,
'name'
=>
$name
,
);
}
}
}
if
(
method_exists
(
$module
,
'admin_form'
))
{
$info
=
qa_get_module_info
(
$type
,
$name
);
$dir
=
rtrim
(
$info
[
'directory'
],
'/'
);
$pluginoptionmodules
[
$dir
][]
=
array
(
'type'
=>
$type
,
'name'
=>
$name
,
);
foreach
(
$moduletypes
as
$type
)
{
$modules
=
qa_load_modules_with
(
$type
,
'init_queries'
);
foreach
(
$modules
as
$name
=>
$module
)
{
$queries
=
$module
->
init_queries
(
$tables
);
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
)
{
$queries
=
$module
->
init_queries
(
$tables
);
if
(
!
empty
(
$fileSystemPlugins
))
{
$metadataUtil
=
new
\Q2A\Util\Metadata
();
$sortedPluginFiles
=
array
();
if
(
!
empty
(
$queries
))
{
if
(
qa_is_http_post
())
qa_redirect
(
'install'
);
foreach
(
$fileSystemPlugins
as
$pluginDirectory
)
{
$pluginDirectoryPath
=
QA_PLUGIN_DIR
.
$pluginDirectory
;
$metadata
=
$metadataUtil
->
fetchFromAddonPath
(
$pluginDirectoryPath
);
if
(
empty
(
$metadata
))
{
$pluginFile
=
$pluginDirectoryPath
.
'/qa-plugin.php'
;
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>'
,
));
}
}
}
}
// limit plugin parsing to first 8kB
$contents
=
file_get_contents
(
$pluginFile
,
false
,
null
,
0
,
8192
);
$metadata
=
qa_addon_metadata
(
$contents
,
'Plugin'
);
}
$metadata
[
'name'
]
=
isset
(
$metadata
[
'name'
])
&&
!
empty
(
$metadata
[
'name'
])
?
qa_html
(
$metadata
[
'name'
])
:
qa_lang_html
(
'admin/unnamed_plugin'
);
$sortedPluginFiles
[
$pluginDirectory
]
=
$metadata
;
}
if
(
!
empty
(
$fileSystemPlugins
))
{
$metadataUtil
=
new
\Q2A\Util\Metadata
();
$sortedPluginFiles
=
array
();
qa_sort_by
(
$sortedPluginFiles
,
'name'
);
foreach
(
$fileSystemPlugins
as
$pluginDirectory
)
{
$pluginDirectoryPath
=
QA_PLUGIN_DIR
.
$pluginDirectory
;
$metadata
=
$metadataUtil
->
fetchFromAddonPath
(
$pluginDirectoryPath
);
if
(
empty
(
$metadata
))
{
$pluginFile
=
$pluginDirectoryPath
.
'/qa-plugin.php'
;
$pluginIndex
=
-
1
;
foreach
(
$sortedPluginFiles
as
$pluginDirectory
=>
$metadata
)
{
$pluginIndex
++
;
// limit plugin parsing to first 8kB
$contents
=
file_get_contents
(
$pluginFile
,
false
,
null
,
0
,
8192
);
$metadata
=
qa_addon_metadata
(
$contents
,
'Plugin'
);
}
$pluginDirectoryPath
=
QA_PLUGIN_DIR
.
$pluginDirectory
;
$hash
=
$pluginHashes
[
$pluginDirectory
];
$showthisform
=
$showpluginforms
&&
(
qa_get
(
'show'
)
==
$hash
);
$metadata
[
'name'
]
=
isset
(
$metadata
[
'name'
])
&&
!
empty
(
$metadata
[
'name'
])
?
qa_html
(
$metadata
[
'name'
])
:
qa_lang_html
(
'admin/unnamed_plugin'
);
$sortedPluginFiles
[
$pluginDirectory
]
=
$metadata
;
}
$namehtml
=
$metadata
[
'name'
];
qa_sort_by
(
$sortedPluginFiles
,
'name'
);
if
(
isset
(
$metadata
[
'uri'
])
&&
strlen
(
$metadata
[
'uri'
]))
$namehtml
=
'<a href="'
.
qa_html
(
$metadata
[
'uri'
])
.
'">'
.
$namehtml
.
'</a>'
;
$pluginIndex
=
-
1
;
foreach
(
$sortedPluginFiles
as
$pluginDirectory
=>
$metadata
)
{
$pluginIndex
++
;
$namehtml
=
'<b>'
.
$namehtml
.
'</b>'
;
$pluginDirectoryPath
=
QA_PLUGIN_DIR
.
$pluginDirectory
;
$hash
=
$pluginHashes
[
$pluginDirectory
];
$showthisform
=
$showpluginforms
&&
(
qa_get
(
'show'
)
==
$hash
);
$metaver
=
isset
(
$metadata
[
'version'
])
&&
strlen
(
$metadata
[
'version'
])
;
if
(
$metaver
)
$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'
]))
$namehtml
=
'<a href="'
.
qa_html
(
$metadata
[
'uri'
])
.
'">'
.
$name
html
.
'</a>'
;
if
(
isset
(
$metadata
[
'author_uri'
])
&&
strlen
(
$metadata
[
'author_
uri'
]))
$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'
]);
if
(
$metaver
)
$namehtml
.=
' v'
.
qa_html
(
$metadata
[
'version'
]);
}
else
$authorhtml
=
''
;
if
(
isset
(
$metadata
[
'author'
])
&&
strlen
(
$metadata
[
'author
'
]))
{
$authorhtml
=
qa_html
(
$metadata
[
'author'
]
);
if
(
$metaver
&&
isset
(
$metadata
[
'update_uri'
])
&&
strlen
(
$metadata
[
'update_uri
'
]))
{
$elementid
=
'version_check_'
.
md5
(
$pluginDirectory
);
if
(
isset
(
$metadata
[
'author_uri'
])
&&
strlen
(
$metadata
[
'author_uri'
]))
$authorhtml
=
'<a href="'
.
qa_html
(
$metadata
[
'author_uri'
])
.
'">'
.
$authorhtml
.
'</a>'
;
$updatehtml
=
'(<span id="'
.
$elementid
.
'">...</span>)'
;
$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
$authorhtml
=
''
;
if
(
isset
(
$metadata
[
'description'
]))
$deschtml
=
qa_html
(
$metadata
[
'description'
]);
else
$deschtml
=
''
;
if
(
$metaver
&&
isset
(
$metadata
[
'update_uri'
])
&&
strlen
(
$metadata
[
'update_uri'
]))
{
$elementid
=
'version_check_'
.
md5
(
$pluginDirectory
);
if
(
isset
(
$pluginoptionmodules
[
$pluginDirectoryPath
])
&&
!
$showthisform
)
{
$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
(
"qa_version_check("
.
qa_js
(
$metadata
[
'update_uri'
])
.
", "
.
qa_js
(
$metadata
[
'version'
],
true
)
.
", "
.
qa_js
(
$elementid
)
.
", false);"
);
}
else
$updatehtml
=
''
;
$pluginhtml
=
$namehtml
.
' '
.
$authorhtml
.
' '
.
$updatehtml
.
'<br>'
;
$pluginhtml
.=
$deschtml
.
(
strlen
(
$deschtml
)
>
0
?
'<br>'
:
''
);
$pluginhtml
.=
'<small style="color:#666">'
.
qa_html
(
$pluginDirectoryPath
)
.
'/</small>'
;
if
(
isset
(
$metadata
[
'description'
]))
$deschtml
=
qa_html
(
$metadata
[
'description'
]);
else
$deschtml
=
''
;
if
(
qa_qa_version_below
(
@
$metadata
[
'min_q2a'
]))
$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>'
;
if
(
isset
(
$pluginoptionmodules
[
$pluginDirectoryPath
])
&&
!
$showthisform
)
{
$deschtml
.=
(
strlen
(
$deschtml
)
?
' - '
:
''
)
.
'<a href="'
.
qa_admin_plugin_options_path
(
$pluginDirectory
)
.
'">'
.
qa_lang_html
(
'admin/options'
)
.
'</a>'
;
}
elseif
(
qa_php_version_below
(
@
$metadata
[
'min_php'
]))
$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>'
;
$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
);
$pluginhtml
=
$namehtml
.
' '
.
$authorhtml
.
' '
.
$updatehtml
.
'<br>'
;
$pluginhtml
.=
$deschtml
.
(
strlen
(
$deschtml
)
>
0
?
'<br>'
:
''
);
$pluginhtml
.=
'<small style="color:#666">'
.
qa_html
(
$pluginDirectoryPath
)
.
'/</small>'
;
if
(
qa_qa_version_below
(
@
$metadata
[
'min_q2a'
]))
$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>'
;
elseif
(
qa_php_version_below
(
@
$metadata
[
'min_php'
]))
$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
,
),
),
);
$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
]))
{
foreach
(
$pluginoptionmodules
[
$pluginDirectoryPath
]
as
$pluginoptionmodule
)
{
$type
=
$pluginoptionmodule
[
'type'
];
$name
=
$pluginoptionmodule
[
'name'
];
if
(
$showthisform
&&
isset
(
$pluginoptionmodules
[
$pluginDirectoryPath
]))
{
foreach
(
$pluginoptionmodules
[
$pluginDirectoryPath
]
as
$pluginoptionmodule
)
{
$type
=
$pluginoptionmodule
[
'type'
];
$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'
]))
$form
[
'tags'
]
=
'method="post" action="'
.
qa_admin_plugin_options_path
(
$pluginDirectory
)
.
'"'
;
if
(
!
isset
(
$form
[
'tags'
]))
$form
[
'tags'
]
=
'method="post" action="'
.
qa_admin_plugin_options_path
(
$pluginDirectory
)
.
'"'
;
if
(
!
isset
(
$form
[
'style'
]))
$form
[
'style'
]
=
'tall'
;
if
(
!
isset
(
$form
[
'style'
]))
$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
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'" name="plugins_form" onsubmit="qa_get_enabled_plugins_hashes(); return true;"'
,
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_self_html
()
.
'" name="plugins_form" onsubmit="qa_get_enabled_plugins_hashes(); return true;"'
,
'style'
=>
'wide'
,
'style'
=>
'wide'
,
'buttons'
=>
array
(
'dosave'
=>
array
(
'tags'
=>
'name="dosave"'
,
'label'
=>
qa_lang_html
(
'admin/save_options_button'
),
),
),
'buttons'
=>
array
(
'dosave'
=>
array
(
'tags'
=>
'name="dosave"'
,
'label'
=>
qa_lang_html
(
'admin/save_options_button'
),
),
),
'hidden'
=>
array
(
'qa_form_security_code'
=>
qa_get_form_security_code
(
'admin/plugins'
),
'enabled_plugins_hashes'
=>
''
,
),
);
'hidden'
=>
array
(
'qa_form_security_code'
=>
qa_get_form_security_code
(
'admin/plugins'
),
'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 @@
Question2Answer by Gideon Greenspan and contributors
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
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
...
...
@@ -19,240 +16,256 @@
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
header
(
'Location: ../../../'
);
exit
;
}
require_once
QA_INCLUDE_DIR
.
'app/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'db/selects.php'
;
namespace
Q2A\Controllers\Admin
;
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'
);
if
(
!
isset
(
$fieldid
))
$fieldid
=
qa_get
(
'edit'
);
parent
::
__construct
(
$db
);
$userfields
=
qa_db_select_with_pending
(
qa_db_userfields_selectspec
());
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
}
$editfield
=
null
;
foreach
(
$userfields
as
$userfield
)
{
if
(
$userfield
[
'fieldid'
]
==
$fieldid
)
$editfield
=
$userfield
;
}
public
function
index
()
{
// Get current list of user fields and determine the state of this admin page
$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
))
return
$qa_content
;
$editfield
=
null
;
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'
))
{
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
// Process saving an old or new user field
if
(
!
qa_check_form_security_code
(
'admin/userfields'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
$securityexpired
=
false
;
else
{
if
(
qa_post_text
(
'dodelete'
))
{
qa_db_userfield_delete
(
$editfield
[
'fieldid'
]);
if
(
qa_clicked
(
'docancel'
))
qa_redirect
(
'admin/users'
);
}
else
{
$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'
);
elseif
(
qa_clicked
(
'dosavefield'
))
{
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
$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
)
$errors
[
'name'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_PROFILE_TITLE_LENGTH
);
}
else
{
$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
qa_db_userfield_set_fields
(
$editfield
[
'fieldid'
],
isset
(
$errors
[
'name'
])
?
$editfield
[
'content'
]
:
$inname
,
$inflags
,
$inpermit
);
qa_db_userfield_move
(
$editfield
[
'fieldid'
],
$inposition
);
// Verify the name is legitimate
if
(
empty
(
$errors
)
)
qa_redirect
(
'admin/users'
);
if
(
qa_strlen
(
$inname
)
>
QA_DB_MAX_PROFILE_TITLE_LENGTH
)
$errors
[
'name'
]
=
qa_lang_sub
(
'main/max_length_x'
,
QA_DB_MAX_PROFILE_TITLE_LENGTH
);
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
;
}
// Perform appropriate database action
}
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
(
isset
(
$editfield
[
'fieldid'
]))
{
// changing existing user field
qa_db_userfield_set_fields
(
$editfield
[
'fieldid'
],
isset
(
$errors
[
'name'
])
?
$editfield
[
'content'
]
:
$inname
,
$inflags
,
$inpermit
);
qa_db_userfield_move
(
$editfield
[
'fieldid'
],
$inposition
);
foreach
(
$userfields
as
$userfield
)
{
if
(
qa_strtolower
(
trim
(
$newtag
))
==
qa_strtolower
(
trim
(
$userfield
[
'title'
])))
$uniquetag
=
false
;
}
if
(
empty
(
$errors
))
qa_redirect
(
'admin/users'
);
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
)
{
$fieldid
=
qa_db_userfield_create
(
$newtag
,
$inname
,
$inflags
,
$inpermit
);
qa_db_userfield_move
(
$fieldid
,
$inposition
);
qa_redirect
(
'admin/users'
);
foreach
(
$userfields
as
$userfield
)
{
if
(
qa_strtolower
(
trim
(
$newtag
))
==
qa_strtolower
(
trim
(
$userfield
[
'title'
])))
$uniquetag
=
false
;
}
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
[
'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/users_title'
);
$qa_content
[
'error'
]
=
$securityexpired
?
qa_lang_html
(
'admin/form_security_expired'
)
:
qa_admin_page_error
();
$positionoptions
=
array
();
$previous
=
null
;
$passedself
=
false
;
$positionoptions
=
array
();
$previous
=
null
;
$passedself
=
false
;
foreach
(
$userfields
as
$userfield
)
{
if
(
isset
(
$previous
))
$positionhtml
=
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
qa_user_userfield_label
(
$passedself
?
$userfield
:
$previous
)));
else
$positionhtml
=
qa_lang_html
(
'admin/first'
);
foreach
(
$userfields
as
$userfield
)
{
if
(
isset
(
$previous
))
$positionhtml
=
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
qa_user_userfield_label
(
$passedself
?
$userfield
:
$previous
)));
else
$positionhtml
=
qa_lang_html
(
'admin/first'
);
$positionoptions
[
$userfield
[
'position'
]]
=
$positionhtml
;
$positionoptions
[
$userfield
[
'position'
]]
=
$positionhtml
;
if
(
$userfield
[
'fieldid'
]
==
@
$editfield
[
'fieldid'
])
$passedself
=
true
;
if
(
$userfield
[
'fieldid'
]
==
@
$editfield
[
'fieldid'
])
$passedself
=
true
;
$previous
=
$userfield
;
}
$previous
=
$userfield
;
}
if
(
isset
(
$editfield
[
'position'
]))
$positionvalue
=
$positionoptions
[
$editfield
[
'position'
]];
else
{
$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
;
}
if
(
isset
(
$editfield
[
'position'
]))
$positionvalue
=
$positionoptions
[
$editfield
[
'position'
]];
else
{
$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
;
}
$typeoptions
=
array
(
0
=>
qa_lang_html
(
'admin/field_single_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'
),
);
$permitoptions
=
qa_admin_permit_options
(
QA_PERMIT_ALL
,
QA_PERMIT_ADMINS
,
false
,
false
);
$permitvalue
=
@
$permitoptions
[
isset
(
$inpermit
)
?
$inpermit
:
$editfield
[
'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
(
'admin/field_name'
),
'value'
=>
qa_html
(
isset
(
$inname
)
?
$inname
:
qa_user_userfield_label
(
$editfield
)),
'error'
=>
qa_html
(
@
$errors
[
'name'
]),
),
'delete'
=>
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
'admin/delete_field'
),
'value'
=>
0
,
'type'
=>
'checkbox'
,
),
'type'
=>
array
(
'id'
=>
'type_display'
,
'tags'
=>
'name="type"'
,
'label'
=>
qa_lang_html
(
'admin/field_type'
),
'type'
=>
'select'
,
'options'
=>
$typeoptions
,
'value'
=>
@
$typeoptions
[
isset
(
$intype
)
?
$intype
:
(
@
$editfield
[
'flags'
]
&
(
QA_FIELD_FLAGS_MULTI_LINE
|
QA_FIELD_FLAGS_LINK_URL
))],
),
'permit'
=>
array
(
'id'
=>
'permit_display'
,
'tags'
=>
'name="permit"'
,
'label'
=>
qa_lang_html
(
'admin/permit_to_view'
),
'type'
=>
'select'
,
'options'
=>
$permitoptions
,
'value'
=>
$permitvalue
,
),
'position'
=>
array
(
'id'
=>
'position_display'
,
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
),
'onregister'
=>
array
(
'id'
=>
'register_display'
,
'tags'
=>
'name="onregister"'
,
'label'
=>
qa_lang_html
(
'admin/show_on_register_form'
),
'type'
=>
'checkbox'
,
'value'
=>
isset
(
$inonregister
)
?
$inonregister
:
(
@
$editfield
[
'flags'
]
&
QA_FIELD_FLAGS_ON_REGISTER
),
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'label'
=>
qa_lang_html
(
isset
(
$editfield
[
'fieldid'
])
?
'main/save_button'
:
(
'admin/add_field_button'
)),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosavefield'
=>
'1'
,
// for IE
'edit'
=>
@
$editfield
[
'fieldid'
],
'code'
=>
qa_get_form_security_code
(
'admin/userfields'
),
),
);
if
(
isset
(
$editfield
[
'fieldid'
]))
{
qa_set_display_rules
(
$qa_content
,
array
(
'type_display'
=>
'!dodelete'
,
'position_display'
=>
'!dodelete'
,
'register_display'
=>
'!dodelete'
,
'permit_display'
=>
'!dodelete'
,
));
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
}
$typeoptions
=
array
(
0
=>
qa_lang_html
(
'admin/field_single_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'
),
);
$permitoptions
=
qa_admin_permit_options
(
QA_PERMIT_ALL
,
QA_PERMIT_ADMINS
,
false
,
false
);
$permitvalue
=
@
$permitoptions
[
isset
(
$inpermit
)
?
$inpermit
:
$editfield
[
'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
(
'admin/field_name'
),
'value'
=>
qa_html
(
isset
(
$inname
)
?
$inname
:
qa_user_userfield_label
(
$editfield
)),
'error'
=>
qa_html
(
@
$errors
[
'name'
]),
),
'delete'
=>
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
'admin/delete_field'
),
'value'
=>
0
,
'type'
=>
'checkbox'
,
),
'type'
=>
array
(
'id'
=>
'type_display'
,
'tags'
=>
'name="type"'
,
'label'
=>
qa_lang_html
(
'admin/field_type'
),
'type'
=>
'select'
,
'options'
=>
$typeoptions
,
'value'
=>
@
$typeoptions
[
isset
(
$intype
)
?
$intype
:
(
@
$editfield
[
'flags'
]
&
(
QA_FIELD_FLAGS_MULTI_LINE
|
QA_FIELD_FLAGS_LINK_URL
))],
),
'permit'
=>
array
(
'id'
=>
'permit_display'
,
'tags'
=>
'name="permit"'
,
'label'
=>
qa_lang_html
(
'admin/permit_to_view'
),
'type'
=>
'select'
,
'options'
=>
$permitoptions
,
'value'
=>
$permitvalue
,
),
'position'
=>
array
(
'id'
=>
'position_display'
,
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
),
'onregister'
=>
array
(
'id'
=>
'register_display'
,
'tags'
=>
'name="onregister"'
,
'label'
=>
qa_lang_html
(
'admin/show_on_register_form'
),
'type'
=>
'checkbox'
,
'value'
=>
isset
(
$inonregister
)
?
$inonregister
:
(
@
$editfield
[
'flags'
]
&
QA_FIELD_FLAGS_ON_REGISTER
),
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'label'
=>
qa_lang_html
(
isset
(
$editfield
[
'fieldid'
])
?
'main/save_button'
:
(
'admin/add_field_button'
)),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosavefield'
=>
'1'
,
// for IE
'edit'
=>
@
$editfield
[
'fieldid'
],
'code'
=>
qa_get_form_security_code
(
'admin/userfields'
),
),
);
if
(
isset
(
$editfield
[
'fieldid'
]))
{
qa_set_display_rules
(
$qa_content
,
array
(
'type_display'
=>
'!dodelete'
,
'position_display'
=>
'!dodelete'
,
'register_display'
=>
'!dodelete'
,
'permit_display'
=>
'!dodelete'
,
));
}
else
{
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 @@
Question2Answer by Gideon Greenspan and contributors
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
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
...
...
@@ -19,162 +16,178 @@
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
header
(
'Location: ../../../'
);
exit
;
}
namespace
Q2A\Controllers\Admin
;
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
;
/**
* 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'
);
if
(
!
isset
(
$oldpoints
))
$oldpoints
=
qa_get
(
'edit'
);
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
}
$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'
))
qa_redirect
(
'admin/users'
);
// Process saving an old or new user title
elseif
(
qa_clicked
(
'dosavetitle'
))
{
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
$securityexpired
=
false
;
if
(
!
qa_check_form_security_code
(
'admin/usertitles'
,
qa_post_text
(
'code'
)
))
$securityexpired
=
true
;
if
(
qa_clicked
(
'docancel'
))
qa_redirect
(
'admin/users'
)
;
else
{
if
(
qa_post_text
(
'dodelete'
))
{
unset
(
$pointstitle
[
$oldpoints
]);
elseif
(
qa_clicked
(
'dosavetitle'
))
{
require_once
QA_INCLUDE_DIR
.
'util/string.php'
;
}
else
{
$intitle
=
qa_post_text
(
'title'
);
$inpoints
=
qa_post_text
(
'points'
);
if
(
!
qa_check_form_security_code
(
'admin/usertitles'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
$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
[
'title'
]
=
qa_lang
(
'main/field_required'
);
$errors
=
array
();
if
(
!
is_numeric
(
$inpoints
))
$errors
[
'points'
]
=
qa_lang
(
'main/field_required'
);
else
{
$inpoints
=
(
int
)
$inpoints
;
// Verify the title and points are legitimate
if
(
isset
(
$pointstitle
[
$inpoints
])
&&
((
!
strlen
(
@
$oldpoints
))
||
(
$inpoints
!=
$oldpoints
)))
$errors
[
'points'
]
=
qa_lang
(
'admin/title_already_used'
);
}
if
(
!
strlen
(
$intitle
))
$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
$newpoints
=
isset
(
$errors
[
'points'
])
?
$oldpoints
:
$inpoints
;
$newtitle
=
isset
(
$errors
[
'title'
])
?
$pointstitle
[
$oldpoints
]
:
$intitle
;
if
(
isset
(
$pointstitle
[
$inpoints
])
&&
((
!
strlen
(
@
$oldpoints
))
||
(
$inpoints
!=
$oldpoints
)))
$errors
[
'points'
]
=
qa_lang
(
'admin/title_already_used'
)
;
}
unset
(
$pointstitle
[
$oldpoints
]);
$pointstitle
[
$newpoints
]
=
$newtitle
;
// Perform appropriate action
}
elseif
(
empty
(
$errors
))
// creating a new
user title
$pointstitle
[
$inpoints
]
=
$intitle
;
}
if
(
isset
(
$pointstitle
[
$oldpoints
]))
{
// changing existing
user title
$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
=
''
;
foreach
(
$pointstitle
as
$points
=>
$title
)
$option
.=
(
strlen
(
$option
)
?
','
:
''
)
.
$points
.
' '
.
$title
;
// Save the new option value
qa_set_option
(
'points_to_titles'
,
$option
);
krsort
(
$pointstitle
,
SORT_NUMERIC
);
if
(
empty
(
$errors
))
qa_redirect
(
'admin/users'
);
}
}
$option
=
''
;
foreach
(
$pointstitle
as
$points
=>
$title
)
$option
.=
(
strlen
(
$option
)
?
','
:
''
)
.
$points
.
' '
.
$title
;
qa_set_option
(
'points_to_titles'
,
$option
);
// 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'
]);
}
if
(
empty
(
$errors
))
qa_redirect
(
'admin/users'
);
}
}
$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 @@
Question2Answer by Gideon Greenspan and contributors
http://www.question2answer.org/
Description: Controller for admin page for editing widgets
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
...
...
@@ -19,328 +16,344 @@
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
header
(
'Location: ../../../'
);
exit
;
}
namespace
Q2A\Controllers\Admin
;
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
;
/**
* 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'
);
if
(
!
strlen
(
$widgetid
))
$widgetid
=
qa_get
(
'edit'
);
$this
->
addMiddleware
(
new
MinimumUserLevel
(
QA_USER_LEVEL_ADMIN
));
}
list
(
$widgets
,
$pages
)
=
qa_db_select_with_pending
(
qa_db_widgets_selectspec
(),
qa_db_pages_selectspec
()
);
public
function
index
()
{
// Get current list of widgets and determine the state of this admin page
if
(
isset
(
$widgetid
))
{
$editwidget
=
null
;
foreach
(
$widgets
as
$widget
)
{
if
(
$widget
[
'widgetid'
]
==
$widgetid
)
$editwidget
=
$widget
;
}
$widgetid
=
qa_post_text
(
'edit'
);
if
(
!
strlen
(
$widgetid
))
$widgetid
=
qa_get
(
'edit'
);
}
else
{
$editwidget
=
array
(
'title'
=>
qa_post_text
(
'title'
));
if
(
!
isset
(
$editwidget
[
'title'
]))
$editwidget
[
'title'
]
=
qa_get
(
'title'
);
}
list
(
$widgets
,
$pages
)
=
qa_db_select_with_pending
(
qa_db_widgets_selectspec
(),
qa_db_pages_selectspec
()
);
$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
))
return
$qa_content
;
// Check admin privileges (do late to allow one DB query)
if
(
!
qa_admin_check_privileges
(
$qa_content
))
return
$qa_content
;
// Define an array of relevant templates we can use
$templatelangkeys
=
array
(
'question'
=>
'admin/question_pages'
,
// Define an array of relevant templates we can use
'qa'
=>
'main/recent_qs_as_title'
,
'activity'
=>
'main/recent_activity_title'
,
'questions'
=>
'admin/question_lists'
,
'hot'
=>
'main/hot_qs_title'
,
'unanswered'
=>
'main/unanswered_qs_title'
,
$templatelangkeys
=
array
(
'question'
=>
'admin/question_pages'
,
'tags'
=>
'main/popular_tags'
,
'categories'
=>
'misc/browse_categories'
,
'users'
=>
'main/highest_users'
,
'ask'
=>
'question/ask_title'
,
'qa'
=>
'main/recent_qs_as_title'
,
'activity'
=>
'main/recent_activity_title'
,
'questions'
=>
'admin/question_lists'
,
'hot'
=>
'main/hot_qs_title'
,
'unanswered'
=>
'main/unanswered_qs_title'
,
'tag'
=>
'admin/tag_pages'
,
'user'
=>
'admin/user_pages'
,
'message'
=>
'misc/private_message_title'
,
'tags'
=>
'main/popular_tags'
,
'categories'
=>
'misc/browse_categories'
,
'users'
=>
'main/highest_users'
,
'ask'
=>
'question/ask_title'
,
'search'
=>
'main/search_title'
,
'feedback'
=>
'misc/feedback_title'
,
'tag'
=>
'admin/tag_pages'
,
'user'
=>
'admin/user_pages'
,
'message'
=>
'misc/private_message_title'
,
'login'
=>
'users/login_title'
,
'register'
=>
'users/register_title'
,
'account'
=>
'profile/my_account_title'
,
'favorites'
=>
'misc/my_favorites_title'
,
'updates'
=>
'misc/recent_updates_title'
,
'search'
=>
'main/search_title'
,
'feedback'
=>
'misc/feedback_title'
,
'ip'
=>
'admin/ip_address_pages'
,
'admin'
=>
'admin/admin_title'
,
);
'login'
=>
'users/login_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'
))
{
foreach
(
$templatelangkeys
as
$template
=>
$langkey
)
{
if
(
$module
->
allow_template
(
$template
))
$templateoptions
[
$template
]
=
qa_lang_html
(
$langkey
);
}
$templateoptions
=
array
();
if
(
$module
->
allow_template
(
'custom'
))
{
$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
(
isset
(
$module
)
&&
method_exists
(
$module
,
'allow_template'
))
{
foreach
(
$templatelangkeys
as
$template
=>
$langkey
)
{
if
(
$module
->
allow_template
(
$template
))
$templateoptions
[
$template
]
=
qa_lang_html
(
$langkey
);
}
if
(
$isPagePlugin
||
!
(
$page
[
'flags'
]
&
QA_PAGE_FLAGS_EXTERNAL
))
$templateoptions
[
'custom-'
.
$page
[
'pageid'
]]
=
qa_html
(
$page
[
'title'
]);
if
(
$module
->
allow_template
(
'custom'
))
{
$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'
))
qa_redirect
(
'admin/layout'
)
;
elseif
(
qa_clicked
(
'dosavewidget'
))
{
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
elseif
(
qa_clicked
(
'dosavewidget'
))
{
require_once
QA_INCLUDE_DIR
.
'db/admin.php'
;
if
(
!
qa_check_form_security_code
(
'admin/widgets'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
if
(
!
qa_check_form_security_code
(
'admin/widgets'
,
qa_post_text
(
'code'
)))
$securityexpired
=
true
;
else
{
if
(
qa_post_text
(
'dodelete'
))
{
qa_db_widget_delete
(
$editwidget
[
'widgetid'
]);
qa_redirect
(
'admin/layout'
);
else
{
if
(
qa_post_text
(
'dodelete'
))
{
qa_db_widget_delete
(
$editwidget
[
'widgetid'
]);
qa_redirect
(
'admin/layout'
);
}
else
{
if
(
$widgetfound
)
{
$intitle
=
qa_post_text
(
'title'
);
$inposition
=
qa_post_text
(
'position'
);
$intemplates
=
array
();
}
else
{
if
(
$widgetfound
)
{
$intitle
=
qa_post_text
(
'title'
);
$inposition
=
qa_post_text
(
'position'
);
$intemplates
=
array
();
if
(
qa_post_text
(
'template_all'
))
$intemplates
[]
=
'all'
;
if
(
qa_post_text
(
'template_all'
))
$intemplates
[]
=
'all'
;
foreach
(
array_keys
(
$templateoptions
)
as
$template
)
{
if
(
qa_post_text
(
'template_'
.
$template
))
$intemplates
[]
=
$template
;
}
foreach
(
array_keys
(
$templateoptions
)
as
$template
)
{
if
(
qa_post_text
(
'template_'
.
$template
))
$intemplates
[]
=
$template
;
}
$intags
=
implode
(
','
,
$intemplates
);
$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
$widgetid
=
$editwidget
[
'widgetid'
];
qa_db_widget_set_fields
(
$widgetid
,
$intags
);
}
else
$widgetid
=
qa_db_widget_create
(
$intitle
,
$intags
);
}
else
$widgetid
=
qa_db_widget_create
(
$intitle
,
$intags
);
qa_db_widget_move
(
$widgetid
,
substr
(
$inposition
,
0
,
2
),
substr
(
$inposition
,
2
));
}
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
[
'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/layout_title'
);
$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
(
'F'
=>
'full'
,
'M'
=>
'main'
,
'S'
=>
'side'
,
);
$regioncodes
=
array
(
'F'
=>
'full'
,
'M'
=>
'main'
,
'S'
=>
'side'
,
);
foreach
(
$placeoptionhtml
as
$place
=>
$optionhtml
)
{
$region
=
$regioncodes
[
substr
(
$place
,
0
,
1
)];
foreach
(
$placeoptionhtml
as
$place
=>
$optionhtml
)
{
$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
)
{
foreach
(
$widgets
as
$widget
)
{
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
}
}
if
(
$widgetallowed
)
{
foreach
(
$widgets
as
$widget
)
{
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
}
}
if
(
$widgetallowed
)
{
$previous
=
null
;
$passedself
=
false
;
$maxposition
=
0
;
if
(
$widgetallowed
)
{
$previous
=
null
;
$passedself
=
false
;
$maxposition
=
0
;
foreach
(
$widgets
as
$widget
)
{
if
(
$widget
[
'place'
]
==
$place
)
{
$positionhtml
=
$optionhtml
;
foreach
(
$widgets
as
$widget
)
{
if
(
$widget
[
'place'
]
==
$place
)
{
$positionhtml
=
$optionhtml
;
if
(
isset
(
$previous
))
$positionhtml
.=
' - '
.
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
$passedself
?
$widget
[
'title'
]
:
$previous
[
'title'
]));
if
(
isset
(
$previous
))
$positionhtml
.=
' - '
.
qa_lang_html_sub
(
'admin/after_x'
,
qa_html
(
$passedself
?
$widget
[
'title'
]
:
$previous
[
'title'
]));
if
(
$widget
[
'widgetid'
]
==
@
$editwidget
[
'widgetid'
])
$passedself
=
true
;
if
(
$widget
[
'widgetid'
]
==
@
$editwidget
[
'widgetid'
])
$passedself
=
true
;
$maxposition
=
max
(
$maxposition
,
$widget
[
'position'
]);
$positionoptions
[
$place
.
$widget
[
'position'
]]
=
$positionhtml
;
$maxposition
=
max
(
$maxposition
,
$widget
[
'position'
]);
$positionoptions
[
$place
.
$widget
[
'position'
]]
=
$positionhtml
;
$previous
=
$widget
;
}
}
$previous
=
$widget
;
}
}
if
(
!
isset
(
$editwidget
[
'widgetid'
])
||
$place
!=
@
$editwidget
[
'place'
])
{
$positionhtml
=
$optionhtml
;
if
(
!
isset
(
$editwidget
[
'widgetid'
])
||
$place
!=
@
$editwidget
[
'place'
])
{
$positionhtml
=
$optionhtml
;
if
(
isset
(
$previous
))
$positionhtml
.=
' - '
.
qa_lang_html_sub
(
'admin/after_x'
,
$previous
[
'title'
]);
if
(
isset
(
$previous
))
$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'
]];
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'fields'
=>
array
(
'title'
=>
array
(
'label'
=>
qa_lang_html
(
'admin/widget_name'
)
.
' '
.
qa_html
(
$editwidget
[
'title'
]),
'type'
=>
'static'
,
'tight'
=>
true
,
),
'position'
=>
array
(
'id'
=>
'position_display'
,
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
),
'delete'
=>
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
'admin/delete_widget_position'
),
'value'
=>
0
,
'type'
=>
'checkbox'
,
),
'all'
=>
array
(
'id'
=>
'all_display'
,
'label'
=>
qa_lang_html
(
'admin/widget_all_pages'
),
'type'
=>
'checkbox'
,
'tags'
=>
'name="template_all" id="template_all"'
,
'value'
=>
is_numeric
(
strpos
(
','
.
@
$editwidget
[
'tags'
]
.
','
,
',all,'
)),
),
'templates'
=>
array
(
'id'
=>
'templates_display'
,
'label'
=>
qa_lang_html
(
'admin/widget_pages_explanation'
),
'type'
=>
'custom'
,
'html'
=>
''
,
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'label'
=>
qa_lang_html
(
isset
(
$editwidget
[
'widgetid'
])
?
'main/save_button'
:
(
'admin/add_widget_button'
)),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosavewidget'
=>
'1'
,
// for IE
'edit'
=>
@
$editwidget
[
'widgetid'
],
'title'
=>
@
$editwidget
[
'title'
],
'code'
=>
qa_get_form_security_code
(
'admin/widgets'
),
),
);
foreach
(
$templateoptions
as
$template
=>
$optionhtml
)
{
$qa_content
[
'form'
][
'fields'
][
'templates'
][
'html'
]
.=
'<input type="checkbox" name="template_'
.
qa_html
(
$template
)
.
'"'
.
(
is_numeric
(
strpos
(
','
.
@
$editwidget
[
'tags'
]
.
','
,
','
.
$template
.
','
))
?
' checked'
:
''
)
.
'/> '
.
$optionhtml
.
'<br/>'
;
}
$positionvalue
=
@
$positionoptions
[
$editwidget
[
'place'
]
.
$editwidget
[
'position'
]];
$qa_content
[
'form'
]
=
array
(
'tags'
=>
'method="post" action="'
.
qa_path_html
(
qa_request
())
.
'"'
,
'style'
=>
'tall'
,
'fields'
=>
array
(
'title'
=>
array
(
'label'
=>
qa_lang_html
(
'admin/widget_name'
)
.
' '
.
qa_html
(
$editwidget
[
'title'
]),
'type'
=>
'static'
,
'tight'
=>
true
,
),
'position'
=>
array
(
'id'
=>
'position_display'
,
'tags'
=>
'name="position"'
,
'label'
=>
qa_lang_html
(
'admin/position'
),
'type'
=>
'select'
,
'options'
=>
$positionoptions
,
'value'
=>
$positionvalue
,
),
'delete'
=>
array
(
'tags'
=>
'name="dodelete" id="dodelete"'
,
'label'
=>
qa_lang_html
(
'admin/delete_widget_position'
),
'value'
=>
0
,
'type'
=>
'checkbox'
,
),
'all'
=>
array
(
'id'
=>
'all_display'
,
'label'
=>
qa_lang_html
(
'admin/widget_all_pages'
),
'type'
=>
'checkbox'
,
'tags'
=>
'name="template_all" id="template_all"'
,
'value'
=>
is_numeric
(
strpos
(
','
.
@
$editwidget
[
'tags'
]
.
','
,
',all,'
)),
),
'templates'
=>
array
(
'id'
=>
'templates_display'
,
'label'
=>
qa_lang_html
(
'admin/widget_pages_explanation'
),
'type'
=>
'custom'
,
'html'
=>
''
,
),
),
'buttons'
=>
array
(
'save'
=>
array
(
'label'
=>
qa_lang_html
(
isset
(
$editwidget
[
'widgetid'
])
?
'main/save_button'
:
(
'admin/add_widget_button'
)),
),
'cancel'
=>
array
(
'tags'
=>
'name="docancel"'
,
'label'
=>
qa_lang_html
(
'main/cancel_button'
),
),
),
'hidden'
=>
array
(
'dosavewidget'
=>
'1'
,
// for IE
'edit'
=>
@
$editwidget
[
'widgetid'
],
'title'
=>
@
$editwidget
[
'title'
],
'code'
=>
qa_get_form_security_code
(
'admin/widgets'
),
),
);
foreach
(
$templateoptions
as
$template
=>
$optionhtml
)
{
$qa_content
[
'form'
][
'fields'
][
'templates'
][
'html'
]
.=
'<input type="checkbox" name="template_'
.
qa_html
(
$template
)
.
'"'
.
(
is_numeric
(
strpos
(
','
.
@
$editwidget
[
'tags'
]
.
','
,
','
.
$template
.
','
))
?
' checked'
:
''
)
.
'/> '
.
$optionhtml
.
'<br/>'
;
}
if
(
isset
(
$editwidget
[
'widgetid'
]))
{
qa_set_display_rules
(
$qa_content
,
array
(
'templates_display'
=>
'!(dodelete||template_all)'
,
'all_display'
=>
'!dodelete'
,
));
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
qa_set_display_rules
(
$qa_content
,
array
(
'templates_display'
=>
'!template_all'
,
));
}
if
(
isset
(
$editwidget
[
'widgetid'
]))
{
qa_set_display_rules
(
$qa_content
,
array
(
'templates_display'
=>
'!(dodelete||template_all)'
,
'all_display'
=>
'!dodelete'
,
));
if
(
!
$widgetfound
)
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'title'
][
'tight'
]);
$qa_content
[
'form'
][
'fields'
][
'title'
][
'error'
]
=
qa_lang_html
(
'admin/widget_not_available'
);
unset
(
$qa_content
[
'form'
][
'fields'
][
'position'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'all'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'templates'
]);
if
(
!
isset
(
$editwidget
[
'widgetid'
]))
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'
]);
}
}
else
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'delete'
]);
qa_set_display_rules
(
$qa_content
,
array
(
'templates_display'
=>
'!template_all'
,
));
}
if
(
!
$widgetfound
)
{
unset
(
$qa_content
[
'form'
][
'fields'
][
'title'
][
'tight'
]);
$qa_content
[
'form'
][
'fields'
][
'title'
][
'error'
]
=
qa_lang_html
(
'admin/widget_not_available'
);
unset
(
$qa_content
[
'form'
][
'fields'
][
'position'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'all'
]);
unset
(
$qa_content
[
'form'
][
'fields'
][
'templates'
]);
if
(
!
isset
(
$editwidget
[
'widgetid'
]))
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