1<?php
2/**
3 * Phinx
4 *
5 * (The MIT license)
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated * documentation files (the "Software"), to
9 * deal in the Software without restriction, including without limitation the
10 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
11 * sell copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
23 * IN THE SOFTWARE.
24 */
25namespace Phinx\Db\Action;
26
27use Phinx\Db\Table\Index;
28use Phinx\Db\Table\Table;
29
30class AddIndex extends Action
31{
32    /**
33     * The index to add to the table
34     *
35     * @var Index
36     */
37    protected $index;
38
39    /**
40     * Constructor
41     *
42     * @param Table $table The table to add the index to
43     * @param Index $index The index to be added
44     */
45    public function __construct(Table $table, Index $index)
46    {
47        parent::__construct($table);
48        $this->index = $index;
49    }
50
51    /**
52     * Creates a new AddIndex object after building the index object with the
53     * provided arguments
54     *
55     * @param Table $table The table to add the index to
56     * @param mixed $columns The columns to index
57     * @param array $options Additional options for the index creation
58     * @return AddIndex
59     */
60    public static function build(Table $table, $columns, array $options = [])
61    {
62        // create a new index object if strings or an array of strings were supplied
63        $index = $columns;
64
65        if (!$columns instanceof Index) {
66            $index = new Index();
67
68            if (is_string($columns)) {
69                $columns = [$columns]; // str to array
70            }
71
72            $index->setColumns($columns);
73            $index->setOptions($options);
74        }
75
76        return new static($table, $index);
77    }
78
79    /**
80     * Returns the index to be added
81     *
82     * @return Index
83     */
84    public function getIndex()
85    {
86        return $this->index;
87    }
88}
89