first commit
This commit is contained in:
		
							
								
								
									
										107
									
								
								ActiveForm.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										107
									
								
								ActiveForm.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\builders\ButtonBuilder;
 | 
			
		||||
use itguild\forms\form\builders\CheckBoxBuilder;
 | 
			
		||||
use itguild\forms\form\builders\HiddenBuilder;
 | 
			
		||||
use itguild\forms\form\builders\RadioButtonBuilder;
 | 
			
		||||
use itguild\forms\form\builders\SelectBuilder;
 | 
			
		||||
use itguild\forms\form\builders\TextAreaBuilder;
 | 
			
		||||
use itguild\forms\form\builders\TextInputBuilder;
 | 
			
		||||
use itguild\forms\form\inputs\BaseInput;
 | 
			
		||||
use itguild\forms\form\inputs\Button;
 | 
			
		||||
use itguild\forms\form\inputs\Checkbox;
 | 
			
		||||
use itguild\forms\form\inputs\Hidden;
 | 
			
		||||
use itguild\forms\form\inputs\RadioButton;
 | 
			
		||||
use itguild\forms\form\inputs\Select;
 | 
			
		||||
use itguild\forms\form\inputs\TextArea;
 | 
			
		||||
use itguild\forms\form\inputs\TextInput;
 | 
			
		||||
 | 
			
		||||
class ActiveForm
 | 
			
		||||
{
 | 
			
		||||
    private BaseInput $fieldObject;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $action
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function beginForm(string $action): void
 | 
			
		||||
    {
 | 
			
		||||
        echo "<form method='POST' action='$action'>";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function endForm(): void
 | 
			
		||||
    {
 | 
			
		||||
        echo "</form>";
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function field($class, string $name, array $params = [])
 | 
			
		||||
    {
 | 
			
		||||
        if ($class === Select::class){
 | 
			
		||||
            $this->fieldObject = SelectBuilder::build($name, $params);
 | 
			
		||||
        }
 | 
			
		||||
        elseif ($class === TextInput::class){
 | 
			
		||||
            $this->fieldObject = TextInputBuilder::build($name, $params);
 | 
			
		||||
        }
 | 
			
		||||
        elseif ($class === TextArea::class){
 | 
			
		||||
            $this->fieldObject = TextAreaBuilder::build($name, $params);
 | 
			
		||||
        }
 | 
			
		||||
        elseif ($class === Checkbox::class) {
 | 
			
		||||
            $this->fieldObject = CheckBoxBuilder::build($name, $params);
 | 
			
		||||
        }
 | 
			
		||||
        elseif ($class === Button::class) {
 | 
			
		||||
            $this->fieldObject = ButtonBuilder::build($name, $params);
 | 
			
		||||
        }
 | 
			
		||||
        elseif ($class === RadioButton::class){
 | 
			
		||||
            $this->fieldObject = RadioButtonBuilder::build($name, $params);
 | 
			
		||||
        }
 | 
			
		||||
        elseif ($class === Hidden::class){
 | 
			
		||||
            $this->fieldObject = HiddenBuilder::build($name, $params);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            $this->fieldObject = new $class($name, $params);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setLabel(string $title): self
 | 
			
		||||
    {
 | 
			
		||||
        $this->fieldObject->setLabel($title);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setOptions(array $options): self
 | 
			
		||||
    {
 | 
			
		||||
        $this->fieldObject->setOptions($options);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setTemplate($template): self
 | 
			
		||||
    {
 | 
			
		||||
        $this->fieldObject->setTemplate($template);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function render()
 | 
			
		||||
    {
 | 
			
		||||
        $this->fieldObject->create();
 | 
			
		||||
        $this->fieldObject->render();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function fetch()
 | 
			
		||||
    {
 | 
			
		||||
        $this->fieldObject->create();
 | 
			
		||||
        return $this->fieldObject->fetch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										110
									
								
								Form.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										110
									
								
								Form.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,110 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\inputs\Button;
 | 
			
		||||
use itguild\forms\form\inputs\Checkbox;
 | 
			
		||||
use itguild\forms\form\inputs\Label;
 | 
			
		||||
use itguild\forms\form\inputs\RadioButton;
 | 
			
		||||
use itguild\forms\form\inputs\Select;
 | 
			
		||||
use itguild\forms\form\inputs\TextArea;
 | 
			
		||||
use itguild\forms\form\inputs\TextInput;
 | 
			
		||||
 | 
			
		||||
class Form {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $action
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function beginForm(string $action): void
 | 
			
		||||
    {
 | 
			
		||||
        echo "<form method='POST' action='$action'>";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    public function textInput(string $name, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        TextInput::build($name, $paramsArray);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function checkBox(string $name, string $value, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        Checkbox::build($name, $value, $paramsArray);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $title
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function label(string $title, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        Label::build($title, $paramsArray);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function radio(string $name, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        RadioButton::build($name, $paramsArray);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function textarea(string $name, string $value = "", array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        TextArea::build($name, $value, $paramsArray);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param array $options
 | 
			
		||||
     * @param $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function select(string $name, array $options = [], $value = null, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
      Select::build($name, $options, $value, $paramsArray);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function button(string $name, string $value, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        Button::build($name, $value, $paramsArray);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function endForm(): void
 | 
			
		||||
    {
 | 
			
		||||
        echo "</form>";
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										86
									
								
								JsonForm.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										86
									
								
								JsonForm.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\builders\Builder;
 | 
			
		||||
use itguild\forms\form\builders\LabelBuilder;
 | 
			
		||||
use itguild\forms\form\mappers\JsonInputMapper;
 | 
			
		||||
use itguild\forms\form\traits\CreateParams;
 | 
			
		||||
 | 
			
		||||
class JsonForm
 | 
			
		||||
{
 | 
			
		||||
    use CreateParams;
 | 
			
		||||
    private $jsonData;
 | 
			
		||||
 | 
			
		||||
    private $html = '';
 | 
			
		||||
 | 
			
		||||
    public function __construct($json)
 | 
			
		||||
    {
 | 
			
		||||
        $this->jsonData = json_decode($json, true);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function beginForm($params = []): string
 | 
			
		||||
    {
 | 
			
		||||
        $paramsString = $this->createParams($params);
 | 
			
		||||
        return "<form $paramsString  >";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function endForm(): string
 | 
			
		||||
    {
 | 
			
		||||
        return "</form>";
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function convertHTML(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->html .= $this->beginForm($this->jsonData['meta']);
 | 
			
		||||
 | 
			
		||||
        foreach ($this->jsonData['data'] as $item) {
 | 
			
		||||
 | 
			
		||||
            if (isset($item["type"]) and isset($item["name"])) {
 | 
			
		||||
 | 
			
		||||
                /**
 | 
			
		||||
                 * @var $builder Builder
 | 
			
		||||
                 */
 | 
			
		||||
                $builder = JsonInputMapper::getBuilder($item["type"]);
 | 
			
		||||
                unset($item["type"]);
 | 
			
		||||
                $name = $item["name"];
 | 
			
		||||
                unset($item["name"]);
 | 
			
		||||
                $label = '';
 | 
			
		||||
                if (isset($item['label'])) {
 | 
			
		||||
                    $label = $this->createLabel($item['label']);
 | 
			
		||||
                }
 | 
			
		||||
                unset($item['label']);
 | 
			
		||||
                $input = $builder::build($name, $item);
 | 
			
		||||
                $input->setLabel($label)->create();
 | 
			
		||||
                $this->html .= $input->fetch();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->html .= $this->endForm();
 | 
			
		||||
        //return $this->fetch($html);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function createLabel($labelParams)
 | 
			
		||||
    {
 | 
			
		||||
        $title = '';
 | 
			
		||||
        if(isset($labelParams['title'])){
 | 
			
		||||
            $title = $labelParams['title'];
 | 
			
		||||
            unset($labelParams['title']);
 | 
			
		||||
        }
 | 
			
		||||
        return LabelBuilder::build($title, $labelParams);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function render(): void
 | 
			
		||||
    {
 | 
			
		||||
        echo $this->html;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function fetch(): string
 | 
			
		||||
    {
 | 
			
		||||
        return $this->html;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								builders/Builder.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								builders/Builder.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\builders;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\inputs\BaseInput;
 | 
			
		||||
 | 
			
		||||
interface Builder
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static function build(string $name, array $params = []): BaseInput;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								builders/ButtonBuilder.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								builders/ButtonBuilder.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\builders;
 | 
			
		||||
use itguild\forms\form\inputs\Button;
 | 
			
		||||
 | 
			
		||||
class ButtonBuilder
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static function build(string $name, array $params = [])
 | 
			
		||||
    {
 | 
			
		||||
        $value = $params['value'] ?? null;
 | 
			
		||||
        $typeInput = $params['typeInput'] ?? null;
 | 
			
		||||
        unset($params['value']);
 | 
			
		||||
        unset($params['typeInput']);
 | 
			
		||||
 | 
			
		||||
        return new Button(name: $name, value: $value ?? null, typeInput: $typeInput, paramsArray: $params);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								builders/CheckBoxBuilder.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								builders/CheckBoxBuilder.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\builders;
 | 
			
		||||
use itguild\forms\form\inputs\Checkbox;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CheckBoxBuilder
 | 
			
		||||
{
 | 
			
		||||
    public static function build(string $name, array $params = []): Checkbox
 | 
			
		||||
    {
 | 
			
		||||
        $value = $params['value'] ?? "";
 | 
			
		||||
        unset($params['value']);
 | 
			
		||||
 | 
			
		||||
        return new Checkbox(name: $name, value: $value, paramsArray: $params);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								builders/HiddenBuilder.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								builders/HiddenBuilder.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\builders;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\inputs\Hidden;
 | 
			
		||||
 | 
			
		||||
class HiddenBuilder
 | 
			
		||||
{
 | 
			
		||||
    public static function build(string $name, array $params = []): Hidden
 | 
			
		||||
    {
 | 
			
		||||
        $value = $params['value'] ?? "";
 | 
			
		||||
        unset($params['value']);
 | 
			
		||||
 | 
			
		||||
        return new Hidden(name: $name, value: $value, paramsArray: $params);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								builders/LabelBuilder.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								builders/LabelBuilder.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\builders;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\inputs\Label;
 | 
			
		||||
 | 
			
		||||
class LabelBuilder
 | 
			
		||||
{
 | 
			
		||||
    public static function build(string $title, array $params = [])
 | 
			
		||||
    {
 | 
			
		||||
        return new Label(title: $title, paramsArray: $params);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								builders/RadioButtonBuilder.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								builders/RadioButtonBuilder.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\builders;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\inputs\RadioButton;
 | 
			
		||||
 | 
			
		||||
class RadioButtonBuilder
 | 
			
		||||
{
 | 
			
		||||
    public static function build(string $name, array $params = [])
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        return new RadioButton(name: $name, paramsArray: $params);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								builders/SelectBuilder.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								builders/SelectBuilder.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\builders;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\inputs\Select;
 | 
			
		||||
 | 
			
		||||
class SelectBuilder
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static function build(string $name, array $params = [])
 | 
			
		||||
    {
 | 
			
		||||
        $value = $params['value'] ?? null;
 | 
			
		||||
        unset($params['value']);
 | 
			
		||||
        $options = $params['options'] ?? [];
 | 
			
		||||
        unset($params['options']);
 | 
			
		||||
 | 
			
		||||
        return new Select(name: $name, options: $options, value: $value, paramsArray: $params);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								builders/TextAreaBuilder.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								builders/TextAreaBuilder.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\builders;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\inputs\TextArea;
 | 
			
		||||
 | 
			
		||||
class TextAreaBuilder
 | 
			
		||||
{
 | 
			
		||||
    public static function build(string $name, array $params = [])
 | 
			
		||||
    {
 | 
			
		||||
        $value = $params['value'] ?? "";
 | 
			
		||||
        unset($params['value']);
 | 
			
		||||
 | 
			
		||||
        return new TextArea(name: $name, value: $value, paramsArray: $params);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								builders/TextInputBuilder.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								builders/TextInputBuilder.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\builders;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\inputs\BaseInput;
 | 
			
		||||
use itguild\forms\form\inputs\TextInput;
 | 
			
		||||
 | 
			
		||||
class TextInputBuilder implements Builder
 | 
			
		||||
{
 | 
			
		||||
    public static function build(string $name, array $params = []): BaseInput
 | 
			
		||||
    {
 | 
			
		||||
        return new TextInput(name: $name, paramsArray: $params);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								composer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								composer.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "itguild/form",
 | 
			
		||||
    "type": "library",
 | 
			
		||||
    "license": "MIT",
 | 
			
		||||
    "autoload": {
 | 
			
		||||
        "psr-4": {
 | 
			
		||||
            "Itguild\\forms\\": "src/"
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "authors": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Kavalar",
 | 
			
		||||
            "email": "apuc06@mail.ru"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "minimum-stability": "dev",
 | 
			
		||||
    "require": {}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										226
									
								
								core/CgRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								core/CgRequest.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,226 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\core;
 | 
			
		||||
 | 
			
		||||
use AllowDynamicProperties;
 | 
			
		||||
use Rakit\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
#[AllowDynamicProperties]
 | 
			
		||||
class CgRequest
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var string $host Абсолютный адрес сервера
 | 
			
		||||
     */
 | 
			
		||||
    public $host;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array $headers Заголовки запроса
 | 
			
		||||
     */
 | 
			
		||||
    public $headers;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array
 | 
			
		||||
     */
 | 
			
		||||
    public $data = [];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array
 | 
			
		||||
     */
 | 
			
		||||
    public $errors = [];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
        $this->headers = $this->getRequestHeaders();
 | 
			
		||||
        $this->load();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function rules()
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function messages()
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Возвращает абсолютный адрес сервера.
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function getHost(): string
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->host !== null) {
 | 
			
		||||
            return $this->host;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $http = $this->getIsSecure() ? 'https' : 'http';
 | 
			
		||||
 | 
			
		||||
        if ($this->headerExist('Host')) {
 | 
			
		||||
            $this->host = $http . '://' . $this->getHeader('Host');
 | 
			
		||||
        } elseif (isset($_SERVER['SERVER_NAME'])) {
 | 
			
		||||
            $this->host = $http . '://' . $_SERVER['SERVER_NAME'];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->host;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Возвращает true если шифрование https, иначе false.
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function getIsSecure(): bool
 | 
			
		||||
    {
 | 
			
		||||
        if (isset($_SERVER['HTTPS']) && (strcasecmp($_SERVER['HTTPS'], 'on') === 0 || $_SERVER['HTTPS'] == 1)) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Проверяет был ли передан заголовок запроса.
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function headerExist($header): bool
 | 
			
		||||
    {
 | 
			
		||||
        return isset($this->headers[$header]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Возвращает заголовок запроса
 | 
			
		||||
     * @param string $header Заголовок.
 | 
			
		||||
     * @param mixed $defaultValue Значение если, параметр не передан.
 | 
			
		||||
     * @return mixed|null
 | 
			
		||||
     */
 | 
			
		||||
    public function getHeader($header, $defaultValue = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->headers[$header] ?? $defaultValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Возвращает GET - параметр.
 | 
			
		||||
     * @param string $param Параметр.
 | 
			
		||||
     * @param mixed $defaultValue Значение если, параметр не передан.
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     */
 | 
			
		||||
    public function get($param = null, $defaultValue = null)
 | 
			
		||||
    {
 | 
			
		||||
        if (is_null($param)) {
 | 
			
		||||
            return $_GET;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $_GET[$param] ?? $defaultValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Возвращает POST - параметр.
 | 
			
		||||
     * @param string $param Параметр.
 | 
			
		||||
     * @param mixed $defaultValue Значение если, параметр не передан.
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     */
 | 
			
		||||
    public function post($param = null, $defaultValue = null)
 | 
			
		||||
    {
 | 
			
		||||
        if (is_null($param)) {
 | 
			
		||||
            return $_POST;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $_POST[$param] ?? $defaultValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Был ли POST - запрос.
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function isPost(): bool
 | 
			
		||||
    {
 | 
			
		||||
        return ($_SERVER['REQUEST_METHOD'] === 'POST');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Был ли GET - запрос.
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function isGet(): bool
 | 
			
		||||
    {
 | 
			
		||||
        return ($_SERVER['REQUEST_METHOD'] === 'GET');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Загружаем свойсва
 | 
			
		||||
     */
 | 
			
		||||
    public function load(): void
 | 
			
		||||
    {
 | 
			
		||||
        if (!empty($_REQUEST)) {
 | 
			
		||||
            foreach ($_REQUEST as $key => $item) {
 | 
			
		||||
                $this->{$key} = $item;
 | 
			
		||||
                $this->data[$key] = $item;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function validate()
 | 
			
		||||
    {
 | 
			
		||||
        if (!empty($this->data)) {
 | 
			
		||||
            $valid = new Validator();
 | 
			
		||||
            $validation = $valid->make($this->data, $this->rules());
 | 
			
		||||
            $validation->setMessages($this->messages());
 | 
			
		||||
            $validation->validate();
 | 
			
		||||
            if ($validation->fails()) {
 | 
			
		||||
                $this->errors = $validation->errors();
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getMessagesArray()
 | 
			
		||||
    {
 | 
			
		||||
        $msgs = [];
 | 
			
		||||
        if($this->errors){
 | 
			
		||||
            foreach ($this->errors->toArray() as $item){
 | 
			
		||||
                $msgs[] = array_values($item)[0];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $msgs;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    protected function getRequestHeaders()
 | 
			
		||||
    {
 | 
			
		||||
        $headers = array();
 | 
			
		||||
        foreach ($_SERVER as $key => $value) {
 | 
			
		||||
            if (substr($key, 0, 5) <> 'HTTP_') {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            $header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));
 | 
			
		||||
            $headers[$header] = $value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $headers;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								core/cg_view/CgView.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								core/cg_view/CgView.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\core\cg_view;
 | 
			
		||||
 | 
			
		||||
class CgView
 | 
			
		||||
{
 | 
			
		||||
    public string $viewPath = '';
 | 
			
		||||
    public bool|string $layout = false;
 | 
			
		||||
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function render(string $view, array $data = []): void
 | 
			
		||||
    {
 | 
			
		||||
        $content = $this->createContent($view, $data);
 | 
			
		||||
 | 
			
		||||
        echo $content;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function fetch(string $view, array $data = []): false|string
 | 
			
		||||
    {
 | 
			
		||||
        $content = $this->createContent($view, $data);
 | 
			
		||||
 | 
			
		||||
        return $content;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function createContent(string $view, array $data = []): false|string
 | 
			
		||||
    {
 | 
			
		||||
        ob_start();
 | 
			
		||||
 | 
			
		||||
        $cgView = new self();
 | 
			
		||||
        $cgView->viewPath = $this->viewPath;
 | 
			
		||||
 | 
			
		||||
        foreach ($data as $key => $datum){
 | 
			
		||||
            ${"$key"} = $datum;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        include ($this->viewPath . $view);
 | 
			
		||||
 | 
			
		||||
        $content = ob_get_contents();
 | 
			
		||||
        ob_end_clean ();
 | 
			
		||||
 | 
			
		||||
        ob_start();
 | 
			
		||||
        $file_content = $content;
 | 
			
		||||
 | 
			
		||||
        if ($this->layout){
 | 
			
		||||
            if (file_exists($this->viewPath . $this->layout)){
 | 
			
		||||
                include ($this->viewPath . $this->layout);
 | 
			
		||||
                $file_content = ob_get_contents();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        ob_end_clean ();
 | 
			
		||||
 | 
			
		||||
        return $file_content;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								exceptions/CreateFormException.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								exceptions/CreateFormException.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\exceptions;
 | 
			
		||||
 | 
			
		||||
class CreateFormException extends \Exception
 | 
			
		||||
{
 | 
			
		||||
    function __construct(string $msg)
 | 
			
		||||
    {
 | 
			
		||||
        $this->message = "Create form error: " . $msg;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								exceptions/FieldTypeNotFound.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								exceptions/FieldTypeNotFound.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\exceptions;
 | 
			
		||||
 | 
			
		||||
class FieldTypeNotFound extends \Exception
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    function __construct(string $type)
 | 
			
		||||
    {
 | 
			
		||||
        $this->message = "Тип поля $type не найден";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								exceptions/FormNotFoundException.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								exceptions/FormNotFoundException.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\exceptions;
 | 
			
		||||
 | 
			
		||||
class FormNotFoundException extends \Exception
 | 
			
		||||
{
 | 
			
		||||
    function __construct($formId)
 | 
			
		||||
    {
 | 
			
		||||
        $this -> message = "Форма  $formId не найдена";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								exceptions/FormResultNotFoundException.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								exceptions/FormResultNotFoundException.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\exceptions;
 | 
			
		||||
 | 
			
		||||
class FormResultNotFoundException extends \Exception
 | 
			
		||||
{
 | 
			
		||||
    function __construct($id)
 | 
			
		||||
    {
 | 
			
		||||
        $this -> message = "Ответ формы  $id не найдена";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								helpers/TranslitorHelper.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								helpers/TranslitorHelper.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\helpers;
 | 
			
		||||
 | 
			
		||||
class TranslitorHelper
 | 
			
		||||
{
 | 
			
		||||
    public static function translit($str){
 | 
			
		||||
        $russian = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З',
 | 
			
		||||
            'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У',
 | 
			
		||||
            'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я',
 | 
			
		||||
            'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к',
 | 
			
		||||
            'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц',
 | 
			
		||||
            'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', ' ');
 | 
			
		||||
        $translit = array('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z',
 | 
			
		||||
            'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F',
 | 
			
		||||
            'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a',
 | 
			
		||||
            'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm',
 | 
			
		||||
            'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch',
 | 
			
		||||
            'y', 'y', 'y', 'e', 'yu', 'ya', '_');
 | 
			
		||||
        return str_replace($russian, $translit, $str);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								inputs/BaseInput.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										66
									
								
								inputs/BaseInput.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\inputs;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\templates\Template;
 | 
			
		||||
 | 
			
		||||
abstract class BaseInput
 | 
			
		||||
{
 | 
			
		||||
    protected Template $inputTemplate;
 | 
			
		||||
    protected bool $hasLabel = false;
 | 
			
		||||
    protected string $html = '';
 | 
			
		||||
    protected string|Label $label = "";
 | 
			
		||||
    protected string $labelString = "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function render(): void
 | 
			
		||||
    {
 | 
			
		||||
        echo $this->html;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
     public function fetch(): string
 | 
			
		||||
     {
 | 
			
		||||
         return $this->html;
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
    public abstract function create();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string|Label $title
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function setLabel(string|Label $title): self
 | 
			
		||||
    {
 | 
			
		||||
        $this->hasLabel = true;
 | 
			
		||||
        $this->label= $title;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function createLabel()
 | 
			
		||||
    {
 | 
			
		||||
        if($this->hasLabel) {
 | 
			
		||||
            if(is_string($this->label)){
 | 
			
		||||
                $this->labelString = "<label>$this->label</label>";
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                $this->labelString= $this->label->create()->fetch();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param $template
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function setTemplate($template): self
 | 
			
		||||
    {
 | 
			
		||||
        $this->inputTemplate = new $template();
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								inputs/Button.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								inputs/Button.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\inputs;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\templates\Simple\SimpleTemplate;
 | 
			
		||||
use itguild\forms\form\traits\CreateParams;
 | 
			
		||||
 | 
			
		||||
class Button extends BaseInput
 | 
			
		||||
{
 | 
			
		||||
    use CreateParams;
 | 
			
		||||
    private $typeInput;
 | 
			
		||||
    private string $name;
 | 
			
		||||
    private string $value;
 | 
			
		||||
    private array $paramsArray;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(string $name, string $value, $typeInput, array $paramsArray = [])
 | 
			
		||||
    {
 | 
			
		||||
        $this->typeInput = $typeInput;
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
        $this->paramsArray = $paramsArray;
 | 
			
		||||
        $this->value = $value;
 | 
			
		||||
        $this->inputTemplate = new SimpleTemplate();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function create(): self
 | 
			
		||||
    {
 | 
			
		||||
        $paramsString = $this->createParams($this->paramsArray);
 | 
			
		||||
        $label = "";
 | 
			
		||||
        $button = "<input type='$this->typeInput' value='$this->value' name='$this->name' $paramsString>";
 | 
			
		||||
 | 
			
		||||
        $this->createLabel();
 | 
			
		||||
 | 
			
		||||
        $this->html = str_replace('{input}', $button, $this->inputTemplate->getInputTemplate());
 | 
			
		||||
        $this->html = str_replace('{label}', $this->labelString, $this->html);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function build( string $name, string $value, string $typeInput, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        $button = new self($name, $value, $typeInput, $paramsArray);
 | 
			
		||||
        $button->create()->render();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										60
									
								
								inputs/Checkbox.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										60
									
								
								inputs/Checkbox.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\inputs;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\templates\Simple\SimpleTemplate;
 | 
			
		||||
use itguild\forms\form\traits\CreateParams;
 | 
			
		||||
 | 
			
		||||
class Checkbox extends BaseInput
 | 
			
		||||
{
 | 
			
		||||
    use CreateParams;
 | 
			
		||||
 | 
			
		||||
    private string $name;
 | 
			
		||||
    private string $value;
 | 
			
		||||
    private array $paramsArray;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(string $name, string $value = '', array $paramsArray = [])
 | 
			
		||||
    {
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
        $this->value = $value;
 | 
			
		||||
        $this->paramsArray = $paramsArray;
 | 
			
		||||
        $this->inputTemplate = new SimpleTemplate();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function create(): self
 | 
			
		||||
    {
 | 
			
		||||
        $paramsString = $this->createParams($this->paramsArray);
 | 
			
		||||
        $checkBox = "<input name='$this->name' type='checkbox' value='$this->value' $paramsString >";
 | 
			
		||||
        $label = "";
 | 
			
		||||
 | 
			
		||||
        $this->createLabel();
 | 
			
		||||
 | 
			
		||||
        $this->html = str_replace('{input}', $checkBox, $this->inputTemplate->getInputTemplate());
 | 
			
		||||
        $this->html = str_replace('{label}', $this->labelString, $this->html);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function build(string $name, string $value, array $paramsArray): void
 | 
			
		||||
    {
 | 
			
		||||
        $checkBox = new self($name, $value, $paramsArray);
 | 
			
		||||
        $checkBox->create()->render();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										60
									
								
								inputs/Hidden.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								inputs/Hidden.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\inputs;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\templates\Simple\SimpleTemplate;
 | 
			
		||||
use itguild\forms\form\traits\CreateParams;
 | 
			
		||||
 | 
			
		||||
class Hidden extends BaseInput
 | 
			
		||||
{
 | 
			
		||||
    use CreateParams;
 | 
			
		||||
 | 
			
		||||
    private string $name;
 | 
			
		||||
    private string $value;
 | 
			
		||||
    private array $paramsArray;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(string $name, string $value = '', array $paramsArray = [])
 | 
			
		||||
    {
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
        $this->value = $value;
 | 
			
		||||
        $this->paramsArray = $paramsArray;
 | 
			
		||||
        $this->inputTemplate = new SimpleTemplate();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function create(): self
 | 
			
		||||
    {
 | 
			
		||||
        $paramsString = $this->createParams($this->paramsArray);
 | 
			
		||||
        $hidden = "<input name='$this->name' type='hidden' value='$this->value' $paramsString >";
 | 
			
		||||
        $label = "";
 | 
			
		||||
 | 
			
		||||
        $this->createLabel();
 | 
			
		||||
 | 
			
		||||
        $this->html = str_replace('{input}', $hidden, $this->inputTemplate->getInputTemplate());
 | 
			
		||||
        $this->html = str_replace('{label}', $this->labelString, $this->html);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function build(string $name, string $value, array $paramsArray): void
 | 
			
		||||
    {
 | 
			
		||||
        $hidden = new self($name, $value, $paramsArray);
 | 
			
		||||
        $hidden->create()->render();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										58
									
								
								inputs/Label.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										58
									
								
								inputs/Label.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\inputs;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\traits\CreateParams;
 | 
			
		||||
 | 
			
		||||
class Label extends BaseInput
 | 
			
		||||
{
 | 
			
		||||
    use CreateParams;
 | 
			
		||||
 | 
			
		||||
    private string $title;
 | 
			
		||||
 | 
			
		||||
    private array $paramsArray;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $title
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(string $title, array $paramsArray = [])
 | 
			
		||||
    {
 | 
			
		||||
        $this->title = $title;
 | 
			
		||||
        $this->paramsArray = $paramsArray;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function create(): self
 | 
			
		||||
    {
 | 
			
		||||
        $paramsString = $this->createParams($this->paramsArray);
 | 
			
		||||
        $this->html = "<label $paramsString >$this->title</label>";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function getHtml(): string
 | 
			
		||||
    {
 | 
			
		||||
        return $this->html;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $title
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function build(string $title, array $paramsArray = [])
 | 
			
		||||
    {
 | 
			
		||||
        $label = new self($title, $paramsArray);
 | 
			
		||||
        $label->create()->render();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										63
									
								
								inputs/RadioButton.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										63
									
								
								inputs/RadioButton.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\inputs;
 | 
			
		||||
use itguild\forms\form\templates\Simple\SimpleTemplate;
 | 
			
		||||
use itguild\forms\form\traits\CreateOption;
 | 
			
		||||
use itguild\forms\form\traits\CreateParams;
 | 
			
		||||
 | 
			
		||||
class RadioButton extends BaseInput
 | 
			
		||||
{
 | 
			
		||||
    use CreateParams;
 | 
			
		||||
    use CreateOption;
 | 
			
		||||
    private $name;
 | 
			
		||||
    private $paramsArray;
 | 
			
		||||
    private $options = [];
 | 
			
		||||
    private $value;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public function __construct(string $name, array $paramsArray = [])
 | 
			
		||||
    {
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
        $this->paramsArray = $paramsArray;
 | 
			
		||||
        $this->inputTemplate = new SimpleTemplate();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function create(): self
 | 
			
		||||
    {
 | 
			
		||||
        $paramsString = $this->createParams($this->paramsArray);
 | 
			
		||||
        $optionsString = $this->createOption($this->options, $this->value);
 | 
			
		||||
        $radioButton = "<input name='$this->name' type='radio' $paramsString>$optionsString";
 | 
			
		||||
        $label = "";
 | 
			
		||||
 | 
			
		||||
        $this->createLabel();
 | 
			
		||||
 | 
			
		||||
        $this->html = str_replace('{input}', $radioButton, $this->inputTemplate->getInputTemplate());
 | 
			
		||||
        $this->html = str_replace('{label}', $this->labelString, $this->html);
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function build(string $name, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        $radioButton = new self($name, $paramsArray);
 | 
			
		||||
        $radioButton->create()->render();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param $options
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function setOptions($options)
 | 
			
		||||
    {
 | 
			
		||||
        $this->options = array_merge($options, $this->options);
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										80
									
								
								inputs/Select.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										80
									
								
								inputs/Select.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\inputs;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\templates\Simple\SimpleTemplate;
 | 
			
		||||
use itguild\forms\form\traits\CreateOption;
 | 
			
		||||
use itguild\forms\form\traits\CreateParams;
 | 
			
		||||
 | 
			
		||||
class Select extends BaseInput
 | 
			
		||||
{
 | 
			
		||||
    use CreateParams;
 | 
			
		||||
    use CreateOption;
 | 
			
		||||
    private $name;
 | 
			
		||||
    private $options;
 | 
			
		||||
 | 
			
		||||
    private $value;
 | 
			
		||||
    private $paramsArray;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param array $options
 | 
			
		||||
     * @param $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(string $name, array $options = [], $value = null, array $paramsArray = [])
 | 
			
		||||
    {
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
        $this->options = $options;
 | 
			
		||||
        $this->value = $value;
 | 
			
		||||
        $this->paramsArray = $paramsArray;
 | 
			
		||||
        $this->inputTemplate = new SimpleTemplate();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function create(): self
 | 
			
		||||
    {
 | 
			
		||||
        $paramsString  = $this->createParams($this->paramsArray);
 | 
			
		||||
        $optionsString = $this->createOption($this->options, $this->value);
 | 
			
		||||
        $label = "";
 | 
			
		||||
        $select = "<select name='$this->name' $paramsString>$optionsString</select>";
 | 
			
		||||
 | 
			
		||||
        $this->createLabel();
 | 
			
		||||
 | 
			
		||||
        $this->html = str_replace('{input}', $select, $this->inputTemplate->getInputTemplate());
 | 
			
		||||
        $this->html = str_replace('{label}', $this->labelString, $this->html);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param array $options
 | 
			
		||||
     * @param $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function build(string $name, array $options = [], $value = null, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        $select = new self($name, $options, $value, $paramsArray);
 | 
			
		||||
        $select->create()->render();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param $options
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function setOptions($options)
 | 
			
		||||
    {
 | 
			
		||||
        $this->options = array_merge($options, $this->options);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										60
									
								
								inputs/TextArea.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										60
									
								
								inputs/TextArea.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\inputs;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\templates\Simple\SimpleTemplate;
 | 
			
		||||
use itguild\forms\form\traits\CreateParams;
 | 
			
		||||
 | 
			
		||||
class TextArea extends BaseInput
 | 
			
		||||
{
 | 
			
		||||
    use CreateParams;
 | 
			
		||||
 | 
			
		||||
    private $name;
 | 
			
		||||
    private $value;
 | 
			
		||||
    private $paramsArray;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(string $name, string $value = '', array $paramsArray = [])
 | 
			
		||||
    {
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
        $this->value = $value;
 | 
			
		||||
        $this->paramsArray = $paramsArray;
 | 
			
		||||
        $this->inputTemplate = new SimpleTemplate();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return $this
 | 
			
		||||
     */
 | 
			
		||||
    public function create(): self
 | 
			
		||||
    {
 | 
			
		||||
        $paramsString = $this->createParams($this->paramsArray);
 | 
			
		||||
        $label = "";
 | 
			
		||||
        $textarea = "<textarea name='$this->name' $paramsString>$this->value</textarea>";
 | 
			
		||||
 | 
			
		||||
        $this->createLabel();
 | 
			
		||||
 | 
			
		||||
        $this->html = str_replace('{input}', $textarea, $this->inputTemplate->getInputTemplate());
 | 
			
		||||
        $this->html = str_replace('{label}', $this->labelString, $this->html);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param string $value
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function build(string $name, string $value, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        $textarea = new self($name, $value, $paramsArray);
 | 
			
		||||
        $textarea->create()->render();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										58
									
								
								inputs/TextInput.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										58
									
								
								inputs/TextInput.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\inputs;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\templates\Simple\SimpleTemplate;
 | 
			
		||||
use itguild\forms\form\traits\CreateParams;
 | 
			
		||||
 | 
			
		||||
class TextInput extends BaseInput
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    use CreateParams;
 | 
			
		||||
    private string $name;
 | 
			
		||||
    private array $paramsArray;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(string $name, array $paramsArray = [])
 | 
			
		||||
    {
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
        $this->paramsArray = $paramsArray;
 | 
			
		||||
        $this->inputTemplate = new SimpleTemplate();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    public function create(): self
 | 
			
		||||
    {
 | 
			
		||||
        $paramsString = $this->createParams($this->paramsArray);
 | 
			
		||||
        $label = "";
 | 
			
		||||
        $input = "<input name='$this->name' $paramsString >";
 | 
			
		||||
 | 
			
		||||
        $this->createLabel();
 | 
			
		||||
 | 
			
		||||
        $this->html = str_replace('{input}', $input, $this->inputTemplate->getInputTemplate());
 | 
			
		||||
        $this->html = str_replace('{label}', $this->labelString, $this->html);
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param string $name
 | 
			
		||||
     * @param array $paramsArray
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public static function build(string $name, array $paramsArray = []): void
 | 
			
		||||
    {
 | 
			
		||||
        $input = new self($name, $paramsArray);
 | 
			
		||||
        $input->create()->render();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								mappers/JsonInputMapper.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								mappers/JsonInputMapper.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\mappers;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\builders\ButtonBuilder;
 | 
			
		||||
use itguild\forms\form\builders\CheckBoxBuilder;
 | 
			
		||||
use itguild\forms\form\builders\HiddenBuilder;
 | 
			
		||||
use itguild\forms\form\builders\RadioButtonBuilder;
 | 
			
		||||
use itguild\forms\form\builders\SelectBuilder;
 | 
			
		||||
use itguild\forms\form\builders\TextAreaBuilder;
 | 
			
		||||
use itguild\forms\form\builders\TextInputBuilder;
 | 
			
		||||
 | 
			
		||||
class JsonInputMapper
 | 
			
		||||
{
 | 
			
		||||
    private static function getBuilders(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            "textInput" => TextInputBuilder::class,
 | 
			
		||||
            "textArea" => TextAreaBuilder::class,
 | 
			
		||||
            "radio" => RadioButtonBuilder::class,
 | 
			
		||||
            "select" => SelectBuilder::class,
 | 
			
		||||
            "button" => ButtonBuilder::class,
 | 
			
		||||
            "checkbox" => CheckBoxBuilder::class,
 | 
			
		||||
            "hidden" => HiddenBuilder::class,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function getBuilder(string $type): string
 | 
			
		||||
    {
 | 
			
		||||
        if(isset(self::getBuilders()[$type])){
 | 
			
		||||
            return self::getBuilders()[$type];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								migrations/FormsInputMigration.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								migrations/FormsInputMigration.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\migrations;
 | 
			
		||||
use Illuminate;
 | 
			
		||||
use Illuminate\Database\Schema\Blueprint;
 | 
			
		||||
 | 
			
		||||
class FormsInputMigration extends Illuminate\Database\Migrations\Migration
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static function up(): void
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->create("form_input", function (Blueprint $table) {
 | 
			
		||||
            $table->id("id");
 | 
			
		||||
            $table->unsignedBigInteger('form_id');
 | 
			
		||||
            $table->unsignedBigInteger('input_type_id');
 | 
			
		||||
            $table->string('label');
 | 
			
		||||
            $table->string('name');
 | 
			
		||||
            $table->text('params');
 | 
			
		||||
            $table->integer(11)->default(1);
 | 
			
		||||
            $table->timestamps();
 | 
			
		||||
 | 
			
		||||
            $table->index('form_id');
 | 
			
		||||
            $table->index('input_type_id');
 | 
			
		||||
            $table->foreign('form_id', 'fk_form_input_form')->references('id')->on('form');
 | 
			
		||||
            $table->foreign('input_type_id', 'fk_form_input_input_type')->references('id')->on('input_type');
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->drop("form_input");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								migrations/FormsMigration.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								migrations/FormsMigration.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\migrations;
 | 
			
		||||
use Illuminate;
 | 
			
		||||
use itguild\forms\migrations\DB;
 | 
			
		||||
 | 
			
		||||
class FormsMigration
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static function up(): void
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->create("form", function ($table) {
 | 
			
		||||
            $table->id('id');
 | 
			
		||||
            $table->string('title');
 | 
			
		||||
            $table->integer('status');
 | 
			
		||||
            $table->text('params')->nullable();
 | 
			
		||||
            $table->timestamps();
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    public static function get()
 | 
			
		||||
    {
 | 
			
		||||
        return DB::forms('form_input')-> get();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->drop("form");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										28
									
								
								migrations/FormsResMigration.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								migrations/FormsResMigration.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\migrations;
 | 
			
		||||
use Illuminate;
 | 
			
		||||
 | 
			
		||||
class FormsResMigration
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static function up(): void
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->create("form_res", function ($table) {
 | 
			
		||||
            $table->id('id');
 | 
			
		||||
            $table->unsignedBigInteger('form_id');
 | 
			
		||||
            $table->json('data');
 | 
			
		||||
            $table->timestamps();
 | 
			
		||||
 | 
			
		||||
            $table->foreign('form_id', 'fk_form_form')->references('id')->on('form');
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->drop("form_res");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								migrations/InputsTypeMigration.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								migrations/InputsTypeMigration.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\migrations;
 | 
			
		||||
use Illuminate;
 | 
			
		||||
 | 
			
		||||
class InputsTypeMigration
 | 
			
		||||
{
 | 
			
		||||
    public static function up(): void
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->create("input_type", function ($table) {
 | 
			
		||||
            $table->id('id');
 | 
			
		||||
            $table->string('type');
 | 
			
		||||
            $table->string('name');
 | 
			
		||||
            $table->integer('status');
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->drop("input_type");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										28
									
								
								migrations/InputsValueMigrations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								migrations/InputsValueMigrations.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\migrations;
 | 
			
		||||
use Illuminate;
 | 
			
		||||
 | 
			
		||||
class InputsValueMigrations
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static function up(): void
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->create("input_value", function ($table) {
 | 
			
		||||
            $table->id('id');
 | 
			
		||||
            $table->unsignedBigInteger('form_input_id');
 | 
			
		||||
            $table->string('value');
 | 
			
		||||
            $table->timestamps();
 | 
			
		||||
 | 
			
		||||
            $table->foreign('form_input_id', 'fk_form_input')->references('id')->on('form_input');
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->drop("input_value");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								migrations/UserMigration.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								migrations/UserMigration.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\migrations;
 | 
			
		||||
use Illuminate;
 | 
			
		||||
 | 
			
		||||
class UserMigration
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static function up(): void
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->create("user", function ($table) {
 | 
			
		||||
            $table->increments('id');
 | 
			
		||||
            $table->string('name');
 | 
			
		||||
            $table->string('email')->unique();
 | 
			
		||||
            $table->string('password');
 | 
			
		||||
            $table->string('userimage')->nullable();
 | 
			
		||||
            $table->string('api_key')->nullable()->unique();
 | 
			
		||||
            $table->rememberToken();
 | 
			
		||||
            $table->timestamps();
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Illuminate\Database\Capsule\Manager::schema()->drop("user");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								templates/Simple/SimpleTemplate.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								templates/Simple/SimpleTemplate.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\templates\Simple;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\templates\Template;
 | 
			
		||||
 | 
			
		||||
class SimpleTemplate extends Template
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public static function getInputTemplate(): string
 | 
			
		||||
    {
 | 
			
		||||
        return "<div class='form-group'>{label}<br>{input}</div>";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								templates/Template.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								templates/Template.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\templates;
 | 
			
		||||
 | 
			
		||||
abstract class Template
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    abstract static function getInputTemplate();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										37
									
								
								templates/bootstrap5/Bootstrap5Template.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								templates/bootstrap5/Bootstrap5Template.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\templates\bootstrap5;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\templates\Template;
 | 
			
		||||
 | 
			
		||||
class Bootstrap5Template extends Template
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public static function getInputTemplate(): string
 | 
			
		||||
    {
 | 
			
		||||
        return "<div class='form-group'>{label}{input}</div>";
 | 
			
		||||
    }
 | 
			
		||||
    public static function getTextAreaTemplate(): string
 | 
			
		||||
    {
 | 
			
		||||
        return "<div class='form-group'>{label}{textarea}</div>";
 | 
			
		||||
    }
 | 
			
		||||
    public static function getSelectTemplate(): string
 | 
			
		||||
    {
 | 
			
		||||
        return "<div class='form-group'>{label}{select}</div>";
 | 
			
		||||
    }
 | 
			
		||||
    public static function getRadioTemplate(): string
 | 
			
		||||
    {
 | 
			
		||||
        return "<div class='form-group'>{label}{radio}</div>";
 | 
			
		||||
    }
 | 
			
		||||
    public static function getCheckBoxTemplate(): string
 | 
			
		||||
    {
 | 
			
		||||
        return "<div class='form-group'>{label}{checkbox}</div>";
 | 
			
		||||
    }
 | 
			
		||||
    public static function getButtonTemplate(): string
 | 
			
		||||
    {
 | 
			
		||||
        return "<div class='form-group'>{label}{button}</div>";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								traits/CreateOption.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								traits/CreateOption.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\traits;
 | 
			
		||||
 | 
			
		||||
trait CreateOption
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $options
 | 
			
		||||
     * @param $value
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function createOption(array $options, $value = null): string
 | 
			
		||||
    {
 | 
			
		||||
        $optionsString = "";
 | 
			
		||||
        foreach ($options as $val => $title){
 | 
			
		||||
            $selected = (int)$value === $val ? "selected" : "";
 | 
			
		||||
            $optionsString .= "<option $selected value='$val'>$title</option>";
 | 
			
		||||
        }
 | 
			
		||||
        return $optionsString;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								traits/CreateParams.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										24
									
								
								traits/CreateParams.php
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\traits;
 | 
			
		||||
 | 
			
		||||
trait CreateParams
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $data
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public function createParams(array $data = []): string
 | 
			
		||||
    {
 | 
			
		||||
        $paramsString = "";
 | 
			
		||||
        foreach($data as $key => $param){
 | 
			
		||||
            if(is_string($param)){
 | 
			
		||||
                $paramsString .= $key . "='" . $param . "'";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $paramsString;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								widgets/BaseWidget.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								widgets/BaseWidget.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\widgets;
 | 
			
		||||
 | 
			
		||||
use itguild\forms\form\core\cg_view\CgView;
 | 
			
		||||
 | 
			
		||||
abstract class BaseWidget
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    protected CgView $cgView;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
        $this->cgView = new CgView();
 | 
			
		||||
        $this->cgView->viewPath = VIEW_PATH;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return self
 | 
			
		||||
     */
 | 
			
		||||
    public static function create(): BaseWidget
 | 
			
		||||
    {
 | 
			
		||||
        return new static();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array $data
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     */
 | 
			
		||||
    abstract public function run(array $data = []);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								widgets/FormFieldBlockWidget.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								widgets/FormFieldBlockWidget.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * @var \itguild\forms\form\ActiveForm $form
 | 
			
		||||
 * @var \itguild\forms\app\DTO\FormDTO $dto
 | 
			
		||||
 * @var \itguild\forms\form\core\cg_view\CgView $cgView
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace itguild\forms\form\widgets;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Eloquent\Collection;
 | 
			
		||||
use itguild\forms\app\models\InputTypeModel;
 | 
			
		||||
use itguild\forms\app\services\InputValueService;
 | 
			
		||||
use itguild\forms\form\ActiveForm;
 | 
			
		||||
 | 
			
		||||
class FormFieldBlockWidget extends BaseWidget
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public function run(array $data = []): void
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($this->prepare($data['fields']) as $field) {
 | 
			
		||||
            $this->cgView->render('/admin/field_type/' . $field['view_name'] . ".php", $field);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function prepare(Collection $rawFields): array
 | 
			
		||||
    {
 | 
			
		||||
        $fields = [];
 | 
			
		||||
 | 
			
		||||
        $i = 0;
 | 
			
		||||
        foreach ($rawFields as $field) {
 | 
			
		||||
            $params = json_decode($field['params'], true);
 | 
			
		||||
            $viewName = \itguild\forms\app\models\InputTypeModel::getViewNameByTypeId($field['input_type_id']);
 | 
			
		||||
 | 
			
		||||
            if (!isset($fields[$field['name']])) {
 | 
			
		||||
                $fields[$field['name']] = [
 | 
			
		||||
                    'name' => $field['name'],
 | 
			
		||||
                    'form' => new ActiveForm(),
 | 
			
		||||
                    'view_name' => $viewName,
 | 
			
		||||
                    'count' => $i,
 | 
			
		||||
                ];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ($field['input_type_id'] == InputTypeModel::RADIO_TYPE) {
 | 
			
		||||
                if (isset($fields[$field['name']]['value'])) {
 | 
			
		||||
                    $fields[$field['name']]['value'] .= "\n" . $params['value'];
 | 
			
		||||
                } else {
 | 
			
		||||
                    $fields[$field['name']]['value'] = $params['value'];
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            } elseif ($field['input_type_id'] == InputTypeModel::SELECT_TYPE) {
 | 
			
		||||
                $fields[$field['name']]['value'] = implode("\n", InputValueService::getInputValuesById($field['id']));
 | 
			
		||||
            } else {
 | 
			
		||||
                $fields[$field['name']]['value'] = $params['value'] ?? null;
 | 
			
		||||
                $fields[$field['name']]['placeholder'] = $params['placeholder'] ?? null;
 | 
			
		||||
            }
 | 
			
		||||
            $i++;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $fields;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user