» » » Копирование музыки у друзей в SocialEngine Excalibur

Копирование музыки у друзей в SocialEngine Excalibur

Копирование музыки у друзей в SocialEngine Excalibur


В этой статье поговорим о плагине “Музыка”, а именно о копировании музыки у друзей. А что тут говорить, такой возможности в плагине “Музыка” нет, так вот я покажу, как в несколько шагов реализовать такую возможность.

Сначала необходимо Добавить: еще одно поле в таблицу «se_music», где хранятся записи о добавленным песнях. Выполним sql-запрос:

ALTER TABLE `se_music` ADD `owner_user_id` text AFTER `music_user_id`

Для работы функции «is_already_music()», которая возвращает логическую ложь в том случае, если у участника нет данной песни в его коллекции, пропишем ее в класс «user».



1. Открыть: class_user.php
Подсказка: Данный файл находится в папке include.
Найти:
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть. Данная часть кода находится внутри функции user_message_view ().

          return array

          (

          ‘collaborators’ => &$collaborators,

          ‘pms’           => &$pms

          );

          }

Добавить после:

Подсказка: Добавьте эти строки на новой строке после ранее найденных строк.

          function is_already_music($music_id)

          {

          global $database;

          $music_tb = $database->database_fetch_assoc($database->database_query(»SELECT owner_user_id FROM se_music WHERE music_id=’{$music_id}’ LIMIT 1?));

          $owner_user_id = $music_tb[owner_user_id];

          if(substr_count($owner_user_id, $this->user_info['user_id']) == 0)

          return 0;

          else

          return 1;

          return 1;

          }


Далее уже будем работать с файлами, отвечающими за вывод и добавление музыки.


2. Открыть: class_music.php
Найти:
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть. Данная часть кода находится внутри функции music_list ().

          if( $this->user_id ) $sql .= "

          WHERE

          se_music.music_user_id=’{$this->user_id}’

          «;

Заменить:

Подсказка: Произведите замену ранее найденных строк.

          if( $this->user_id ) $sql .= "

          WHERE

          se_music.music_user_id=’{$this->user_id}’ OR FIND_IN_SET(’{$this->user_id}’, owner_user_id)»;

3. Открыть: browse_music.php
Найти:
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

          $music_object = new se_music();

Добавить:

Подсказка: Добавьте эти строки на новой строке перед ранее найденными строками.

          $music_id = $_GET['music_id'];

          if( $_GET['task'] == «copy» && $music_id > 0)

          {

          ob_end_clean();

          $music_tb = $database->database_fetch_assoc($database->database_query(»SELECT owner_user_id FROM se_music WHERE music_id=’{$music_id}’ LIMIT 1?));

          $owner_user_id = trim($music_tb[owner_user_id]);

          if(strrchr($owner_user_id, ‘,’))

          {

          $owner_user_id_text = explode(’,', $owner_user_id);

          $owner_user_id_update = «»;

          foreach($owner_user_id_text as $owner_user_id)

          {

          if($owner_user_id != $user->user_info['user_id'])

          $owner_user_id_update = $owner_user_id_update . «» . $owner_user_id . «,»;

          }

          $owner_user_id_update = $owner_user_id_update . «» . $user->user_info['user_id'];

          }

          else

          {

          if($owner_user_id == $user->user_info['user_id'] || strlen($owner_user_id) == 0)

          $owner_user_id_update = $user->user_info['user_id'];

          if( strlen($owner_user_id) > 0 )

          $owner_user_id_update = $owner_user_id . «,» . $user->user_info['user_id'];

          }

          $database->database_query(»UPDATE `se_music` SET `owner_user_id` = ‘{$owner_user_id_update}’ WHERE `music_id` = ‘{$music_id}’ LIMIT 1?);

          }

4. Открыть: user_music.php
Найти:
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

          $musiclist = $music->music_list();

Добавить:

Подсказка: Добавьте эти строки на новой строке перед ранее найденными строками.

          if( $task == "removesong" && $music_id > 0)

          {

          ob_end_clean();

          $music_tb = $database->database_fetch_assoc($database->database_query(»SELECT owner_user_id FROM se_music WHERE music_id=’{$music_id}’ LIMIT 1?));

          $owner_user_id = $music_tb[owner_user_id];

          if(strrchr($owner_user_id, ‘,’))

          {

          $owner_user_id_text = explode(’,', $owner_user_id);

          $owner_user_id_db = «»;

          foreach($owner_user_id_text as $owner_user_id)

          {

          if($owner_user_id != $user->user_info['user_id'])

          $owner_user_id_db = $owner_user_id_db . «» . $owner_user_id . «,»;

          }

          $owner_user_id_db = trim(substr_replace($owner_user_id_db, «», strlen($owner_user_id_db) – 1));

          }

          else

          {

          if($owner_user_id == $user->user_info['user_id'])

          $owner_user_id_text = »;

          }

          $database->database_query(»UPDATE `se_music` SET `owner_user_id` = ‘{$owner_user_id_db}’ WHERE `music_id` = ‘{$music_id}’ LIMIT 1?);

          }

5. Открыть: music_ajax.php
Найти:
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.
     $user_dir = $url->url_userdir($user_id);

Удалить
Подсказка: Удалите ранее найденные строки.
Найти:
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.
 {$user_dir}

Заменить:
Подсказка: Произведите замену ранее найденных строк.
   {$url->url_userdir($song[music_user_id])}

6. Открыть: user_music.tpl
Найти:
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

          {assign var='media_dir' value=$url->url_userdir($user->user_info.user_id)}

          {section name=music_loop loop=$musiclist}

Заменить:

Подсказка: Произведите замену ранее найденных строк.

          {section loop=$musiclist}

          {assign var=’media_dir’ value=$url->url_userdir($musiclist[music_loop].music_user_id)}

Найти:

Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

          <input type='checkbox' name='delete_music_{$musiclist[music_loop].music_id}' value='1' />


Заменить:

Подсказка: Произведите замену ранее найденных строк.

         {if $musiclist[music_loop].music_user_id == $user->user_info.user_id}<input type='checkbox' name='delete_music_{$musiclist[music_loop].music_id}' value='1' />{/if}

Найти:

Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

         <span class="seMusicTitleEdit">&nbsp;(<a href="javascript:void(0);">{lang_print id=187}</a>)</span>


Заменить:

Подсказка: Произведите замену ранее найденных строк.

          {if $musiclist[music_loop].music_user_id == $user->user_info.user_id}<span class="seMusicTitleEdit">&nbsp;(<a href="javascript:void(0);">{lang_print id=187}</a>)</span>{/if}

Найти:

Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

          <span class="seMusicDelete"><a href="javascript:void(0);" onclick="SocialEngine.Music.deleteMusic({$musiclist[music_loop].music_id});">{lang_print id=155}</a>&nbsp;</span>

Заменить:

Подсказка: Произведите замену ранее найденных строк.

          {if $musiclist[music_loop].music_user_id == $user->user_info.user_id}

          <span class=»seMusicDelete»><a href=»javascript:void(0);» onclick=»SocialEngine.Music.deleteMusic({$musiclist[music_loop].music_id});»>{lang_print id=155}</a>&nbsp;</span>

          {else}

          <span class=»seMusicDelete»><a href=» user_music.php?task=removesong&music_id={$musiclist[music_loop].music_id}»>{lang_print id=155}</a>&nbsp;</span>

          {/if}

7. Открыть: user_music.tpl
Найти:
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

          {assign var='media_dir' value=$url->url_userdir($user->user_info.user_id)}

          {section name=music_loop loop=$musiclist}

Заменить:

Подсказка: Произведите замену ранее найденных строк.

          {section loop=$musiclist}

          {assign var=’media_dir’ value=$url->url_userdir($musiclist[music_loop].music_user_id)}

Найти:

Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

          <input type='checkbox' name='delete_music_{$musiclist[music_loop].music_id}' value='1' />

Заменить:

Подсказка: Произведите замену ранее найденных строк.

          {if $musiclist[music_loop].music_user_id == $user->user_info.user_id}<input type='checkbox' name='delete_music_{$musiclist[music_loop].music_id}' value='1' />{/if}

Найти:

Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

          <span class="seMusicTitleEdit">&nbsp;(<a href="javascript:void(0);">{lang_print id=187}</a>)</span>

Заменить:

Подсказка: Произведите замену ранее найденных строк.

          {if $musiclist[music_loop].music_user_id == $user->user_info.user_id}<span class="seMusicTitleEdit">&nbsp;(<a href="javascript:void(0);">{lang_print id=187}</a>)</span>{/if}

Найти:

Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

          <span class="seMusicDelete"><a href="javascript:void(0);" onclick="SocialEngine.Music.deleteMusic({$musiclist[music_loop].music_id});">{lang_print id=155}</a>&nbsp;</span>

Заменить:

Подсказка: Произведите замену ранее найденных строк.

          {if $musiclist[music_loop].music_user_id == $user->user_info.user_id}

          <span class=»seMusicDelete»><a href=»javascript:void(0);» onclick=»SocialEngine.Music.deleteMusic({$musiclist[music_loop].music_id});»>{lang_print id=155}</a>&nbsp;</span>

          {else}

          <span class=»seMusicDelete»><a href=» user_music.php?task=removesong&music_id={$musiclist[music_loop].music_id}»>{lang_print id=155}</a>&nbsp;</span>

          {/if}

Открыть: class_music.php

Подсказка: Данный файл находится в папке include.

Найти:

music_delete($music_id)

Заменить:

Подсказка: Полностью заменить функцию music_delete() начиная с function music_delete($music_id) и заканчивая return TRUE; }

function music_delete($music_id)

{

global $database, $url, $user, $admin;

if( $this->user_id )

{

$music = $database->database_fetch_assoc($database->database_query("SELECT * FROM se_music WHERE music_user_id='{$this->user_id}' && music_id='{$music_id}'"));

}

elseif( $admin && $admin->admin_exists )

{

$music = $database->database_fetch_assoc($database->database_query("SELECT * FROM se_music WHERE music_id='{$music_id}'"));

}

if( empty($music) )

return FALSE;

$music_tb = $database->database_fetch_assoc($database->database_query("SELECT owner_user_id FROM se_music WHERE music_id='{$music_id}' LIMIT 1"));

$owner_user_id = $music_tb[owner_user_id];

if( strlen($owner_user_id) > 0 )

{

if(strrchr($owner_user_id, ','))

{

$owner_user_id_text = explode(',', $owner_user_id);

$owner_user_id_db = "";

$new_user_music = "";

foreach($owner_user_id_text as $owner_user_id)

{

if($new_user_music == "")

$new_user_music = $owner_user_id;

if($owner_user_id != $new_user_music)

$owner_user_id_db = $owner_user_id_db . "" . $owner_user_id . ",";

}

$owner_user_id_db = trim(substr_replace($owner_user_id_db, "", strlen($owner_user_id_db) - 1));

}

else

{

$new_user_music = $owner_user_id;

$owner_user_id_db = '';

}

$userdir_old = $url->url_userdir($music['music_user_id']);

$music_file_old = "{$userdir_old}{$music['music_id']}.{$music['music_ext']}";

$userdir_new = $url->url_userdir($new_user_music);

$music_file_new = "{$userdir_new}{$music['music_id']}.{$music['music_ext']}";

if( file_exists($music_file_old) )

{

copy($music_file_old, $music_file_new);

unlink($music_file_old);

}

$database->database_query("UPDATE `se_music` SET `music_user_id` = '{$new_user_music}', `owner_user_id` = '{$owner_user_id_db}' WHERE `music_id` = '{$music_id}' LIMIT 1");

}

else

{

$userdir = $url->url_userdir($music['music_user_id']);

$music_file = "{$userdir}{$music['music_id']}.{$music['music_ext']}";

$database->database_query("DELETE FROM se_music WHERE music_id='{$music_id}' LIMIT 1");

if( file_exists($music_file) ) { unlink($music_file); }

}

return TRUE;

}



Готово! Теперь на странице «browse_music.php» напротив музыки будет показана ссылка «Копировать» в том случае, если ее нет у участника. На странице «user_music.php» можно будет удалить музыку, которую скопировали от друзей.

Автор - Autor: Евтеев Евгений Александрович
Источник

Поделиться

Другие публикации по теме:

Комментарии