Changeset 26388


Ignore:
Timestamp:
06/18/10 14:23:17 (7 years ago)
Author:
jval
Message:

Multilang workflow configuration changing related fixes, refs #1626

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ragnaroek/midcom/midcom.core/midcom/services/multilang.php

    r26381 r26388  
    293293        $real_lang = self::get_lang();
    294294        if (!isset($langs[$real_lang])) return;
    295         $langs[$real_lang] = false;
    296295
    297296        if ($is_update)
     
    315314                        {
    316315                            if (   is_null($parent)
    317                                 && $language->code != $real_lang)
     316                                && $language->id != $object->lang)
    318317                            {
    319318                                $parent = $language->code;
     
    331330                    }
    332331                }
     332
     333                if (!$lang0)
     334                {
     335                    if (!$langs[$real_lang])
     336                    {
     337                        $parent = null;
     338                    }
     339                }
    333340            }
    334341
     
    352359            {
    353360                $detach = !self::is_object_equal_in_lang($object, $parent);
     361            }
     362            else
     363            {
     364                if ($lang0)
     365                {
     366                    if ($langs[$real_lang])
     367                    {
     368                        $detach = false;
     369                    }
     370                }
    354371            }
    355372
     
    435452                if (!$lang_exists)
    436453                {
    437                     self::is_real(false);
    438                     $object->update();
    439                     self::is_real(true);
    440 
    441                     $lang_exists = true;
    442 
    443                     $object->set_parameter($domain, $real_lang, true);
     454                    if (   !$object->lang
     455                        && !isset($langs[''])
     456                        && !$GLOBALS['midcom_config']['multilang_lang0_langs'])
     457                    {
     458                        self::is_real(false);
     459                        $object->update();
     460                        self::is_real(true);
     461
     462                        $lang_exists = true;
     463
     464                        $object->set_parameter($domain, $real_lang, true);
     465                    }
     466                    else
     467                    {
     468                        return;
     469                    }
    444470                }
    445471            }
     
    505531            if ($languages = $object->get_languages())
    506532            {
     533                $default_lang = self::get_default_lang();
    507534                $real_lang = self::get_lang();
    508535
    509536                $object_langs = array();
     537                $auto_has_master = false;
     538
    510539                foreach ($languages as $language)
    511540                {
     541                    $object_langs[$language->code] = false;
    512542                    if (!$object->get_parameter($domain, $language->code))
    513543                    {
    514                         $object_langs[] = $language->code;
     544                        $object_langs[$language->code] = true;
     545
     546                        if (   $GLOBALS['midcom_config']['multilang_auto_langs']
     547                            && !$auto_has_master
     548                            && in_array($language->code, $GLOBALS['midcom_config']['multilang_auto_langs']))
     549                        {
     550                            $auto_has_master = true;
     551                        }
     552                    }
     553                }
     554
     555                if (   $GLOBALS['midcom_config']['multilang_auto_langs']
     556                    && !$auto_has_master)
     557                {
     558                    if (   !isset($object_langs[$default_lang])
     559                        || !$object_langs[$default_lang]
     560                        || (   $default_lang == ''
     561                            && !$GLOBALS['midcom_config']['multilang_lang0_langs'])
     562                       )
     563                    {
     564                        $auto_has_master = true;
    515565                    }
    516566                }
     
    519569                {
    520570                    if (   $GLOBALS['midcom_config']['multilang_auto_langs']
     571                        && $auto_has_master
    521572                        && in_array($language->code, $GLOBALS['midcom_config']['multilang_auto_langs']))
    522573                    {
     
    525576
    526577                    if (   $GLOBALS['midcom_config']['multilang_lang0_langs']
     578                        && $object_langs[$language->code]
    527579                        && in_array($language->code, $GLOBALS['midcom_config']['multilang_lang0_langs']))
    528580                    {
     
    535587
    536588                    $delete = false;
    537                     if (!in_array($language->code, $object_langs))
     589                    if (!$object_langs[$language->code])
    538590                    {
    539591                        if ($object_in_lang = self::get_object_in_lang($object, $language->code, true))
     
    566618                        && $object_in_lang0 = self::get_object_in_lang($object, '', true))
    567619                    {
    568                         foreach ($object_langs as $lang)
    569                         {
     620                        foreach ($object_langs as $lang => $translated)
     621                        {
     622                            if ($lang == $language->code) continue;
     623
    570624                            if (   $object_in_lang = self::get_object_in_lang($object, $lang, true)
    571625                                && self::are_objects_equal($object_in_lang, $object_in_lang0))
     
    580634                    if ($delete)
    581635                    {
    582                         self::is_real(false);
    583                         $default_lang = self::get_default_lang();
    584                         while ($lang = array_shift($object_langs))
     636                        $lang = '';
     637                        foreach ($object_langs as $lang => $translated)
    585638                        {
    586639                            if ($language->code == '')
     
    588641                                if ($lang == '') continue;
    589642                            }
    590                             else
     643                            break;
     644                        }
     645                        // Not at all needed but prefer lang0 if it can be used
     646                        if (   $lang != ''
     647                            && $language->code != '')
     648                        {
     649                            if (isset($object_langs['']))
    591650                            {
    592                                 break;
     651                                $lang = '';
    593652                            }
    594653                        }
    595                         if ($lang)
    596                         {
    597                             // Not at all needed but prefer lang0 if it can be used
    598                             if (   $lang != ''
    599                                 && $language->code != '')
    600                             {
    601                                 if (in_array('', $object_langs))
    602                                 {
    603                                     $lang = '';
    604                                 }
    605                             }
     654                        if ($lang != $language->code)
     655                        {
    606656                            midgard_connection::set_default_lang($lang);
    607657                        }
     
    611661                        }
    612662                        midgard_connection::set_lang($language->code);
     663
     664                        self::is_real(false);
     665                        $constraints = array
     666                        (
     667                            'domain' => $domain,
     668                            'name' => $language->code,
     669                        );
     670                        $object->purge_parameters($constraints);
    613671                        $object_in_lang->delete();
     672                        self::is_real(true);
     673
    614674                        midgard_connection::set_default_lang($default_lang);
    615675                        midgard_connection::set_lang($real_lang);
    616                         self::is_real(true);
    617676                    }
    618677                }
Note: See TracChangeset for help on using the changeset viewer.