source: Dev/trunk/classes/PipelineSequencer_1.php @ 151

Last change on this file since 151 was 151, checked in by fpvanagthoven, 13 years ago
File size: 6.4 KB
Line 
1<?php
2/*
3 * To change this template, choose Tools | Templates
4 * and open the template in the editor.
5 */
6
7/**
8 * Description of Sequencer
9 *
10 * @author HP
11 */
12class PipelineSequencer {
13
14    // properties
15    private $pipeline = array();
16    private $name = "empty";
17    private $numStepsInArray = 0;
18    private $maxNumStepsInArray = 10;
19    private $selectedStep;
20
21    public function __construct($pipeline, $name, $id) {
22        $this->pipeline = $pipeline;
23        $this->name = $name;
24    }
25
26    public function init() {
27        ?>
28        <br /><form name="sequencer" action="pipelineEditor.php" method="post"><fieldset id="sequencer">
29                <div class="title">Name: <?php echo $this->name; ?> </div>
30
31                <div class="seqContent">
32                    <?php $this->DrawSteps(); ?>         
33                </div>
34
35                <div id="controls">
36                    <input type="submit" name="moveSelectedLeft" value="< Move" class="surveyButton" />
37                    <input type="submit" name="moveSelectedRight" value="Move >" class="surveyButton" />
38                    <input type="submit" name="editSelected" value="Edit step" class="surveyButton" />
39                    <input type="submit" name="deleteSelected" value="Delete step" class="surveyButton" />
40                    <input type="submit" name="clearPipeline" value="Clear pipeline" class="surveyButton dis" disabled="true"/>
41                    <input type="checkbox" name="confirmClear" onChange="IsCheckEnabled(this, document.sequencer.clearPipeline);" />Really clear?
42                    <input type="hidden" name="selectedStep" />
43                </div>
44            </fieldset>
45        </form>
46        <?php
47    }
48
49    public function AddStep($newStep) {
50        $n = 1;
51        foreach ($this->pipeline as $existingStep) {
52            if ($existingStep->name == $newStep . " $n") {
53                $n++;
54            }
55        }
56
57        $this->pipeline[] = new Step($newStep, $newStep . " " . $n, count($this->pipeline) + 1);
58        //var_dump($this->pipeline);
59        ?>
60        <script type="text/javascript">
61            document.refresh();
62        </script>
63        <?php
64    }
65
66    public function RemoveStep($targetStep) {
67
68        $tempArray = array();
69        $removed = false;
70        foreach ($this->pipeline as $step) {
71            if ($step->id != $targetStep) {
72                $tempArray[] = $step;
73                if ($removed) {
74                    $step::AdjustID(-1);
75                }
76            } else {
77                $removed = true;
78            }
79        }
80        $this->pipeline = $tempArray;
81    }
82
83    public function GetPipeline() {
84        return $this->pipeline;
85    }
86
87    public function DrawSteps() {
88        //draw the actual icons in the container div.
89        if (!empty($this->pipeline)) {
90            foreach ($this->pipeline as $step) {
91                if ($this->numStepsInArray < $this->maxNumStepsInArray) {
92                    //var_dump($step);
93                    $step->init();
94                    $this->numStepsInArray++;
95                    if ($this->numStepsInArray < $this->maxNumStepsInArray && $this->numStepsInArray < count($this->pipeline)) {
96                        echo "<div class='divider'></div>";
97                    }
98                }
99            }
100        }
101    }
102
103    public function MoveStep($direction) {
104        $key = array_search($this->selectedStep, $this->pipeline);
105        //echo $key;
106    }
107
108    private function MoveEntry(&$array, $key, $dir) {
109        if ($dir == -1) {   // move up
110            if ($key > 0) {
111                $reverseArray = array_reverse(array_slice($array, $key - 1, 2, true));   // make a reversed array of the two entries, preserving keys
112                array_splice($array, $key - 1, 2, $reverseArray);    // replace the given range in the oldArray with the reversed Array
113            }
114        } else if ($dir == 1) {   // move down
115            if ($key < count($array) - 1) {
116                $reverseArray = array_reverse(array_slice($array, $key, 2, true));   // make a reversed array of the two entries, preserving keys
117                array_splice($array, $key, 2, $reverseArray);    // replace the given range in the oldArray with the reversed Array
118            }
119        }
120    }
121
122    public function SetSelected($key) {
123
124        if ($key > 0 && $key < count($this->pipeline)) {
125            $this->selectedStep = $key;
126        }
127    }
128
129    public function GetName($name) {
130        if ($name && $name != "") {
131            $this->name = $name;
132        }
133    }
134
135    public function GetFromDB() {
136
137        $dbi = new DatabaseInterface();
138        $this->pipeline = $dbi->get("pipeline", array("uid"=>$uid));
139        //this doesn't actually work, the sequencer doesn't know what the uid is yet. This data should be POSTed upon refresh!
140       
141       
142       
143        if (isset($_POST['destroy'])) {
144            unset($_POST['destroy']);
145            unset($_SESSION['currentPipeline']);
146        }
147
148        if (isset($_POST['clearPipeline'])) {
149            $this->pipeline = array();
150            $_SESSION['currentPipeline'] = $this->pipeline;
151        }
152
153        if (isset($_SESSION['currentPipeline']) && !empty($_SESSION['currentPipeline'])) {      // take pipeline from session data
154            $this->pipeline = $_SESSION['currentPipeline'];
155        } else {
156            $pipeline = array();
157        }
158
159        if (isset($_POST['objectToCreate'])) {      // user clicked a button in the toolbox.
160            //$this->pipeline[] = new Step($_POST['objectToCreate'], $_POST['objectToCreate'] . " NEW", null);
161            $this::AddStep($_POST['objectToCreate']);
162        }
163
164        if (isset($_POST['deleteSelected'])) {
165            if (isset($_POST['selectedStep'])) {
166                $this->RemoveStep($_POST['selectedStep']);
167            }
168        }
169
170        //var_dump($_POST);
171
172        if (isset($_POST['selectedStep'])) {
173            $this::SetSelected($_POST['selectedStep']);
174        }
175
176        $_SESSION['currentPipeline'] = $this->pipeline;
177    }
178
179    private function Javascript() {
180        ?>
181        <!--
182        Add JS code for selecting steps, highlighting them, reordering, etc.
183        Is a refresh of the page (with subsequent querying of database really necessary?
184       
185        -->
186        <script type="text/javascript">
187            function selectStep(step) {
188                step.addClass("selected");
189                document.sequencer.controls.selectedStep.value = step.name;
190            }
191        </script>
192
193
194        <?php
195    }
196
197}
198?>
Note: See TracBrowser for help on using the repository browser.