예제 #1
0
 public function getJSClassParams()
 {
     if (!isset($this->_JSClassParams)) {
         $title = X2Model::getModelTitle(get_class($this->model), true);
         $targetClass = $this->targetClass;
         $behavior = $this->model->asa('X2ModelConversionBehavior');
         $conversionFailed = $behavior->conversionFailed && $behavior->errorModel !== null && get_class($behavior->errorModel) === $this->targetClass;
         $this->_JSClassParams = array_merge(parent::getJSClassParams(), array('buttonSelector' => $this->buttonSelector, 'translations' => array('conversionError' => Yii::t('app', '{model} conversion failed.', array('{model}' => $title)), 'conversionWarning' => Yii::t('app', '{model} Conversion Warning', array('{model}' => $title)), 'convertAnyway' => Yii::t('app', 'Convert Anyway'), 'Cancel' => Yii::t('app', 'Cancel')), 'targetClass' => $this->targetClass, 'modelId' => $this->model->id, 'conversionFailed' => $conversionFailed, 'conversionIncompatibilityWarnings' => $this->model->getConversionIncompatibilityWarnings($this->targetClass), 'errorSummary' => $conversionFailed ? "<div class='form'>" . CHtml::errorSummary($this->model->asa('X2ModelConversionBehavior')->errorModel, Yii::t('app', '{model} conversion failed.', array('{model}' => $title))) . "</div>" : ''));
     }
     return $this->_JSClassParams;
 }
예제 #2
0
 /**
  * Echo out a series of inputs for a role editor page.
  *
  * This method is called via AJAX from the "Edit Role" portion of the "Manage Roles"
  * page.  Upon selection of a role in the dropdown on that page, this method
  * finds all relevant information about the role and echoes it back as a form
  * to allow for editing of the role.
  */
 public function actionGetRole()
 {
     $output = "";
     $roleInput = FilterUtil::filterArrayInput($_POST, 'Roles');
     if (!empty($roleInput)) {
         $roleName = isset($roleInput['name']) ? filter_var($roleInput['name'], FILTER_SANITIZE_STRING) : '';
         $role = Roles::model()->findByAttributes(array('name' => $roleName));
         if (isset($role)) {
             $usernames = Yii::app()->db->createCommand()->select('a.username')->from('x2_users a')->join('x2_role_to_user b', 'a.id=b.userId')->where('b.roleId=:roleId AND b.type="user"', array(':roleId' => $role->id))->queryColumn();
             $groupIds = Yii::app()->db->createCommand()->select('a.id')->from('x2_groups a')->join('x2_role_to_user b', 'a.id=b.userId')->where('b.roleId=:roleId AND b.type="group"', array(':roleId' => $role->id))->queryColumn();
             $selected = array_merge($usernames, $groupIds);
             $allUsers = X2Model::getAssignmentOptions(false, true, false);
             unset($allUsers['admin']);
             $sliderId = 'editTimeoutSlider';
             $textfieldId = 'editTimeout';
             if (isset($_GET['mode']) && in_array($_GET['mode'], array('edit', 'exception'))) {
                 // Handle whether this was called from editRole or roleException, they
                 // need different IDs to work on the same page.
                 $sliderId .= "-" . $_GET['mode'];
                 $textfieldId .= "-" . $_GET['mode'];
             }
             $timeoutSet = $role->timeout !== null;
             $output .= "\n                    <div class='row' id='set-session-timeout-row'>\n                    <input id='set-session-timeout' type='checkbox' class='left' " . ($timeoutSet ? 'checked="checked"' : '') . ">\n                    <label>" . Yii::t('admin', 'Enable Session Timeout') . "</label>\n                    </div>\n                ";
             $output .= "<div id='timeout-row' class='row' " . ($timeoutSet ? '' : "style='display: none;'") . ">";
             $output .= Yii::t('admin', 'Set role session expiration time (in minutes).');
             $output .= "<br />";
             $output .= $this->widget('zii.widgets.jui.CJuiSlider', array('value' => $role->timeout / 60, 'options' => array('min' => 5, 'max' => 1440, 'step' => 5, 'change' => "js:function(event,ui) {\n                                        \$('#" . $textfieldId . "').val(ui.value);\n                                        \$('#save-button').addClass('highlight');\n                                    }", 'slide' => "js:function(event,ui) {\n                                        \$('#" . $textfieldId . "').val(ui.value);\n                                    }"), 'htmlOptions' => array('style' => 'width:340px;margin:10px 9px;', 'id' => $sliderId)), true);
             $output .= CHtml::activeTextField($role, 'timeout', array('id' => $textfieldId, 'disabled' => $role->timeout !== null ? '' : 'disabled'));
             $output .= "</div>";
             Yii::app()->clientScript->registerScript('timeoutScript', "\n                    \$('#set-session-timeout').change (function () {\n                        if (\$(this).is (':checked')) {\n                            \$('#timeout-row').slideDown ();\n                            \$('#" . $textfieldId . "').removeAttr ('disabled');\n                        } else {\n                            \$('#timeout-row').slideUp ();\n                            \$('#" . $textfieldId . "').attr ('disabled', 'disabled');\n                        }\n                    });\n                    \$('#" . $textfieldId . "').val( \$('#" . $sliderId . "').slider('value') );\n                ", CClientScript::POS_READY);
             $output .= "<script>";
             $output .= Yii::app()->clientScript->echoScripts(true);
             $output .= "</script>";
             $output .= "<div id='users'><label>Users</label>";
             $output .= CHtml::dropDownList('users[]', $selected, $allUsers, array('class' => 'multiselect', 'multiple' => 'multiple', 'size' => 8));
             $output .= "</div>";
             $fields = Fields::getFieldsOfModelsWithFieldLevelPermissions();
             $fieldIds = array_flip(array_map(function ($field) {
                 return $field->id;
             }, $fields));
             $viewSelected = array();
             $editSelected = array();
             $fieldUnselected = array();
             $fieldPerms = RoleToPermission::model()->findAllByAttributes(array('roleId' => $role->id));
             foreach ($fieldPerms as $perm) {
                 if (!isset($fieldIds[$perm->fieldId])) {
                     continue;
                 }
                 if ($perm->permission == 2) {
                     $viewSelected[] = $perm->fieldId;
                     $editSelected[] = $perm->fieldId;
                 } else {
                     if ($perm->permission == 1) {
                         $viewSelected[] = $perm->fieldId;
                     }
                 }
             }
             foreach ($fields as $field) {
                 $fieldUnselected[$field->id] = X2Model::getModelTitle($field->modelName) . " - " . $field->attributeLabel;
             }
             assert(count($fieldUnselected) === count(array_unique(array_keys($fieldUnselected))));
             $output .= "<br /><label>View Permissions</label>";
             $output .= CHtml::dropDownList('viewPermissions[]', $viewSelected, $fieldUnselected, array('class' => 'multiselect', 'multiple' => 'multiple', 'size' => 8, 'id' => 'edit-role-field-view-permissions'));
             $output .= "<br /><label>Edit Permissions</label>";
             $output .= CHtml::dropDownList('editPermissions[]', $editSelected, $fieldUnselected, array('class' => 'multiselect', 'multiple' => 'multiple', 'size' => 8, 'id' => 'edit-role-field-edit-permissions'));
         }
     }
     echo $output;
 }
예제 #3
0
 * You can contact X2Engine, Inc. P.O. Box 66752, Scotts Valley,
 * California 95067, USA. or at email address contact@x2engine.com.
 * 
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU Affero General Public License version 3.
 * 
 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
 * these Appropriate Legal Notices must retain the display of the "Powered by
 * X2Engine" logo. If the display of the logo is not reasonably feasible for
 * technical reasons, the Appropriate Legal Notices must display the words
 * "Powered by X2Engine".
 *****************************************************************************************/
?>
<div class="page-title"><h2><?php 
echo Yii::t('admin', 'Import {model} from Template', array('{model}' => empty($model) ? "" : X2Model::getModelTitle($model)));
?>
</h2></div>
<div class="form">

<?php 
if (!empty($errors)) {
    echo "<span class='error' style='font-weight:bold'>" . Yii::t('admin', $errors) . "</span>";
    unset($_SESSION['errors']);
}
?>

<?php 
if (!empty($model)) {
    ?>
    <div id="info-box" style="width:600px;">
예제 #4
0
 public function getRelatedModelName()
 {
     if (!isset($this->_relatedModelType)) {
         if (!isset($this->relatedModel)) {
             return $this->_relatedModelType = null;
         }
         $title = Yii::app()->db->createCommand()->select("title")->from("x2_modules")->where("name = :name AND custom = 1")->bindValues(array(":name" => get_class($this->relatedModel)))->queryScalar();
         if ($title) {
             $this->_relatedModelType = $title;
         } else {
             $this->_relatedModelType = X2Model::getModelTitle(get_class($this->relatedModel));
         }
     }
     return $this->_relatedModelType;
 }
예제 #5
0
}
?>
</div>
<div id="prep-status-box">

</div>
<br />
<div id="status-box">

</div>
<div id="failures-box">

<div id="continue-box" style="display:none;">
<br />
<?php 
echo CHtml::link(Yii::t('admin', 'Import more {records}', array('{records}' => X2Model::getModelTitle($model))), 'importModels?model=' . $model, array('class' => 'x2-button'));
echo CHtml::link(Yii::t('admin', 'Import to another module'), 'importModels', array('class' => 'x2-button'));
echo CHtml::link(Yii::t('admin', 'Rollback Import'), array('rollbackImport', 'importId' => $_SESSION['importId']), array('class' => 'x2-button', 'id' => 'revert-btn', 'style' => 'display:none;'));
?>
</div>
<script>
    $(function() {
        // Hide the import map box if a mapping was uploaded
        if (<?php 
echo $preselectedMap ? 'true' : 'false';
?>
)
            $('#super-import-map-box').hide();
    });
    
    var attributeLabels = <?php 
예제 #6
0
파일: X2Model.php 프로젝트: keyeMyria/CRM
 /**
  * Returns all possible models, either as a regular array or associative
  * (key and value are the same)
  * @param boolean $assoc
  * @return array
  */
 public static function getModelTypes($assoc = false)
 {
     $modelTypes = Yii::app()->db->createCommand()->selectDistinct('modelName')->from('x2_fields')->where('modelName!="Calendar"')->order('modelName ASC')->queryColumn();
     if ($assoc === true) {
         return array_combine($modelTypes, array_map(function ($term) {
             return Yii::t('app', X2Model::getModelTitle($term));
         }, $modelTypes));
     }
     $modelTypes = array_map(function ($term) {
         return Yii::t('app', $term);
     }, $modelTypes);
     return $modelTypes;
 }
예제 #7
0
 /**
  * Echo out a series of inputs for a role editor page.
  *
  * This method is called via AJAX from the "Edit Role" portion of the "Manage Roles"
  * page.  Upon selection of a role in the dropdown on that page, this method
  * finds all relevant information about the role and echoes it back as a form
  * to allow for editing of the role.
  */
 public function actionGetRole()
 {
     if (isset($_POST['Roles'])) {
         $id = $_POST['Roles']['name'];
         $role = Roles::model()->findByAttributes(array('name' => $id));
         if (!$role) {
             echo "";
             exit;
         }
         $id = $role->id;
         $roles = RoleToUser::model()->findAllByAttributes(array('roleId' => $id));
         $users = array();
         foreach ($roles as $link) {
             if ($link->type == 'user') {
                 $user = User::model()->findByPk($link->userId);
                 if (isset($user)) {
                     $users[] = $user->username;
                 }
             } else {
                 $group = Groups::model()->findByPk($link->userId);
                 if (isset($group)) {
                     $users[] = $group->id;
                 }
             }
             /* end x2temp */
         }
         $allUsers = User::model()->findAll('status="1"');
         $selected = array();
         $unselected = array();
         foreach ($users as $user) {
             $selected[] = $user;
         }
         foreach ($allUsers as $user) {
             $unselected[CHtml::encode($user->username)] = CHtml::encode($user->firstName . " " . $user->lastName);
         }
         /* x2temp */
         $groups = Groups::model()->findAll();
         foreach ($groups as $group) {
             $unselected[$group->id] = CHtml::encode($group->name);
         }
         /* end x2temp */
         unset($unselected['admin']);
         $sliderId = 'editTimeoutSlider';
         $textfieldId = 'editTimeout';
         if (isset($_GET['mode']) && in_array($_GET['mode'], array('edit', 'exception'))) {
             // Handle whether this was called from editRole or roleException, they
             // need different IDs to work on the same page.
             $sliderId .= "-" . $_GET['mode'];
             $textfieldId .= "-" . $_GET['mode'];
         }
         $timeoutSet = $role->timeout !== null;
         echo "\n                <div class='row' id='set-session-timeout-row'>\n                <input id='set-session-timeout' type='checkbox' class='left' " . ($timeoutSet ? 'checked="checked"' : '') . ">\n                <label>" . Yii::t('admin', 'Enable Session Timeout') . "</label>\n                </div>\n            ";
         echo "<div id='timeout-row' class='row' " . ($timeoutSet ? '' : "style='display: none;'") . ">";
         echo Yii::t('admin', 'Set role session expiration time (in minutes).');
         echo "<br />";
         $this->widget('zii.widgets.jui.CJuiSlider', array('value' => $role->timeout / 60, 'options' => array('min' => 5, 'max' => 1440, 'step' => 5, 'change' => "js:function(event,ui) {\n                                    \$('#" . $textfieldId . "').val(ui.value);\n                                    \$('#save-button').addClass('highlight');\n                                }", 'slide' => "js:function(event,ui) {\n                                    \$('#" . $textfieldId . "').val(ui.value);\n                                }"), 'htmlOptions' => array('style' => 'width:340px;margin:10px 9px;', 'id' => $sliderId)));
         echo CHtml::activeTextField($role, 'timeout', array('id' => $textfieldId, 'disabled' => $role->timeout !== null ? '' : 'disabled'));
         echo "</div>";
         Yii::app()->clientScript->registerScript('timeoutScript', "\n                \$('#set-session-timeout').change (function () {\n                    if (\$(this).is (':checked')) {\n                        \$('#timeout-row').slideDown ();\n                        \$('#" . $textfieldId . "').removeAttr ('disabled');\n                    } else {\n                        \$('#timeout-row').slideUp ();\n                        \$('#" . $textfieldId . "').attr ('disabled', 'disabled');\n                    }\n                });\n                \$('#" . $textfieldId . "').val( \$('#" . $sliderId . "').slider('value') );\n            ", CClientScript::POS_READY);
         echo "<script>";
         Yii::app()->clientScript->echoScripts();
         echo "</script>";
         echo "<div id='users'><label>Users</label>";
         echo CHtml::dropDownList('users[]', $selected, $unselected, array('class' => 'multiselect', 'multiple' => 'multiple', 'size' => 8));
         echo "</div>";
         $fields = Fields::model()->findAllBySql("SELECT * FROM x2_fields ORDER BY modelName ASC");
         $viewSelected = array();
         $editSelected = array();
         $fieldUnselected = array();
         $fieldPerms = RoleToPermission::model()->findAllByAttributes(array('roleId' => $role->id));
         foreach ($fieldPerms as $perm) {
             if ($perm->permission == 2) {
                 $viewSelected[] = $perm->fieldId;
                 $editSelected[] = $perm->fieldId;
             } else {
                 if ($perm->permission == 1) {
                     $viewSelected[] = $perm->fieldId;
                 }
             }
         }
         foreach ($fields as $field) {
             $fieldUnselected[$field->id] = X2Model::getModelTitle($field->modelName) . " - " . $field->attributeLabel;
         }
         echo "<br /><label>View Permissions</label>";
         echo CHtml::dropDownList('viewPermissions[]', $viewSelected, $fieldUnselected, array('class' => 'multiselect', 'multiple' => 'multiple', 'size' => 8));
         echo "<br /><label>Edit Permissions</label>";
         echo CHtml::dropDownList('editPermissions[]', $editSelected, $fieldUnselected, array('class' => 'multiselect', 'multiple' => 'multiple', 'size' => 8));
     }
 }
예제 #8
0
//Yii::app()->clientScript->registerCssFile(Yii::app()->getBaseUrl().'/js/multiselect/css/ui.multiselect.css','screen, projection');
//Yii::app()->clientScript->registerCss('multiselectCss',"
//.multiselect {
//	width: 460px;
//	height: 200px;
//}
//#switcher {
//	margin-top: 20px;
//}
//",'screen, projection');
Yii::app()->clientScript->registerScript('renderMultiSelect', "\n\$(document).ready(function() {\n\t \$('.multiselect').multiselect();\n});\n", CClientScript::POS_HEAD);
$selected = array();
$unselected = array();
$fields = Fields::model()->findAllBySql("SELECT * FROM x2_fields ORDER BY modelName ASC");
foreach ($fields as $field) {
    $unselected[$field->id] = X2Model::getModelTitle($field->modelName) . " - " . $field->attributeLabel;
}
$users = User::getNames();
unset($users['']);
unset($users['Anyone']);
unset($users['admin']);
$users = array_map(array('CHtml', 'encode'), $users);
/* x2temp */
$groups = Groups::model()->findAll();
foreach ($groups as $group) {
    $users[$group->id] = CHtml::encode($group->name);
}
/* end x2temp */
?>
<div class="page-title rounded-top"><h2><?php 
echo Yii::t('admin', 'Add Role');
예제 #9
0
 public function run()
 {
     $this->registerPackages();
     $this->instantiateJSClass();
     $this->render('application.components.views._x2ModelConversionWidget', array('modelTitle' => lcfirst(X2Model::getModelTitle(get_class($this->model), true)), 'targetModelTitle' => lcfirst(X2Model::getModelTitle($this->targetClass, true))));
 }
예제 #10
0
 /**
  * Renders error summary containing compatibility warnings 
  * @return string
  */
 public function errorSummary($targetModelClass, $convertMultiple = false)
 {
     $sourceModelClass = get_class($this->owner);
     $sourceModelTitle = X2Model::getModelTitle($sourceModelClass, true);
     $targetModelTitle = X2Model::getModelTitle($targetModelClass, true);
     $sourceModelTitlePlural = X2Model::getModelTitle($sourceModelClass, false);
     $targetModelTitlePlural = X2Model::getModelTitle($targetModelClass, false);
     $html = '<p>';
     $html .= CHtml::encode(!$convertMultiple ? Yii::t('app', 'Converting this {model} to {article} {targetModel} could result in data 
             from your {model} being lost. ' . 'The following field incompatibilities have been detected: ', array('{model}' => $sourceModelTitle, '{targetModel}' => $targetModelTitle, '{article}' => preg_match('/^[aeiouAEIOU]/', $targetModelTitle) ? 'an' : 'a')) : Yii::t('app', 'Converting these {model} to {targetModel} could result in data 
             from your {model} being lost. ' . 'The following field incompatibilities have been detected: ', array('{model}' => $sourceModelTitlePlural, '{targetModel}' => $targetModelTitlePlural)));
     $html .= "\n        </p>\n        <ul class='errorSummary'>\n        ";
     foreach ($this->owner->getConversionIncompatibilityWarnings($targetModelClass) as $message) {
         $html .= '<li>' . CHtml::encode($message) . '</li>';
     }
     $html .= "\n        </ul>\n        <p>\n        ";
     $html .= CHtml::encode(Yii::t('app', 'To resolve these incompatibilities, make sure that every ' . '{model} field has a corresponding {targetModel} field of the same name and type.', array('{model}' => $sourceModelTitlePlural, '{targetModel}' => $targetModelTitlePlural)));
     $html .= '</p>';
     return $html;
 }
예제 #11
0
 /**
  * @return <array of strings> Incompatibility warnings to be presented to the user before
  *  they convert this model to the target model.
  */
 public function getConversionIncompatibilityWarnings($targetClass)
 {
     $warnings = array();
     $targetModel = $targetClass::model();
     $attributeNames = $this->mapFields($this->owner->attributeNames(), $targetClass);
     $leadsAttrs = array_diff($attributeNames, $targetClass::model()->attributeNames());
     $fieldMap = $this->getFieldMap($targetClass, true);
     // look for fields which aren't in the target model
     foreach ($leadsAttrs as $name) {
         $name = isset($fieldMap[$name]) ? $fieldMap[$name] : $name;
         // if field isn't set, there's no risk of data loss
         if (!isset($this->owner->{$name})) {
             continue;
         }
         $warnings[] = Yii::t('app', 'A field {fieldName} is in Leads but not in {targetModel}.', array('{fieldName}' => $name, '{targetModel}' => X2Model::getModelTitle($targetClass)));
     }
     // look for type mismatches
     $sharedAttrs = array_intersect($attributeNames, $targetModel->attributeNames());
     foreach ($sharedAttrs as $name) {
         $originalName = $name;
         $name = isset($fieldMap[$name]) ? $fieldMap[$name] : $name;
         $leadField = $this->owner->getField($name);
         $targetModelField = $targetModel->getField($name);
         if (!$leadField instanceof Fields || !$targetModelField instanceof Fields) {
             continue;
         }
         if ($leadField->type !== $targetModelField->type) {
             if (isset($fieldMap[$originalName])) {
                 $warnings[] = Yii::t('app', 'The {model} field {fieldName} maps to the {targetModel} field ' . '{targetField} but the fields have different types.', array('{fieldName}' => $originalName, '{fieldName}' => $name, '{model}' => X2Model::getModelTitle(get_class($this->owner)), '{targetModel}' => X2Model::getModelTitle($targetClass)));
             } else {
                 $warnings[] = Yii::t('app', 'A field {fieldName} is in both {model} and {targetModel} but the fields
                          have different types.', array('{fieldName}' => $name, '{model}' => X2Model::getModelTitle(get_class($this->owner)), '{targetModel}' => X2Model::getModelTitle($targetClass)));
             }
         }
     }
     return $warnings;
 }