/**
  * Renders a Preparse field's template.
  *
  * @param $fieldType PreparseField_PreparseFieldType
  * @return string|null
  */
 public function parseField($fieldType)
 {
     $craftVersion = craft()->getVersion();
     $settings = $fieldType->getSettings();
     $fieldTwig = $settings->fieldTwig;
     $columnType = $settings->columnType;
     $decimals = $settings->decimals;
     $element = $fieldType->element;
     $elementType = $element->getElementType();
     $elementTemplateName = strtolower($elementType);
     // set generateTransformsBeforePageLoad = true
     $configService = craft()->config;
     $generateTransformsBeforePageLoad = $configService->get('generateTransformsBeforePageLoad');
     $configService->set('generateTransformsBeforePageLoad', true);
     // save cp template path and set to site templates
     if (version_compare($craftVersion, '2.6.2951', '<') && craft()->getBuild() < 2778) {
         $oldPath = craft()->path->getTemplatesPath();
         craft()->path->setTemplatesPath(craft()->path->getSiteTemplatesPath());
     } else {
         $oldMode = craft()->templates->getTemplateMode();
         craft()->templates->setTemplateMode(TemplateMode::Site);
     }
     // render value from the field template
     try {
         $fieldValue = craft()->templates->renderString($fieldTwig, array($elementTemplateName => $element));
     } catch (\Exception $e) {
         PreparseFieldPlugin::log('Couldn’t render value for element with id “' . $element->id . '” and preparse field “' . $fieldType->model->handle . '” (' . $e->getMessage() . ').', LogLevel::Error);
     }
     // restore cp template paths
     if (version_compare($craftVersion, '2.6.2951', '<') && craft()->getBuild() < 2778) {
         craft()->path->setTemplatesPath($oldPath);
     } else {
         craft()->templates->setTemplateMode($oldMode);
     }
     // set generateTransformsBeforePageLoad back to whatever it was
     $configService->set('generateTransformsBeforePageLoad', $generateTransformsBeforePageLoad);
     if (!isset($fieldValue)) {
         return null;
     }
     if ($columnType == 'number') {
         if ((int) $decimals > 0) {
             return number_format(trim($fieldValue), (int) $decimals, '.', '');
         } else {
             return number_format(trim($fieldValue), 0, '.', '');
         }
     }
     return $fieldValue;
 }
 /**
  * onAfterElementSave hook
  */
 public function onAfterElementSave()
 {
     $fieldHandle = $this->model->handle;
     $fieldTwig = $this->getSettings()->fieldTwig;
     $elementType = $this->element->getElementType();
     $elementTemplateName = strtolower($elementType);
     $oldPath = craft()->path->getTemplatesPath();
     craft()->path->setTemplatesPath(craft()->path->getSiteTemplatesPath());
     $parsedData = craft()->templates->renderString($fieldTwig, array($elementTemplateName => $this->element));
     craft()->path->setTemplatesPath($oldPath);
     if ($this->element->getContent()->getAttribute($fieldHandle) !== $parsedData) {
         $this->element->getContent()->setAttribute($fieldHandle, $parsedData);
         $success = craft()->elements->saveElement($this->element);
         if (!$success) {
             PreparseFieldPlugin::log('Couldn’t save element with id "' . $element->id . '" and preparse field "' . $fieldHandle . '"', LogLevel::Error);
         }
     }
 }
 /**
  * Initializes event listeners
  */
 private function _initEventListeners()
 {
     $this->preparsedElements = array('onBeforeSave' => array(), 'onSave' => array());
     $obj =& $this;
     // php 5.3.x fix
     craft()->on('elements.onBeforeSaveElement', function (Event $event) use(&$obj) {
         $element = $event->params['element'];
         if (!in_array($element->id, $obj->preparsedElements['onBeforeSave'])) {
             $obj->preparsedElements['onBeforeSave'][] = $element->id;
             $content = craft()->preparseField->getPreparseFieldsContent($element, 'onBeforeSave');
             if (!empty($content)) {
                 $element->setContentFromPost($content);
             }
         }
     });
     craft()->on('elements.onSaveElement', function (Event $event) use(&$obj) {
         $element = $event->params['element'];
         if (!in_array($element->id, $obj->preparsedElements['onSave'])) {
             $obj->preparsedElements['onSave'][] = $element->id;
             $content = craft()->preparseField->getPreparseFieldsContent($element, 'onSave');
             if (!empty($content)) {
                 $element->setContentFromPost($content);
                 $success = craft()->elements->saveElement($element);
                 // if no success, log error
                 if (!$success) {
                     PreparseFieldPlugin::log('Couldn’t save element with id “' . $element->id . '”.', LogLevel::Error);
                 }
             }
         }
     });
     craft()->on('structures.onMoveElement', function (Event $event) use(&$obj) {
         $element = $event->params['element'];
         if (craft()->preparseField->shouldParseElementOnMove($element)) {
             $success = craft()->elements->saveElement($element);
             // if no success, log error
             if (!$success) {
                 PreparseFieldPlugin::log('Couldn’t save element with id “' . $element->id . '” in structures.onMoveElement.', LogLevel::Error);
             }
         }
     });
 }