Questtype ?Crossword?: add basic edit form
This commit is contained in:
parent
38742dd5cd
commit
5f43964b7d
2 changed files with 126 additions and 1 deletions
|
|
@ -373,6 +373,84 @@
|
||||||
*/
|
*/
|
||||||
public function edittask($seminary, $questgroup, $quest)
|
public function edittask($seminary, $questgroup, $quest)
|
||||||
{
|
{
|
||||||
|
// Get words
|
||||||
|
$words = $this->Crossword->getWordsForQuest($quest['id']);
|
||||||
|
|
||||||
|
// Create 2D-matrix
|
||||||
|
$matrix = array();
|
||||||
|
$maxX = 0;
|
||||||
|
$maxY = 0;
|
||||||
|
foreach($words as $index => &$word)
|
||||||
|
{
|
||||||
|
// Insert word
|
||||||
|
if($word['vertical'])
|
||||||
|
{
|
||||||
|
$x = $word['pos_x'];
|
||||||
|
$startY = $word['pos_y'];
|
||||||
|
$endY = $startY + mb_strlen($word['word'], 'UTF-8') - 1;
|
||||||
|
|
||||||
|
$matrix = array_pad($matrix, $x+1, array());
|
||||||
|
$matrix[$x] = array_pad($matrix[$x], $endY+1, null);
|
||||||
|
$maxX = max($maxX, $x);
|
||||||
|
$maxY = max($maxY, $endY);
|
||||||
|
|
||||||
|
foreach(range($startY, $endY) as $y)
|
||||||
|
{
|
||||||
|
$matrix[$x][$y] = array(
|
||||||
|
'char' => mb_substr($word['word'], $y-$startY, 1, 'UTF-8'),
|
||||||
|
'indices' => (array_key_exists($x, $matrix) && array_key_exists($y, $matrix[$x]) && !is_null($matrix[$x][$y]) && array_key_exists('indices', $matrix[$x][$y])) ? $matrix[$x][$y]['indices'] : array()
|
||||||
|
);
|
||||||
|
if($y == $startY) {
|
||||||
|
$matrix[$x][$y]['indices'][] = $index;
|
||||||
|
}
|
||||||
|
if(array_key_exists('answer', $word))
|
||||||
|
{
|
||||||
|
$answer = mb_substr($word['answer'], $y-$startY, 1, 'UTF-8');
|
||||||
|
if($answer != ' ') {
|
||||||
|
$matrix[$x][$y]['answer'] = $answer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$startX = $word['pos_x'];
|
||||||
|
$endX = $startX + mb_strlen($word['word'], 'UTF-8') - 1;
|
||||||
|
$y = $word['pos_y'];
|
||||||
|
|
||||||
|
$matrix = array_pad($matrix, $endX+1, array());
|
||||||
|
$maxX = max($maxX, $endX);
|
||||||
|
$maxY = max($maxY, $y);
|
||||||
|
|
||||||
|
foreach(range($startX, $endX) as $x)
|
||||||
|
{
|
||||||
|
$matrix[$x] = array_pad($matrix[$x], $y+1, null);
|
||||||
|
|
||||||
|
$matrix[$x][$y] = array(
|
||||||
|
'char' => mb_substr($word['word'], $x-$startX, 1, 'UTF-8'),
|
||||||
|
'indices' => (array_key_exists($x, $matrix) && array_key_exists($y, $matrix[$x]) && !is_null($matrix[$x][$y]) && array_key_exists('indices', $matrix[$x][$y])) ? $matrix[$x][$y]['indices'] : array(),
|
||||||
|
'answer' => null
|
||||||
|
);
|
||||||
|
if($x == $startX) {
|
||||||
|
$matrix[$x][$y]['indices'][] = $index;
|
||||||
|
}
|
||||||
|
if(array_key_exists('answer', $word))
|
||||||
|
{
|
||||||
|
$answer = mb_substr($word['answer'], $x-$startX, 1, 'UTF-8');
|
||||||
|
if($answer != ' ') {
|
||||||
|
$matrix[$x][$y]['answer'] = $answer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Pass data to view
|
||||||
|
$this->set('words', $words);
|
||||||
|
$this->set('maxX', $maxX);
|
||||||
|
$this->set('maxY', $maxY);
|
||||||
|
$this->set('matrix', $matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1 +1,48 @@
|
||||||
<p>TODO</p>
|
<form method="post" class="crossword">
|
||||||
|
<fieldset>
|
||||||
|
<legend><?=_('Preview')?></legend>
|
||||||
|
<table id="matrix">
|
||||||
|
<tbody>
|
||||||
|
<?php foreach(range(0, $maxY) as $y) : ?>
|
||||||
|
<tr>
|
||||||
|
<?php foreach(range(0, $maxX) as $x) : ?>
|
||||||
|
<td>
|
||||||
|
<?php if(array_key_exists($x, $matrix) && array_key_exists($y, $matrix[$x]) && !is_null($matrix[$x][$y])) : ?>
|
||||||
|
<?php if(count($matrix[$x][$y]['indices']) > 0) : ?><span class="index"><?=implode('/',array_map(function($e) { return $e+1; }, $matrix[$x][$y]['indices']))?></span><?php endif ?>
|
||||||
|
<input type="text" maxlength="1" size="1" disabled="disabled" value="<?=$matrix[$x][$y]['char']?>" />
|
||||||
|
<?php endif ?>
|
||||||
|
</td>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset class="dev">
|
||||||
|
<legend><?=_('Questions')?></legend>
|
||||||
|
<ol>
|
||||||
|
<?php foreach($words as &$word) : ?>
|
||||||
|
<li>
|
||||||
|
<?=_('Position')?>:
|
||||||
|
<input type="number" value="<?=$word['pos_x']+1?>" />
|
||||||
|
<input type="number" value="<?=$word['pos_y']+1?>" />
|
||||||
|
<select>
|
||||||
|
<option <?php if(!$word['vertical']) : ?>selected="selected"<?php endif ?>><?=_('horizontal')?></option>
|
||||||
|
<option <?php if($word['vertical']) : ?>selected="selected"<?php endif ?>><?=_('vertical')?></option>
|
||||||
|
</select>
|
||||||
|
<br />
|
||||||
|
<?=_('Question')?>:<br />
|
||||||
|
<textarea><?=$word['question']?></textarea><br />
|
||||||
|
<?=_('Answer')?>:<br />
|
||||||
|
<input type="text" value="<?=$word['word']?>" />
|
||||||
|
<br />
|
||||||
|
<input type="button" class="remove-question" value="−" />
|
||||||
|
</li>
|
||||||
|
<?php endforeach ?>
|
||||||
|
<li>
|
||||||
|
<input type="button" class="add-question" value="+" />
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</fieldset>
|
||||||
|
<input type="submit" name="save" value="<?=_('save')?>" />
|
||||||
|
</form>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue