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

Тема в разделе "Общие вопросы", создана пользователем usergeyv, 7 июл 2013.

  1. usergeyv

    usergeyv New Member

    Регистрация:
    7 июл 2013
    Сообщения:
    3
    Симпатии:
    0
    Форум IPB 3.3.3 (Измена Скрипта ХайдКонтент)
    Что сюда и куда дописать чтобы было - ''текст доступен только пользователям, набравшим ''n'' количество спасибок''
    и работал с хук Ajax Thanks (ссылка на хук http://rghost.ru/47257678)
    Хук Хайд Контент (ссылка на хук http://rghost.ru/47257709)
    Заранее спасибо
    Код (Text):
    <?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;
    }
    }
     
  2. usergeyv

    usergeyv New Member

    Регистрация:
    7 июл 2013
    Сообщения:
    3
    Симпатии:
    0
    Форум программистов!!, а помощи нет.
     
  3. usergeyv

    usergeyv New Member

    Регистрация:
    7 июл 2013
    Сообщения:
    3
    Симпатии:
    0
    Если тут не знают как это сделать, то хоть подскажите куда обратится за помощью
     
Загрузка...

Поделиться этой страницей