<?php
/**
* Entier Studio
*
* LICENSE
*
* Copyright 2006 Entier Studio team.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @package entier.studio
* @copyright Copyright (c) 2006 Entier Studio team. All rights reserved.
* @version $Id: html.ObjectoryElementReferenceSetDDL.php 85 2008-01-21 20:43:08Z yannromefort $
*/
//-----------------------------------------------------------------------------
// namespace
if (!defined("DefObjectoryElementReferenceSetDDL")) {
//-------------------------------------------------------------------------
// Define
define("DefObjectoryElementReferenceSetDDL", "1");
//-------------------------------------------------------------------------
// Include
@require_once (FRAMEWORK_DIR . "htmldropdownlist.php");
@require_once (COMPONENTS_DATA . "data.ObjectoryContainedElementSet.php");
//
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
// Class
class ObjectoryElementReferenceSetDDL extends HTMLDropdownList {
//---------------------------------------------------------------------
// Attributes
/**
*
* @var integer
* @see
*/
var $m_elemRoot = 0; // OBJELEMLINK
/**
*
* @var integer
* @see
*/
var $m_elemType = 0; // OBJETYPRKEY
/**
*
* @var integer
* @see
*/
var $m_linkType = 0; // OBJETYPLINK
//---------------------------------------------------------------------
// Constructor
/**
*
*/
function ObjectoryElementReferenceSetDDL($layout, $class, $root, $type, $link) {
//
$this->m_layoutName = $layout;
$this->m_className = $class;
$this->m_defaultItem = true;
//
$this->m_elemRoot = $root;
$this->m_elemType = $type;
$this->m_linkType = $link;
}
//---------------------------------------------------------------------
// Methods
/**
*
* @access private
*
* @param object DataSource object
* @param string dropdownlist text
* @param integer reference primary key
* @return string
*/
function renderList(&$datasource, &$template, $value ) {
//
$format1 = "<option value=\"%s\" selected>%s</option>";
$format2 = "<option value=\"%s\">%s</option>";
//
/*
* 1 - ObjectoryContainedElementSet of references
*/
//
$referenceSet = new ObjectoryContainedElementSet($this->m_elemRoot, $this->m_elemType);
if ($referenceSet->selectSet($datasource, FOREIGNKEY, FOREIGNKEY) == true) {
//
$primaryKey = $referenceSet->m_indexSet[PRIMARYKEY];
$naturalKey = $referenceSet->m_indexSet[NATURALKEY];
//
for ($i = 0;$i < $referenceSet->rowCount();$i++) {
// select next row
if ($referenceSet->fetchCursorRow($datasource) == false)
return (false);
//
$pkid = $referenceSet->get_field_value($primaryKey);
$name = $referenceSet->get_field_value($naturalKey);
if ($pkid == $value)
$template.= @sprintf($format1, $pkid, $name);
else
$template.= @sprintf($format2, $pkid, $name);
}
}
//
return ($template);
}
/**
*
* @access private
*
* @param object name="$datasource" DataSource object
* @param string name="$template" dropdownlist text
* @param integer name="$value" reference primary key
* @param integer name="$root" container primary key
* @return string name="$mark" hierarchy mark
* @return string
*/
function renderTree(&$datasource, &$template, $value, $root, $mark) {
//
$format1 = "<optgroup label=\"%s\" title=\"%s\">";
$format2 = "</optgroup>";
$format3 = "<option value=\"%s\" selected>%s</option>";
$format4 = "<option value=\"%s\">%s</option>";
//
/*
* 1 - ObjectoryContainedElementSet of containers
*/
//
$containerSet = new ObjectoryContainedElementSet(
$root, // containerSet parentId starts on ROOT
$this->m_linkType // container type ( package or class )
);
if ($containerSet->selectSet($datasource, FOREIGNKEY, FOREIGNKEY) == true) {
//
$primaryKey = $containerSet->m_indexSet[PRIMARYKEY];
$naturalKey = $containerSet->m_indexSet[NATURALKEY];
//
for ($i = 0;$i < $containerSet->rowCount();$i++) {
// select next row
if ($containerSet->fetchCursorRow($datasource) == false) return (false);
//
/*
* 2 - ObjectoryContainedElementSet of references
*/
//
$containerId = $containerSet->get_field_value($primaryKey);
$containerName = $containerSet->get_field_value($naturalKey);
//
$referenceSet = new ObjectoryContainedElementSet($containerId, $this->m_elemType);
if ($referenceSet->selectSet($datasource, FOREIGNKEY, FOREIGNKEY) == true) {
// optiongroup
$template.= @sprintf($format1, $mark . $containerName, $containerName);
//
for ($j = 0;$j < $referenceSet->rowCount();$j++) {
// select next row
if ($referenceSet->fetchCursorRow($datasource) == false) return (false);
//
$pkid = $referenceSet->get_field_value($primaryKey);
$name = $referenceSet->get_field_value($naturalKey);
if ($pkid == $value) $template.= @sprintf($format3, $pkid, $name);
else $template.= @sprintf($format4, $pkid, $name);
}
$template.= $format2;
}
//
$template = $this->renderTree($datasource, $template, $value, $containerId, $mark . "..");
}
}
//
return ($template);
}
/**
*
* @access public
*
* @param object DataSource object
* @param object DataObject object
* @param integer selected item value
* @return string
*/
function renderObject(&$datasource, &$dataobject, $value = 0) {
//
$class = $this->m_className;
$layout = $this->m_layoutName;
$default = $this->m_defaultItem;
//
if ($class != "") $template = "<select id=\"$layout\" name=\"$layout\" class=\"$class\">";
else $template = "<select id=\"$layout\" name=\"$layout\">";
//
if ($default == true) {
if (empty($value)) $template.= "<option value=0 selected></option>";
else $template.= "<option value=0></option>";
}
//
switch( $this->m_linkType ) {
case PACKAGE_TYPE:
$template = $this->renderTree($datasource, $template, $value, $this->m_elemRoot, "");
break;
case CLASS_TYPE:
$template = $this->renderList($datasource, $template, $value );
break;
}
//
return ($template . "</select>");
}
};
// Class
//-----------------------------------------------------------------------------
}
// namespace
//--------------------------------------------------------------------------
?>