1. PHP / Говнокод #5598

    +160

    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
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    <?php
    
    class UserSessionComponent extends Component {
    	//...
    	protected function loginByUserId($user_id, $is_autologin = false) {
    		$list = $this->_loadComponents($this->components, array('UserAuth'));
    		$userAuth = $list['UserAuth'];
    		$userAuth->startup($this->controller); # !!! WORKFLOW VIOLATION !!!
    		$method = $is_autologin ? 'autologin' : 'login';
    		if ($userAuth->$method($user_id)) {
    			return $this->controller->Session->read('User.data');
    		}
    	}
    	//...
    }
    
    class UserAuthComponent extends BaseMagicComponent {
    	protected $loginType = 'explicit';
    
    	//...
    
    	public function autologin($params = array()) {
    		$this->loginType = 'implicit';
    		return $this->_login($params);
    	}
    
    	public function login($params = array()) {
    		$this->loginType = 'explicit';
    		return $this->_login($params);
    	}
    
    	//...
    	protected function _login($params = array()) {
    		switch (true) {
    			case (is_array($params) && isset($params['user']) && isset($params['password'])):
    				$result = $this->loginByUserAndPassword($params['user'], $params['password']);
    				break;
    			case (is_numeric($params) && $params > 0):
    				$result = $this->loginUser($params);
    				break;
    			default:
    				if (empty($params)) {
    					$result = false;
    				} else {
    					$result = $this->loginUser($params);
    				}
    		}
    		// ...
    	}
    
    	// ...
    	public function loginUser($user) {
    		switch (true) {
    			case is_object($user):
    				if (isset($user->data)) {
    					$a_user = $user->data;
    				} else {
    					return false;
    				}
    				break;
    			case (is_numeric($user) && ($user > 0)):
    				if (!($a_user = $this->User->findById($user))) {
    					return false;
    				}
    				break;
    			case (is_array($user) && (isset($user['User']['id']))):
    				$a_user = $user;
    				break;
    			default:
    				return false;
    		}
    		// ...
    		CFL::using('log');
    		if (empty($GLOBALS['loginIsLogged'])) {
    			$loginLog = new cflLoginTrackingLogger();
    			if ($this->loginType == 'implicit') {
    				$loginLog->implicit_login(array('user_id' => $a_user['User']['id']));
    			} else {
    				$loginLog->explicit_login(array('user_id' => $a_user['User']['id']));
    			}
    			$GLOBALS['loginIsLogged'] = true;
    		}
    		// ...
    	}
    }

    Сорри за много-много кода, еле-еле вписался в лимит. Но пришлось запостить все. Логическая цепочка совершенно потрясающая (смотрим с самого верхнего метода и идем дальше к самому нижнему методу). Тут у нас кода просто по колено: сумасшедший пахлава-код, использование глобальной переменной флага, особое извращенное использование конструкции switch, фактическое дублирование этого самого switch в двух последних методах, нейминг переменных и методов...
    Казалось бы, как все это вообще могло быть написано? Но использование компонента с говорящим именем BaseMagic все ставит на свои места.

    quall, 09 Февраля 2011

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

    +161

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    // функция с именем is_url, передаваемые ей перем.: $url.  
    function is_url($url)
    {  
      // если ничего не ввели, иначе:  
      if($url == "") return 0;  
      // если не соответствует стандарту, возвращаем ошибку.  
      if(!(ereg("\.", $url) && ereg("http://", $url) && ereg("/", str_replace("http://" , "", $url)))) return 0;  
      else return 1;  
    }

    Проверка URL на валидность (http://www.snippy.ru/snippet/213/)

    zamknulo, 09 Февраля 2011

    Комментарии (7)
  3. C++ / Говнокод #5596

    +154

    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
    //построение суффиксного массива
    vector <int> getarr(string s) 
    {
      //s - исходная строка
      //суффиксный массив
      vector <int> arr;
      arr.resize(s.size());
      //массив цветов
      vector <int> col;
      col.resize(s.size());
      //массив для временных данных
      vector <int> buf;
      buf.resize(s.size());
      //массив для карманов сортировки
      vector <int> buck;
      buck.resize(max(L, (int) s.size()));
      //Шаг первый - начальная сортировка
      //мы хотим отсортировать буквы строки
      //посчитаем количество всех букв
      for (int i = 0; i < (int) s.size(); i++) 
        buck[s[i]]++;
      //преобразуем массив так, чтобы каждый элемент указывал на положение в массиве первой данной буквы
      int sum = 0; 
      for (int i = 0; i < L; i++) 
      {
        sum += buck[i];
    	buck[i] = sum - buck[i];
      }
      //теперь заполним массив arr: Теперь в нем суффиксы отсортированы по первой букве
      for (int i = 0; i < (int) s.size(); i++) 
        arr[buck[s[i]]++] = i;
      //теперь проставляем цвета: цвет увеличивается на 1 если следующая буква - другая
      col[arr[0]] = 0; 
      for (int i = 1; i < (int) s.size(); i++) 
        col[arr[i]] = col[arr[i-1]] + (s[arr[i]] != s[arr[i-1]]); 
      int cn = col[arr[s.size() - 1]] + 1;
      //Шаг второй - постепенное расширение подстрок
      //в начале цикла отсортированы подстроки длины l, а в конце - длины 2l
      for (int l = 1; l < (int) s.size(); l *= 2) 
      {
        //обнуляем массив buck  и заполняем для сортировки по col
        for (int i = 0; i < (int) s.size(); i++) 
          buck[i] = 0; 
        for (int i = 0; i < (int) s.size(); i++) 
          buck[col[i]]++; sum = 0; 
        for (int i = 0; i < cn; i++) 
          sum += buck[i], buck[i] = sum - buck[i];
        //строим новый массив в buf (не забываем сдвинуть указатель по модулю на l влево), затем копируем его в arr
        for (int i = 0; i < (int) s.size(); i++) 
          buf[buck[col[(arr[i] - l + s.size()) % s.size()]]++]=(arr[i] - l + s.size()) % s.size(); 
        arr = buf;
        //теперь перекрашиваем массив col: заполняем массив buf, увеличиваем цвет на единицу если один из цветов отличается, затем копируем
        buf[arr[0]] = 0; 
        for (int i = 1; i < (int) s.size(); i++) 
          buf[arr[i]] = buf[arr[i - 1]] + (col[arr[i]] != col[arr[i - 1]] || col[(arr[i] + l) % s.size()] != col[(arr[i - 1] + l) % s.size()]); 
        cn = buf[arr[s.size() - 1]] + 1; 
        col = buf;
      }
      //возвращаем результат
      return arr;
    }

    Это просто жуть

    chexov, 09 Февраля 2011

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

    +158

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    function changeType(what) {
                    if (what == "forward") {
                            if (document.forms[0].elements['forward_list'].disabled == true) {
                                    document.forms[0].elements['forward_list'].disabled = false;
                            } else {
                                    document.forms[0].elements['forward_list'].disabled = true;
                            }
                    }
            }

    Есть замечательная ispCP и форма для настройки форвардинга е-мэйлов. Тут описывается поведение чек-бокса для включения формы.

    Mr_Alone, 09 Февраля 2011

    Комментарии (15)
  5. ActionScript / Говнокод #5594

    −235

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    if( end.x % 2 != 0 )
    {
    //20 строк кода
    }
    else if( end.x % 2 == 0 )
    {
    //20 строк кода
    }

    С того же места, чуток ниже

    Werdn, 08 Февраля 2011

    Комментарии (7)
  6. ActionScript / Говнокод #5593

    −104

    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
    if( mIsTarget )
    {
    	...
    	if( !mTargetUnit )
    	{
    		panel.isTarget = true;
    	}
    	else
    	{
    		mTargetUnit.isTarget = true;
    	}
    
    	if( targetUnitId )
    	{
    		targetId = targetUnitId;
    	}
    	else
    	{
    		if( !mTargetUnit )
    		{
    			targetId = panel.getId();
    		}
    		else
    		{
    			targetId = mTargetUnit.getId();
    		}
    	}
    }
    else if( !mIsTarget )
    {
    	if( mUnitManager.getUnitList())
    	{
    		for( i = 0; i < mUnitManager.getUnitList().length; i++ )
    		{
    			( mUnitManager.getUnit( mUnitManager.getUnitList()[ i ]) as BattleUnit ).hasTarget = false;
    			( mUnitManager.getUnit( mUnitManager.getUnitList()[ i ]) as BattleUnit ).isTarget = false;
    		}
    	}
    }

    отак от

    Werdn, 08 Февраля 2011

    Комментарии (3)
  7. C++ / Говнокод #5592

    +170

    1. 1
    double* (*(*(*fp)(int*,int*,int*))[])(float*,float*,float*);

    уже третий семпл из жгучей темы на форуме сайта wasm.ru... я цитирую: "Объявление указателя на функцию, принимающую 3 аргумента-указателя на int, а возвращающая указатель на массив указателей на функцию принимающую 3 аргумента-указателя на float и возвращающую указатель на double"))) http://www.wasm.ru/forum/viewtopic.php?pid=419403#p419403

    ReL, 08 Февраля 2011

    Комментарии (31)
  8. JavaScript / Говнокод #5591

    +160

    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
    <script language="javascript" type="text/javascript">
    <!--
    var ie=document.all?1:0;
    var ns=document.getElementById&&!document.all?1:0;
     
    function InsertSmile(SmileId)
    {
        if(ie)
        {
        document.all.message.focus();
        document.all.message.value+=" "+SmileId+" ";
        }
     
        else if(ns)
        {
        document.forms['guestbook'].elements['message'].focus();
        document.forms['guestbook'].elements['message'].value+=" "+SmileId+" ";
        }
     
        else
        alert("Ваш браузер не поддерживается!");
    }
    // -->
    </script>

    qbasic, 08 Февраля 2011

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

    +158

    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
    do
            {
                    do
                            {
                                    if ($myrow_cats["category_id"] == $myrow_oldtovar_1["id"])
                                            {
                                                    printf("<tr><td class='newcat_author'><input name='old_id_cat[]' type='checkbox' value='%s' checked >
                                                    %s</td></tr>",
                                                    $myrow_oldtovar_1["id"],$myrow_oldtovar_1["rubrikatitle"]);
                                            }
                                    else
                                            {
                                                    printf("<tr><td class='newcat_author'><input name='old_id_cat[]' type='checkbox' value='%s' >%s</td></tr>",
                                                    $myrow_oldtovar_1["id"],$myrow_oldtovar_1["rubrikatitle"]);
                                            }       
                            }
                    while($myrow_oldtovar_1 = mysql_fetch_array($result_oldtovar_1));
            }
    while ( $myrow_cats = mysql_fetch_array($result_cats) );

    qbasic, 08 Февраля 2011

    Комментарии (6)
  10. C++ / Говнокод #5589

    +165

    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
    if (seismicDriver()->has3DSeismic() && !seismicDriver()->has2DSeismic() ) {
        enableSeismicTab(0, true);
        enableSeismicTab(1, false);
      }
      else if (!seismicDriver()->has3DSeismic() && seismicDriver()->has2DSeismic() ) {
        enableSeismicTab(0, false);
        enableSeismicTab(1, true);
      }
      else if (seismicDriver()->has3DSeismic() && seismicDriver()->has2DSeismic() ) {
        enableSeismicTab(0, true);
        enableSeismicTab(1, true);
      }
      else if (!seismicDriver()->has3DSeismic() && !seismicDriver()->has2DSeismic() ) {
        enableSeismicTab(0, false);
        enableSeismicTab(1, false);
      }

    Этим своим первым постом предворяю серию говнокода, который пишет мой коллега, китаец, имеющий PhD по физике.

    В этом сниппете советую обратить внимание на два компонента в условиях if и на расстановку true и false в соответствии с ними.

    kitaec, 08 Февраля 2011

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