Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
function addimagesave()
{
if (!$this->Login->isLogged())
{
$this->loginto();
return;
}
else $this->Login->Update();
$error = '';
$recordExists = false;
$post_name = trim($this->input->post('name'));
if ($post_name != '') $insert['file_name'] = $post_name;
// now need to get from db if id_all in i_pics
$this->db->where('id_all',$this->input->post('id_all'));
$this->db->limit(1);
$query = $this->db->get('i_pics');
if ($query->num_rows() == 1)
{
$row = $query->row();
$recordExists = true;
$file_name = $row->file_name;
$id_pics = $row->id_pics;
}
if (isset($_FILES['upload']) && ($_FILES['upload']['error'] == 0)) // is file loaded?
{
$ext = getExtensionOnly($_FILES['upload']['name']);
if ($post_name != '') $_FILES['upload']['name'] = $post_name.'.'.$ext;
else $post_name = delExtensionWithDot($_FILES['upload']['name']);
$_FILES['upload']['name'] = translitIt(delExtensionWithDot($_FILES['upload']['name'])).'.'.$ext;
$config['upload_path'] = './pics/';
$config['allowed_types'] = 'gif|jpg|png|bmp';
$this->load->library('upload', $config);
if ($this->upload->do_upload('upload'))
{
$this->General->setEmes(array('roster'=>"Картинку загружено."), true);
$data = $this->upload->data();
$insert['file_name'] = $data['file_name'];
// resize now
$config1['image_library'] = 'gd2'; // выбираем библиотеку
$config1['source_image'] = 'pics/'.$data['file_name'];
$config1['create_thumb'] = TRUE; // ставим флаг создания эскиза
$config1['maintain_ratio'] = true; // сохранять пропорции
$config1['width'] = 250; // и задаем размеры
$config1['height'] = 180;
// pre crack image for resizing! )))
$this->load->model('Image');
$this->Image->smartsigninto('pics/'.$data['file_name'], 250, 180);
$this->load->library('image_lib', $config1); // загружаем библиотеку
$this->image_lib->resize(); // и вызываем функцию
// now rename and owerwrite original image
$ext = getExtensionOnly($data['file_name']);
$fol = "pics/";
if (is_file($fol.$data['raw_name'].'_thumb.'.$ext))
rename($fol.$data['raw_name'].'_thumb.'.$ext, $fol.$data['file_name']);
else $this->General->setEmes(array('roster'=>"Файл *_thumb не был создан!"));
// now set new file size
$insert['size'] = round(filesize($fol.$data['file_name'])/1024 , 2);
}
else $this->General->setEmes(array('roster'=>$this->upload->display_errors()));
}
else // we need to try to rename assigned file if name is not empty and file exists
{
if ($recordExists && is_file('pics/'.$file_name) && ($post_name != ''))
{
$ext = getExtensionOnly($file_name);
$fol = "pics/";
$newName = translitIt($post_name).'.'.$ext;
if (is_file('pics/'.$newName))
{
$this->General->setEmes(array('roster'=>"Имя уже существует"), true);
$insert['file_name'] = $file_name;
}
else
{
rename($fol.$file_name, $fol.$newName);
$insert['file_name'] = $newName;
}
}
}
// prepare data to be ins or upd
$insert['lang'] = 'ru';
$insert['title'] = $this->input->post('title');
$insert['alt'] = $this->input->post('alt');
$insert['id_all'] = $this->input->post('id_all');
if ($recordExists)
{
$this->db->where('id_pics',$id_pics);
$this->db->update('i_pics', $insert);
$this->General->setEmes(array('roster'=>"Данные обновлены"), true);
}
else $this->db->insert('i_pics', $insert);
$this->redirect('roster/'.$this->input->post('type'));
}
Функция - контроллер сохранения, resize на лету картинки для новости или прочей байды. Есть все проверки. Любая картинка которая приходит, становится размером 250, 180 , причем без растяжения. Это задача типа вписать прямоугольник в прямоугольник, которую я сейчас ночью выполнил - даже если картинка меньше оно впишет. I must be proud about this functionality! Заметим, что в интернете все и умеют что вырезать квадраты из картинки, а произвольный размер - НЕТ такого. Код выложен чтобы вы посмотрели, нравятся ли вам имена переменных, логическое мышление, форматирование, коментарии (на русском - то не мои коментарии). Код CodeIgniter powered.
> Заметим, что в интернете все и умеют что вырезать квадраты из картинки, а произвольный размер - НЕТ такого.
Я, может, не до конца понимаю, какую именно задачу Вы решили, но как-то не верится, что Вы не изобрели велосипед.
> Код выложен чтобы вы посмотрели, нравятся ли вам
Что повторяй, что нет, всё одно ради этого будут выкладывать >_< Страйкер, чем чёрт не шутит, может, и правда пора форум запиливать?
Поздравляю, ты не только изобрел принципиально новый прямоугольник, но и смог вписать его внутрь другого. You must be proud about this functionality!
А твой код на уровне настоящего гуру! Да что там говорить, Макконнелл и Фаулер нервно курят в сторонке.
Но не все так хорошо, как хотелось бы... Почему ты используешь этот CodeIgniter? Он же для быдлокодеров, а твои знания и навыки позволяют написать свой фреймворк!
ну а как ты хотел - достойный ученик ёбкила
свеженький фейспальм от ёбкилла (http://webkill.org/seo_money): "Ввидение в SEO манимейкинг -= Биржи ссылок =-" - о как завернул, пиздливчик
Что мне не нравится
1) спагетти-код: между ифом и элсом десятки строк! Делаем рефакторинг "выделение метода", пока код не становится типа такого:
if (isSomeCondition()) {
doSomething1();
doSomething2();
} else {
doSomething3();
}
2) что такое $config1? Где $config42? Кто так переменные называет? И вообще -- половина в кемел-стайле, половина с прочерками, что-то с большой буквы, что-то с маленькой... Нейминг конвеншен нужен. Выбери любой, только один какой нить! и юзай его.
А еще в PHP советую юзать венгерскую нотацию в представлении Спольски ("Как заставить неправильный код выглядеть неправильно") -- сильно облегчает понимание, и лечит некоторые болезни отсутствия статической типизации.
$strName = $arrNames[$nIndex]; // как-то так
3) Как говорится "или крестик сними или трусы надень": или у тебя "$this->input->post" или у тебя "$config1['height']". Я понимаю, что в PHP принято творить кашу из процедурного и ООП подходов (язык так устроен), но все таки лучше остановится на чем-нить одном. Если уж "$this->input" то "$config->getHeight()"
И если уж "$config1['height']" то хотя бы 'height' в константу.
4) И зачем в одной функции (даже не классе, а функции!!) работа с базой, логика переворачивания и редирект? Что бы это все оттестировать было нереально? Как вообще к этому юнит-тест писать -- я не понимаю.
В общем тут еще много претензий, но этих наверное хватит....
Спасибо за глубокий анализ. Дело в том что редирект стоит в каждой функции сохранения результатов, чтобы ЮРЛ был понятен, ведь сама функция сохранения не выводит ничего. А что такое логика переворачивания и где она здесь?
А у меня есть предположение, что на этом сайте Страйкер просто MZZ обкатывает =) Вообще вряд ли, тематика слишком узкая, достаточно большую аудиторию не собрать, да и всё прекрасно понимающее большинство вряд ли станет активно кликать по баннерам.
Я, может, не до конца понимаю, какую именно задачу Вы решили, но как-то не верится, что Вы не изобрели велосипед.
> Код выложен чтобы вы посмотрели, нравятся ли вам
Что повторяй, что нет, всё одно ради этого будут выкладывать >_< Страйкер, чем чёрт не шутит, может, и правда пора форум запиливать?
А твой код на уровне настоящего гуру! Да что там говорить, Макконнелл и Фаулер нервно курят в сторонке.
Но не все так хорошо, как хотелось бы... Почему ты используешь этот CodeIgniter? Он же для быдлокодеров, а твои знания и навыки позволяют написать свой фреймворк!
свеженький фейспальм от ёбкилла (http://webkill.org/seo_money): "Ввидение в SEO манимейкинг -= Биржи ссылок =-" - о как завернул, пиздливчик
уже достиг дао говнокода?
// now need to get from db if id_all in i_pics
код должен обьяснять сам себя
а не
Вот это круто.
facepalm.ftn
http://dic.academic.ru/dic.nsf/ogegova/267574
ну ниче деточка когда-нибудь и ты гугл осилишь
1) спагетти-код: между ифом и элсом десятки строк! Делаем рефакторинг "выделение метода", пока код не становится типа такого:
2) что такое $config1? Где $config42? Кто так переменные называет? И вообще -- половина в кемел-стайле, половина с прочерками, что-то с большой буквы, что-то с маленькой... Нейминг конвеншен нужен. Выбери любой, только один какой нить! и юзай его.
А еще в PHP советую юзать венгерскую нотацию в представлении Спольски ("Как заставить неправильный код выглядеть неправильно") -- сильно облегчает понимание, и лечит некоторые болезни отсутствия статической типизации.
3) Как говорится "или крестик сними или трусы надень": или у тебя "$this->input->post" или у тебя "$config1['height']". Я понимаю, что в PHP принято творить кашу из процедурного и ООП подходов (язык так устроен), но все таки лучше остановится на чем-нить одном. Если уж "$this->input" то "$config->getHeight()"
И если уж "$config1['height']" то хотя бы 'height' в константу.
4) И зачем в одной функции (даже не классе, а функции!!) работа с базой, логика переворачивания и редирект? Что бы это все оттестировать было нереально? Как вообще к этому юнит-тест писать -- я не понимаю.
В общем тут еще много претензий, но этих наверное хватит....
Это и плохо. Одна функция -- одно действие. Чем меньше функция знает об окружающем мире -- тем лучше.
>>А что такое логика переворачивания и где она здесь?
Это метафора) Я имел ввиду всякую логику, в твоем случае -- вырезание, или что ты там делаешь.
В общем желаю тебе почитать Фаулера про "код с душком")
Хаха, я ещё помню как дуров говорил "обещаю, вконтакте рекламы не будет никогда" )
если на баннере написать "где здесь с++?" и сделать галочку и крестик как для минусования, то будет говно-эффект)
Еще один принципиально новый фреймворк на php?)