1. Лучший говнокод

    В номинации:
    За время:
  2. PHP / Говнокод #17296

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    foreach($this->_logs as $log)
    {
        if($log[1]!==CLogger::LEVEL_PROFILE)
            continue;
        list($message,$level,$category,$timestamp)=$log;
        if(!strncasecmp($message,'begin:',6))
        {
            $log[0]=substr($message,6);
            $stack[]=$log;
        }
        elseif(!strncasecmp($message,'end:',4))
        {
            $token=substr($message,4);
            if(($last=array_pop($stack))!==null && $last[0]===$token)
            {
                $delta=$log[3]-$last[3];
                $this->_timings[]=array($message,$category,$delta);
            }
            else
                throw new CException(Yii::t('yii','CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.',
                    array('{token}'=>$token)));
        }
    }

    Yii 1, реализация профайлинга через лог (ну потому что есть же лог, зачем еще сущности плодить, классы же долго грузятся, а у нас самый лайтвейт фреймворк). Чтобы уж точно наверняка, код дублируется в CProfileLogRoute.

    https://github.com/yiisoft/yii/blob/11c3010a82ce2c25332baacce568ff89e451896a/framework/logging/CLogger.php#L294
    https://github.com/yiisoft/yii/blob/11c3010a82ce2c25332baacce568ff89e451896a/framework/logging/CProfileLogRoute.php#L137

    Fike, 11 Декабря 2014

    Комментарии (13)
  3. PHP / Говнокод #17289

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    <?php	if(!isset($_REQUEST['doGo'])){?>
    			<form action=4.php>
    Введите ФИО <input type=text name="text" value="" size=40><br>
    			<input type=submit name="doGo" value="knopka">
    					<?php } 
    				else {
    					$tas=trim($_REQUEST['text']);
    					$text_arr=str_split($tas);	 
    					$i=0;
    					while($text_arr[$i]!==" ")
    					{
    						echo $text_arr[$i]."";
    						$i++;
    					}
    					for($i=0; $i<count($text_arr); $i++)
    					{
    						if($text_arr[$i]==" ") echo " ".$text_arr[$i+1]."."; continue;
    					}
    				}					
    ?>

    Задача обрезать имя и фамилию

    aut0, 11 Декабря 2014

    Комментарии (3)
  4. JavaScript / Говнокод #17174

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    var move_container_after = function(toMove, toAfter) {
    	  $(toMove).insertAfter(toAfter);
    };
    
    var move_container_before = function(toMove, toBefore) {
    	  $(toMove).insertBefore(toBefore);
    };
    
    move_container_before(".toggle.basic1-tog", ".basic1 .store-order-item-group-action-list");
    move_container_after(".toggle.basic1rn-tog", ".basic1rn .store-order-item-description");
    
    move_container_before(".toggle.basic3-tog", ".basic3 .store-order-item-group-action-list");
    move_container_after(".toggle.basic3rn-tog", ".basic3rn .store-order-item-description");
    
    move_container_before(".toggle.bundle1-tog", ".bundle1 .store-order-item-group-action-list");
    move_container_after(".toggle.bundle1rn-tog", ".bundle1rn .store-order-item-group-action-list");
    
    move_container_before(".toggle.bundle12-tog", ".bundle12 .store-order-item-group-action-list");
    move_container_after(".toggle.bundle12rn-tog", ".bundle12rn .store-order-item-group-action-list");
    
    move_container_before(".toggle.bundle3-tog", ".bundle3 .store-order-item-group-action-list");
    move_container_after(".toggle.bundle3rn-tog", ".bundle3rn .store-order-item-group-action-list");
    
    move_container_before(".toggle.bundle6-tog", ".bundle6 .store-order-item-group-action-list");
    move_container_after(".toggle.bundle6rn-tog", ".bundle6rn .store-order-item-group-action-list");
    
    move_container_before(".toggle.desktop1-tog", ".desktop1 .store-order-item-group-action-list");
    move_container_after(".toggle.desktop1rn-tog", ".desktop1rn .store-order-item-description");
    
    move_container_before(".toggle.desktop12-tog", ".desktop12 .store-order-item-group-action-list");
    move_container_after(".toggle.desktop12rn-tog", ".desktop12rn .store-order-item-description");
    
    move_container_before(".toggle.desktop3-tog", ".desktop3 .store-order-item-group-action-list");
    move_container_after(".toggle.desktop3rn-tog", ".desktop3rn .store-order-item-description");
    
    move_container_before(".toggle.desktop6-tog", ".desktop6 .store-order-item-group-action-list");
    move_container_after(".toggle.desktop6rn-tog", ".desktop6rn .store-order-item-description");
    
    move_container_before(".toggle.desktopbus12-tog", ".desktopbus12 .store-order-item-group-action-list");
    move_container_after(".toggle.desktopbus12rn-tog", ".desktopbus12rn .store-order-item-description");   
    
    move_container_before(".toggle.desktopbus6-tog", ".desktopbus6 .store-order-item-group-action-list");
    move_container_after(".toggle.desktopbus6rn-tog", ".desktopbus6rn .store-order-item-description");
    
    move_container_before(".toggle.premium1-tog", ".premium1 .store-order-item-group-action-list");
    move_container_after(".toggle.premium1rn-tog", ".premium1rn .store-order-item-description");
    
    move_container_before(".toggle.premium12-tog", ".premium12 .store-order-item-group-action-list");
    move_container_after(".toggle.premium12rn-tog", ".premium12rn .store-order-item-description");
    
    move_container_before(".toggle.premium3-tog", ".premium3 .store-order-item-group-action-list");
    move_container_after(".toggle.premium3rn-tog", ".premium3rn .store-order-item-description");
    
    move_container_before(".toggle.premium6-tog", ".premium6 .store-order-item-group-action-list");
    move_container_after(".toggle.premium6rn-tog", ".premium6rn .store-order-item-description");
    
    move_container_before(".toggle.premiumbus12-tog", ".premiumbus12 .store-order-item-group-action-list");
    move_container_after(".toggle.premiumbus12rn-tog", ".premiumbus12rn .store-order-item-description");
    
    move_container_before(".toggle.premiumbus6-tog", ".premiumbus6 .store-order-item-group-action-list");
    move_container_after(".toggle.premiumbus6rn-tog", ".premiumbus6rn .store-order-item-description");

    "Перенос" формы, для каждого ID, в HTML есть соответствующее колово форм подобного типа

    <div class="toggle basic1-tog">Auto Renew: Off
    <form method="POST" action="https://sites.fastspring.com/store/api/order">
    <input type="hidden" name="operation" value="update"/>
    <input type="hidden" name="destination" value="checkout"/>
    <input type="hidden" name="product_1_path" value="/basicsubscription1monthrn"/>
    <input type="hidden" name="product_2_path" value="/basicsubscription1month"/>
    <input type="hidden" name="product_2_quantity" value="0"/>
    <input type="submit" value="Turn On"/>
    </form>
    </div>
    <div class="toggle basic1rn-tog">Auto Renew: On
    <form method="POST" action="https://sites.fastspring.com/store/api/order">
    <input type="hidden" name="operation" value="update"/>
    <input type="hidden" name="destination" value="checkout"/>
    <input type="hidden" name="product_1_path" value="/basicsubscription1month"/>
    <input type="hidden" name="product_2_path" value="/basicsubscription1monthrn"/>
    <input type="hidden" name="product_2_quantity" value="0"/>
    <input type="submit" value="Turn Off"/>
    </form>
    </div>

    IRIDON, 25 Ноября 2014

    Комментарии (4)
  5. PHP / Говнокод #17167

    +156

    1. 1
    2. 2
    3. 3
    4. 4
    $arResult = Yii::app()->db->createCommand($sql)->queryRow();
    if ($arResult && isset($arResult) && is_array($arResult) && !empty($arResult['pk_report'])) {
        ...
    }

    проверить все, что скрыто

    cx44, 25 Ноября 2014

    Комментарии (0)
  6. JavaScript / Говнокод #17156

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    var old = 47;
    
            function getRate() {
                $.ajax({
                      url: "http://query.yahooapis.com/v1/public/yql?q=select%20%2a%20from%20yahoo.finance.xchange%20where%20pair%20in%20%28%22USDRUB%22%29&env=store://datatables.org/alltableswithkeys",
                      dataType: "text"
                }).done(function(msg) {
                    var value = /<Rate>(.+)<\/Rate>/.exec(msg)[1];
                    //$("#p-rate").html(/<Rate>(.+)<\/Rate>/.exec(msg)[1]);
                    $("#p-rate").html(value);
                    if(value > old) $("#p-message").html("МНЕ ОТ ЭТОГО ТОЛЬКО ЛУЧШЕ! ТОЛЬКО НА ПОЛЬЗУ!");
                    else if(value < old) $("#p-message").html("СКАЛЕН! СКАЛЕН!");
                    else $("#p-message").html("МНОГОХОДОВОЧКА!");
                    old = value;
                });
            }
    
            setInterval(getRate,1500);

    gost, 24 Ноября 2014

    Комментарии (128)
  7. JavaScript / Говнокод #17128

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    // ==UserScript==
    // @name AutoConfirm
    // @namespace test
    // @include http://[CENSORED]/reviewboard/*
    // @version 1
    // @grant none
    // ==/UserScript==
    
    setTimeout(
    function(){
    window.confirm = function(msg){return true;};
    document.getElementById("shipit-link").click();
    },
    2000
    );

    Ускорение code review

    kit, 18 Ноября 2014

    Комментарии (4)
  8. PHP / Говнокод #17109

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    bool 
     CIBlockElement::Update(...);
    
    // ......
    
    $el = new CIBlockElement;
    
    // ......
    
    $res = $el->Update($PRODUCT_ID, $arLoadProductArray);

    Нынче статический метод вызывается через объект.

    ( Пример из официальной документации Битрикс https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/update.php )

    h0ckeypl4yer, 14 Ноября 2014

    Комментарии (5)
  9. PHP / Говнокод #17091

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    // Real itemid is "contained" in public itemid in a bit tricky way. The formula is:
    
    public_itemid = itemid * 256 + anum
    
    // Quite easy, isn't it? Except where to get that anum. anum is some number assigned when you create a new post in LJ.
    
    // But in fact, you don't need it. Because it is always less than 256, we can avoid searching for it, and just use simple Math to find itemid.
    
    $anum = $public_itemid - floor($public_itemid / 256) * 256;
    $itemid = ($public_itemid - $anum) / 256;

    Прекрасный подход, то место, где вордпресс и ЖЖ сошлись воедино.

    http://drumrock.skipitnow.org/livejournal-tools/itemid/

    Fike, 10 Ноября 2014

    Комментарии (1)
  10. PHP / Говнокод #17067

    +156

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    // где то: 
    $_SESSION['type_school'] = $db->query("SELECT * FROM ou_type ",array(),'kassoc');
    
    // а потом:
    $smarty->assign('type_school',$_SESSION['type_school']);
    
    //и в шаблоне:
    <td>{$type_school[$v.base_type].type_name}</td>

    $v.base_type - тоже результат запроса. Left/Right/Inner Join - не, не слышал...

    А потом: чёта проект тормозит...
    Я так подозреваю кто то таким методом оптимизацию и кеширование сделал, ну чтобы бд лишний раз не грузить.. Не, ну, а чё, зачем каждый раз базу данных мучить при открытии одной! странички со списком *****, давайте одну таблицу-справочник из бд откопируем каждому пользователю в его сессию отдельно и будем читать его при каждом session_start даже если на текущей странице нам этот справочник не нужен.

    vGhost, 05 Ноября 2014

    Комментарии (12)
  11. PHP / Говнокод #17058

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    <?php
        class view {
            protected $dir; //templates directory
            protected $lang; //language
            protected $authorized;
            protected $user;
    
            protected function getCache($template) {
                //return false; //uncomment for developing
                if (!isset($_SESSION['cache_' . $template])) return false;
                return $_SESSION['cache_' . $template];
            }
    
            protected function addCache($template, $content) {
                $_SESSION['cache_' . $template] = $content;
            }
    
            public function __construct($dir, localization $lang, user $user) {
                $this->dir = $dir; 
                $this->authorized = (bool) $user->authorized;
                $this->user = $user;
                $this->lang = $lang;
            }
    
            public function invoke($template, $params = [], $return = false, $quests = []) { //can be called w/o params
                $filename = ROOT . '/' . $this->dir . '/tpl/' . $template . '.tpl';
                $lang = $this->lang->getData();
                $content = $this->getCache($template);
                if (!$content) {
                    $f = fopen($filename, 'a+');
                    $content = fread($f, (filesize($filename) > 0 ? filesize($filename) : 1));
                    $this->addCache($template, $content);
                }
                foreach ($params as $key => $value) {
                    $content = str_ireplace('{{' . $key . '}}', $value, $content);
                } 
                preg_match_all("@{{:([a-z0-9_]+?)}}@sui", $content, $localization);
                $localization = $localization[1];
                foreach ($localization as $value) {
                    $content = str_ireplace('{{:' . $value . '}}', $lang[$value], $content);
                } //applying lang
    
                foreach ($quests as $key => $value) {
                    preg_match_all("@{\?$key=$value\?}(((?!{\?.+\?}).)*?){\?\?}@sui", $content, $matches);
                    while (!empty($matches[0])) {
                        $content = str_replace($matches[0][0], $matches[1][0], $content);
                        preg_match_all("@{\?$key=$value\?}(((?!{\?.+\?}).)*?){\?\?}@sui", $content, $matches);
                    }
                    preg_match_all("@{\?$key=((?!$value).+?)\?}(((?!{\?.+\?}).)*?){\?\?}@sui", $content, $matches);
                    while (!empty($matches[0])) {
                        $content = str_replace($matches[0][0], "", $content);
                        preg_match_all("@{\?$key=((?!$value).+?)\?}(((?!{\?.+\?}).)*?){\?\?}@sui", $content, $matches);
                    }
                }
    
                preg_match_all("@{\?access=([a-z0-9]+?)\?}(((?!{\?.+\?}).)*?){\?\?}@sui", $content, $perms);
                while (!empty($perms[0])) {
                    foreach ($perms[1] as $value) {
                        if ($this->user->canAccess($value))
                            $content = preg_replace("@{\?access=$value\?}(((?!{\?.+\?}).)*?){\?\?}@sui", "$1", $content);
                        else $content = preg_replace("@{\?access=$value\?}(((?!{\?.+\?}).)*?){\?\?}@sui", "", $content);
                    }
                    preg_match_all("@{\?access=([a-z0-9]+?)\?}(((?!{\?.+\?}).)*?){\?\?}@sui", $content, $perms);
                }
    
                $content = preg_replace("@{\?authorized=((?!" . (int) $this->authorized . ").+?)\?}(.+?){\?\?}@sui", "", $content);
                $content = preg_replace("@{\?authorized=" . (int) $this->authorized . "\?}(.+?){\?\?}@sui", "$1", $content);
                $content = preg_replace("@{\?(.+?)\?}(.+?){\?\?}@sui", "", $content);
    
                $content = str_ireplace('{{DIR}}', '/' . $this->dir, $content); //replacing DIR param
                $content = str_ireplace('{{URI}}', urlencode(other::filter($_SERVER['REQUEST_URI'])), $content); //replacing URI param
                $content = str_ireplace('{{HTTP_HOST}}', $_SERVER['HTTP_HOST'], $content); //replacing HTTP_HOST param
                $content = preg_replace("@{\?((.+?)|(.+?){0})\?}@sui", "", $content);
                if (!$return) echo $content;
                return $content;
            }
        }
    ?>

    Мой шаблонизатор. Детям и беременным женщинам не смотреть.

    Efog, 03 Ноября 2014

    Комментарии (113)