• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Изменить Скрипт Хайд Для Ipb

  • Автор темы usergeyv
  • Дата начала
U

usergeyv

Форум IPB 3.3.3 (Измена Скрипта ХайдКонтент)
Что сюда и куда дописать чтобы было - ''текст доступен только пользователям, набравшим ''n'' количество спасибок''
и работал с хук Ajax Thanks (ссылка на хук
Хук Хайд Контент (ссылка на хук
Заранее спасибо
Код:
<?php
if ( ! defined( 'IN_IPB' ) )
{
print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.";
exit();
}
class public_forums_ajax_ritsu_hide_text extends ipsAjaxCommand
{

public function doExecute( ipsRegistry $registry )
{
$this->registry = ipsRegistry::instance();
$this->settings['no_print_header'] = 0;

switch( $this->request['do'] )
{
case 'load_data':
return $this->loadData();
break;
default:
$this->returnJsonError( 'no_permission' );
break;
}
}
private function loadData( )
{
$error = true;
if(isset($_POST["dataset"]))
{
$in = explode(".", $_POST["dataset"]);
$keys = array();
while(list($key, $val) = each($in))
if (preg_match("/^[0-9a-z]+$/D", $val))
$keys[] = $val;

if(sizeof($keys) > 0)
{
$this->DB->build( array(
'select'		=> "r.*",
'from'		 => array('ritsu_hide_text' => 'r'),
'where' => 'r.key IN ("'.implode('","', $keys).'")'
)	  );
$query = $this->DB->execute();
$response = array( );
while($block = $this->DB->fetch($query))
{
$conditions = unserialize( $block["condition"] );
$allow = true; $why = array( );

// -------------------------------------------------------------------------------------------------------------------------------
// AUTH
if($conditions["auth"] != "0" && $this->memberData['member_id'] == 0)
{
$allow = false;
$why[] = "текст доступен только авторизованным пользователям;";
}
// -------------------------------------------------------------------------------------------------------------------------------
// NICK

if( !(in_array("any", $conditions["nick"])) && !(in_array($this->memberData['member_id'], $conditions["nick"])) )
{
$allowed = array( );
$this->DB->build( array(
'select' => "m.name",
'from' => array('members' => 'm'),
'where'		=> 'member_id IN("'.implode('", "', $conditions["nick"]).'")'
)	 );		 
$subquery = $this->DB->execute();
while($member = $this->DB->fetch($subquery))
{
$allowed[] = htmlspecialchars($member["name"]);
}
$allow = false;
$why[] = "текст доступен только пользователям с никами: <b>".implode(", ", $allowed)."</b>;";
}
// -------------------------------------------------------------------------------------------------------------------------------
// THANK & REPLY

if($conditions["thank"] != "0" || $conditions["reply"] != "0")
{
if($this->memberData['member_id'] == 0)
{
$allow = false;
if($conditions["thank"] != "0")
$why[] = "текст доступен только авторизованным пользователям, поставившим автору плюс в репутацию за данное сообщение;<br />";
if($conditions["reply"] != "0")
$why[] = "текст доступен только авторизованным пользователям, ответившим в данную тему;<br />";
}
$pid = $this->fetchPID( $block["key"] );

if($pid == 0)
{
$allow = false;
$why[] = "скрытый текст не доступен в данной форме отображения, перейдите к просмотру темы с этим сообщением;<br />";
} else {
$author = $this->fetchAuthor( $pid );
if($this->memberData['member_id'] != $author && $this->memberData['member_id'] > 0)
if($conditions["thank"] != "0")
{
$this->DB->build( array(
'select' => "r.id",
'from' => array('reputation_index' => 'r'),
'where'		=> 'r.app = "forums" AND r.type = "pid" AND r.rep_rating = "1" AND r.type_id = "'.$pid.'" AND r.member_id = "'.$this->memberData['member_id'].'"'
)	 );		 
$subquery = $this->DB->execute();
if($rep = $this->DB->fetch($subquery))
{
} else {
$allow = false;
$why[] = "текст доступен только пользователям, поставившим автору плюс в репутацию за данное сообщение;<br />";
}
}
if($this->memberData['member_id'] != $author && $this->memberData['member_id'] > 0)
if($conditions["reply"] != "0")
{
$this->DB->build( array(
'select' => "p.*",
'from' => array('posts' => 'p'),
'where'		=> 'p.pid = "'.$pid.'"'
)	 );		 
$subquery = $this->DB->execute();
if($post = $this->DB->fetch($subquery))
{

$this->DB->build( array(
'select' => "p.topic_id",
'from' => array('posts' => 'p'),
'where'		=> 'p.topic_id = "'.$post['topic_id'].'" AND p.post_date > "'.$post["post_date"].'"'
)	 );		 
$subquery = $this->DB->execute();
if(!($rep = $this->DB->fetch($subquery)))
{
$allow = false;
$why[] = "текст доступен только пользователям, ответившим в данную тему;<br />";
}

} else {
$allow = false;
$why[] = "сообщение потерялось;<br />";
}

}
}
}
// -------------------------------------------------------------------------------------------------------------------------------
// rep
if($conditions["rep"] != "0")
{
if($this->memberData['member_id'] == 0)
{
$allow = false;
$why[] = "текст доступен только пользователям, набравшим ".$conditions["rep"]." баллов репутации;";
} else {
if($this->memberData['pp_reputation_points'] < $conditions["rep"])
{
$allow = false;
$why[] = "текст доступен только пользователям, набравшим ".$conditions["rep"]." баллов репутации;";
}
}
}

// -------------------------------------------------------------------------------------------------------------------------------
// posts
if($conditions["posts"] != "0")
{
if($this->memberData['member_id'] == 0)
{
$allow = false;
$why[] = "текст доступен только пользователям, оставившим больше ".$conditions["posts"]." сообщений на форуме;";
} else {
if($this->memberData['posts'] < $conditions["posts"])
{
$allow = false;
$why[] = "текст доступен только пользователям, оставившим больше ".$conditions["posts"]." сообщений на форуме;";
}
}
}

// -------------------------------------------------------------------------------------------------------------------------------
// group
if( !(in_array("any", $conditions["group"])) && !(in_array($this->memberData['member_group_id'], $conditions["nick"])) )
{
$allowed = array( );
$this->DB->build( array(
'select' => "g.g_title",
'from' => array('groups' => 'g'),
'where'		=> 'lower(g.g_id) IN("'.implode('", "', $conditions["group"]).'")'
)	 );		 
$subquery = $this->DB->execute();
while($group = $this->DB->fetch($subquery))
{
$allowed[] = htmlspecialchars($group["g_title"]);
}
$allow = false;
$why[] = "текст доступен только пользователям из групп: <b>".implode(", ", $allowed)."</b>;";
}

/*
$condition = array (
'auth' => '1', //
'thank' => '0', //
'rep' => '0', //
'reply' => '0', //
'posts' => '0', //
'group' => '0',
'nick' => array('any') //
);
*/ if($allow)
{
IPSText::getTextClass( 'bbcode' )->parse_smilies						= 1;
IPSText::getTextClass( 'bbcode' )->parse_html							= 0;
IPSText::getTextClass( 'bbcode' )->parse_nl2br						 = 0;
IPSText::getTextClass( 'bbcode' )->parse_bbcode						 = 1;
IPSText::getTextClass( 'bbcode' )->parsing_section			 = 'topics';
IPSText::getTextClass( 'bbcode' )->parsing_mgroup					  = $this->memberdata['member_group_id'];
IPSText::getTextClass( 'bbcode' )->parsing_mgroup_others		= $this->memberData['mgroup_others'];
$block["data"] = IPSText::getTextClass( 'bbcode' )->preDisplayParse( $block["data"] );
$response[$block["key"]] = $block["data"];
} else {
$response[$block["key"]] = "<p>Необходимо выполнить следующие условия:</p><ul class='bbcol decimal'><li>".implode("</li><li>", $why)."</li></ul>";
}
}
if(sizeof($response) > 0)
{
$error = false;
$this->returnJsonArray( $response );
}
}
}
if($error) $this->returnJsonError( 'no_permission' );
}
private function fetchPID( $key )
{
$string = "<div class='ristu_hide_text' id='hide_{$key}'";
$this->DB->build( array(
'select' => "c.cache_content_id",
'from' => array('content_cache_posts' => 'c'),
'where' => 'c.cache_content LIKE "%'.$string.'%"'
)	  );		 
$subquery = $this->DB->execute();
if($post = $this->DB->fetch($subquery))
{
return $post["cache_content_id"];
} else
return 0;
}

private function fetchAuthor( $pid )
{

$this->DB->build( array(
'select' => "p.author_id",
'from' => array('posts' => 'p'),
'where' => 'p.pid = "'.$pid.'"'
)	  );		 
$subquery = $this->DB->execute();
if($post = $this->DB->fetch($subquery))
{
return $post["author_id"];
} else
return 0;
}
}
 
U

usergeyv

Форум программистов!!, а помощи нет.
 
U

usergeyv

Если тут не знают как это сделать, то хоть подскажите куда обратится за помощью
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!