コード例 #1
0
ファイル: __deletechildren.php プロジェクト: pdelbar/onethree
 /**
  * Deletes children of a certain model on deletion of the parent model
  *
  * @param One_Scheme $scheme
  * @param One_Model $model
  */
 public function beforeDeleteModel(One_Scheme $scheme, One_Model $model)
 {
     $options = $scheme->get('behaviorOptions.deletechildren');
     $dependent = explode(';', $options['dependent']);
     $cascade = explode(';', $options['cascade']);
     $dependentLeft = array();
     if (count($dependent) > 0) {
         foreach ($dependent as $depends) {
             if (trim($depends) != '') {
                 $related = $model->getRelated(trim($depends));
                 if (count($related) > 0) {
                     $dependentLeft[] = trim($depends);
                     break;
                 }
             }
         }
     }
     if (count($dependentLeft) > 0) {
         throw new One_Exception('You can not delete this item untill all items of "' . implode('", "', $dependentLeft) . '" have been deleted.');
         return false;
     } else {
         $tbds = array_merge($dependent, $cascade);
         if (count($tbds) > 0) {
             foreach ($tbds as $tbd) {
                 if (trim($tbd) != '') {
                     $related = $model->getRelated($tbd);
                     if (count($related) > 0) {
                         foreach ($related as $relation) {
                             $relation->delete();
                         }
                     }
                 }
             }
         }
     }
     return true;
 }
コード例 #2
0
ファイル: slug_tbd.php プロジェクト: pdelbar/onethree
 /**
  * When the model is loaded, add a slug-field to the model that is composed of the specified fields
  *
  * @param One_Scheme $scheme
  * @param One_Model $model
  */
 public function afterLoadModel(One_Scheme $scheme, One_Model $model)
 {
     if (null !== $scheme->getAttribute('slug')) {
         // don't create the slug if the attribute "slug" actually exists
         return;
     }
     $options = $scheme->get('behaviorOptions.slug');
     $createFrom = $options['createFrom'];
     $parts = preg_split('/\\+/', $createFrom);
     $mangled = array();
     foreach ($parts as $part) {
         if (preg_match('/^([a-z0-9\\_\\-]+):([a-z0-9\\_\\-]+)$/', $part, $matches) > 0) {
             $scheme = $model->getScheme();
             $link = $scheme->getLink($matches[1]);
             if (!is_null($link)) {
                 if ($link->getAdapterType() == 'manytoone') {
                     $related = $model->getRelated($matches[1]);
                     if (!is_null($related)) {
                         $targetPart = $matches[2];
                         $mangle = !is_null($related->{$targetPart}) ? trim($this->mangle($related->{$targetPart})) : NULL;
                         if (!is_null($mangle)) {
                             $mangled[] = $mangle;
                         }
                     }
                 }
             }
         } else {
             $mangle = !is_null($model->{$part}) ? trim($this->mangle($model->{$part})) : NULL;
             if (!is_null($mangle)) {
                 $mangled[] = $mangle;
             }
         }
     }
     if (count($mangled) > 0) {
         $model->slug = implode('_', $mangled);
     }
 }
コード例 #3
0
ファイル: abstract_tbd.php プロジェクト: pdelbar/onethree
 /**
  * Get the value
  *
  * @param One_Model $model
  * @return Mixed
  */
 public function getValue($model)
 {
     if (!$model) {
         return null;
     }
     // pick up vars entered entered from an invalidly filled in form
     $session = One_Repository::getSession();
     $posted = $session->get('posted', 'OneFormErrors');
     if (!in_array($this->getCfg('one'), array('one', 'yes', 'true', '1')) && isset($posted['oneForm'][$this->getName()])) {
         return $posted['oneForm'][$this->getName()];
     } else {
         if (isset($posted[$this->getName()])) {
             return $posted[$this->getName()];
         } else {
             $role = $this->getCfg('role');
             if (!is_null($role) && $model instanceof One_Model) {
                 $parts = explode(':', $role);
                 $related = $model->getRelated($parts[1]);
                 $relation = One_Repository::getRelation($parts[0]);
                 $role = $relation->getRole($parts[1]);
                 $relScheme = One_Repository::getScheme($role->schemeName);
                 if ($related instanceof One_Model) {
                     return $related[$relScheme->getIdentityAttribute()->getName()];
                 } elseif (is_array($related)) {
                     // $related is an array of One_Models
                     $returnValues = array();
                     foreach ($related as $r) {
                         $returnValues[] = $r[$relScheme->getIdentityAttribute()->getName()];
                     }
                     return $returnValues;
                 }
             } else {
                 //PD16FEB10 : add option to pick this up from request
                 if ($this->getCfg('from') != "") {
                     list($source, $key) = preg_split("/:/", $this->getCfg('from'));
                     switch ($source) {
                         case 'request':
                             $from = $_REQUEST;
                             if (!in_array($this->getCfg('one'), array('one', 'yes', 'true', '1'))) {
                                 $from = $_REQUEST['oneForm'];
                             }
                             if (isset($from[$key])) {
                                 return $from[$key];
                             }
                             break;
                     }
                 }
                 if ($this->getCfg('novalue') != "novalue") {
                     return $model[$this->getOriginalName()];
                 }
             }
         }
     }
 }
コード例 #4
0
ファイル: relational_tbd.php プロジェクト: pdelbar/onethree
    /**
     * Render the output of the widget and add it to the DOM
     *
     * @param One_Model $model
     * @param One_Dom $d
     */
    protected function _render($model, One_Dom $d)
    {
        $this->setCfg('class', 'OneFieldDropdown ' . $this->getCfg('class'));
        // fetch all data to do with the relationship
        $parts = explode(':', $this->getCfg('role'));
        $related = $model->getRelated($parts[1]);
        $targetAttr = $this->getCfg('targetAttribute');
        $triggerOn = intval($this->getCfg('triggerOn')) > 0 ? intval($this->getCfg('triggerOn')) : 2;
        $scheme = $model->getScheme();
        $idAttr = $scheme->getIdentityAttribute()->getName();
        $link = $scheme->getLink($parts[1]);
        $relatedIDs = '';
        $options = array();
        if (is_array($related) && count($related) > 0) {
            $relatedIDArray = array();
            $idAttr = One_Repository::getScheme($link->getTarget())->getIdentityAttribute()->getName();
            $tparts = explode(':', $targetAttr);
            foreach ($related as $relate) {
                if (is_null($idAttr)) {
                    $scheme = $model->getScheme();
                    $idAttr = $scheme->getIdentityAttribute()->getName();
                }
                $value = $relate->{$idAttr};
                $shown = '';
                foreach ($tparts as $tpart) {
                    $shown .= $relate->{$tpart} . ' ';
                }
                $options[$value] = $shown;
                $relatedIDArray[] = $relate->{$idAttr};
            }
            $relatedIDs = implode('^,^', $relatedIDArray);
        }
        $data = array('id' => $this->getID(), 'name' => $this->getFormName(), 'events' => $this->getEventsAsString(), 'params' => $this->getParametersAsString(), 'required' => $this->isRequired() ? ' *' : '', 'value' => is_null($this->getValue($model)) ? $this->getDefault() : $this->getValue($model), 'options' => $options, 'onEmpty' => strtolower($this->getCfg('onEmpty')), 'triggerOn' => $triggerOn, 'scheme' => $scheme, 'link' => $link, 'targetAttr' => $targetAttr, 'modelID' => $model->{$idAttr}, 'relatedIDs' => $relatedIDs, 'info' => $this->getCfg('info'), 'error' => $this->getCfg('error'), 'class' => $this->getCfg('class'), 'label' => $this->getLabel(), 'lblLast' => $this->getCfg('lblLast'));
        //		$dom = new One_Dom(); // dom for head section
        //
        //		$head = '<script type="text/javascript" src="' . One::getInstance()->getUrl() . 'lib/libraries/js/featherajax.js"></script>';
        //		$dom->add( $head, '_head' );
        $head = '
			function setRelatedOptions( selfscheme, scheme, selfId, id, targetAttribute, phrase )
			{
				var self = "";
				if( selfscheme == scheme )
					self = "&selfId=" + selfId;
				var aj = new AjaxObject101();
				aj.sndReq( "post", "' . One_Config::getInstance()->getUrl() . '/lib/form/ajax/relational.php", "searchscheme=" + scheme + "&dd=f" + id + "&target=" + targetAttribute + "&phrase=" + phrase + self );
			}

			function addChosenOptions( id )
			{
				var dropdown = document.getElementById( "f" + id );
				var to       = document.getElementById( "t" + id );
				for( var i = 0; i < dropdown.length; i++ )
				{
					if( dropdown.options[i].selected == true )
					{
						var option = document.createElement("option");
						option.value = dropdown.options[i].value;
						option.innerHTML = dropdown.options[i].text;

						var found = false
						for( var j = 0; j < to.length; j++ )
						{
							if( option.value == to.options[j].value )
							{
								found = true;
								break;
							}
						}

						if( !found )
						{
							var hidden = document.getElementById( id );
							to.appendChild( option );

							if( hidden.value != "" )
								hidden.value = hidden.value + "^,^" + option.value;
							else
								hidden.value = option.value;
						}
					}
				}

			}

			function removeChosenOptions( id )
			{
				var to     = document.getElementById( "t" + id );
				var hidden = document.getElementById( id );

				for( var i = ( to.length - 1 ); i >= 0; i-- )
				{
					if( to.options[i].selected == true )
					{
						var pattern  = \'((\\^,\\^)?\' + to.options[i].value + \'(\\^,\\^)?)\';
						var test     = new RegExp( pattern, "gi" );
						/* @TODO There is probably an easier way to do this  */
						hidden.value = hidden.value.replace( test, "" );
						hidden.value = hidden.value.replace( /\\^,\\^\\^,\\^/gi, "^,^" );
						hidden.value = hidden.value.replace( /^\\^,\\^/gi, "" );
						hidden.value = hidden.value.replace( /\\^,\\^$/gi, "" );
						to.remove( i );
					}
				}
			}';
        //		$dom->add( $head, '_head' );
        One_Vendor::getInstance()->loadScript('js/featherajax.js', 200);
        One_Vendor::getInstance()->loadScriptDeclaration($head, 'head', 200);
        $content = $this->parse($model, $data);
        //		$d->addDom($dom);
        $d->addDom($content);
    }