Обрезка аватаров 1.10
Возможности: заливка аватаров в отдельный альбом, выбор области для аватара профиля после заливки её в альбом, а затем выбор квадратной аватарки для других мест из основного (при чём это можно производить снова и снова, не загружая аватар ещё раз), редактирование аватаров, а также выбор из коллекции админом.
1. Скачиваем архивчег.
2. Заливаем содержимое папки "upload" из архива на сервер.
3. Выполним запросы к мускулу:
После:
5. Заменить:
Меняем строку:
Меняем строку:
1. Скачиваем архивчег.
2. Заливаем содержимое папки "upload" из архива на сервер.
3. Выполним запросы к мускулу:
Код SQL:
4. Для задания размеров аватаров в галерее, а также размеров изображений для пользовательских галерей (странно почему этого не было сразу предусмотрено), производим в файле "/admin/components/users/backend.php" следующее:
ALTER TABLE `cms_user_albums` ADD `it_avs` TINYINT NOT NULL DEFAULT '0' AFTER `user_id`; ALTER TABLE `cms_user_photos` ADD `it_ava` TINYINT NOT NULL DEFAULT '0' AFTER `album_id`
После:
Код PHP:
Вставляем:
65 $cfg['medw'] = cmsCore::request('medw', 'int', 200); 66 $cfg['medh'] = cmsCore::request('medh', 'int', 200);
Код PHP:
После:
$cfg['sw_photo_w'] = cmsCore::request('sw_photo_w', 'int', 600); $cfg['sw_photo_h'] = cmsCore::request('sw_photo_h', 'int', 800);
Код PHP:
Вставляем:
295 <tr> <td> <strong>Наносить водяной знак:</strong> <br /> <span class="hinttext">Если включено, то на все загружаемые фотографии будет наносится изображение из файла "<a href="/images/watermark.png" target="_blank">/images/watermark.png</a>"</span> </td> <td valign="top"> <label><input name="watermark" type="radio" value="1" <?php if ($model->config['watermark']) { echo 'checked="checked"'; } ?>/> Вкл</label> <label><input name="watermark" type="radio" value="0" <?php if (!$model->config['watermark']) { echo 'checked="checked"'; } ?>/> Выкл</label> </td> 304 </tr>
Код PHP:
В файле /components/users/photos.php заменить:
<tr> <td><strong>Ширина: </strong></td> <td><input name="sw_photo_w" type="text" id="sw_photo_w" size="5" value="<?php echo $model->config['sw_photo_w'];?>"/> пикс.</td> </tr> <tr> <td><strong>Высота: </strong></td> <td><input name="sw_photo_h" type="text" id="sw_photo_h" size="5" value="<?php echo $model->config['sw_photo_h'];?>"/> пикс.</td> </tr>
Код PHP:
На:
98 @img_resize($uploadphoto, $uploadthumb['medium'], 600, 600, false, false);
Код PHP:
Выше находится строка, отвечающая за превьюшки, можете поменять там значения 96 на требуемые вам.
@img_resize($uploadphoto, $uploadthumb['medium'], $model->config['sw_photo_w'], $model->config['sw_photo_h'], false, false);
5. Заменить:
Код PHP:
Этим:
//============================================================================// //============================= Загрузка аватара ============================// //============================================================================// От сих До сих: //============================================================================// //======================== Работа с фотографиями ============================// //============================================================================//
Код PHP:
6. Файл /components/users/model.php :
if($do == 'avatar'){ if((!$inUser->id || ($inUser->id && $inUser->id != $id)) && !$inUser->is_admin){ cmsCore::error404(); } $user = $inUser->loadUser($id); $inPage->setTitle($_LANG['LOAD_AVATAR']); $inPage->addPathway($user['nickname'], cmsUser::getProfileURL($user['login'])); $inPage->addPathway($_LANG['LOAD_AVATAR']); $step = cmsCore::request('step', 'int', 0); if(!$step){ if(cmsCore::inRequest('upload')){ cmsCore::includeGraphics(); $uploaddir = PATH . '/images/users/avatars/'; $realfile = $inDB->escape_string($_FILES['picture']['name']); if($ext != 'jpg' && $ext != 'jpeg' && $ext != 'gif' && $ext != 'png' && $ext != 'bmp'){ } $lid = $inDB->get_fields('cms_user_photos', 'id>0', 'id', 'id DESC'); $lastid = $lid['id'] + 1; $uploadfile = $uploaddir . $realfile . '.' . $ext; $uploadphoto = PATH.'/images/users/photos/medium/'.$filename; $uploadthumb['small'] = $uploaddir . 'small/' . $filename; $uploadthumb['medium'] = $uploaddir . $filename; $source = $_FILES['picture']['tmp_name']; $errorCode = $_FILES['picture']['error']; if($inCore->moveUploadedFile($source, $uploadfile, $errorCode)){ @img_resize($uploadfile, $uploadthumb['small'], $model->config['smallw'], $model->config['smallw'], true); @img_resize($uploadfile, $uploadthumb['medium'], $model->config['medw'], $model->config['medh'], false, false); @img_resize($uploadfile, $uploadphoto, $model->config['sw_photo_w'], $model->config['sw_photo_h'], false, false); @img_resize($uploadfile, PATH.'/images/users/photos/small/'.$filename, 96, 96, true); $album = $inDB->get_fields('cms_user_albums', "user_id='{$id}' AND it_avs=1", 'id'); if(!$album){ $sql = "INSERT INTO cms_user_albums (user_id, title, pubdate, allow_who, description, it_avs) VALUES ({$id}, 'Изображения профиля', NOW(), 'registered', '', '1')"; $inDB->query($sql); $album['id'] = $inDB->get_last_id('cms_user_albums'); } $sql = "INSERT INTO cms_user_photos (user_id, album_id, pubdate, title, description, allow_who, hits, imageurl, it_ava) VALUES('{$id}', '{$album['id']}', NOW(), '$realfile', '', 'registered', 0, '$filename', '1')"; $inDB->query($sql); }else{ cmsCore::addSessionMessage('<strong>' . $_LANG['ERROR'] . ':</strong> ' . cmsCore::uploadError() . '!', 'error'); cmsCore::redirect('/users/' . $id . '/avatar.html'); } $sql = "UPDATE cms_user_profiles SET imageurl = '$filename' WHERE user_id = '$id' LIMIT 1"; $inDB->query($sql); // очищаем предыдущую запись о смене аватара cmsActions::removeObjectLog('add_avatar', $id); // выводим сообщение в ленту 'object' => '', 'object_url' => '', 'object_id' => $id, 'user_id' => $id, 'target' => '', 'target_url' => '', 'description' => '<a href="' . cmsUser::getProfileURL($user['login']) . '" class="act_usr_ava"> <img border="0" src="/images/users/avatars/small/' . $filename . '"> </a>' )); if($size[0] > $model->config['medw'] && $size[1] > $model->config['medw']){ cmsCore::redirect('/users/' . $id . '/avatar.html?step=2'); } cmsCore::redirect(cmsUser::getProfileURL($user['login'])); }else{ $smarty = $inCore->initSmarty('components', 'com_users_avatar_upload.tpl'); $smarty->assign('id', $id); $smarty->assign('step', false); $smarty->display('com_users_avatar_upload.tpl'); } }elseif($step == 2){ if(cmsCore::inRequest('submit')){ cmsCore::includeGraphics(); $th_path = PATH . '/images/users/avatars/' . $user['orig_imageurl']; $img_path = PATH . '/images/users/photos/medium/' . $user['orig_imageurl']; $x1 = $inCore->request('x1', 'int', 0); $y1 = $inCore->request('y1', 'int', 0); $w = $inCore->request('w', 'int', $model->config['medw']); $h = $inCore->request('h', 'int', $model->config['medw']); $scale = $model->config['medw'] / $w; if(@resizeThumbnailImage($th_path, $img_path, $w, $h, $x1, $y1, $scale)){ cmsCore::redirect('/users/' . $id . '/avatar.html?step=3'); }else{ cmsCore::addSessionMessage('<strong>' . $_LANG['ERROR'] . ':</strong> Возникла ошибка!', 'error'); cmsCore::redirect('/users/' . $id . '/avatar.html?step=2'); }; }else{ if(!($size[0] > $model->config['medw'] && $size[1] > $model->config['medw'])){ cmsCore::addSessionMessage('<strong>' . $_LANG['ERROR'] . ':</strong> Ваш аватар слишком мал для обрезки!', 'error'); cmsCore::redirect('/users/' . $id . '/avatar.html'); } $smarty = $inCore->initSmarty('components', 'com_users_avatar_upload.tpl'); $smarty->assign('id', $id); $smarty->assign('step', 2); $smarty->assign('img', $user['orig_imageurl']); $smarty->assign('width', $model->config['medw']); $smarty->assign('height', $model->config['medh']); $smarty->display('com_users_avatar_upload.tpl'); } }elseif($step == 3){ if(cmsCore::inRequest('submit')){ cmsCore::includeGraphics(); $th_path = PATH . '/images/users/avatars/small/' . $user['orig_imageurl']; $img_path = PATH . '/images/users/avatars/' . $user['orig_imageurl']; $x1 = $inCore->request('x1', 'int', 0); $y1 = $inCore->request('y1', 'int', 0); $w = $inCore->request('w', 'int', $model->config['smallw']); $h = $inCore->request('h', 'int', $model->config['smallw']); $scale = $model->config['smallw'] / $w; if(@resizeThumbnailImage($th_path, $img_path, $w, $h, $x1, $y1, $scale)){ // очищаем предыдущую запись о смене аватара cmsActions::removeObjectLog('add_avatar', $id); // выводим сообщение в ленту 'object' => '', 'object_url' => '', 'object_id' => $id, 'user_id' => $id, 'target' => '', 'target_url' => '', 'description' => '<a href="' . cmsUser::getProfileURL($user['login']) . '" class="act_usr_ava"> <img border="0" src="/images/users/avatars/small/' . $user['orig_imageurl'] . '"> </a>' )); cmsCore::redirect(cmsUser::getProfileURL($user['login'])); }else{ cmsCore::addSessionMessage('<strong>' . $_LANG['ERROR'] . ':</strong> Возникла ошибка!', 'error'); cmsCore::redirect('/users/' . $id . '/avatar.html?step=3'); }; }else{ $smarty = $inCore->initSmarty('components', 'com_users_avatar_upload.tpl'); $smarty->assign('id', $id); $smarty->assign('step', 3); $smarty->assign('img', $user['orig_imageurl']); $smarty->assign('width', $model->config['smallw']); $smarty->assign('height', $model->config['smallw']); $smarty->display('com_users_avatar_upload.tpl'); } } } //============================================================================// //============================= Библиотека аватаров =========================// //============================================================================// if($do == 'select_avatar'){ if((!$inUser->id || ($inUser->id && $inUser->id != $id)) && !$inUser->is_admin){ cmsCore::error404(); } $user = $inUser->loadUser($id); $avatars_dir = PATH . "/images/users/avatars/library"; $avatars_dir_rel = "/images/users/avatars/library"; $avatars[] = $nextfile; } } if(!cmsCore::inRequest('set_avatar')){ $inPage->setTitle($_LANG['SELECT_AVATAR']); $inPage->addPathway($user['nickname'], cmsUser::getProfileURL($user['login'])); $inPage->addPathway($_LANG['SELECT_AVATAR']); $perpage = 20; $smarty = $inCore->initSmarty('components', 'com_users_avatars.tpl'); $smarty->assign('userid', $id); $smarty->assign('avatars', $avatars); $smarty->assign('avatars_dir', $avatars_dir_rel); $smarty->assign('page', $page); $smarty->assign('perpage', $perpage); $smarty->assign('pagebar', cmsPage::getPagebar($total, $page, $perpage, '/users/%user_id%/select-avatar-%page%.html', array('user_id' => $id))); $smarty->display('com_users_avatars.tpl'); }else{ $avatar_id = cmsCore::request('avatar_id', 'int', 0); $file = $avatars[$avatar_id]; $uploaddir = PATH . '/images/users/avatars/'; $realfile = $file; $uploadfile = $avatars_dir . '/' . $realfile; $uploadavatar = $uploaddir . $filename; $uploadthumb = $uploaddir . 'small/' . $filename; if($user['orig_imageurl'] && $user['orig_imageurl'] != 'nopic.jpg'){ } cmsCore::includeGraphics(); @img_resize($uploadfile, $uploadthumb, $model->config['smallw'], $model->config['smallw']); $sql = "UPDATE cms_user_profiles SET imageurl = '$filename' WHERE user_id = '$id' LIMIT 1"; $inDB->query($sql); // очищаем предыдущую запись о смене аватара cmsActions::removeObjectLog('add_avatar', $id); // выводим сообщение в ленту 'object' => '', 'object_url' => '', 'object_id' => $id, 'user_id' => $id, 'target' => '', 'target_url' => '', 'description' => '<a href="' . cmsUser::getProfileURL($user['login']) . '" class="act_usr_ava"> <img border="0" src="/images/users/avatars/small/' . $filename . '"> </a>' )); } cmsCore::redirect(cmsUser::getProfileURL($user['login'])); } }
Меняем строку:
Код PHP:
На:
720 $album = $this->inDB->get_fields('cms_user_albums', "id='{$id}'", 'id, user_id, title, allow_who, description');
Код PHP:
Меняем строку:
$album = $this->inDB->get_fields('cms_user_albums', "id='{$id}'", '*');
Код PHP:
На:
766 $private_sql = "SELECT id, pubdate, imageurl as file, hits, title
Код PHP:
После:
$private_sql = "SELECT id, pubdate, imageurl as file, hits, title, it_ava
Код PHP:
Вставляем:
827 $sql = "SELECT a.id as id, a.title as title, a.pubdate as pubdate, a.allow_who as allow_who, 'private' as type, p.imageurl as imageurl,
Код PHP:
7. В com_users_profile.tpl вашего шаблона меняем:
a.it_avs as it_avs,
Код PHP:
На:
108 <tr> <td><img src="/templates/{template}/images/icons/profile/avatar.png" border="0"/></td> <td><a href="/users/{$usr.id}/avatar.html" title="{$LANG.SET_AVATAR}">{$LANG.SET_AVATAR}</a></td> </tr>
Код PHP:
8. В com_users_photos.tpl вашего шаблона меняем строки:
{/if} {if $is_admin || $myprofile} <tr> <td><img src="/templates/{template}/images/icons/profile/avatar.png" border="0"/></td> <td><a href="/users/{$usr.id}/avatar.html" title="{$LANG.SET_AVATAR}">{$LANG.SET_AVATAR}</a></td> </tr> {/if} {if $myprofile}
Код PHP:
На:
5 и 18 {if ($my_profile || $is_admin) && $album_type == 'private'}
Код PHP:
9. В com_users_photo_submit.tpl вашего шаблона:
{if ($my_profile || $is_admin) && $album_type == 'private' && !$album.it_avs}
Меняем строку:
Код PHP:
На:
32 <option value="{$album.id}" {if $album_id == $album.id} selected="selected"{/if}>{$album.title}</option>
Код PHP:
10. Заходим в настройки пользовательских профилей и задаём значения размеров фотографий (если вы хотите, чтобы всё происходило как и до этого, то задаёте значения: 600).
{if !$album.it_avs}<option value="{$album.id}" {if $album_id == $album.id} selected="selected"{/if}>{$album.title}</option>{/if}