. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. * */ require_once 'classes/model/om/BaseApplication.php'; require_once 'classes/model/Content.php'; /** * Skeleton subclass for representing a row from the 'APPLICATION' 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 Application extends BaseApplication { /** * This value goes in the content table * @var string */ protected $app_title = ''; protected $app_description = ''; //protected $app_proc_code = ''; /** * Get the [app_title] column value. * @return string */ public function getAppTitle() { if ( $this->getAppUid() == '' ) { throw ( new Exception( "Error in getAppTitle, the APP_UID can't be blank") ); } $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; $this->app_title = Content::load ( 'APP_TITLE', '', $this->getAppUid(), $lang ); return $this->app_title; } /** * Set the [app_title] column value. * * @param string $v new value * @return void */ public function setAppTitle($v) { if ( $this->getAppUid() == '' ) { throw ( new Exception( "Error in setAppTitle, the APP_UID can't be blank") ); } // Since the native PHP type for this column is string, // we will cast the input to a string (if it is not). if ($v !== null && !is_string($v)) { $v = (string) $v; } if ($this->app_title !== $v || $v === '') { $this->app_title = $v; $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; $res = Content::addContent( 'APP_TITLE', '', $this->getAppUid(), $lang, $this->app_title ); } } // set() /** * Get the [app_description] column value. * @return string */ public function getAppDescription() { if ( $this->getAppUid() == '' ) { throw ( new Exception( "Error in getAppDescription, the APP_UID can't be blank") ); } $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; $this->app_description = Content::load ( 'APP_DESCRIPTION', '', $this->getAppUid(), $lang ); return $this->app_description; } public function isEmptyInContent ( $content, $field, $lang ) { if ( isset ( $content[$field][ $lang ] ) ) { if ( trim( $content[$field][ $lang ] ) != '' ) return false; }; return true; } public function updateInsertContent ( $content, $field, $value ) { if ( isset ( $content[$field][ 'en' ] ) ) { //update $con = ContentPeer::retrieveByPK ( $field, '', $this->getAppUid(), 'en' ); $con->setConValue ( $value ); if ($con->validate ()) { $res = $con->save (); } } else {//insert $con = new Content ( ); $con->setConCategory ( $field ); $con->setConParent ( '' ); $con->setConId ( $this->getAppUid()); $con->setConLang ( 'en' ); $con->setConValue ( $value ); if ($con->validate ()) { $res = $con->save (); } } } public function normalizeContent( $content, $field , $lang ) { $value = ''; //if the lang row is not empty, update in 'en' row and continue if ( !$this->isEmptyInContent ( $content, $field , $lang ) ) { //update/insert only if this lang is != 'en', with this always we will have an en row with last value $value = $content [ $field ][ $lang ]; if ( $lang != 'en' ) { $this->updateInsertContent ( $content, $field , $value ); } } else { //if the lang row is empty, and 'en' row is not empty return 'en' value if ( !$this->isEmptyInContent ( $content, $field , 'en' ) ) { $value = $content [ $field ][ 'en' ]; } //if the lang row is empty, and 'en' row is empty get value for 'other' row and update in 'en' row and continue if ( $this->isEmptyInContent ( $content, $field , 'en' ) ) { if ( isset($content[$field]) && is_array ($content[$field] ) ) { foreach ( $content [ $field ] as $lan => $val ) { if ( trim ( $val ) != '' ) { $value = $val; if ( $lan != 'en' ) { $this->updateInsertContent ( $content, $field , $value ); continue; } } } } else { $this->updateInsertContent ( $content, $field , '' ); } } } return $value; } /** * Get the [app_description] , [app_title] column values. * @return array of string */ public function getContentFields() { if ( $this->getAppUid() == '' ) { throw ( new Exception( "Error in getContentFields, the APP_UID can't be blank") ); } $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn( ContentPeer::CON_CATEGORY ); $c->addSelectColumn( ContentPeer::CON_LANG ); $c->addSelectColumn( ContentPeer::CON_VALUE ); $c->add( ContentPeer::CON_ID, $this->getAppUid() ); //$c->add( ContentPeer::CON_LANG, $lang ); $c->addAscendingOrderByColumn('CON_CATEGORY'); $c->addAscendingOrderByColumn('CON_LANG'); $rs = ContentPeer::doSelectRS( $c ); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->next(); $content = array(); while ($row = $rs->getRow()) { $conCategory = $row['CON_CATEGORY']; $conLang = $row['CON_LANG']; if ( !isset( $content[$conCategory] ) ) $content[$conCategory] = array(); if ( !isset( $content[$conCategory][$conLang] ) ) $content[$conCategory][$conLang] = array(); $content[$conCategory][$conLang] = $row['CON_VALUE']; $rs->next(); $row = $rs->getRow(); } $appTitle = $this->normalizeContent( $content, 'APP_TITLE', $lang ); $appDescription = $this->normalizeContent( $content, 'APP_DESCRIPTION', $lang ); $res['APP_TITLE'] = $appTitle; $res['APP_DESCRIPTION'] = $appDescription; return $res; } /** * Set the [app_description] column value. * * @param string $v new value * @return void */ public function setAppDescription($v) { if ( $this->getAppUid() == '' ) { throw ( new Exception( "Error in setAppTitle, the APP_UID can't be blank") ); } // Since the native PHP type for this column is string, // we will cast the input to a string (if it is not). if ($v !== null && !is_string($v)) { $v = (string) $v; } if ($this->app_description !== $v || $v === '') { $this->app_description = $v; $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; $res = Content::addContent( 'APP_DESCRIPTION', '', $this->getAppUid(), $lang, $this->app_description ); } } // set() /** * Get the [app_proc_code] column value. * @return string */ /*public function getAppProcCode () { if ( $this->getAppUid() == '' ) { throw ( new Exception( "Error in getAppProcCode, the APP_UID can't be blank") ); } $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; $this->app_proc_code = Content::load ( 'APP_PROC_CODE', '', $this->getAppUid(), $lang ); return $this->app_proc_code; }*/ /** * Set the [app_proc_code] column value. * * @param string $v new value * @return void */ /*public function setAppProcCode ($v) { if ( $this->getAppUid() == '' ) { throw ( new Exception( "Error in setAppProcCode , the APP_UID can't be blank") ); } // Since the native PHP type for this column is string, // we will cast the input to a string (if it is not). if ($v !== null && !is_string($v)) { $v = (string) $v; } if ($this->app_proc_code !== $v || $v === '') { $this->app_proc_code = $v; $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; $res = Content::addContent( 'APP_PROC_CODE', '', $this->getAppUid(), $lang, $this->app_proc_code ); } }*/ // set() /** * Load the Application row specified in [app_id] column value. * * @param string $AppUid the uid of the application * @return array $Fields the fields */ function Load ( $AppUid ) { $con = Propel::getConnection(ApplicationPeer::DATABASE_NAME); try { $oApplication = ApplicationPeer::retrieveByPk( $AppUid ); if (is_object($oApplication) && get_class ($oApplication) == 'Application' ) { $aFields = $oApplication->toArray(BasePeer::TYPE_FIELDNAME); $this->fromArray ($aFields, BasePeer::TYPE_FIELDNAME ); //this is the new function to optimize content queries $aContentFields = $oApplication->getContentFields(); $aFields['APP_TITLE'] = $aContentFields['APP_TITLE']; $aFields['APP_DESCRIPTION'] = $aContentFields['APP_DESCRIPTION']; $this->app_title = $aFields['APP_TITLE']; $this->app_description = $aFields['APP_DESCRIPTION']; //$aFields['APP_PROC_CODE'] = $oApplication->getAppProcCode(); //$this->setAppProcCode ( $oApplication->getAppProcCode() ); return $aFields; } else { throw( new Exception( "The Application row '$AppUid' doesn't exist!" )); } } catch (Exception $oError) { throw($oError); } } /** * Creates the Application * * @param * $sProUid the process id * $sUsrUid the userid * @return void */ function create ($sProUid, $sUsrUid ) { $con = Propel::getConnection( 'workflow' ); try { //fill the default values for new application row $this->setAppUid ( G::generateUniqueID() ); $this->setAppParent ( '' ); $this->setAppStatus ( 'DRAFT' ); $this->setProUid ( $sProUid ); $this->setAppProcStatus('' ); $this->setAppProcCode ( '' ); $this->setAppParallel ( 'N' ); $this->setAppInitUser ( $sUsrUid ); $this->setAppCurUser ( $sUsrUid ); $this->setAppCreateDate( 'now' ); $this->setAppInitDate ( 'now' ); $this->setAppUpdateDate( 'now' ); $pin = G::generateCode( 4, 'ALPHANUMERIC'); $this->setAppData ( serialize ( array('PIN'=>$pin) ) ); $this->setAppPin ( md5($pin) ); $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn( 'MAX(' . ApplicationPeer::APP_NUMBER . ')' ); //the appnumber is based in all processes active, not only in the specified process guid $result = ApplicationPeer::doSelectRS( $c ); $result->next(); $row = $result->getRow(); $maxNumber = $row[0] + 1; $this->setAppNumber ( $maxNumber ); if ( $this->validate() ) { $con->begin(); $res = $this->save(); $con->commit(); //to do: ID_CASE in translation $this->setAppTitle ( G::LoadTranslation ( 'ID_CASE') . $maxNumber ); $lang = defined ( 'SYS_LANG') ? SYS_LANG : 'en'; Content::insertContent( 'APP_TITLE', '', $this->getAppUid(), $lang, '#' . $maxNumber ); Content::insertContent( 'APP_DESCRIPTION', '', $this->getAppUid(), $lang, '' ); //Content::insertContent( 'APP_PROC_CODE', '', $this->getAppUid(), $lang, '' ); $con->commit(); return $this->getAppUid(); } else { $msg = ''; foreach($this->getValidationFailures() as $objValidationFailure) $msg .= $objValidationFailure->getMessage() . "
"; throw ( new PropelException ( 'The APPLICATION row cannot be created!', new PropelException ( $msg ) ) ); } } catch (Exception $e) { $con->rollback(); throw ($e); } } /** * Update the application row * @param array $aData * @return variant **/ public function update($aData) { $con = Propel::getConnection( ApplicationPeer::DATABASE_NAME ); try { $con->begin(); $oApp = ApplicationPeer::retrieveByPK( $aData['APP_UID'] ); if (is_object($oApp) && get_class ($oApp) == 'Application' ) { $oApp->fromArray( $aData, BasePeer::TYPE_FIELDNAME ); if ($oApp->validate()) { if ( isset ( $aData['APP_TITLE'] ) ) $oApp->setAppTitle( $aData['APP_TITLE'] ); if ( isset ( $aData['APP_DESCRIPTION'] ) ) $oApp->setAppDescription( $aData['APP_DESCRIPTION'] ); //if ( isset ( $aData['APP_PROC_CODE'] ) ) //$oApp->setAppProcCode( $aData['APP_PROC_CODE'] ); $res = $oApp->save(); $con->commit(); return $res; } else { $msg = ''; foreach($this->getValidationFailures() as $objValidationFailure) $msg .= $objValidationFailure->getMessage() . "
"; throw ( new PropelException ( 'The row cannot be updated!', new PropelException ( $msg ) ) ); } } else { $con->rollback(); throw(new Exception( "The row '" . $aData['APP_UID'] . "' in table APPLICATION doesn't exist!" )); } } catch (Exception $oError) { throw($oError); } } /** * Remove the application document registry * @param array $aData or string $appUid * @return string **/ public function remove($appUid) { if ( is_array ( $appUid ) ) { $appUid = ( isset ( $appUid['APP_UID'] ) ? $appUid['APP_UID'] : '' ); } try { $oApp = ApplicationPeer::retrieveByPK( $appUid ); if (!is_null($oApp)) { Content::removeContent('APP_TITLE', '', $oApp->getAppUid()); Content::removeContent('APP_DESCRIPTION', '', $oApp->getAppUid()); //Content::removeContent('APP_PROC_CODE', '', $oApp->getAppUid()); return $oApp->delete(); } else { throw(new Exception( "The row '$appUid' in table Application doesn't exist!" )); } } catch (Exception $oError) { throw($oError); } } function exists( $sAppUid ) { $oApplicaton = ApplicationPeer::retrieveByPK( $sAppUid ); return (!is_null($oApplicaton)); } function createApplication ($aData ) { $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn( 'MAX(' . ApplicationPeer::APP_NUMBER . ')' ); $c->add( ApplicationPeer::PRO_UID, $aData['PRO_UID'] ); $result = ApplicationPeer::doSelectRS( $c ); $result->next(); $row = $result->getRow(); $maxNumber = $row[0] + 1; $this->setAppUid ( G::generateUniqueID() ); $this->setAppNumber ( $maxNumber ); $this->setAppParent (isset($aData['APP_PARENT']) ? $aData['APP_PARENT'] : 0 ); $this->setAppStatus (isset($aData['APP_STATUS']) ? $aData['APP_STATUS'] : 'DRAFT' ); $this->setProUid ( $aData['PRO_UID'] ); $this->setAppProcStatus(isset($aData['APP_PROC_STATUS'])? $aData['APP_PROC_STATUS'] : '' ); $this->setAppProcCode (isset($aData['APP_PROC_CODE']) ? $aData['APP_PROC_CODE'] : '' ); $this->setAppParallel (isset($aData['APP_PARALLEL']) ? $aData['APP_PARALLEL'] : 'N' ); $this->setAppInitUser ( $aData['USR_UID'] ); $this->setAppCurUser ( $aData['USR_UID'] ); $this->setAppCreateDate(isset($aData['APP_CREATE_DATE'])? $aData['APP_CREATE_DATE'] : 'now' ); $this->setAppInitDate (isset($aData['APP_INIT_DATE']) ? $aData['APP_INIT_DATE'] : 'now' ); $this->setAppUpdateDate(isset($aData['APP_UPDATE_DATE'])? $aData['APP_UPDATE_DATE'] : 'now' ); //$this->setAppData ( serialize ( array() ) ); /** Start Comment : Sets the $this->Fields['APP_DATA'] Merge between stored APP_DATA with new APP_DATA. **/ if (!$this->getAppData()) { // if (!$this->is_new) // { // $this->load($fields['APP_UID']); // } } $this->Fields['APP_DATA']=isset($this->Fields['APP_DATA'])?$this->Fields['APP_DATA']:array(); if (isset($fields['APP_DATA']) && is_array($fields['APP_DATA'])) { foreach($fields['APP_DATA'] as $k=>$v) { $this->Fields['APP_DATA'][$k]=$v; } } /** End Comment **/ /** Begin Comment : Replace APP_DATA in APP_TITLE (before to serialize) $pro = new process( $this->_dbc ); $pro->load((isset($fields['PRO_UID']) ? $fields['PRO_UID'] : $this->Fields['PRO_UID'])); $fields['APP_TITLE'] = G::replaceDataField( $pro->Fields['PRO_TITLE'], $this->Fields['APP_DATA']); /** End Comment **/ // parent::save(); // $this->Fields['APP_DATA'] = unserialize($this->Fields['APP_DATA']); // /** Start Comment: Save in the table CONTENT */ // $this->content->saveContent('APP_TITLE',$fields); // /** End Comment */ if ($this->validate() ) { $res = $this->save(); $this->setAppTitle (''); $this->setAppDescription (''); $this->setAppProcCode (''); } else { // Something went wrong. We can now get the validationFailures and handle them. $msg = ''; $validationFailuresArray = $this->getValidationFailures(); foreach($validationFailuresArray as $objValidationFailure) { $msg .= $objValidationFailure->getMessage() . "
"; } //return array ( 'codError' => -100, 'rowsAffected' => 0, 'message' => $msg ); } return $this->getAppUid(); } } // Application