/**
 * Output navigation script tag
 *
 * @param array $params
 *   - is_default: bool, true if this is normal/default instance of the menu (which may be subject to CIVICRM_DISABLE_DEFAULT_MENU)
 * @param CRM_Core_Smarty $smarty
 *   The Smarty object.
 *
 * @return string
 *   HTML
 */
function smarty_function_crmNavigationMenu($params, &$smarty)
{
    $config = CRM_Core_Config::singleton();
    //check if logged in user has access CiviCRM permission and build menu
    $buildNavigation = !CRM_Core_Config::isUpgradeMode() && CRM_Core_Permission::check('access CiviCRM');
    if (defined('CIVICRM_DISABLE_DEFAULT_MENU') && CRM_Utils_Array::value('is_default', $params, FALSE)) {
        $buildNavigation = FALSE;
    }
    if ($config->userFrameworkFrontend) {
        $buildNavigation = FALSE;
    }
    if ($buildNavigation) {
        $session = CRM_Core_Session::singleton();
        $contactID = $session->get('userID');
        if ($contactID) {
            // These params force the browser to refresh the js file when switching user, domain, or language
            // We don't put them as a query string because some browsers will refuse to cache a page with a ? in the url
            // @see CRM_Admin_Page_AJAX::getNavigationMenu
            $lang = CRM_Core_I18n::getLocale();
            $domain = CRM_Core_Config::domainID();
            $key = CRM_Core_BAO_Navigation::getCacheKey($contactID);
            $src = CRM_Utils_System::url("civicrm/ajax/menujs/{$contactID}/{$lang}/{$domain}/{$key}");
            // CRM-15493 QFkey needed for quicksearch bar - must be unique on each page refresh so adding it directly to markup
            $qfKey = CRM_Core_Key::get('CRM_Contact_Controller_Search', TRUE);
            return '<script id="civicrm-navigation-menu" type="text/javascript" src="' . $src . '" data-qfkey=' . json_encode($qfKey) . '></script>';
        }
    }
    return '';
}
Exemplo n.º 2
0
 public function buildQuickForm()
 {
     $config = CRM_Core_Config::singleton();
     $tsLocale = CRM_Core_I18n::getLocale();
     $this->_locales = array_keys($config->languageLimit);
     // get the part of the database we want to edit and validate it
     $table = CRM_Utils_Request::retrieve('table', 'String', $this);
     $field = CRM_Utils_Request::retrieve('field', 'String', $this);
     $id = CRM_Utils_Request::retrieve('id', 'Int', $this);
     $this->_structure = CRM_Core_I18n_SchemaStructure::columns();
     if (!isset($this->_structure[$table][$field])) {
         CRM_Core_Error::fatal("{$table}.{$field} is not internationalized.");
     }
     $this->addElement('hidden', 'table', $table);
     $this->addElement('hidden', 'field', $field);
     $this->addElement('hidden', 'id', $id);
     $cols = array();
     foreach ($this->_locales as $locale) {
         $cols[] = "{$field}_{$locale} {$locale}";
     }
     $query = 'SELECT ' . implode(', ', $cols) . " FROM {$table} WHERE id = {$id}";
     $dao = new CRM_Core_DAO();
     $dao->query($query, FALSE);
     $dao->fetch();
     // get html type and attributes for this field
     $widgets = CRM_Core_I18n_SchemaStructure::widgets();
     $widget = $widgets[$table][$field];
     // attributes
     $attributes = array('class' => '');
     if (isset($widget['rows'])) {
         $attributes['rows'] = $widget['rows'];
     }
     if (isset($widget['cols'])) {
         $attributes['cols'] = $widget['cols'];
     }
     $required = !empty($widget['required']);
     if ($widget['type'] == 'RichTextEditor') {
         $widget['type'] = 'wysiwyg';
         $attributes['class'] .= ' collapsed';
     }
     $languages = CRM_Core_I18n::languages(TRUE);
     foreach ($this->_locales as $locale) {
         $attr = $attributes;
         $name = "{$field}_{$locale}";
         if ($locale == $tsLocale) {
             $attr['class'] .= ' default-lang';
         }
         $this->add($widget['type'], $name, $languages[$locale], $attr, $required);
         $this->_defaults[$name] = $dao->{$locale};
     }
     $this->addDefaultButtons(ts('Save'), 'next', NULL);
     CRM_Utils_System::setTitle(ts('Languages'));
     $this->assign('locales', $this->_locales);
     $this->assign('field', $field);
 }
Exemplo n.º 3
0
 /**
  * Get or Set honor/on_behalf params for processing module_data or setting default values.
  *
  * @param array $params :
  * @param bool $setDefault : If yes then returns array to used for setting default value afterward
  * @param string $module : processing module_data for which module? e.g. soft_credit, on_behalf
  *
  * @return array|string
  */
 public static function formatModuleData($params, $setDefault = FALSE, $module)
 {
     $tsLocale = CRM_Core_I18n::getLocale();
     $config = CRM_Core_Config::singleton();
     $json = $jsonDecode = NULL;
     $domain = new CRM_Core_DAO_Domain();
     $domain->find(TRUE);
     $moduleDataFormat = array('soft_credit' => array(1 => 'soft_credit_types', 'multilingual' => array('honor_block_title', 'honor_block_text')), 'on_behalf' => array(1 => 'is_for_organization', 'multilingual' => array('for_organization')));
     //When we are fetching the honor params respecting both multi and mono lingual state
     //and setting it to default param of Contribution Page's Main and Setting form
     if ($setDefault) {
         $jsonDecode = json_decode($params);
         $jsonDecode = (array) $jsonDecode->{$module};
         if (!$domain->locales && !empty($jsonDecode['default'])) {
             //monolingual state
             $jsonDecode += (array) $jsonDecode['default'];
             unset($jsonDecode['default']);
         } elseif (!empty($jsonDecode[$tsLocale])) {
             //multilingual state
             foreach ($jsonDecode[$tsLocale] as $column => $value) {
                 $jsonDecode[$column] = $value;
             }
             unset($jsonDecode[$tsLocale]);
         }
         return $jsonDecode;
     }
     //check and handle multilingual honoree params
     if (!$domain->locales) {
         //if in singlelingual state simply return the array format
         $json = array($module => NULL);
         foreach ($moduleDataFormat[$module] as $key => $attribute) {
             if ($key === 'multilingual') {
                 $json[$module]['default'] = array();
                 foreach ($attribute as $attr) {
                     $json[$module]['default'][$attr] = $params[$attr];
                 }
             } else {
                 $json[$module][$attribute] = $params[$attribute];
             }
         }
         $json = json_encode($json);
     } else {
         //if in multilingual state then retrieve the module_data against this contribution and
         //merge with earlier module_data json data to current so not to lose earlier multilingual module_data information
         $json = array($module => NULL);
         foreach ($moduleDataFormat[$module] as $key => $attribute) {
             if ($key === 'multilingual') {
                 $json[$module][$config->lcMessages] = array();
                 foreach ($attribute as $attr) {
                     $json[$module][$config->lcMessages][$attr] = $params[$attr];
                 }
             } else {
                 $json[$module][$attribute] = $params[$attribute];
             }
         }
         $ufJoinDAO = new CRM_Core_DAO_UFJoin();
         $ufJoinDAO->module = $module;
         $ufJoinDAO->entity_id = $params['id'];
         $ufJoinDAO->find(TRUE);
         $jsonData = json_decode($ufJoinDAO->module_data);
         if ($jsonData) {
             $json[$module] = array_merge((array) $jsonData->{$module}, $json[$module]);
         }
         $json = json_encode($json);
     }
     return $json;
 }
Exemplo n.º 4
0
 /**
  * @param int $countryID
  * @param string $field
  *
  * @return array
  */
 public static function &stateProvinceForCountry($countryID, $field = 'name')
 {
     static $_cache = NULL;
     $cacheKey = "{$countryID}_{$field}";
     if (!$_cache) {
         $_cache = array();
     }
     if (!empty($_cache[$cacheKey])) {
         return $_cache[$cacheKey];
     }
     $query = "\nSELECT civicrm_state_province.{$field} name, civicrm_state_province.id id\n  FROM civicrm_state_province\nWHERE country_id = %1\nORDER BY name";
     $params = array(1 => array($countryID, 'Integer'));
     $dao = CRM_Core_DAO::executeQuery($query, $params);
     $result = array();
     while ($dao->fetch()) {
         $result[$dao->id] = $dao->name;
     }
     // localise the stateProvince names if in an non-en_US locale
     $config = CRM_Core_Config::singleton();
     $tsLocale = CRM_Core_I18n::getLocale();
     if ($tsLocale != '' and $tsLocale != 'en_US') {
         $i18n = CRM_Core_I18n::singleton();
         $i18n->localizeArray($result, array('context' => 'province'));
         $result = CRM_Utils_Array::asort($result);
     }
     $_cache[$cacheKey] = $result;
     CRM_Utils_Hook::buildStateProvinceForCountry($countryID, $result);
     return $result;
 }
Exemplo n.º 5
0
 /**
  * @param $communication_language
  * @param $preferred_language
  */
 public static function setCommunicationLanguage($communication_language, $preferred_language)
 {
     $currentLocale = CRM_Core_I18n::getLocale();
     $language = $currentLocale;
     // prepare the language for the email
     if ($communication_language == CRM_Core_I18n::AUTO) {
         if (!empty($preferred_language)) {
             $language = $preferred_language;
         }
     } else {
         $language = $communication_language;
     }
     // language not in the existing language, use default
     $languages = CRM_Core_I18n::languages(TRUE);
     if (!array_key_exists($language, $languages)) {
         $language = $currentLocale;
     }
     // change the language
     $i18n = CRM_Core_I18n::singleton();
     $i18n->setLocale($language);
 }
Exemplo n.º 6
0
 /**
  * Get the default language for contacts where no language is provided.
  *
  * Note that NULL is a valid option so be careful with checking for empty etc.
  *
  * NULL would mean 'we don't know & we don't want to hazard a guess'.
  *
  * @return string
  */
 public static function getContactDefaultLanguage()
 {
     $language = Civi::settings()->get('contact_default_language');
     if ($language == 'undefined') {
         return NULL;
     }
     if (empty($language) || $language === '*default*') {
         $language = civicrm_api3('setting', 'getvalue', array('name' => 'lcMessages', 'group' => CRM_Core_BAO_Setting::LOCALIZATION_PREFERENCES_NAME));
     } elseif ($language == 'current_site_language') {
         return CRM_Core_I18n::getLocale();
     }
     return $language;
 }
Exemplo n.º 7
0
 /**
  * List of core resources we add to every CiviCRM page.
  *
  * Note: non-compressed versions of .min files will be used in debug mode
  *
  * @param string $region
  * @return array
  */
 public function coreResourceList($region)
 {
     $config = CRM_Core_Config::singleton();
     // Scripts needed by everyone, everywhere
     // FIXME: This is too long; list needs finer-grained segmentation
     $items = array("bower_components/jquery/dist/jquery.min.js", "bower_components/jquery-ui/jquery-ui.min.js", "bower_components/jquery-ui/themes/smoothness/jquery-ui.min.css", "bower_components/lodash-compat/lodash.min.js", "packages/jquery/plugins/jquery.mousewheel.min.js", "bower_components/select2/select2.min.js", "bower_components/select2/select2.min.css", "bower_components/font-awesome/css/font-awesome.min.css", "packages/jquery/plugins/jquery.tableHeader.js", "packages/jquery/plugins/jquery.form.min.js", "packages/jquery/plugins/jquery.timeentry.min.js", "packages/jquery/plugins/jquery.blockUI.min.js", "bower_components/datatables/media/js/jquery.dataTables.min.js", "bower_components/datatables/media/css/jquery.dataTables.min.css", "bower_components/jquery-validation/dist/jquery.validate.min.js", "packages/jquery/plugins/jquery.ui.datepicker.validation.min.js", "js/Common.js", "js/crm.ajax.js", "js/wysiwyg/crm.wysiwyg.js");
     // add wysiwyg editor
     $editor = Civi::settings()->get('editor_id');
     if ($editor == "CKEditor") {
         $items[] = "js/wysiwyg/crm.ckeditor.js";
         $ckConfig = CRM_Admin_Page_CKEditorConfig::getConfigUrl();
         if ($ckConfig) {
             $items[] = array('config' => array('CKEditorCustomConfig' => $ckConfig));
         }
     }
     // These scripts are only needed by back-office users
     if (CRM_Core_Permission::check('access CiviCRM')) {
         $items[] = "packages/jquery/plugins/jquery.menu.min.js";
         $items[] = "css/civicrmNavigation.css";
         $items[] = "packages/jquery/plugins/jquery.jeditable.min.js";
         $items[] = "packages/jquery/plugins/jquery.notify.min.js";
         $items[] = "js/jquery/jquery.crmeditable.js";
     }
     // JS for multilingual installations
     if (!empty($config->languageLimit) && count($config->languageLimit) > 1 && CRM_Core_Permission::check('translate CiviCRM')) {
         $items[] = "js/crm.multilingual.js";
     }
     // Enable administrators to edit option lists in a dialog
     if (CRM_Core_Permission::check('administer CiviCRM') && $this->ajaxPopupsEnabled) {
         $items[] = "js/crm.optionEdit.js";
     }
     $tsLocale = CRM_Core_I18n::getLocale();
     // Add localized jQuery UI files
     if ($tsLocale && $tsLocale != 'en_US') {
         // Search for i18n file in order of specificity (try fr-CA, then fr)
         list($lang) = explode('_', $tsLocale);
         $path = "bower_components/jquery-ui/ui/i18n";
         foreach (array(str_replace('_', '-', $tsLocale), $lang) as $language) {
             $localizationFile = "{$path}/datepicker-{$language}.js";
             if ($this->getPath('civicrm', $localizationFile)) {
                 $items[] = $localizationFile;
                 break;
             }
         }
     }
     // Allow hooks to modify this list
     CRM_Utils_Hook::coreResourceList($items, $region);
     return $items;
 }
Exemplo n.º 8
0
 private function getLocale()
 {
     $tsLocale = CRM_Core_I18n::getLocale();
     if (!empty($tsLocale)) {
         return $tsLocale;
     }
     $config = CRM_Core_Config::singleton();
     if (!empty($config->lcMessages)) {
         return $config->lcMessages;
     }
     return 'en_US';
 }