drobne upravy v UI atd.
[dw-class2.git] / admin / main.php
blob234358e943c8f718a71df0c410f2f602d09f49f2
1 <?php
2 /**
3 * Classification structure administration
4 */
5 use Tools\Debug,
6 Tools\DwHelper,
7 Tools\Globals,
8 Entities\Column,
9 Facade\Courses,
10 Facade\Parts,
11 Facade\Columns,
12 UI\Table;
14 require_once(dirname(__FILE__).'/../bootstrap.php');
16 if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
17 if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
18 require_once(DOKU_PLUGIN.'syntax.php');
20 class admin_plugin_class2_main extends DokuWiki_Admin_Plugin {
22 private $course = NULL;
23 private $part = NULL;
24 private $mode = NULL;
25 private $courses = NULL;
26 private $parts = NULL;
27 private $columns = NULL;
29 public function __construct() {
30 //Debug::setDebugTarget(Debug::DEBUG_OFF);
31 Debug::setDebugTarget(Debug::DEBUG_DW_MSG);
34 /**
35 * overridden translation method
36 * @return translation or code
38 public function getLang($code) {
39 $translation = trim(parent::getLang($code));
40 if(empty($translation))
41 return $code;
42 return $translation;
44 /**
45 * Returns basic information about the plug-in required by Dokuwiki
46 * @return array with basic information
48 function getInfo() {
49 return array(
50 'author'=> 'vojta jirkovsky',
51 'email' => 'jirkovoj@fit.cvut.cz',
52 'date' => '2010-2011',
53 'name' => 'classification 2 - admin',
54 'desc' => 'classification 2 score admin plugin (classification structure administration)',
55 'url' => 'http://edux.fit.cvut.cz/',
59 public function getMenuText() {
60 //spravne se resi pomoci $lang['menu']
61 return 'Classification structure administration';
64 public function forAdminsOnly() {
65 return false;
68 private function saveColumns() {
69 $this->course = $_REQUEST['columns']['course'];
70 $this->part = $_REQUEST['columns']['part'];
71 foreach($_REQUEST['column'] as $id => $cdata) {
72 foreach($cdata as $ckey => $cvalue) {
73 if(!$cvalue) {
74 $cdata[$ckey] = NULL;
77 $em = Globals::getEntityManager();
78 if($cdata['variable']) {
79 if(!($column = Columns::getColumnById($id))) {
80 $column = new Column;
81 $part = Parts::getPartByCourseAndName($this->course,$this->part);
82 $column->part($part);
84 try {
85 $column->idx($cdata['idx'] ? $cdata['idx'] : 0);
86 $column->variable($cdata['variable']);
87 $column->caption($cdata['caption']);
88 $column->type($cdata['type']);
89 $column->expression($cdata['expression']);
90 $column->defaultValue($cdata['defaultValue']);
91 $column->validRange($cdata['validRange']);
92 $column->validRegex($cdata['validRegex']);
93 $column->validValues($cdata['validValues']);
94 $em->persist($column);
95 } catch(Exception $e) {
96 Debug::debug($e->getMessage(),Debug::DEBUG_ERR);
100 $em->flush();
103 public function handle() {
104 //manage form save
105 if(isset($_REQUEST['columns'])) {
106 $this->saveColumns();
108 //manage session
109 if(isset($_REQUEST['course'])) {
110 DwHelper::setSession('admin.course',$_REQUEST['course']);
112 if(isset($_REQUEST['part'])) {
113 DwHelper::setSession('admin.part',$_REQUEST['part']);
116 $this->course = DwHelper::getSession('admin.course');
117 $this->part = DwHelper::getSession('admin.part');
119 //page mode
120 if($this->part) {
121 $this->mode = 'columns';
122 $this->columns = Columns::getColumnsByCourseAndPart($this->course,$this->part);
123 } else if($this->course) {
124 $this->mode = 'parts';
125 $this->parts = Parts::getPartsByCourse($this->course);
126 } else {
127 $this->mode = 'courses';
128 $this->courses = Courses::getAllCourses();
133 public function html() {
134 global $ID;
136 echo '<div class="adminHeader">';
137 echo '<a href="?id='.$ID.'&do='.'admin'.'&page='.'class2_main'.'&course=&part=">Courses</a>';
138 if($this->course) {
139 echo ' ('.$this->course.') / <a href="?id='.$ID.'&do='.'admin'.'&page='.'class2_main'.'&part=">Parts</a>';
140 if($this->part) {
141 echo ' ('.$this->part.')';
144 echo ' | ';
145 echo 'Edit '.$this->mode;
146 echo '</div>';
147 switch($this->mode) {
148 case 'saveColumns':
149 break;
150 case 'columns':
151 $columnTypes = array(
152 'number' => 'number',
153 'boolean' => 'boolean',
154 'string' => 'string',
155 'expression' => 'expression',
156 'enum' => 'enum',
158 $table = new Table;
159 $table->editable(TRUE);
160 $table->form->csrf(DwHelper::getCSRF());
161 $table->form->addHidden('id',$ID);
162 $table->form->addHidden('do','admin');
163 $table->form->addHidden('page','class2_main');
164 $table->form->addHidden('columns[course]',$this->course);
165 $table->form->addHidden('columns[part]',$this->part);
166 $table->form->action("?id=$ID&do=admin&page=class2_main");
167 $table->form->setSubmit('Save');
168 $table->addHeadRow()
169 ->add('idx')->add('variable')->add('caption')->add('type')
170 ->add('expression')->add('default value')->add('valid range')
171 ->add('valid regex')->add('valid values');
172 foreach($this->columns as $column) {
173 $id = $column->id();
174 $table->addBodyRow()
175 ->addInput($column->idx(),"column[$id][idx]")
176 ->addInput($column->variable(),"column[$id][variable]")
177 ->addInput($column->caption(),"column[$id][caption]")
178 ->addSelect(array('selected'=>$column->type(),'data'=>$columnTypes),"column[$id][type]")
179 ->addInput($column->expression(),"column[$id][expression]")
180 ->addInput($column->defaultValue(),"column[$id][defaultValue]")
181 ->addInput($column->validRange(),"column[$id][validRange]")
182 ->addInput($column->validRegex(),"column[$id][validRegex]")
183 ->addInput(implode(',',$column->validValues()),"column[$id][validValues]");
185 $table->addBodyRow()
186 ->addInput(NULL,"column[new0][idx]")
187 ->addInput(NULL,"column[new0][variable]",'highlightGreen')
188 ->addInput(NULL,"column[new0][caption]")
189 ->addSelect(array('data'=>$columnTypes),"column[new0][type]")
190 ->addInput(NULL,"column[new0][expression]")
191 ->addInput(NULL,"column[new0][defaultValue]")
192 ->addInput(NULL,"column[new0][validRange]")
193 ->addInput(NULL,"column[new0][validRegex]")
194 ->addInput(NULL,"column[new0][validValues]");
195 echo $table;
196 break;
197 case 'parts':
198 echo '<ul class="partsList">';
199 foreach($this->parts as $part) {
200 echo '<li><a href="?id='.$ID.'&do='.'admin'.'&page='.'class2_main'.'&part='.$part->name().'">'.$part->name().'</a></li>';
202 echo '</ul>';
203 break;
204 case 'courses':
205 default:
206 echo '<ul class="coursesList">';
207 foreach($this->courses as $course) {
208 echo '<li><a href="?id='.$ID.'&do='.'admin'.'&page='.'class2_main'.'&course='.$course->code().'">'.$course->name().'</a></li>';
210 echo '</ul>';
211 break;