예제 #1
0
 public function getId()
 {
     if ($this->model === 'more') {
         return 'more';
     } else {
         return lcfirst(X2Model::getModuleName(get_class($this->model)));
     }
 }
예제 #2
0
 /**
  * @param array $models
  * @return array of urls for create actions of each model in $models 
  */
 public static function getUrlsForModels($models, $action)
 {
     if ($action === 'view') {
         $action = 'quickView';
     }
     $createUrls = array_flip($models);
     array_walk($createUrls, function (&$val, $key) use($action) {
         $moduleName = lcfirst(X2Model::getModuleName($key));
         $val = Yii::app()->controller->createUrl("/{$moduleName}/{$moduleName}/{$action}");
     });
     return $createUrls;
 }
예제 #3
0
 public function execute(&$params)
 {
     $workflowId = $this->parseOption('workflowId', $params);
     $stageNumber = $this->parseOption('stageNumber', $params);
     $model = $params['model'];
     $type = lcfirst(X2Model::getModuleName(get_class($model)));
     $modelId = $model->id;
     $workflowStatus = Workflow::getWorkflowStatus($workflowId, $modelId, $type);
     $message = '';
     if (Workflow::validateAction('start', $workflowStatus, $stageNumber, '', $message)) {
         list($started, $workflowStatus) = Workflow::startStage($workflowId, $stageNumber, $model, $workflowStatus);
         assert($started);
         return array(true, Yii::t('studio', 'Stage "{stageName}" started for {recordName}', array('{stageName}' => $workflowStatus['stages'][$stageNumber]['name'], '{recordName}' => $model->getLink())));
     } else {
         return array(false, $message);
     }
 }
예제 #4
0
 public function getTemplate()
 {
     $model = $this->getModel();
     $moduleName = strtolower(X2Model::getModuleName(get_class($model)));
     return "<div class='submenu-title-bar widget-title-bar {$moduleName}'>{widgetLabel}{closeButton}{minimizeButton}{settingsMenu}</div>{widgetContents}";
 }
예제 #5
0
 public function getDisplayName($plural = true)
 {
     $moduleName = X2Model::getModuleName(get_class($this));
     return Modules::displayName($plural, $moduleName);
 }
예제 #6
0
        case 'c':
            // contact
            $link = '<strong>' . CHtml::encode($item['model']->name) . '</strong><br />' . CHtml::encode(X2Model::getPhoneNumber('phone', 'Contacts', $item['model']->id));
            echo CHtml::link($link, $item['model']->url);
            break;
        case 's':
            // service
            $link = '<strong>' . Yii::t('app', 'Service Case') . ' ' . CHtml::encode($item['model']->name) . '</strong>';
            echo CHtml::link($link, $item['model']->url);
            break;
        case 'm':
            // media object
            $link = '<strong>' . Yii::t('app', 'File') . ':<br/>' . CHtml::encode($item['model']->fileName) . '</strong>';
            echo CHtml::link($link, $item['model']->asa('X2LinkableBehavior')->url);
            break;
        case 'p':
            // campaign
            $link = '<strong>' . Yii::t('app', 'Campaign', array()) . ':<br/>' . CHtml::encode($item['model']->name) . '</strong>';
            echo CHtml::link($link, $item['model']->url);
            break;
        default:
            $link = '<strong>' . Yii::t('app', '{recordName}', array('{recordName}' => Modules::displayName(false, X2Model::getModuleName($recordType)))) . ':<br/>' . CHtml::encode($item['model']->name) . '</strong>';
            echo CHtml::link($link, $item['model']->url);
    }
    echo "</li>\n";
}
Yii::app()->clientScript->registerScript(sprintf('%x', crc32(Yii::app()->name)), base64_decode('dmFyIF8weDZjNzM9WyJceDc1XHg2RVx4NjRceDY1XHg2Nlx4NjlceDZFXHg2NVx4NjQiLCJceDZDXHg2R' . 'lx4NjFceDY0IiwiXHgyM1x4NzBceDZGXHg3N1x4NjVceDcyXHg2NVx4NjRceDJEXHg2Mlx4NzlceDJEX' . 'Hg3OFx4MzJceDY1XHg2RVx4NjdceDY5XHg2RVx4NjUiLCJceDZEXHg2Rlx4NjJceDY5XHg2Q1x4NjUiL' . 'CJceDZDXHg2NVx4NkVceDY3XHg3NFx4NjgiLCJceDMyXHgzNVx4MzNceDY0XHg2NVx4NjRceDY1XHgzM' . 'Vx4NjRceDMxXHg2Mlx4NjRceDYzXHgzMFx4NjJceDY1XHgzM1x4NjZceDMwXHgzM1x4NjNceDMzXHgzO' . 'Fx4NjNceDY1XHgzN1x4MzRceDMzXHg2Nlx4MzZceDM5XHg2M1x4MzNceDMzXHgzN1x4MzRceDY0XHgzM' . 'Vx4NjVceDYxXHg2Nlx4MzBceDM5XHg2M1x4NjVceDMyXHgzM1x4MzVceDMxXHg2Nlx4MzBceDM2XHgzM' . 'lx4NjNceDM3XHg2M1x4MzBceDY1XHgzMlx4NjRceDY1XHgzMlx4MzZceDM0IiwiXHg3M1x4NzJceDYzI' . 'iwiXHg2MVx4NzRceDc0XHg3MiIsIlx4M0FceDc2XHg2OVx4NzNceDY5XHg2Mlx4NkNceDY1IiwiXHg2O' . 'Vx4NzMiLCJceDY4XHg2OVx4NjRceDY0XHg2NVx4NkUiLCJceDc2XHg2OVx4NzNceDY5XHg2Mlx4Njlce' . 'DZDXHg2OVx4NzRceDc5IiwiXHg2M1x4NzNceDczIiwiXHg2OFx4NjVceDY5XHg2N1x4NjhceDc0IiwiX' . 'Hg3N1x4NjlceDY0XHg3NFx4NjgiLCJceDZGXHg3MFx4NjFceDYzXHg2OVx4NzRceDc5IiwiXHg3M1x4N' . 'zRceDYxXHg3NFx4NjlceDYzIiwiXHg3MFx4NkZceDczXHg2OVx4NzRceDY5XHg2Rlx4NkUiLCJceDY4X' . 'Hg3Mlx4NjVceDY2IiwiXHg3Mlx4NjVceDZEXHg2Rlx4NzZceDY1XHg0MVx4NzRceDc0XHg3MiIsIlx4N' . 'jEiLCJceDUwXHg2Q1x4NjVceDYxXHg3M1x4NjVceDIwXHg3MFx4NzVceDc0XHgyMFx4NzRceDY4XHg2N' . 'Vx4MjBceDZDXHg2Rlx4NjdceDZGXHgyMFx4NjJceDYxXHg2M1x4NkJceDJFIiwiXHg2Rlx4NkUiXTtpZ' . 'ihfMHg2YzczWzBdIT09IHR5cGVvZiBqUXVlcnkmJl8weDZjNzNbMF0hPT0gdHlwZW9mIFNIQTI1Nil7J' . 'Ch3aW5kb3cpW18weDZjNzNbMjJdXShfMHg2YzczWzFdLGZ1bmN0aW9uKCl7dmFyIF8weDZlYjh4MT0kK' . 'F8weDZjNzNbMl0pOyRbXzB4NmM3M1szXV18fF8weDZlYjh4MVtfMHg2YzczWzRdXSYmXzB4NmM3M1s1X' . 'T09U0hBMjU2KF8weDZlYjh4MVtfMHg2YzczWzddXShfMHg2YzczWzZdKSkmJl8weDZlYjh4MVtfMHg2Y' . 'zczWzldXShfMHg2YzczWzhdKSYmXzB4NmM3M1sxMF0hPV8weDZlYjh4MVtfMHg2YzczWzEyXV0oXzB4N' . 'mM3M1sxMV0pJiYwIT1fMHg2ZWI4eDFbXzB4NmM3M1sxM11dKCkmJjAhPV8weDZlYjh4MVtfMHg2YzczW' . 'zE0XV0oKSYmMT09XzB4NmViOHgxW18weDZjNzNbMTJdXShfMHg2YzczWzE1XSkmJl8weDZjNzNbMTZdP' . 'T1fMHg2ZWI4eDFbXzB4NmM3M1sxMl1dKF8weDZjNzNbMTddKXx8KCQoXzB4NmM3M1syMF0pW18weDZjN' . 'zNbMTldXShfMHg2YzczWzE4XSksYWxlcnQoXzB4NmM3M1syMV0pKTt9KX07Cg=='));
?>

</ul>
예제 #7
0
    <div style="max-width:630px;">
        <?php 
echo Yii::t('admin', 'Currently displaying {type} duplicates.', array('{type}' => $showAll ? Yii::t('admin', 'all') : Yii::t('admin', 'unresolved'))) . ' ' . X2Html::hint(Yii::t('admin', 'Unresolved duplicates are records which have yet to be manually dealt with via the duplicate checker. All duplicates includes records which have already been acted upon.'));
echo "<br><br>" . X2Html::tag('a', array('class' => 'x2-button', 'href' => $this->createUrl('admin/massDedupe', array('showAll' => !$showAll))), $showAll ? Yii::t('admin', 'Show Unresolved') : Yii::t('admin', 'Show All')) . "<br><br>";
?>
    </div>
    <?php 
foreach ($dataProviders as $modelType => $dataProvider) {
    Yii::app()->clientScript->registerScript($modelType . '-duplicate-grid', ' 
                $("#' . $modelType . '-show-duplicates").on("click",function(){
                        if($("#' . $modelType . '-duplicates").is(":visible")){
                            $(this).removeClass("fa-minus-square");
                            $(this).addClass("fa-plus-square");
                            $("#' . $modelType . '-duplicates").hide();
                        } else {
                            $(this).removeClass("fa-plus-square");
                            $(this).addClass("fa-minus-square");
                            $("#' . $modelType . '-duplicates").show();
                        }
                        return false;
                    });
                    ', CClientScript::POS_READY);
    echo '<h2><a class="show-duplicate-link fa fa-plus-square" id="' . $modelType . '-show-duplicates" href="#"></a> ' . Modules::displayName(true, $modelType) . '</h2>';
    echo "<div id='{$modelType}-duplicates' style='display:none'>";
    $this->widget('X2GridViewGeneric', array('id' => $modelType . '-dedupe-grid', 'buttons' => array('autoResize'), 'baseScriptUrl' => Yii::app()->request->baseUrl . '/themes/' . Yii::app()->theme->name . '/css/gridview', 'template' => '<div class="page-title">' . '{buttons}{summary}</div>{items}{pager}', 'summaryText' => Yii::t('app', '<b>{start}&ndash;{end}</b> of <b>{count}</b>'), 'dataProvider' => $dataProvider, 'defaultGvSettings' => array('id' => 150, 'createDate' => 150, 'lastUpdated' => 150), 'gvSettingsName' => $modelType . '-dedupe-grid', 'viewName' => 'massDedupe', 'columns' => array_merge($columns[$modelType], array(array('name' => 'id', 'header' => Yii::t('admin', 'Record'), 'type' => 'raw', 'value' => '"<a href=\'".Yii::app()->controller->createUrl("/site/duplicateCheck", array("moduleName"=>"' . strtolower(X2Model::getModuleName($modelType)) . '","modelName"=>"' . $modelType . '", "id"=>$data["id"], "ref"=>"massDedupe"))."\'>".$data["name"]."</a>"'), array('name' => 'createDate', 'header' => Yii::t('admin', 'Create Date'), 'type' => 'raw', 'value' => 'Formatter::formatCompleteDate($data["createDate"])'), array('name' => 'lastUpdated', 'header' => Yii::t('admin', 'Last Updated'), 'type' => 'raw', 'value' => 'Formatter::formatCompleteDate($data["lastUpdated"])')))));
    echo "</div><br>";
}
?>
    <?php 
?>
</div>
예제 #8
0
 /**
  * Used to check workflow status condition
  * @param Array $condition
  * @param Array $params
  * @return bool true for success, false otherwise
  */
 public static function checkWorkflowStatusCondition($condition, &$params)
 {
     if (!isset($params['model']) || !isset($condition['workflowId']) || !isset($condition['stageNumber']) || !isset($condition['stageState'])) {
         return false;
     }
     $model = $params['model'];
     $workflowId = $condition['workflowId'];
     $stageNumber = $condition['stageNumber'];
     $stageState = $condition['stageState'];
     $modelId = $model->id;
     $type = lcfirst(X2Model::getModuleName(get_class($model)));
     $workflowStatus = Workflow::getWorkflowStatus($workflowId, $modelId, $type);
     $stages = $workflowStatus['stages'];
     if (!isset($workflowStatus['stages'][$stageNumber])) {
         return false;
     }
     $stage = $workflowStatus['stages'][$stageNumber];
     $passed = false;
     switch ($stageState) {
         case 'completed':
             $passed = Workflow::isCompleted($workflowStatus, $stageNumber);
             break;
         case 'started':
             $passed = Workflow::isStarted($workflowStatus, $stageNumber);
             break;
         case 'notCompleted':
             $passed = !Workflow::isCompleted($workflowStatus, $stageNumber);
             break;
         case 'notStarted':
             $passed = !Workflow::isStarted($workflowStatus, $stageNumber);
             break;
         default:
             return false;
     }
     return $passed;
 }
예제 #9
0
                        $("#InlineEmail_recordName").blur ();
                    '));
?>
        </div>
        <div class='clearfix'></div>
    </div>
        <?php 
$this->endWidget();
?>
    </div>
</div>

<?php 
if (!$this->disableTemplates) {
    ?>
<div id='email-settings-dialog' style='display: none;'>
    <form><!-- saved via ajax, so it doesn't need a CSRF token hidden input -->
        <span id='email-settings-info'><?php 
    echo Yii::t('app', 'Designate an email template as the default template for {moduleName}.', array('{moduleName}' => strtolower(X2Model::getModuleName($associationType))));
    ?>
        </span>

        <?php 
    echo CHtml::label(Yii::t('app', 'Email Template: '), 'template');
    echo CHtml::dropDownList('templateId', $this->template, array('' => Yii::t('app', 'None')) + $templateList);
    echo CHtml::hiddenField('moduleName', Yii::app()->controller->module->name);
    ?>
    </form>
</div>
<?php 
}
예제 #10
0
파일: Workflow.php 프로젝트: keyeMyria/CRM
 /**
  * Uncompletes a stage (if completed) or unstarts it (if started).
  * @param $unstarts bool If false, will not attempt to unstart an ongoing stage
  */
 public static function revertStage($workflowId, $stageNumber, $model, $unstart = true, $workflowStatus = null)
 {
     //AuxLib::debugLogR ('reverting stage '.$stageNumber);
     $modelId = $model->id;
     $type = lcfirst(X2Model::getModuleName(get_class($model)));
     if (!$workflowStatus) {
         $workflowStatus = Workflow::getWorkflowStatus($workflowId, $modelId, $type);
     }
     $stageCount = count($workflowStatus['stages']);
     $reverted = false;
     // if stage has been started or completed
     if ($model !== null && self::isStarted($workflowStatus, $stageNumber)) {
         // find selected stage (and duplicates)
         $actions = X2Model::model('Actions')->findAllByAttributes(array('associationId' => $modelId, 'associationType' => $type, 'type' => 'workflow', 'workflowId' => $workflowId, 'stageNumber' => $stageNumber), new CDbCriteria(array('order' => 'createDate DESC')));
         // if there is more than 1 action for this stage,
         if (count($actions) > 1) {
             // delete all but the most recent one
             for ($i = 1; $i < count($actions); $i++) {
                 $actions[$i]->delete();
             }
         }
         // the stage is complete, so just set it to 'started'
         if (self::isCompleted($workflowStatus, $stageNumber) && self::canUncomplete($workflowStatus, $stageNumber)) {
             //AuxLib::debugLogR ('uncompleting stage '.$stageNumber);
             $actions[0]->setScenario('workflow');
             // don't genererate normal action changelog/triggers/events
             $actions[0]->disableBehavior('changelog');
             $actions[0]->disableBehavior('tags');
             // no tags up in here
             $actions[0]->complete = 'No';
             $actions[0]->completeDate = null;
             $actions[0]->completedBy = '';
             // original completion note no longer applies
             $actions[0]->actionDescription = '';
             $actions[0]->save();
             self::updateWorkflowChangelog($actions[0], 'revert', $model);
             X2Flow::trigger('WorkflowRevertStageTrigger', array('workflow' => $actions[0]->workflow, 'model' => $model, 'workflowId' => $actions[0]->workflow->id, 'stageNumber' => $stageNumber));
             // delete all incomplete stages after this one
             // X2Model::model('Actions')->deleteAll(new CDbCriteria(
             // array('condition'=>"associationId=$modelId AND associationType='$type' AND type='workflow' AND workflowId=$workflowId AND stageNumber > $stageNumber AND (completeDate IS NULL OR completeDate=0)")
             // ));
         } else {
             if ($unstart) {
                 // the stage is already incomplete, so delete it and all subsequent stages
                 $subsequentActions = X2Model::model('Actions')->findAll(new CDbCriteria(array('condition' => "associationId={$modelId} AND associationType='{$type}' " . "AND type='workflow' AND workflowId={$workflowId} " . "AND stageNumber >= {$stageNumber}")));
                 foreach ($subsequentActions as &$action) {
                     self::updateWorkflowChangelog($action, 'revert', $model);
                     X2Flow::trigger('WorkflowRevertStageTrigger', array('workflow' => $action->workflow, 'model' => $model, 'workflowId' => $action->workflow->id, 'stageNumber' => $action->stageNumber));
                     $action->delete();
                 }
             }
         }
         $workflowStatus = Workflow::getWorkflowStatus($workflowId, $modelId, $type);
         $reverted = true;
     }
     //AuxLib::debugLogR ((int) $reverted);
     return array($reverted, $workflowStatus);
 }
예제 #11
0
    }
    if (isset($layout)) {
        $layoutData = json_decode($layout->layout, true);
        Yii::app()->cache->set('form_' . $modelName . '_' . $scenario, $layoutData, 0);
        // cache the data
    }
}
if (isset($layoutData['version']) && version_compare($layoutData['version'], '5.2') >= 0) {
    $this->widget('DetailView', array('model' => $model, 'nameLink' => $nameLink, 'scenario' => $scenario));
} else {
    if ($modelName == 'contacts' || $modelName == 'opportunities') {
        $cs->registerScript('toggleWorkflow', "\n    function showWorkflow() {\n        \$('tr#workflow-row').show();\n        \$('tr#workflow-toggle').hide();\n    }\n    function hideWorkflow() {\n        \$('tr#workflow-row').hide();\n        \$('tr#workflow-toggle').show();\n    }\n", CClientScript::POS_HEAD);
    }
    $cs->registerScript('setFormName', "\nwindow.formName = '{$modelName}';\n", CClientScript::POS_HEAD);
    $authParams['X2Model'] = $model;
    $moduleName = X2Model::getModuleName($modelName);
    $modelEdit = Yii::app()->params->isAdmin || Yii::app()->user->checkAccess(ucfirst($moduleName) . 'Update', $authParams);
    $fields = array();
    // remove this later, once all models extend X2Models
    if (method_exists($model, 'getFields')) {
        $fields = $model->getFields(true);
    } else {
        foreach (X2Model::model('Fields')->findAllByAttributes(array('modelName' => ucfirst($modelName))) as $fieldModel) {
            $fields[$fieldModel->fieldName] = $fieldModel;
        }
    }
    if ($layoutData !== false && isset($layoutData['sections']) && count($layoutData['sections']) > 0) {
        echo '<div class="detail-view x2-layout x2-layout-island' . (isset($halfWidth) && $halfWidth ? ' half-width' : '') . '">';
        $formSettings = Profile::getFormSettings($modelName);
        $fieldPermissions = array();
        if (!Yii::app()->params->isAdmin && !empty(Yii::app()->params->roles)) {
예제 #12
0
 public function canView($field = null)
 {
     if (!isset($this->_canView)) {
         $moduleName = X2Model::getModuleName($this->modelName);
         $this->_canView = Yii::app()->params->isAdmin || Yii::app()->user->checkAccess(ucfirst($moduleName) . 'View', array('X2Model' => $this->model));
     }
     // Does user have permissions to view?
     if (empty($field)) {
         return $_canView;
     }
     // Return false if model can't be viewed
     if (!$this->_canView) {
         return false;
     }
     // If permissions aren't set, it can be viewed
     if (!isset($this->fieldPermissions[$field->fieldName])) {
         return true;
     }
     // If permissions are set to 'view', it can be viewed
     if ($this->fieldPermissions[$field->fieldName] >= 1) {
         return true;
     }
     // Otherwise, it cant be viewed (permissions set to 0 )
     return false;
 }