/**
  * Override to support adding special tags
  * @param string $nodeId
  * @return array
  */
 public function getData($nodeId)
 {
     $data = parent::getData($nodeId);
     if ($nodeId == 'source') {
         $data[1] = $data[0];
         $data[0] = array('expanded' => false, 'text' => 'Special Tags');
         $data[0]['children'] = $this->resolveSpecialTagNodes();
     }
     return $data;
 }
 /**
  * @param integer $rowCount
  * @param WizardActiveForm $form
  * @return array
  */
 protected function renderItems(&$rowCount, WizardActiveForm $form)
 {
     assert('is_int($rowCount)');
     $items = array();
     $wizardFormClassName = $this->getWizardFormClassName();
     $treeType = ComponentForReportForm::TYPE_FILTERS;
     $trackableStructurePosition = false;
     //can we set this to false without jacking things up?
     $report = $this->params["relationModel"];
     if (null != ($stickyData = StickyReportUtil::getDataByKey($report->id))) {
         StickyReportUtil::resolveStickyDataToReport($report, $stickyData);
     }
     foreach ($report->getFilters() as $filterForReportForm) {
         if ($filterForReportForm->availableAtRunTime) {
             $nodeIdWithoutTreeType = $filterForReportForm->attributeIndexOrDerivedType;
             $inputPrefixData = ReportRelationsAndAttributesToTreeAdapter::resolveInputPrefixData($wizardFormClassName, $treeType, $rowCount);
             $adapter = new RuntimeReportAttributeToElementAdapter($inputPrefixData, $filterForReportForm, $form, $treeType);
             $view = new AttributeRowForReportComponentView($adapter, $rowCount, $inputPrefixData, ReportRelationsAndAttributesToTreeAdapter::resolveAttributeByNodeId($nodeIdWithoutTreeType), (bool) $trackableStructurePosition, false, null);
             $view->addWrapper = false;
             $items[] = array('content' => $view->render());
         }
         $rowCount++;
     }
     return $items;
 }
 public function actionRelationsAndAttributesTree($type, $treeType, $id = null, $nodeId = null, $isBeingCopied = false)
 {
     $postData = PostUtil::getData();
     $savedReport = null;
     $report = null;
     $this->resolveSavedReportAndReportByPostData($postData, $savedReport, $report, $type, $id, (bool) $isBeingCopied);
     if ($nodeId != null) {
         $reportToTreeAdapter = new ReportRelationsAndAttributesToTreeAdapter($report, $treeType);
         echo ZurmoTreeView::saveDataAsJson($reportToTreeAdapter->getData($nodeId));
         Yii::app()->end(0, false);
     }
     $view = new ReportRelationsAndAttributesTreeView($type, $treeType, 'edit-form');
     $content = $view->render();
     Yii::app()->getClientScript()->setToAjaxMode();
     Yii::app()->getClientScript()->render($content);
     echo $content;
 }
 /**
  * @depends testNextedGroupBys
  */
 public function testWhereNestedGroupBysAndGettingDataForOrderBy()
 {
     $report = new Report();
     $report->setType(Report::TYPE_SUMMATION);
     $groupBy = new GroupByForReportForm('ReportsTestModule', 'ReportModelTestItem', $report->getType());
     $groupBy->attributeIndexOrDerivedType = 'hasOne___name';
     $groupBy->axis = 'x';
     $report->addGroupBy($groupBy);
     $report->setModuleClassName('ReportsTestModule');
     $adapter = new ReportRelationsAndAttributesToTreeAdapter($report, ComponentForReportForm::TYPE_ORDER_BYS);
     $data = $adapter->getData(ComponentForReportForm::TYPE_ORDER_BYS . '_hasOne');
     $this->assertEquals('OrderBys_hasOne___name', $data[0]['id']);
     $this->assertEquals('OrderBys_hasOne___createdByUser', $data[1]['id']);
     $this->assertEquals('OrderBys_hasOne___hasMany3', $data[2]['id']);
     $this->assertEquals('OrderBys_hasOne___modifiedByUser', $data[3]['id']);
     $this->assertEquals('OrderBys_hasOne___owner', $data[4]['id']);
 }
 /**
  * Process attribute addition from tree and than renders it.
  *
  * @param string $nodeId
  * @param string $treeType
  * @param Report $report
  * @param int $rowNumber
  * @param bool $trackableStructurePosition
  */
 public static function processAttributeAdditionFromTree($nodeId, $treeType, Report $report, $rowNumber, $trackableStructurePosition)
 {
     $nodeIdWithoutTreeType = ReportRelationsAndAttributesToTreeAdapter::removeTreeTypeFromNodeId($nodeId, $treeType);
     $moduleClassName = $report->getModuleClassName();
     $modelClassName = $moduleClassName::getPrimaryModelName();
     $form = new WizardActiveForm();
     $form->id = 'edit-form';
     $form->enableAjaxValidation = true;
     //ensures error validation populates correctly
     $wizardFormClassName = ReportToWizardFormAdapter::getFormClassNameByType($report->getType());
     $model = ComponentForReportFormFactory::makeByComponentType($moduleClassName, $modelClassName, $report->getType(), $treeType);
     $form->modelClassNameForError = $wizardFormClassName;
     $attribute = ReportRelationsAndAttributesToTreeAdapter::resolveAttributeByNodeId($nodeIdWithoutTreeType);
     $model->attributeIndexOrDerivedType = ReportRelationsAndAttributesToTreeAdapter::resolveAttributeByNodeId($nodeIdWithoutTreeType);
     $inputPrefixData = ReportRelationsAndAttributesToTreeAdapter::resolveInputPrefixData($wizardFormClassName, $treeType, (int) $rowNumber);
     $adapter = new ReportAttributeToElementAdapter($inputPrefixData, $model, $form, $treeType);
     $view = new AttributeRowForReportComponentView($adapter, (int) $rowNumber, $inputPrefixData, $attribute, (bool) $trackableStructurePosition, true, $treeType);
     $content = $view->render();
     $form->renderAddAttributeErrorSettingsScript($view::getFormId());
     Yii::app()->getClientScript()->setToAjaxMode();
     Yii::app()->getClientScript()->render($content);
     echo $content;
 }
 /**
  * @param integer $rowCount
  * @param array $componentData
  * @param bool $trackableStructurePosition
  * @return array
  */
 protected function renderItems(&$rowCount, $componentData, $trackableStructurePosition = false)
 {
     assert('is_int($rowCount)');
     assert('is_array($componentData)');
     assert('is_bool($trackableStructurePosition)');
     $items = array();
     $wizardFormClassName = get_class($this->model);
     foreach ($componentData as $component) {
         $nodeIdWithoutTreeType = $component->attributeIndexOrDerivedType;
         $inputPrefixData = ReportRelationsAndAttributesToTreeAdapter::resolveInputPrefixData($wizardFormClassName, $this->getTreeType(), $rowCount);
         $adapter = new ReportAttributeToElementAdapter($inputPrefixData, $component, $this->form, $this->getTreeType());
         $view = new AttributeRowForReportComponentView($adapter, $rowCount, $inputPrefixData, ReportRelationsAndAttributesToTreeAdapter::resolveAttributeByNodeId($nodeIdWithoutTreeType), (bool) $trackableStructurePosition, true, static::getTreeType());
         $view->addWrapper = false;
         $items[] = array('content' => $view->render());
         $rowCount++;
     }
     return $items;
 }