Inheritance: extends Object
 function getFields($cache = true)
 {
     if (!$cache) {
         $fields = false;
     } else {
         $fields =& $this->_fields;
     }
     if (!$fields) {
         $fields = new ListObject();
         foreach ($this->getDynamicFields() as $f) {
             $fields->append($f->getImpl($f));
         }
     }
     return $fields;
 }
 /**
  * @param int $start
  * @param array $params
  */
 public function __construct($start, $params)
 {
     if (isset($params['user'])) {
         $this->user = (int) $params['user'];
     }
     parent::__construct($start, $params);
 }
function read_object($stream, $pdf)
{
    $tok = fread($stream, 1);
    fseek($stream, -1, 1);
    if ($tok == 't' || $tok == 'f') {
        return BooleanObject::read_from_stream($stream);
    } else {
        if ($tok == '(') {
            return read_string_from_stream($stream);
        } else {
            if ($tok == '/') {
                return NameObject::read_from_stream($stream);
            } else {
                if ($tok == '[') {
                    return ListObject::read_from_stream($stream, $pdf);
                } else {
                    if ($tok == 'n') {
                        return NullObject::read_from_stream($stream);
                    } else {
                        if ($tok == '<') {
                            $peek = fread($stream, 2);
                            fseek($stream, -2, 1);
                            if ($peek == '<<') {
                                $r = DictionaryObject::read_from_stream($stream, $pdf);
                                return $r;
                            } else {
                                return read_hex_string_from_stream($stream);
                            }
                        } else {
                            if ($tok == '%') {
                                while ($tok != "\r" && $tok != "\n") {
                                    $tok = fread($stream, 1);
                                }
                                $tok = read_non_whitespace($stream);
                                fseek($stream, -1, 1);
                                return read_object($stream, $pdf);
                            } else {
                                if ($tok == '+' || $tok == '-') {
                                    return NumberObject::read_from_stream($stream);
                                }
                                $peek = fread($stream, 20);
                                fseek($stream, -strlen($peek), 1);
                                if (preg_match("/^(\\d+)\\s(\\d+)\\sR[^a-zA-Z]/", $peek)) {
                                    return IndirectObject::read_from_stream($stream, $pdf);
                                } else {
                                    return NumberObject::read_from_stream($stream);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
Exemple #4
0
 public function echoContent()
 {
     echo '<div data-role="content">';
     $list = new ListObject(false, null, 'data-filter="true" class="clients-list"');
     // setup query statement
     $stmt = "SELECT `clients`.`id` AS 'client_id'," . "`contacts`.`name` AS 'client_name'," . "CONCAT_WS(' ',`first_name`,`middle_name`,`suffix`) AS 'first_names', " . "`balance`,`open_cases` " . 'FROM `clients` ' . 'JOIN `contacts` ON `clients`.`contact_id`=`contacts`.`id` ';
     if ($this->status == '/open') {
         $stmt .= 'WHERE `open_cases`>0 ';
     } elseif ($this->status == '/closed') {
         $stmt .= 'WHERE `open_cases`=0 ';
     }
     if ($this->sort == '/balance') {
         $stmt .= 'ORDER BY `balance` DESC ';
     } elseif ($this->sort == '/paid') {
         $stmt .= 'ORDER BY `last_payment` ';
     } else {
         $stmt .= 'ORDER BY `contacts`.`name` ';
     }
     $sth = $this->db->prepare($stmt);
     $sth->execute();
     if ($sth->rowCount()) {
         while ($row = $sth->fetch()) {
             $title = $row['client_name'];
             $title .= $row['first_names'] ? ', ' . $row['first_names'] : '';
             $item = new ListItem($title, $this->domain . 'client/' . $row['client_id'], '/css/fugue/user.png', 'class="mini-item" data-mini="true" data-icon="false"', 'target="_blank"');
             $open_cases = $row['open_cases'] == 1 ? '1 open case.' : $row['open_cases'] . ' open cases.';
             $balance = $row['balance'] > 0 ? '$' . $row['balance'] : null;
             if ($balance) {
                 $open_cases .= ' ' . $balance;
             }
             $item->setRightText($open_cases);
             $list->addListItem($item);
         }
     } else {
         $list->addText('No clients.');
     }
     $list->echoList();
     echo '</div>';
 }
Exemple #5
0
 /**
  * Overloaded method call to give access to the list properties.
  *
  * @param string $p_element - the property name
  * @return mix - the property value
  */
 public function __get($p_property)
 {
     if (strtolower($p_property) == 'item') {
         return $this->getItem();
     }
     return parent::__get($p_property);
 }
Exemple #6
0
	/**
     * Overloaded method call to give access to the list properties.
     *
     * @param string $p_element - the property name
     * @return mix - the property value
     */
	public function __get($p_property)
	{
	    switch (strtolower($p_property)) {
	        case 'item':
                return $this->getItem();
            case 'previous':
	           return $this->start - $this->index;
	        case 'next':
	           return $this->start + $this->index;
	    	case 'has_previous':
	           return $this->hasPreviousElements();
	        case 'has_next':
	           return $this->hasNextElements();
	    }
	    return parent::__get($p_property); 
	}
 function getSubFields()
 {
     $fields = new ListObject(array(new TextboxField(array('label' => '[' . __('Abbrev') . ']', 'id' => 'abb'))));
     $form = $this->getList()->getForm();
     if ($form && ($F = $form->getFields())) {
         $fields->extend($F);
     }
     return $fields;
 }
Exemple #8
0
	/**
	 * constructor
	 * For blank lists the start element index ($p_start) is smaller
	 * than 0.
	 *
	 * @param int $p_start
	 * @param string $p_parameters
	 */
	public function __construct($p_start = 0, $p_parameters = array())
	{
		/**
		 * For blank lists the start element index ($p_start) is smaller
		 * than 0.
		 */
		if ($p_start < 0) {
			$this->m_start = -1;
			$this->m_limit = -1;
			$this->m_columns = 0;
			$this->m_objects = new MyArrayObject(array());
			return;
		}

		$this->m_id = null;

		/**
		 * Processes the input parameters passed in an array; drops the invalid
		 * parameters and parameters with invalid values. Returns an array of
		 * valid parameters.
		 */
		$parameters = $this->ProcessParameters($p_parameters);

		/**
		 * Set common parameters:
		 * - start element index (m_start)
		 * - maximum list length (m_limit)
		 * - list columns (m_columns)
		 * - constraints string (m_constraintsStr)
		 * - order string (m_orderStr)
		 * - list name (m_name)
		 */
		$this->m_start = is_numeric($p_start) ? (int)$p_start : 0;
		$this->m_limit = isset($parameters['length']) ? (int)$parameters['length'] : 0;
		$this->m_columns = isset($parameters['columns']) ? (int)$parameters['columns'] : 0;
		$this->m_constraintsStr = isset($parameters['constraints']) ? $parameters['constraints'] : '';
		$this->m_orderStr = isset($parameters['order']) ? $parameters['order'] : '';
		$name = isset($parameters['name']) ? $parameters['name'] : '';
		$this->m_name = is_string($name) && trim($name) != '' ? $name : $this->defaultName();

		/**
		 * Process the list constraints.
		 */
		$constraints = $this->ProcessConstraints(self::ParseConstraintsString($this->m_constraintsStr));
        if ($constraints === false || $parameters === false) {
            $this->m_totalCount = 0;
            $this->m_objects = new MyArrayObject(array());
            $this->m_hasNextElements = false;
            return;
        }
        $this->m_parameters = $parameters;
        $this->m_constraints = array_merge($this->m_constraints, $constraints);

		/**
		 * Process order constraints.
		 */
		$this->m_order = $this->ProcessOrder(ListObject::ParseConstraintsString($this->m_orderStr));

        $list = $this->fetchFromCache();
        if (!is_null($list)) {
        	$this->duplicateObject($list);
        	return;
        }

		$objects = $this->CreateList($this->m_start, $this->m_limit, $parameters, $this->m_totalCount);
		if (!is_array($objects)) {
		    $objects = array();
		}
  		$this->m_objects = new MyArrayObject($objects);
  		$this->m_hasNextElements = $this->m_totalCount > ($this->m_start + $this->getLength());
  		$this->storeInCache();
	}
	/**
     * Overloaded method call to give access to the list properties.
     *
     * @param string $p_element - the property name
     * @return mix - the property value
     */
	public function __get($p_property)
	{
	    return parent::__get($p_property); 
	}
Exemple #10
0
 public function echoFolderContents()
 {
     $list = new ListObject(false, null, ' data-mini="true" class="item-list folder-list nomargin" data-split-theme="d" data-theme="d"');
     $subitems = false;
     // folders
     $sth = $this->db->prepare('SELECT id,subitems,name FROM folders WHERE folder_id=? ORDER BY name');
     $sth->execute(array($this->id));
     //if ($sth->rowCount()) $list->addHeading('Folders');
     while ($row = $sth->fetch()) {
         $subitems = true;
         $item = new ListItem($row['name'], $this->domain . 'folder/' . $row['id'], '/css/fugue/folder-open.png', 'data-icon="false" data-mini="true"');
         if ($row['subitems'] > 0) {
             $item->setRightText($row['subitems']);
         }
         //$item->unsetBold();
         $list->addListItem($item);
     }
     // upcoming events & tasks
     /*
      * show all overdue tasks
      * show all events/tasks for today & future ordered by date, time
      * ...
      * show passed events
      * show completed tasks
      */
     $today = new DateTime();
     $today_time = strtotime($today->format('Y-m-d'));
     $event_ids = array();
     $sth = $this->db->prepare('SELECT table_name,id,name, ' . '`date`, ' . "DATE_FORMAT(`date`, '%b %e') AS 'date_format', " . "TIME_FORMAT(`time`, '%l:%i %p') AS 'time_format' " . "FROM `calendar` WHERE folder_id=?");
     //$sth->execute(array($this->id,$today->format('Y-m-d')));
     $sth->execute(array($this->id));
     if ($sth->rowCount()) {
         $subitems = true;
         $list->addHeading('Calendar & Tasks');
     }
     while ($row = $sth->fetch()) {
         /*
                     $this_date = new DateTime($row['date']);
                     $diff = $today->diff($this_date);
                     $day_diff = (int) $diff->format('%r%a');
                     $time = $row['time_format'] ? strtolower($row['time_format']) : null;
         */
         $this_time = strtotime($row['date']);
         $day_diff = floor(($this_time - $today_time) / 3600 / 24);
         if ($row['table_name'] == 'tasks') {
             // task
             $class = 'folder-task';
             $countdown = $row['date_format'] . ' - ';
             if ($day_diff < 0) {
                 // task is overdue
                 $class .= ' folder-task-overdue';
                 $countdown .= abs($day_diff) . ' days ago';
                 //$countdown = $diff->format('%d') . ' days ago';
             } elseif ($day_diff == 0) {
                 // task is today
                 $class .= ' folder-task-1';
                 $countdown .= 'Today';
                 $countdown .= $row['time_format'] ? ' ' . $row['time_format'] : '';
             } elseif ($day_diff == 1) {
                 $class .= ' folder-task-2';
                 $countdown .= 'Tomorrow';
                 $countdown .= $row['time_format'] ? ' ' . $row['time_format'] : '';
             } else {
                 // event is in the future
                 $countdown .= $day_diff . ' days';
             }
             $item = new ListItem($row['name'], $this->domain . 'task/' . $row['id'] . '/edit', '/css/fugue/tick.png', ' class="' . $class . '" data-icon="false" data-mini="true"');
             $item->setRightText($countdown);
             $list->addListItem($item);
             $subitems = true;
         } else {
             $success = false;
             if ($day_diff > -1) {
                 if ($row['table_name'] == 'events') {
                     $success = true;
                     $event_ids[$row['id']] = 1;
                 } else {
                     if (!isset($event_ids[$row['id']])) {
                         $event_ids[$row['id']] = 1;
                         $success = true;
                     }
                 }
             }
             if ($success) {
                 // event
                 $class = 'folder-event';
                 $countdown = $row['date_format'] . ' - ';
                 if ($day_diff == 0) {
                     // event is today
                     $class .= ' folder-event-1';
                     $countdown .= 'Today';
                     $countdown .= $row['time_format'] ? ' ' . $row['time_format'] : '';
                 } elseif ($day_diff == 1) {
                     $class .= ' folder-event-2';
                     $countdown .= 'Tomorrow';
                     $countdown .= $row['time_format'] ? ' ' . $row['time_format'] : '';
                 } else {
                     // event is in the future
                     $countdown .= $day_diff . ' days';
                 }
                 $item = new ListItem($row['name'], $this->domain . 'event/' . $row['id'] . '/edit', '/css/fugue/calendar-month.png', ' class="' . $class . '" data-icon="false" data-mini="true"');
                 $item->setRightText($countdown);
                 $list->addListItem($item);
             }
         }
     }
     // tasks with no date and a priority
     $sth = $this->db->prepare('SELECT id,name,priority ' . 'FROM `tasks` WHERE `folder_id`=? AND `date` IS NULL ' . 'AND `complete` IS NULL AND `priority` IS NOT NULL ' . 'ORDER BY `priority`,`name` ');
     $sth->execute(array($this->id));
     while ($row = $sth->fetch()) {
         $subitems = true;
         $class = 'folder-task folder-task-' . $row['priority'];
         $item = new ListItem($row['name'], $this->domain . 'task/' . $row['id'] . '/edit', '/css/fugue/tick.png', ' class="' . $class . '" data-icon="false" data-mini="true"');
         if ($row['priority']) {
             $item->setRightText($row['priority']);
         }
         $list->addListItem($item);
     }
     // tasks with no date and no priority
     $sth = $this->db->prepare('SELECT id,name ' . 'FROM `tasks` WHERE `folder_id`=? AND `date` IS NULL ' . 'AND `complete` IS NULL AND `priority` IS NULL ' . 'ORDER BY `name` ');
     $sth->execute(array($this->id));
     while ($row = $sth->fetch()) {
         $subitems = true;
         $item = new ListItem($row['name'], $this->domain . 'task/' . $row['id'] . '/edit', '/css/fugue/tick.png', 'class="folder-task" data-icon="false" data-mini="true"');
         $list->addListItem($item);
     }
     // notes
     $sth = $this->db->prepare('SELECT id,name ' . 'FROM `notes` WHERE `folder_id`=? ' . 'ORDER BY `name` ');
     $sth->execute(array($this->id));
     if ($sth->rowCount()) {
         $list->addHeading('Notes');
     }
     while ($row = $sth->fetch()) {
         $subitems = true;
         $link = $this->domain . 'note/' . $row['id'];
         $item = new ListItem($row['name'], $link, '/css/fugue/notebook-sticky-note.png', 'data-icon="false" data-mini="true"');
         $list->addListItem($item);
     }
     // files
     $sth = $this->db->prepare('SELECT id,name,path ' . 'FROM `files` WHERE `folder_id`=? ' . 'ORDER BY `name` ');
     $sth->execute(array($this->id));
     if ($sth->rowCount()) {
         $list->addHeading('Files');
     }
     while ($row = $sth->fetch()) {
         $subitems = true;
         $item = new ListItem($row['name'], $this->domain . 'file/' . $row['id'], '/css/fugue/disk-black.png', 'data-icon="false" data-mini="true"');
         $list->addListItem($item);
     }
     // bill
     $sth = $this->db->prepare('SELECT id,amount,`type`, ' . "DATE_FORMAT(`date`, '%b %e, %Y') AS 'date_format' " . 'FROM `client_trans` WHERE `folder_id`=? ' . 'ORDER BY `date` ');
     $sth->execute(array($this->id));
     if ($sth->rowCount()) {
         $sthx = $this->db->prepare('SELECT balance FROM folders WHERE id=?');
         $sthx->execute(array($this->id));
         $rowx = $sthx->fetch();
         $title = 'Bill';
         if ($rowx['balance']) {
             $title .= ' balance: $' . $rowx['balance'];
         }
         $list->addHeading($title);
     }
     while ($row = $sth->fetch()) {
         $subitems = true;
         $icon;
         $title;
         switch ($row['type']) {
             case 'fee':
                 $title = 'Fee charged: $' . $row['amount'];
                 $icon = '/css/fugue/money--minus.png';
                 break;
             case 'pay':
                 $icon = '/css/fugue/money--plus.png';
                 $title = 'Payment: $' . $row['amount'];
                 break;
             case 'trust':
                 $icon = '/css/fugue/money--exclamation.png';
                 $title = 'Trust payment: $' . $row['amount'];
                 break;
         }
         $item = new ListItem($title, $this->domain . 'bill/' . $row['id'] . '/edit', $icon, 'data-icon="false" data-mini="true"');
         $item->setRightText($row['cr_format']);
         $list->addListItem($item);
     }
     // passed events
     $events = false;
     $sth = $this->db->prepare('SELECT id,name, ' . '`date`, ' . "DATE_FORMAT(`date`, '%b %e, %Y') AS 'date_format', " . "TIME_FORMAT(`time`, '%l:%i %p') AS 'time_format' " . "FROM `events` WHERE folder_id=? ORDER BY `date` DESC");
     //$sth->execute(array($this->id,$today->format('Y-m-d')));
     $sth->execute(array($this->id));
     while ($row = $sth->fetch()) {
         $subitems = true;
         $this_time = strtotime($row['date']);
         $day_diff = floor(($this_time - $today_time) / 3600 / 24);
         if ($day_diff < 0 && !isset($event_ids[$row['id']])) {
             if (!$events) {
                 $list->addHeading('Completed');
                 $events = true;
             }
             $item = new ListItem($row['name'], $this->domain . 'event/' . $row['id'] . '/edit', '/css/fugue/calendar-month.png', ' class="' . $class . '" data-icon="false" data-mini="true"');
             $item->setRightText($row['date_format']);
             $list->addListItem($item);
         }
     }
     // completed tasks
     $sth = $this->db->prepare('SELECT id,name,complete ' . 'FROM `tasks` WHERE `folder_id`=? AND `complete` IS NOT NULL ORDER BY `complete` DESC');
     $sth->execute(array($this->id));
     while ($row = $sth->fetch()) {
         if (!$events) {
             $list->addHeading('Completed');
             $events = true;
         }
         $subitems = true;
         $comp_timestamp = strtotime($row['complete'] . ' UTC');
         $local_date = date('M j, Y', $comp_timestamp);
         $item = new ListItem($row['name'], $this->domain . 'task/' . $row['id'] . '/edit', '/css/fugue/tick.png', ' class="folderitem-complete" data-icon="false" data-mini="true"');
         $item->setRightText($local_date);
         $list->addListItem($item);
     }
     if (!$subitems) {
         $list->addText('Nothing in this folder.');
     }
     $list->echoList();
 }
Exemple #11
0
 public function listAddresses($contact_id, $child_name, $child_id)
 {
     $list = new ListObject(true, null, 'class="item-list"');
     $list->addHeading('Addresses', 'New', $this->domain . $child_name . '/' . $child_id . '/' . $contact_id . '/address/new');
     $sthx = $this->db->prepare("SELECT con_addresses.abbr,`primary`,`street`,`type`,`foreign`, " . "`con_addresses`.`id` AS 'addr_id', " . "CONCAT(`loc_cities`.`name`,', ',`loc_states`.`abbr`,' ',`zip`) AS 'city_state' " . 'FROM `contacts` ' . 'JOIN `con_addresses` ON `contacts`.`id`=`con_addresses`.`contact_id` ' . 'LEFT OUTER JOIN `loc_cities` ON `con_addresses`.`city_id`=`loc_cities`.`id` ' . 'LEFT OUTER JOIN `loc_states` ON `loc_cities`.`state_id`=`loc_states`.`id` ' . 'WHERE `contact_id`=? ' . 'ORDER BY `con_addresses`.`primary` DESC,`con_addresses`.`created` DESC ');
     $sthx->execute(array($contact_id));
     if ($sthx->rowCount()) {
         while ($rowx = $sthx->fetch()) {
             $str_arr = explode(PHP_EOL, $rowx['street']);
             $item = new ListItem($str_arr[0], $this->domain . $child_name . '/' . $child_id . '/' . $contact_id . '/address/' . $rowx['addr_id'] . '/edit', '/css/fugue/card-address.png', 'class="mini-item"');
             for ($idx = 1; $idx < count($str_arr); $idx++) {
                 $item->addSubItem($str_arr[$idx]);
             }
             if ($rowx['city_state']) {
                 $item->addSubitem($rowx['city_state']);
             } else {
                 $item->addSubitem($rowx['foreign']);
             }
             $right = $rowx['abbr'] ? $rowx['abbr'] : $rowx['type'];
             //if ($rowx['primary']) $right = 'Primary: '.$right;
             if ($rowx['primary']) {
                 $right .= '  (primary)';
             }
             $item->setRightText($right);
             if ($rowx['ext']) {
                 $item->addSubItem($rowx['ext']);
             }
             $list->addListItem($item);
         }
     } else {
         $list->addText('No addresses.');
     }
     $list->echoList();
 }
Exemple #12
0
 public function echoClient()
 {
     $sth = $this->db->prepare("SELECT `contact_id`,`ssn`,`aka`,`dba`, " . "DATE_FORMAT(`dob`, '%c-%e-%Y') AS 'dob_format' " . 'FROM `clients` ' . 'JOIN `contacts` ON `clients`.`contact_id`=`contacts`.`id` ' . 'WHERE `clients`.`id`=?');
     $sth->execute(array($this->id));
     if ($row = $sth->fetch()) {
         $this->contact_id = $row['contact_id'];
         // client info
         $list = new ListObject(true);
         $item = new ListItem($this->full_name, $this->domain . 'client/' . $this->id . '/edit', '/css/fugue/user.png', 'class="mini-item"');
         if ($row['dob_format']) {
             $item->addSubItem('DOB: ' . $row['dob_format']);
         }
         if ($row['ssn']) {
             $item->addSubItem('SSN: ' . $row['ssn']);
         }
         if ($row['aka']) {
             $item->addSubItem($paras[] = 'AKA: ' . $row['aka']);
         }
         if ($row['dba']) {
             $item->addSubItem($paras[] = 'DBA: ' . $row['dba']);
         }
         //$list->addItem($this->full_name, $this->domain.'client/'.$this->id.'/edit', '/css/fugue/user.png', $paras);
         $list->addListItem($item);
         $list->echoList();
         // cases
         $list = new ListObject(true, 'info', 'data-split-theme="c" class="case-list"');
         $list->addHeading('Cases', '<u>N</u>ew', $this->domain . 'case/new/' . $this->id);
         $sthx = $this->db->prepare("SELECT `closed`,`folders`.`id` AS 'folder_id'," . "`balance`,`docket`, " . "`employees`.`name` AS 'atty_name'," . "DATE_FORMAT(`opened`, '%c-%e-%y') AS 'open_format', " . "`folders`.`name` AS 'folder_name', " . "`case_types`.`name` AS 'type_name' " . 'FROM `folders` ' . 'LEFT OUTER JOIN `case_types` ON `folders`.`type_id`=`case_types`.`id` ' . 'JOIN `employees` ON `folders`.`emp_id`=`employees`.`id` ' . 'WHERE `client_id`=? AND `folders`.`folder_id` IS NULL ORDER BY `folders`.`opened` DESC');
         $sthx->execute(array($this->id));
         if ($sthx->rowCount()) {
             while ($rowx = $sthx->fetch()) {
                 $item = new ListItem($rowx['folder_name'], $this->domain . 'folder/' . $rowx['folder_id'], '/css/fugue/inbox-document-text.png', 'class="mini-item"');
                 $item->addSplit($this->domain . 'case/' . $rowx['folder_id'] . '/edit');
                 $item->setRightText($rowx['open_format']);
                 $subtext = '';
                 if ($rowx['type_name']) {
                     $subtext .= $rowx['docket'] ? $rowx['docket'] . ' - ' : '';
                     $subtext .= $rowx['type_name'] . ' case. ';
                 }
                 $subtext .= 'Attorney: ' . $rowx['atty_name'] . '. ';
                 if ($rowx['closed']) {
                     $subtext .= 'Case closed. ';
                 }
                 if ($rowx['fee_type']) {
                     if ($rowx['fee_type'] == 'appt') {
                         $subtext .= 'Court appointed.';
                     } else {
                         if ($rowx['balance']) {
                             $subtext .= 'Balance: $' . $rowx['balance'];
                         }
                     }
                 }
                 $item->addSubItem($subtext);
                 $list->addListItem($item);
             }
         } else {
             $list->addText('No cases.');
         }
         $list->echoList();
         $this->listAddresses($this->contact_id, 'client', $this->id);
         $this->listPhones($this->contact_id, 'client', $this->id);
     }
 }
 public function testParseConstraintsString()
 {
     $constraintsString = "word1 word\ 2 word\"3 word\\\\4";
     $expectedResult = array('word1', 'word 2', 'word"3', 'word\\4');
     $this->assertEquals($expectedResult, ListObject::ParseConstraintsString($constraintsString));
 }