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

    +152

    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
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    <?
    require_once('ittable.class.php');
    
    class ITForm extends ITTable
    {
    public function __construct($tbl)
    {
    parent::__construct($tbl);
    
    //путь с скрипту который удаляет файлы по tblname record_id filename
    $this->path2deletephp='/itcms4/ckeditor/delete.php';
    }
    
    
    public function generateFormData($i, $action, $head, $submitvalue='', $captcha=0)
    {
    global $itcmscfg;
    $form->submitvalue=htmlentities($submitvalue?$submitvalue:$head, ENT_NOQUOTES, 'UTF-8');
    $form->tbl = $this->tbl;
    if($this->files) $enctype='enctype="multipart/form-data"';
    $form->head = htmlentities($head, ENT_NOQUOTES, 'UTF-8');
    $form->begin = "<form  name='$this->tbl$i->id' id='$this->tbl$i->id' action='$action' method='post' $enctype>";
    $form->inputhidden .= "<input type='hidden' name='id' value='$i->id'><input type='hidden' name='referer' value='" . ($_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:'./') . "'>\n";
    
    if($action=='delete.php') {$form->disabled = 'disabled'; $OPERATION = UPDATABLE;}
    elseif($action=='insert.php') $OPERATION = INSERTABLE;
    elseif($action=='update.php') $OPERATION = UPDATABLE;
    else $OPERATION = UPDATABLE; 
    
      foreach($this->columns as $field=>$ftype)
      {
       $itforms = " $form->disabled name='$field' id='input-$field'" . $this->getITFormsAttr($field);
       $value = isset($i->$field) ? $i->$field : ($_GET[$field] ? $_GET[$field]: $ftype->Default);
       if(!$ftype->htmlcode) $value = htmlentities($value, ENT_QUOTES, 'UTF-8');
       $itcmscfg->cfgfile = intval($itcmscfg->cfgfile);
       if($ftype->Key=='UNI') $itforms .= " data-async='false' data-unique='{cfgfile:$itcmscfg->cfgfile, tblname:\"$this->tbl\", record_id:\"$i->id\"}'";
       
       if($ftype->visibility & HIDDEN){$form->inputhidden .= "<input type='hidden' $itforms value='$value'>"; continue;}
        
        //если поле не RADONLY, то проверить задан ли regexp и разрешена ли операция
       if( !($ftype->visibility & READONLY) )
        if(!$ftype->pattern || !($ftype->visibility & $OPERATION))
         continue;
       
       $form->inputs[$field]->name = "<label for='input-$field' id='label-$field'>$ftype->outputname</label>"; 
       
       //выводим элементы
       if($ftype->options)
       {
        $form->inputs[$field]->input = $ftype->options->html($field, " $form->disabled " . $this->getITFormsAttr($field), $value);
        if($ftype->options->type==OT_BINARY_CHECKBOX)
         $form->js .= "itform.setCheckboxProperty('$field', 'sum', '$ftype->minselected', '$ftype->maxselected');\n";
       }
       elseif($ftype->inputtype=='wysiwyg')
         $form->inputs[$field]->input = "<script src=/include/ckeditor/ckeditor.js></script>
                                         <textarea class='ckeditor' name='$field'>$value</textarea>";
       elseif($ftype->Type=='text')
        $form->inputs[$field]->input = "<textarea rows='10' cols='80' $itforms " . ($form->disabled?' readonly':'') . ">$value</textarea>";
       elseif($ftype->inputtype)
         $form->inputs[$field]->input = "<input type='$ftype->inputtype' value='$value' $itforms>";
       else
        $form->inputs[$field]->input =  "<input type='text' value='$value' $itforms>";  
    
       $f1 = $ftype->func;
       if(isset($f1))
        $form->inputs[$field]->input .=  (' ' . $f1($value));
    
     }//foreach
    
    
    if($this->files)
    {
     foreach($this->files as $k=>$o)
     {
      $itforms = "";
      //это только для action==insert.php можно, при редактирвоании не обязательно файл заливать
      $itforms .= ($o->required && $action=='insert.php') ? " data-min-length='1'" : '';
      $itforms .= $o->validExtentions ? " data-regexp='$o->validExtentions'" : '';
      if($o->help) $itforms .= " data-help='$o->help'";
      if($o->multiple)
       {
        $itforms .= ' multiple';
        $multiple = '[]';
       }
       else
        $multiple='';
     
      $outputname = htmlentities($o->outputname, ENT_NOQUOTES, 'UTF-8');  
      $form->inputs[$k]->name = "<label for='input-$k'>$outputname</label>";
      $form->inputs[$k]->input = "<input type='file' name='$k$multiple' id='input-$k' $itforms>";
     }//foreach
    
     if(intval($i->id))
      $form->files = $itcmscfg->fs->getFiles4TblRecord($this->tbl, $i->id);
    }//if
    
    return $form;
    }//fun

    Запостил: itgovnokod, 19 Января 2015

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

    • Продолжение: http://govnokod.ru/17480
      Ответить
      • всё же 100 строк не зря придуманы
        Ответить
        • А меня удивляет, что постоянно продолжение постят как отдельный говнокод, а не развивают тему под катом.
          Ответить
          • [старческоеБурчание]
            А меня удивляет, когда постят 200 строк, и надеются, что кто-то это будет читать. Интересно, есть хоть один человек, который эти 2 кода хотя бы по диагонали прочёл?

            Когда ньюфаги научатся выделять важные и интересные куски, а не постить эти ничем не примечательные унылые портянки...
            [/старческоеБурчание]
            Ответить
      • >>> Продолжение: http://govnokod.ru/17480
        >> Продолжение: http://govnokod.ru/17479
        > Продолжение: http://govnokod.ru/17480
        Продолжение: http://govnokod.ru/17479

        Ты вогнал меня в рекурсию, содомит!
        Ответить
        • Ответить
          • > Вот если б он прямо в постах номера ссылок написал.
            Типичная проблема - нельзя запилить 2 иммутабельных объекта, ссылающихся друг на друга.

            P.S. Да, я понимаю, что можно догадаться, какой индекс будет у соседнего треда, но это же чит, и вообще ненадёжно.
            Ответить
            • >Типичная проблема - нельзя запилить 2 иммутабельных объекта, ссылающихся друг на друга.
              Да. И вообще нельзя запилить циклические ссылки, только дерево.
              Но зато это сильно упрощает работу GC.
              Это как записать адрес с инкрементом. Оно-то может и сработает, но в многопоточной среде (другой юзер делает пост) ломается.
              Ответить
    • Воу-воу, полегче!
      Учту критику на будущее(:
      Ответить
    • Ответить

    Добавить комментарий