.
defined('MOODLE_INTERNAL') OR die('not allowed');
require_once($CFG->dirroot.'/mod/apply/item/apply_item_class.php');
define('APPLY_TEXTAREA_SEP', '|');
class apply_item_textarea extends apply_item_base
{
    protected $type = "textarea";
    private $commonparams;
    private $item_form;
    private $item;
    public function init() {
    }
    public function build_editform($item, $apply, $cm)
    {
        global $DB, $CFG;
        require_once('textarea_form.php');
        //get the lastposition number of the apply_items
        $position = $item->position;
        $lastposition = $DB->count_records('apply_item', array('apply_id'=>$apply->id));
        if ($position == -1) {
            $i_formselect_last  = $lastposition + 1;
            $i_formselect_value = $lastposition + 1;
            $item->position = $lastposition + 1;
        }
        else {
            $i_formselect_last  = $lastposition;
            $i_formselect_value = $item->position;
        }
        //the elements for position dropdownlist
        $positionlist = array_slice(range(0, $i_formselect_last), 1, $i_formselect_last, true);
        $item->presentation = empty($item->presentation) ? '' : $item->presentation;
        $presentation = explode(APPLY_TEXTAREA_SEP, $item->presentation);
        if (isset($presentation[0]) AND $presentation[0] >= 5) {
            $itemwidth = $presentation[0];
        }
        else {
            $itemwidth = 30;  // default
        }
        if (isset($presentation[1])) {
            $itemheight = $presentation[1];
        }
        else {
            $itemheight = 5;  // default
        }
        $item->itemwidth  = $itemwidth;
        $item->itemheight = $itemheight;
        $outside_style = isset($presentation[2]) ? $presentation[2]: get_string('outside_style_default', 'apply');
        $item_style    = isset($presentation[3]) ? $presentation[3]: get_string('item_style_default',    'apply');
        $item->outside_style = $outside_style;
        $item->item_style    = $item_style;
        //all items for dependitem
        $applyitems = apply_get_depend_candidates_for_item($apply, $item);
        $commonparams = array('cmid'=>$cm->id,
                             'id'=>isset($item->id) ? $item->id : null,
                             'typ'=>$item->typ,
                             'items'=>$applyitems,
                             'apply_id'=>$apply->id);
        //build the form
        $customdata = array('item' => $item,
                            'common' => $commonparams,
                            'positionlist' => $positionlist,
                            'position' => $position);
        $this->item_form = new apply_textarea_form('edit_item.php', $customdata);
    }
    //this function only can used after the call of build_editform()
    public function show_editform()
    {
        $this->item_form->display();
    }
    public function is_cancelled()
    {
        return $this->item_form->is_cancelled();
    }
    public function get_data()
    {
        if ($this->item = $this->item_form->get_data()) {
            return true;
        }
        return false;
    }
    public function save_item() 
    {
        global $DB;
        if (!$item = $this->item_form->get_data()) {
            return false;
        }
        if (isset($item->clone_item) AND $item->clone_item) {
            $item->id = ''; //to clone this item
            $item->position++;
        }
        $item->hasvalue = $this->get_hasvalue();
        if (!$item->id) {
            $item->id = $DB->insert_record('apply_item', $item);
        }
        else {
            $DB->update_record('apply_item', $item);
        }
        return $DB->get_record('apply_item', array('id'=>$item->id));
    }
    //liefert eine Struktur ->name, ->data = array(mit Antworten)
    public function get_analysed($item, $groupid = false, $courseid = false)
    {
        global $DB;
        $analysed_val = new stdClass();
        $analysed_val->data = array();
        $analysed_val->name = $item->name;
        $values = apply_get_group_values($item, $groupid, $courseid);
        if ($values) {
            $data = array();
            foreach ($values as $value) {
                $data[] = str_replace("\n", '
', $value->value);
            }
            $analysed_val->data = $data;
        }
        return $analysed_val;
    }
    public function get_printval($item, $value)
    {
        if (!isset($value->value)) {
            return '';
        }
        return $value->value;
    }
    public function print_analysed($item, $itemnr = '', $groupid = false, $courseid = false)
    {
        $values = apply_get_group_values($item, $groupid, $courseid);
        if ($values) {
            echo '