2012-10-19 21:30:26 +00:00
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* FieldCondition.php
|
|
|
|
|
*
|
|
|
|
|
* @package workflow.engine.classes.model
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
require_once 'classes/model/om/BaseFieldCondition.php';
|
|
|
|
|
require_once 'classes/model/Dynaform.php';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Skeleton subclass for representing a row from the 'FIELD_CONDITION' table.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* You should add additional methods to this class to meet the
|
|
|
|
|
* application requirements. This class will only be generated as
|
|
|
|
|
* long as it does not already exist in the output directory.
|
|
|
|
|
*
|
|
|
|
|
* @package workflow.engine.classes.model
|
|
|
|
|
*/
|
|
|
|
|
class FieldCondition extends BaseFieldCondition
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public $oDynaformHandler;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Quick get all records into a criteria object
|
|
|
|
|
*
|
|
|
|
|
* @author Erik A. Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
|
|
|
|
|
*/
|
|
|
|
|
public function get ($UID)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
$obj = FieldConditionPeer::retrieveByPk( $UID );
|
|
|
|
|
if (! isset( $obj )) {
|
|
|
|
|
throw new Exception( "the record with UID: $UID doesn't exits!" );
|
|
|
|
|
}
|
2010-12-02 23:34:41 +00:00
|
|
|
//TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME, TYPE_NUM
|
2012-10-19 21:30:26 +00:00
|
|
|
return $obj->toArray( BasePeer::TYPE_FIELDNAME );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Quick get all records into a criteria object
|
|
|
|
|
*
|
|
|
|
|
* @author Erik A. Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
|
|
|
|
|
*/
|
|
|
|
|
public function getAllCriteriaByDynUid ($DYN_UID, $filter = 'all')
|
|
|
|
|
{
|
|
|
|
|
$oCriteria = new Criteria( 'workflow' );
|
|
|
|
|
$oCriteria->addSelectColumn( FieldConditionPeer::FCD_UID );
|
|
|
|
|
$oCriteria->addSelectColumn( FieldConditionPeer::FCD_FUNCTION );
|
|
|
|
|
$oCriteria->addSelectColumn( FieldConditionPeer::FCD_FIELDS );
|
|
|
|
|
$oCriteria->addSelectColumn( FieldConditionPeer::FCD_CONDITION );
|
|
|
|
|
$oCriteria->addSelectColumn( FieldConditionPeer::FCD_EVENTS );
|
|
|
|
|
$oCriteria->addSelectColumn( FieldConditionPeer::FCD_EVENT_OWNERS );
|
|
|
|
|
$oCriteria->addSelectColumn( FieldConditionPeer::FCD_STATUS );
|
|
|
|
|
$oCriteria->addSelectColumn( FieldConditionPeer::FCD_DYN_UID );
|
|
|
|
|
|
|
|
|
|
$oCriteria->add( FieldConditionPeer::FCD_DYN_UID, $DYN_UID );
|
|
|
|
|
switch ($filter) {
|
|
|
|
|
case 'active':
|
|
|
|
|
$oCriteria->add( FieldConditionPeer::FCD_STATUS, '1', Criteria::EQUAL );
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $oCriteria;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Quick get all records into a associative array
|
|
|
|
|
*
|
|
|
|
|
* @author Erik A. Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
|
|
|
|
|
*/
|
|
|
|
|
public function getAllByDynUid ($DYN_UID, $filter = 'all')
|
|
|
|
|
{
|
|
|
|
|
$aRows = Array ();
|
|
|
|
|
|
|
|
|
|
$oCriteria = $this->getAllCriteriaByDynUid( $DYN_UID, $filter );
|
|
|
|
|
|
|
|
|
|
$oDataset = FieldConditionPeer::doSelectRS( $oCriteria );
|
|
|
|
|
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
|
|
|
|
|
$oDataset->next();
|
|
|
|
|
|
|
|
|
|
while ($aRow = $oDataset->getRow()) {
|
|
|
|
|
$aRows[] = $aRow;
|
|
|
|
|
$oDataset->next();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $aRows;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Quick save a record
|
|
|
|
|
*
|
|
|
|
|
* @author Erik A. Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
|
|
|
|
|
*/
|
|
|
|
|
public function quickSave ($aData)
|
|
|
|
|
{
|
|
|
|
|
$con = Propel::getConnection( FieldConditionPeer::DATABASE_NAME );
|
|
|
|
|
try {
|
|
|
|
|
$obj = null;
|
|
|
|
|
|
|
|
|
|
if (isset( $aData['FCD_UID'] ) && trim( $aData['FCD_UID'] ) != '') {
|
|
|
|
|
$obj = FieldConditionPeer::retrieveByPk( $aData['FCD_UID'] );
|
|
|
|
|
} else {
|
|
|
|
|
$aData['FCD_UID'] = G::generateUniqueID();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (! is_object( $obj )) {
|
|
|
|
|
$obj = new FieldCondition();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$obj->fromArray( $aData, BasePeer::TYPE_FIELDNAME );
|
|
|
|
|
|
|
|
|
|
if ($obj->validate()) {
|
|
|
|
|
$result = $obj->save();
|
|
|
|
|
$con->commit();
|
|
|
|
|
return $result;
|
|
|
|
|
} else {
|
|
|
|
|
$e = new Exception( "Failed Validation in class " . get_class( $this ) . "." );
|
|
|
|
|
$e->aValidationFailures = $obj->getValidationFailures();
|
|
|
|
|
throw ($e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} catch (exception $e) {
|
|
|
|
|
$con->rollback();
|
|
|
|
|
throw ($e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getConditionScript ($DYN_UID)
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/Dynaform.php';
|
|
|
|
|
G::LoadSystem( 'dynaformhandler' );
|
|
|
|
|
|
|
|
|
|
$oDynaform = DynaformPeer::retrieveByPk( $DYN_UID );
|
|
|
|
|
$PRO_UID = $oDynaform->getProUid();
|
|
|
|
|
|
|
|
|
|
$this->oDynaformHandler = new dynaFormHandler( PATH_DYNAFORM . "$PRO_UID/$DYN_UID" . '.xml' );
|
|
|
|
|
$aDynaformFields = $this->oDynaformHandler->getFieldNames();
|
|
|
|
|
for ($i = 0; $i < count( $aDynaformFields ); $i ++) {
|
|
|
|
|
$aDynaformFields[$i] = "'$aDynaformFields[$i]'";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sDynaformFieldsAsStrings = implode( ',', $aDynaformFields );
|
|
|
|
|
|
|
|
|
|
$aRows = $this->getAllByDynUid( $DYN_UID, 'active' );
|
|
|
|
|
$sCode = '';
|
|
|
|
|
|
|
|
|
|
if (sizeof( $aRows ) != 0) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$hashCond = md5( $aRow['FCD_UID'] );
|
|
|
|
|
$sCondition = $this->parseCondition( $aRow['FCD_CONDITION'] );
|
|
|
|
|
$sCondition = addslashes( $sCondition );
|
|
|
|
|
|
|
|
|
|
$sCode .= "function __condition__$hashCond() { ";
|
|
|
|
|
$sCode .= "if( eval(\"{$sCondition}\") ) { ";
|
|
|
|
|
|
|
|
|
|
$aFields = explode( ',', $aRow['FCD_FIELDS'] );
|
|
|
|
|
|
|
|
|
|
switch ($aRow['FCD_FUNCTION']) {
|
|
|
|
|
case 'show':
|
|
|
|
|
foreach ($aFields as $aField) {
|
|
|
|
|
$sCode .= "showRowById('$aField');";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'showOnly':
|
|
|
|
|
$sCode .= "hideRowsById(Array($sDynaformFieldsAsStrings));";
|
|
|
|
|
foreach ($aFields as $aField) {
|
|
|
|
|
$sCode .= "showRowById('$aField');";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'showAll':
|
|
|
|
|
$sCode .= "showRowsById(Array($sDynaformFieldsAsStrings));";
|
|
|
|
|
break;
|
|
|
|
|
case 'hide':
|
|
|
|
|
foreach ($aFields as $aField) {
|
|
|
|
|
$sCode .= "hideRowById('$aField');";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'hideOnly':
|
|
|
|
|
$sCode .= "showRowsById(Array($sDynaformFieldsAsStrings));";
|
|
|
|
|
foreach ($aFields as $aField) {
|
|
|
|
|
$sCode .= "hideRowById('$aField');";
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 'hideAll':
|
|
|
|
|
$aDynaFields = array ();
|
|
|
|
|
$aEventOwner = explode( ',', $aRow['FCD_EVENT_OWNERS'] );
|
|
|
|
|
foreach ($aDynaformFields as $sDynaformFields) {
|
|
|
|
|
if (! in_array( str_replace( "'", "", $sDynaformFields ), $aEventOwner )) {
|
|
|
|
|
$aDynaFields[] = $sDynaformFields;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$sDynaformFieldsAsStrings = implode( ',', $aDynaFields );
|
|
|
|
|
$sCode .= "hideRowsById(Array($sDynaformFieldsAsStrings));";
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
$sCode .= " } ";
|
|
|
|
|
$sCode .= "} ";
|
|
|
|
|
$aFieldOwners = explode( ',', $aRow['FCD_EVENT_OWNERS'] );
|
|
|
|
|
$aEvents = explode( ',', $aRow['FCD_EVENTS'] );
|
|
|
|
|
if (in_array( 'onchange', $aEvents )) {
|
|
|
|
|
foreach ($aFieldOwners as $aField) {
|
|
|
|
|
|
2010-12-02 23:34:41 +00:00
|
|
|
//verify the field type
|
2012-10-19 21:30:26 +00:00
|
|
|
$node = $this->oDynaformHandler->getNode( $aField );
|
|
|
|
|
$nodeType = $node->getAttribute( 'type' );
|
|
|
|
|
|
|
|
|
|
switch ($nodeType) {
|
|
|
|
|
case 'checkbox':
|
|
|
|
|
$sJSEvent = 'click';
|
|
|
|
|
break;
|
|
|
|
|
case 'text':
|
|
|
|
|
case 'textarea':
|
|
|
|
|
case 'currency':
|
|
|
|
|
case 'percentage':
|
|
|
|
|
$sJSEvent = 'blur';
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
$sJSEvent = 'change';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
$sCode .= "leimnud.event.add(getField('$aField'), '$sJSEvent', function() {";
|
|
|
|
|
$sCode .= " __condition__$hashCond(); ";
|
|
|
|
|
$sCode .= "}.extend(getField('$aField')));";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (in_array( 'onload', $aEvents )) {
|
|
|
|
|
foreach ($aFieldOwners as $aField) {
|
|
|
|
|
$sCode .= " __condition__$hashCond(); ";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $sCode;
|
|
|
|
|
} else {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function parseCondition ($sCondition)
|
|
|
|
|
{
|
|
|
|
|
preg_match_all( '/@#[a-zA-Z0-9_.]+/', $sCondition, $result );
|
|
|
|
|
if (sizeof( $result[0] ) > 0) {
|
|
|
|
|
foreach ($result[0] as $fname) {
|
|
|
|
|
preg_match_all( '/(@#[a-zA-Z0-9_]+)\.([@#[a-zA-Z0-9_]+)/', $fname, $result2 );
|
|
|
|
|
if (isset( $result2[2][0] ) && $result2[1][0]) {
|
|
|
|
|
$sCondition = str_replace( $fname, "getField('" . str_replace( '@#', '', $result2[1][0] ) . "')." . $result2[2][0], $sCondition );
|
|
|
|
|
} else {
|
|
|
|
|
$field = str_replace( '@#', '', $fname );
|
|
|
|
|
$node = $this->oDynaformHandler->getNode( $field );
|
|
|
|
|
if (isset( $node )) {
|
|
|
|
|
$nodeType = $node->getAttribute( 'type' );
|
|
|
|
|
switch ($nodeType) {
|
|
|
|
|
case 'checkbox':
|
|
|
|
|
$sAtt = 'checked';
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
$sAtt = 'value';
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$sAtt = 'value';
|
|
|
|
|
}
|
|
|
|
|
$sCondition = str_replace( $fname, "getField('" . $field . "').$sAtt", $sCondition );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $sCondition;
|
|
|
|
|
}
|
|
|
|
|
public function create ($aData)
|
|
|
|
|
{
|
|
|
|
|
$oConnection = Propel::getConnection( FieldConditionPeer::DATABASE_NAME );
|
|
|
|
|
try {
|
2010-12-02 23:34:41 +00:00
|
|
|
// $aData['FCD_UID'] = '';
|
2012-10-19 21:30:26 +00:00
|
|
|
if (isset( $aData['FCD_UID'] ) && $aData['FCD_UID'] == '') {
|
|
|
|
|
unset( $aData['FCD_UID'] );
|
|
|
|
|
}
|
|
|
|
|
if (! isset( $aData['FCD_UID'] )) {
|
|
|
|
|
$aData['FCD_UID'] = G::generateUniqueID();
|
|
|
|
|
}
|
|
|
|
|
$oFieldCondition = new FieldCondition();
|
|
|
|
|
$oFieldCondition->fromArray( $aData, BasePeer::TYPE_FIELDNAME );
|
|
|
|
|
if ($oFieldCondition->validate()) {
|
|
|
|
|
$oConnection->begin();
|
|
|
|
|
$iResult = $oFieldCondition->save();
|
|
|
|
|
$oConnection->commit();
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
$sMessage = '';
|
|
|
|
|
$aValidationFailures = $oFieldCondition->getValidationFailures();
|
|
|
|
|
foreach ($aValidationFailures as $oValidationFailure) {
|
|
|
|
|
$sMessage .= $oValidationFailure->getMessage() . '<br />';
|
|
|
|
|
}
|
|
|
|
|
throw (new Exception( 'The registry cannot be created!<br />' . $sMessage ));
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception $oError) {
|
|
|
|
|
$oConnection->rollback();
|
|
|
|
|
throw ($oError);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function remove ($sUID)
|
|
|
|
|
{
|
|
|
|
|
$oConnection = Propel::getConnection( FieldConditionPeer::DATABASE_NAME );
|
|
|
|
|
try {
|
|
|
|
|
$oConnection->begin();
|
|
|
|
|
$this->setFcdUid( $sUID );
|
|
|
|
|
$iResult = $this->delete();
|
|
|
|
|
$oConnection->commit();
|
|
|
|
|
return $iResult;
|
|
|
|
|
} catch (Exception $oError) {
|
|
|
|
|
$oConnection->rollback();
|
|
|
|
|
throw ($oError);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function fieldConditionExists ($sUid, $aDynaform)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$found = false;
|
|
|
|
|
$obj = FieldConditionPeer::retrieveByPk( $sUid );
|
|
|
|
|
if (isset( $obj )) {
|
|
|
|
|
$aFields = $obj->toArray( BasePeer::TYPE_FIELDNAME );
|
|
|
|
|
foreach ($aDynaform as $key => $row) {
|
|
|
|
|
if ($row['DYN_UID'] == $aFields['FCD_DYN_UID']) {
|
|
|
|
|
$found = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2010-12-02 23:34:41 +00:00
|
|
|
// return( get_class($obj) == 'FieldCondition') ;
|
2012-10-19 21:30:26 +00:00
|
|
|
return ($found);
|
|
|
|
|
} catch (Exception $oError) {
|
|
|
|
|
throw ($oError);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function Exists ($sUid)
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
$obj = FieldConditionPeer::retrieveByPk( $sUid );
|
|
|
|
|
return (is_object( $obj ) && get_class( $obj ) == 'FieldCondition');
|
|
|
|
|
} catch (Exception $oError) {
|
|
|
|
|
throw ($oError);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// FieldCondition
|
|
|
|
|
|