1. Мы продолжаем публиковать интересные статьи на тему SocialEngine 4. Одна из статей посвящена правильному выбору сервера для вашей социальной сети, а другая содержит советы по увеличению производительности платформы. Также мы добавили большую статью о пользовательских уровнях. Ознакомиться со статьями вы можете в разделе Вопросы и Ответы SocialEngine 4.
  2. Вам кажется, что ваша версия SocialEngine 4, работает медленно?

    Голосуйте. Пишите свою версию системы, железо на чем работает и количество пользователей. Будем увеличивать производительность :-) Подробнее

  3. В связи с участившимися случаями попыток продажи пользователями форума различных "сборок" коммерческих социальных платформ, обычно основанных на SocialEngine 3, вводится новое правило для форума. Запрещается создание тем или размещение в уже созданных предложений о продаже или размещение ссылок на сайты, где происходит продажа "сборок". Пользователи, которые продолжат свою коммерческую деятельность в данном направлении, будут заблокированы. Подробнее.

Modification Супер приватность SE3

Discussion in 'Моды - Mods' started by Gooos, Jan 3, 2012.

  1. Gooos Thread starter абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Может у кого есть или кто заинтересован в реализации следующего мода для SE3:
    Нужна расширенная приватность, а именно при выборе кому показывать фотоальбом или блог, юзер смог выбрать не только "Только мои друзья", но и при желании указать тип дружбы кому можно.
    Взять за основу типы дружбы "Семья", "Знакомый" и пр. , что в админке создаются и на их базе замутить эту расширенную приватность..

    В общем далее вы увидите ход моих мыслей и действий и в итоге у вас будет работающий мод.


    5555.jpg
    Хитров, Iulii, Canvit and 9 others like this.
  2. Gooos Thread starter абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Начнём потихоньку (для альбомов).

    Выведем селект в нужном месте. По умолчанию селект скрыт, появляется только если выбран соответствующий радиобутон.

    В файле user_album_edit.php и user_album_add.php добавить внизу перед // ASSIGN VARIABLES AND SHOW EDIT ALBUMS PAGE:
    PHP:
    // GET FRIEND TYPES IF AVAILABLE
    $connection_types array_filter(explode("<!>"trim($setting['setting_connection_types'])));
    $smarty->assign('connection_types'$connection_types);
    В файле user_album_edit.tpl найти:
    PHP:
    {* SHOW PRIVACY OPTIONS IF ALLOWED BY ADMIN *}
    {if 
    $privacy_options|@count 1}
      <
    br>
      <
    div><b>{lang_print id=1000082}</b></div>
    ...
    ...
    ...
    {/if}
    и заменить весь блок на:
    PHP:
    {* SHOW PRIVACY OPTIONS IF ALLOWED BY ADMIN *}
    {if 
    $privacy_options|@count 1}
      <
    br>
      <
    div><b>{lang_print id=1000082}</b></div>
      <
    table cellpadding='0' cellspacing='0'>
        {foreach 
    from=$privacy_options name=privacy_loop key=k item=v}
          <
    tr>
          <
    td valign='top'>
    <
    input type='radio' name='album_privacy' id='privacy_{$k}' value='{$k}'{if $album_info.album_privacy == $kchecked='checked'{/if} {literalonClick="{show_hide()}"{/literal}>
        </
    td>
          <
    td><label for='privacy_{$k}'>{lang_print id=$v}</label>
     
    {* 
    SUPER PRIVACY *}
        {
    literal}
    <
    script Language="JavaScript">
    <!--
    function 
    show_hide()
    {
      if (
    document.getElementById('privacy_3').checked == true) {
            
    document.getElementById('friends_type').style.display = ('block')
    } else {
            
    document.getElementById('friends_type').style.display = ('none');
            
    document.getElementById('album_super_privacy').selectedIndex 0
          
    }
    }
    show_hide();
    -->
    </script>
        {/literal}
        {if $k == 3}
        <span id="friends_type"  style="float:right;display: none">
          <select id='album_super_privacy' name='album_super_privacy' style='padding:0px;margin-right:5px'>
          <option value=''>{lang_print id=232}</option>
          {section name=type_loop loop=$connection_types}
            <option value='{$connection_types[type_loop]}' {if $friend_type == $connection_types[type_loop]} SELECTED{/if}>{$connection_types[type_loop]}</option>
          {/section}
          </select>
        </span>
        {/if}
    {* SUPER PRIVACY END *}
     
          </td>
          </tr>
        {/foreach}
      </table>
    {/if}
    В файле user_album_add.tpl найти:
    PHP:
    {* SHOW PRIVACY OPTIONS IF ALLOWED BY ADMIN *}
    {if 
    $privacy_options|@count 1}
      <
    br>
      <
    div><b>{lang_print id=1000082}</b></div>
    ...
    ...
    ...
    {/if}
    и заменить весь блок на:
    PHP:
    {* SHOW PRIVACY OPTIONS IF ALLOWED BY ADMIN *}
    {if 
    $privacy_options|@count 1}
      <
    br>
      <
    div><b>{lang_print id=1000082}</b></div>
      <
    table cellpadding='0' cellspacing='0'>
        {foreach 
    from=$privacy_options name=privacy_loop key=k item=v}
          <
    tr>
          <
    td valign='top'>
    <
    input type='radio' name='album_privacy' id='privacy_{$k}' value='{$k}'{if $album_privacy == $kchecked='checked'{/if} {literalonClick="{show_hide()}"{/literal}>
        </
    td>
          <
    td><label for='privacy_{$k}'>{lang_print id=$v}</label>
     
    {* 
    SUPER PRIVACY *}
        {
    literal}
    <
    script Language="JavaScript">
    <!--
    function 
    show_hide()
    {
      if (
    document.getElementById('privacy_3').checked == true) {
            
    document.getElementById('friends_type').style.display = ('block')
    } else {
            
    document.getElementById('friends_type').style.display = ('none');
            
    document.getElementById('album_super_privacy').selectedIndex 0
          
    }
    }
    show_hide();
    -->
    </script>
        {/literal}
        {if $k == 3}
        <span id="friends_type"  style="float:right;display: none">
          <select id='album_super_privacy' name='album_super_privacy' style='padding:0px;margin-right:5px'>
          <option value=''>{lang_print id=232}</option>
          {section name=type_loop loop=$connection_types}
            <option value='{$connection_types[type_loop]}' {if $friend_type == $connection_types[type_loop]} SELECTED{/if}>{$connection_types[type_loop]}</option>
          {/section}
          </select>
        </span>
        {/if}
    {* SUPER PRIVACY END *}
     
          </td>
          </tr>
        {/foreach}
      </table>
    {/if}
    Получим следующий результат:
    super_privacy.jpg
    StormMan, JaGuAr71, twixi007 and 2 others like this.
  3. Gooos Thread starter абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Теперь создадим в таблице se_albums ещё одно поле album_super_privacy
    PHP:

    ALTER TABLE
    `se_albums`
    ADD
    `album_super_privacytext COLLATE utf8_unicode_ci
    AFTER
    `album_privacy`
    В файле user_album_edit.php попробуем получит значения и передать в БД:
    PHP:
    // SAVE NEW INFO
    if($task == "dosave") {
      
    $album_info[album_title] = censor($_POST['album_title']);
      
    $album_info[album_desc] = censor(str_replace("\r\n""<br>"$_POST['album_desc']));
      
    $album_info[album_search] = $_POST['album_search'];
      
    $album_info[album_privacy] = $_POST['album_privacy'];
      
    /**************super privacy**************/
      
    $album_info[album_super_privacy] = $_POST['album_super_privacy'];
      
    /**************super privacy**************/
      
    $album_info[album_comments] = $_POST['album_comments'];
      
    $album_info[album_tag] = $_POST['album_tag'];
      
    $album_info[album_dateupdated] = time();
     
     
      
    // MAKE SURE SUBMITTED PRIVACY OPTIONS ARE ALLOWED, IF NOT, SET TO EVERYONE
      
    if(!in_array($album_info[album_privacy], $level_album_privacy)) { $album_info[album_privacy] = $level_album_privacy[0]; }
      if(!
    in_array($album_info[album_comments], $level_album_comments)) { $album_info[album_comments] = $level_album_comments[0]; }
      if(!
    in_array($album_info[album_tag], $level_album_tag)) { $album_info[album_tag] = $level_album_tag[0]; }
     
      
    // CHECK THAT TITLE IS NOT BLANK
      
    if(trim($album_info[album_title]) == "") { $is_error 1000073; }
     
      
    // IF NO ERROR, CONTINUE
      
    if($is_error == 0) {
     
        
    // EDIT ALBUM IN DATABASE
        
    $database->database_query("UPDATE se_albums SET album_title='$album_info[album_title]',
                        album_desc='
    $album_info[album_desc]',
                        album_search='
    $album_info[album_search]',
                        album_privacy='
    $album_info[album_privacy]',
     
                        album_super_privacy='
    $album_info[album_super_privacy]',
     
                        album_comments='
    $album_info[album_comments]',
                        album_tag='
    $album_info[album_tag]',
                        album_dateupdated='
    $album_info[album_dateupdated]' WHERE album_id='$album_info[album_id]'");
     
        
    // UPDATE LAST UPDATE DATE (SAY THAT 10 TIMES FAST)
        
    $user->user_lastupdate();
     
        
    $result 1;
      }
    --- добавлено: Jan 13, 2012 7:40 PM ---
    Значения передаются и пишутся в БД

    В файле user_album_add.php сделать по анологии.
  4. Gooos Thread starter абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Теперь в album.php перед:
    PHP:
    // CHECK PRIVACY
    $privacy_max $owner->user_privacy_max($user);
    if(!(
    $album_info[album_privacy] & $privacy_max)) {
      
    $page "error";
      
    $smarty->assign('error_header'639);
      
    $smarty->assign('error_message'1000125);
      
    $smarty->assign('error_submit'641);
      include 
    "footer.php";
    }
    Вставить это:
    PHP:
    /**************super privacy**************/
    $friendship $database->database_fetch_assoc($database->database_query("SELECT friend_id, friend_type FROM se_friends WHERE friend_user_id2='{$user->user_info['user_id']}' AND friend_user_id1='{$owner->user_info['user_id']}' AND friend_status='1'"));
    $my_friend_type $friendship['friend_type'];
    $super_privacy $album_info['album_super_privacy'];
     
    // временная проверка вывода значений, потом убрать
    $smarty->assign('my_friend_type'$my_friend_type);
    $smarty->assign('super_privacy'$super_privacy);
     
    // показ страницы ошибки при запрете в суперприватности
    if($super_privacy != '' $my_friend_type != '' ) {
    if(
    $my_friend_type != $super_privacy) {
      
    $page "error";
      
    $smarty->assign('error_header'639);
      
    $smarty->assign('error_message'1000125);
      
    $smarty->assign('error_submit'641);
      include 
    "footer.php";
    }
    }
    /**************end super privacy**************/
     
    В файле album.tpl для проверки работы можно вставить в удобное место код, соответственно сняв комметарий:
    PHP:
      <!--<br />
      
    Я = {$my_friend_type}, Супер Приватность = {$super_privacy}-->
  5. Gooos Thread starter абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    В общем заработало.

    Может код конечно и не очень, но Супер Приватность в альбомах работает, тестирую пока.
  6. Gooos Thread starter абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Если кто во время тестирования найдёт баги или сделает улучшение, постите сюда свои соображения.
  7. Gooos Thread starter абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Найден первый баг.
    Если выбрать супер приватность (любой тип друга, кроме "Все"), а потом передумать и сменить тип приватности с Только мои друзья на другой, например на Только мои друзья и их друзья, в моей подсети, то значение супер приватности не обнуляется (должно автопереключиться на "Все", т.е. стать пустым)

    Танцы с бубном в user_album_edit.php желаемого результата пока не принесло:
    Кто поможет в шаблоне яваскрипт дописать?
    PHP:
    <script Language="JavaScript">
    <!--
    function 
    show_hide()
    {
      if (
    document.getElementById('privacy_3').checked == true) {
            
    document.getElementById('friends_type').style.display = ('block')
        } else {
            
    document.getElementById('friends_type').style.display = ('none')
    /* вставить дополнительное действие на автопереключение на первый селект - this.selectedIndex = 0; */
        
    }
    }
    show_hide();
    -->
    </script>
    StormMan likes this.
  8. Gooos Thread starter абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Решение проблемы:
    В шаблоне добавляем id к селекту:
    PHP:
    <select id='album_super_privacy' name='album_super_privacy' style='padding:0px;'>
    в яваскрипте добавляем новую строчку
    PHP:
    <script Language="JavaScript">
    <!--
    function 
    show_hide()
    {
      if (
    document.getElementById('privacy_3').checked == true) {
            
    document.getElementById('friends_type').style.display = ('block')
        } else {
            
    document.getElementById('friends_type').style.display = ('none');
    // новый элемент
            
    document.getElementById('album_super_privacy').selectedIndex 0;
        }
    }
    show_hide();
    -->
    </script>
    и всё заработало.

    P.S: предыдущие посты с кодом шаблонов пофиксены
  9. Gooos Thread starter абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Больше багов не нашёл, мод рабочий, юзайте на здоровье.

    P.S: если кто желает, то может по аналогии сделать и для других плагинов.
    Мод имеет смысл, если у вас чёткая и понятная иерархия типов дружбы (настраивается в админке) и пользователи не ленятся и выбирают всем своим друзьям соответствующие типы дружбы.
  10. Gooos Thread starter абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Кому надо, добавляем подсказку для пользователей:
    PHP:
          {capture assign=tip}Что-бы воспользоваться фильтромвы должны указать для всех своих друзей соответствующий тип дружбы{/capture}
          <
    img src='./images/icons/tip.gif' border='0' class='Tips1' title='{$tip|replace:"'":"&#039;"}'>
    вставлять перед закрывающим тегом </span>
    PHP:
        </span>
        {/if}
    {* 
    SUPER PRIVACY END *}
    результат:

    21-06-2012 16-28-41.jpg

Share This Page

All rights reserved SocEngine.ru ©