Ejemplo n.º 1
0
 /**
  * Renders the attribute from the model.
  * @return The element's content.
  */
 protected function renderControlNonEditable()
 {
     if ($this->model->{$this->attribute} != null) {
         $content = DateTimeUtil::convertDbFormattedDateTimeToLocaleFormattedDisplay($this->model->{$this->attribute});
         return ZurmoHtml::encode($content);
     }
 }
Ejemplo n.º 2
0
 /**
  * Formats the value as a hyperlink.
  * @param mixed $value the value to be formatted
  * @return string the formatted result
  */
 public function formatUrl($value, $htmlOptions = array())
 {
     $url = $value;
     if (strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0) {
         $url = 'http://' . $url;
     }
     return ZurmoHtml::link(ZurmoHtml::encode($value), $url, $htmlOptions);
 }
Ejemplo n.º 3
0
 protected function renderContent()
 {
     $content = '<div id="FlashMessageBar"></div>';
     if (Yii::app()->user->hasFlash('notification')) {
         $script = "\n                \$('#FlashMessageBar').jnotifyAddMessage(\n                {\n                    text: '" . ZurmoHtml::encode(Yii::app()->user->getFlash('notification')) . "',\n                    permanent: true,\n                    showIcon: true,\n                }\n                );\n                ";
         Yii::app()->clientScript->registerScript('FlashMessage', $script);
     }
     $this->controller->beginClip("FlashMessage");
     $this->controller->widget('application.core.widgets.JNotify', array('statusBarId' => 'FlashMessageBar'));
     $this->controller->endClip();
     $content .= $this->controller->clips['FlashMessage'];
     return $content;
 }
 /**
  * Combines the 'user' with the 'datetime stamp'
  * into a single string
  * @return The element's content.
  */
 protected function renderNonEditableContent($attributeName)
 {
     assert('$attributeName == "created"  || $attributeName == "modified"');
     $userModelName = $attributeName . 'ByUser';
     $dateTimeAttributeName = $attributeName . 'DateTime';
     assert('$this->model->isAttribute($dateTimeAttributeName)');
     if (empty($this->model->{$dateTimeAttributeName})) {
         return Zurmo::t('Core', 'Unknown');
     }
     $content = ZurmoHtml::encode(DateTimeUtil::convertDbFormattedDateTimeToLocaleFormattedDisplay($this->model->{$dateTimeAttributeName}));
     if ($this->model->{$userModelName}->id > 0) {
         $content .= '&#160;' . Zurmo::t('Core', 'by') . '&#160;' . Yii::app()->format->text($this->model->{$userModelName});
     }
     return $content;
 }
Ejemplo n.º 5
0
 /**
  * @param JobLog $jobLog
  * @return string
  * @throws NotSupportedException
  */
 public static function renderStatusAndMessageListContent(JobLog $jobLog)
 {
     if ($jobLog->status == JobLog::STATUS_COMPLETE_WITH_ERROR) {
         $content = '<span class="job-label">' . Zurmo::t('JobsManagerModule', 'Completed with Errors') . '</span>';
         $content .= '<span id="active-nonmonitor-job-tooltip-' . $jobLog->id . '" class="tooltip" title="' . ZurmoHtml::encode($jobLog->message) . '">?</span>';
         $options = array('content' => array('title' => array('text' => Zurmo::t('JobsManagerModule', 'Error Log'), 'button' => Zurmo::t('Core', 'Close'))), 'hide' => array('event' => 'click'), 'show' => array('event' => 'click mouseenter', 'solo' => true), 'adjust' => array('screen' => true), 'position' => array('corner' => array('target' => 'bottomRight', 'tooltip' => 'topRight')), 'style' => array('width' => array('max' => 600)), 'api' => array('beforeHide' => 'js:function (event, api)
                                                                  { if (event.originalEvent.type !== "click")
                                                                  { return false;}}'));
         // Not Coding Standard
         $qtip = new ZurmoTip();
         $qtip->addQTip("#active-nonmonitor-job-tooltip-" . $jobLog->id, $options);
         return $content;
     } elseif ($jobLog->status == JobLog::STATUS_COMPLETE_WITHOUT_ERROR) {
         return Zurmo::t('Core', 'Completed');
     } else {
         throw new NotSupportedException();
     }
 }
    protected function registerJavaScript()
    {
        $commonErrorMessage = ZurmoHtml::encode(Zurmo::t('ZurmoModule', 'Unexpected error during the AJAX call'));
        // Begin Not Coding Standard
        $script = <<<EOD
\$(document).on('click', ".action-button", function(event) {
    var _parent = \$(this).parent();
    var _ajaxUrl = \$(this).attr('ajaxurl');

    if (_parent.hasClass('loading-ajax'))
    {
        return false;
    }

    _parent.addClass('loading-ajax');
    \$(this).addClass('loading');
    \$(this).attachLoadingSpinnerForLanguageActivation(this, true);

    \$.ajax({
        'url':_ajaxUrl,
        'cache':false,
        'success':function(html) {
            _parent.replaceWith(html);
        },
        'error':function(jqXHR, textStatus, errorThrown) {
            \$('#FlashMessageBar').jnotifyAddMessage({
                text: '{$commonErrorMessage}',
                permanent: false,
                showIcon: true,
            });
            \$(this).attachLoadingSpinnerForLanguageActivation(this);
            \$(this).removeClass('loading');
            _parent.removeClass('loading-ajax');
        }
    });

    return false;
});
EOD;
        // End Not Coding Standard
        $cs = Yii::app()->getClientScript();
        $cs->registerScript('my-hello-world-1', $script, CClientScript::POS_END);
    }
Ejemplo n.º 7
0
 /**
  * Override CHtml::formatText() method, so we can use ZurmoHtml::encode() function
  * @see CHtml::formatNtext()
  */
 public function formatNtext($value)
 {
     return nl2br(ZurmoHtml::encode($value));
 }
Ejemplo n.º 8
0
 /**
  * This test shows that accents are maybe not in the right encoding in the message file. This is just an example
  * of something that was not working in windows correctly. The result was the label would not display in the
  * input box in the browser in the module general in designer.
  */
 public function testAccentsAreEncodingProperly()
 {
     $this->assertEquals('Opportunité', ZurmoHtml::encode('Opportunité'));
     //First we need to activate French, to import the message
     Yii::app()->languageHelper->load();
     Yii::app()->languageHelper->activateLanguagesForTesting();
     Yii::app()->languageHelper->importMessagesForTesting();
     $label = OpportunitiesModule::getModuleLabelByTypeAndLanguage('SingularLowerCase', 'fr');
     $this->assertEquals('opportunité', $label);
     $this->assertEquals('opportunité', ZurmoHtml::encode($label));
 }
Ejemplo n.º 9
0
 /**
  * Register the script that will make the ajax call to search for a dedupe and update the DedupeViewClassName
  * with the content returned. It also display a clickable flash message with the number of results found
  * @see ZurmoModuleController::actionSearchForDuplicateModels
  * @param Element $element
  * @return null
  */
 public function registerScriptForEditAndDetailsView(Element $element)
 {
     if (!$this->shouldCreateScriptForElement($element)) {
         return null;
     }
     $id = $this->getInputIdForDedupe($element);
     $dedupeViewId = $this->getDedupeViewClassName();
     $link = ZurmoHtml::link(Zurmo::t('Core', 'click here'), '#', array('onclick' => 'js:$("#' . $dedupeViewId . '").closest("form")[0].submit();'));
     $spanUnderline = ZurmoHtml::tag('span', array('class' => 'underline'), $link);
     $textMessage = '<br>' . ZurmoHtml::encode(Zurmo::t('ZurmoModule', 'If you still want to save '));
     $textMessage .= $spanUnderline . '.';
     $spinnerId = 'dedupe-spinner';
     // Begin Not Coding Standard
     $ajaxScript = ZurmoHtml::ajax(array('type' => 'GET', 'data' => array('attribute' => $this->getAttributeForDedupe($element), 'value' => "js:\$('#{$id}').val()"), 'url' => 'searchForDuplicateModels', 'beforeSend' => "js:function(){\n                                     \$('#" . $id . "').after('<div id=\"" . $spinnerId . "\"><span class=\"z-spinner\"></span></div>');\n                                     \$(this).makeOrRemoveLoadingSpinner(true, '#" . $spinnerId . "', 'dark');\n                                }", 'success' => "js:function(data, textStatus, jqXHR){\n                                        var returnObj = jQuery.parseJSON(data);\n                                        \$('#" . $dedupeViewId . "').closest('form').off('submit.dedupe');\n                                        if (returnObj != null)\n                                        {\n                                            var textMessage = '<a href=\"#\" onclick=\"\$(\\'#" . $dedupeViewId . "\\').show();dedupeShouldSubmitFormAfterMessage = false;\$(\\'.jnotify-item-close\\').click(); return false;\">' + returnObj.message + '</a>';\n                                            if (shouldSubmitForm)\n                                            {\n                                                \$('#" . $dedupeViewId . "').closest('form').find('a[name=\\'save\\']').removeClass('loading');\n                                                textMessage += '" . $textMessage . "';\n                                            }\n                                            \$('#" . $dedupeViewId . "').replaceWith(returnObj.content);\n                                            \$('#FlashMessageBar').jnotifyAddMessage({\n                                                text: textMessage,\n                                                permanent: true,\n                                                clickOverlay : true,\n                                                showIcon: false,\n                                            });\n\n                                        }\n                                        else if (shouldSubmitForm)\n                                        {\n                                            \$('#" . $dedupeViewId . "').closest('form')[0].submit();\n                                        }\n                                 }", 'complete' => "js:function(){ \$('#" . $id . "').next('#" . $spinnerId . "').remove(); }"));
     $js = "var shouldSubmitForm = false;\n                    \$('#{$id}' ).change(function() {\n                        if (\$('#{$id}').val() != '')\n                        {\n                            {$ajaxScript}\n                            \$(this).closest('form').on('submit.dedupe', function(e)\n                            {\n                                shouldSubmitForm = true;\n                                return false;\n                            });\n                        }\n\n                   });\n            ";
     Yii::app()->getClientScript()->registerScript(__CLASS__ . $id . '#dedupe-for-edit-and-details-view', $js);
     // End Not Coding Standard
 }
Ejemplo n.º 10
0
 protected function renderSuggestedFrequencyContent()
 {
     $content = '<h3>' . Zurmo::t('JobsManagerModule', 'How often should I run each Job?') . '</h3>';
     $content .= '<table id="jobs-frequency">';
     $content .= '<colgroup>';
     $content .= '<col style="width:40%" /><col style="width:60%" />';
     $content .= '</colgroup>';
     $content .= '<tbody>';
     $content .= '<tr><th>' . Zurmo::t('JobsManagerModule', 'Job Name') . '</th>';
     $content .= '<th>' . Zurmo::t('JobsManagerModule', 'Recommended Frequency') . '</th>';
     $content .= '</tr>';
     $content .= '<tr>';
     $content .= '<td>' . ZurmoHtml::encode($this->monitorJobData['label']) . '</td>';
     $content .= '<td>' . ZurmoHtml::encode($this->monitorJobData['recommendedFrequencyContent']) . '</td>';
     $content .= '</tr>';
     foreach ($this->jobsData as $type => $jobData) {
         $title = Zurmo::t('JobsManagerModule', 'Cron or scheduled job name: {type}', array('{type}' => $type));
         $content .= '<tr>';
         $content .= '<td>';
         $content .= '<span class="job-label">' . ZurmoHtml::encode($jobData['label']) . '</span>';
         $content .= '<span id="suggested-frequency-job-tooltip-' . $type . '" class="tooltip" title="' . $title . '">?</span>';
         $content .= '</td>';
         $content .= '<td>' . ZurmoHtml::encode($jobData['recommendedFrequencyContent']) . '</td>';
         $content .= '</tr>';
         $qtip = new ZurmoTip();
         $qtip->addQTip("#suggested-frequency-job-tooltip-{$type}");
     }
     $content .= '</tbody>';
     $content .= '</table>';
     return $content;
 }
 protected static function renderMapAndPoint($containerId, $apiKey, $address, $latitude, $longitude)
 {
     assert('is_string($containerId)');
     assert('is_string($apiKey) || $apiKey == null');
     assert('$address instanceof Address || is_string($address) || $address == null');
     assert('is_numeric($latitude) || $latitude == null');
     assert('is_numeric($longitude) || $longitude == null');
     $marker_text = ZurmoHtml::encode("{$address}");
     $mapScript = "\n            function plotMap()\n            {\n                var latlng = new google.maps.LatLng({$latitude}, {$longitude});\n                var myOptions =\n                {\n                    zoom: 14,\n                    center: latlng,\n                    mapTypeId: google.maps.MapTypeId.ROADMAP\n                  }\n                var map = new google.maps.Map(document.getElementById('{$containerId}'), myOptions);\n\n                var marker = new google.maps.Marker(\n                {\n                  position: latlng,\n                  map: map\n                });\n                var infowindow = new google.maps.InfoWindow(\n                {\n                 content:  '{$marker_text}'\n                });\n\n                google.maps.event.addListener(marker, 'click', function()\n                {\n                    infowindow.open(map, marker);\n                });\n            }\n            function loadGoogleMap()\n            {\n              var script  = document.createElement('script');\n              script.type = 'text/javascript';\n              if ('{$apiKey}' !== null)\n              {\n              script.src = '//maps.googleapis.com/maps/api/js?key=" . $apiKey . "&sensor=false&callback=plotMap';" . "document.body.appendChild(script);\n              }\n              else\n              {\n              script.src = '//maps.googleapis.com/maps/api/js?sensor=false&callback=plotMap';" . "document.body.appendChild(script);\n              }\n            }\n            \$(document).ready(loadGoogleMap);\n            ";
     // Register the javascripts
     Yii::app()->getClientScript()->registerScript("GoogleMapScript" . $containerId, $mapScript, CClientScript::POS_END);
 }
 protected static function resolveDependencyData($inputId, $parentInputId, $mappingData, $position, $existingValue, $parentAttributeLabel)
 {
     assert('is_string($inputId)');
     assert('$parentInputId == null || is_string($parentInputId)');
     assert('is_array($mappingData)');
     assert('is_int($position)');
     assert('$existingValue == null || is_string($existingValue)');
     assert('is_string($parentAttributeLabel) || $parentAttributeLabel == null');
     $dependencyData = array();
     $dependencyData['inputId'] = $inputId;
     $dependencyData['parentInputId'] = $parentInputId;
     $dependencyData['valueToAlwaysShow'] = $existingValue;
     if ($parentAttributeLabel != null) {
         $dependencyData['notReadyToSelectText'] = ZurmoHtml::encode(Zurmo::t('Core', 'First select the {attributeLabel}', array('{attributeLabel}' => $parentAttributeLabel)));
     } else {
         $dependencyData['notReadyToSelectText'] = null;
     }
     if (isset($mappingData[$position]['valuesToParentValues'])) {
         $dependencyData['valuesToParentValues'] = $mappingData[$position]['valuesToParentValues'];
     } else {
         $dependencyData['valuesToParentValues'] = null;
     }
     return $dependencyData;
 }
 /**
  * Registers kanban column finish action script
  * @param string $label
  * @param int $targetStatus
  * @param string $url
  */
 protected function registerKanbanColumnFinishActionScript($labelAccept, $labelReject, $targetStatus, $url)
 {
     $acceptanceStatusLabel = ZurmoHtml::encode(Task::getStatusDisplayName(Task::STATUS_AWAITING_ACCEPTANCE));
     $acceptanceStatus = Task::STATUS_AWAITING_ACCEPTANCE;
     $inProgressKanbanType = KanbanItem::TYPE_IN_PROGRESS;
     // Begin Not Coding Standard
     $script = "\$(document).on('click','.action-type-finish',function()\n                            {\n                                var element = \$(this).parent().parent().parent().parent();\n                                var ulelement = \$(element).parent();\n                                var id = \$(element).attr('id');\n                                var idParts = id.split('_');\n                                var taskId = parseInt(idParts[1]);\n                                var rejectLinkElement = \$(this).clone();\n                                var parent = \$(this).parent();\n                                \$(this).find('.button-label').html('" . $labelAccept . "');\n                                \$(this).removeClass('action-type-finish').addClass('action-type-accept');\n                                \$(rejectLinkElement).appendTo(\$(parent));\n                                \$(rejectLinkElement).find('.button-label').html('" . $labelReject . "');\n                                \$(rejectLinkElement).removeClass('action-type-finish').addClass('action-type-reject');\n                                \$(element).find('.task-status').html('{$acceptanceStatusLabel}');\n                                \$.ajax(\n                                    {\n                                        type : 'GET',\n                                        data : {'targetStatus':'{$acceptanceStatus}', 'taskId':taskId, 'sourceKanbanType':'{$inProgressKanbanType}'},\n                                        url  : '" . $url . "',\n                                        beforeSend : function(){\n                                          \$('.ui-overlay-block').fadeIn(50);\n                                          \$(this).makeLargeLoadingSpinner(true, '.ui-overlay-block'); //- add spinner to block anything else\n                                        },\n                                        success: function(data){\n                                            \$(this).makeLargeLoadingSpinner(false, '.ui-overlay-block');\n                                            \$('.ui-overlay-block').fadeOut(50);\n                                         }\n                                    }\n                                );\n                            }\n                        );";
     // End Not Coding Standard
     Yii::app()->clientScript->registerScript('finish-action-script', $script);
 }