Overview
  • Namespace
  • Class

Namespaces

  • MatthiasWeb
    • RealMediaLibrary
      • api
      • attachment
      • base
      • comp
        • complexquery
      • folder
      • general
      • metadata
      • order
      • rest
      • usersettings
  • None

Classes

  • MatthiasWeb\RealMediaLibrary\attachment\CountCache
  • MatthiasWeb\RealMediaLibrary\attachment\CustomField
  • MatthiasWeb\RealMediaLibrary\attachment\Filter
  • MatthiasWeb\RealMediaLibrary\attachment\Permissions
  • MatthiasWeb\RealMediaLibrary\attachment\Shortcut
  • MatthiasWeb\RealMediaLibrary\attachment\Structure
  • MatthiasWeb\RealMediaLibrary\attachment\Upload
  • MatthiasWeb\RealMediaLibrary\base\Assets
  • MatthiasWeb\RealMediaLibrary\base\Base
  • MatthiasWeb\RealMediaLibrary\base\Core
  • MatthiasWeb\RealMediaLibrary\comp\complexquery\ComplexQuery
  • MatthiasWeb\RealMediaLibrary\comp\complexquery\ResetNames
  • MatthiasWeb\RealMediaLibrary\comp\ExImport
  • MatthiasWeb\RealMediaLibrary\comp\PageBuilders
  • MatthiasWeb\RealMediaLibrary\comp\PolyLang
  • MatthiasWeb\RealMediaLibrary\comp\WPML
  • MatthiasWeb\RealMediaLibrary\folder\BaseFolder
  • MatthiasWeb\RealMediaLibrary\folder\Collection
  • MatthiasWeb\RealMediaLibrary\folder\Creatable
  • MatthiasWeb\RealMediaLibrary\folder\CRUD
  • MatthiasWeb\RealMediaLibrary\folder\Folder
  • MatthiasWeb\RealMediaLibrary\folder\Gallery
  • MatthiasWeb\RealMediaLibrary\folder\Root
  • MatthiasWeb\RealMediaLibrary\general\Activator
  • MatthiasWeb\RealMediaLibrary\general\Assets
  • MatthiasWeb\RealMediaLibrary\general\Core
  • MatthiasWeb\RealMediaLibrary\general\FolderShortcode
  • MatthiasWeb\RealMediaLibrary\general\Lang
  • MatthiasWeb\RealMediaLibrary\general\Migration
  • MatthiasWeb\RealMediaLibrary\general\Options
  • MatthiasWeb\RealMediaLibrary\general\QueryCount
  • MatthiasWeb\RealMediaLibrary\general\Util
  • MatthiasWeb\RealMediaLibrary\general\View
  • MatthiasWeb\RealMediaLibrary\metadata\CoverImage
  • MatthiasWeb\RealMediaLibrary\metadata\Description
  • MatthiasWeb\RealMediaLibrary\metadata\Meta
  • MatthiasWeb\RealMediaLibrary\order\GalleryOrder
  • MatthiasWeb\RealMediaLibrary\order\Sortable
  • MatthiasWeb\RealMediaLibrary\rest\Attachment
  • MatthiasWeb\RealMediaLibrary\rest\Folder
  • MatthiasWeb\RealMediaLibrary\rest\Reset
  • MatthiasWeb\RealMediaLibrary\rest\Service
  • MatthiasWeb\RealMediaLibrary\usersettings\Demo

Interfaces

  • MatthiasWeb\RealMediaLibrary\api\IFolder
  • MatthiasWeb\RealMediaLibrary\api\IFolderActions
  • MatthiasWeb\RealMediaLibrary\api\IFolderContent
  • MatthiasWeb\RealMediaLibrary\api\IMetadata
  • MatthiasWeb\RealMediaLibrary\api\IStructure
  • MatthiasWeb\RealMediaLibrary\api\IUserSettings

Exceptions

  • MatthiasWeb\RealMediaLibrary\general\FolderAlreadyExistsException

Functions

  • _wp_rml_active
  • _wp_rml_root
  • _wp_rml_sanitize
  • _wp_rml_sanitize_filename
  • add_media_folder_meta
  • add_rml_meta_box
  • add_rml_user_settings_box
  • delete_media_folder_meta
  • delete_media_folder_meta_by_key
  • get_media_folder_meta
  • is_rml_folder
  • rml_skip_php_admin_notice
  • rml_skip_rest_admin_notice
  • rml_skip_wp_admin_notice
  • truncate_media_folder_meta
  • update_media_folder_meta
  • wp_attachment_ensure_source_file
  • wp_attachment_folder
  • wp_attachment_get_shortcuts
  • wp_attachment_has_shortcuts
  • wp_attachment_is_shortcut
  • wp_attachment_order_update
  • wp_rml_create
  • wp_rml_create_all_children_sql
  • wp_rml_create_all_parents_sql
  • wp_rml_create_or_return_existing_id
  • wp_rml_create_shortcuts
  • wp_rml_created_shortcuts_last_ids
  • wp_rml_delete
  • wp_rml_dropdown
  • wp_rml_dropdown_collection
  • wp_rml_dropdown_gallery
  • wp_rml_dropdown_gallery_or_collection
  • wp_rml_get_attachments
  • wp_rml_get_by_absolute_path
  • wp_rml_get_by_id
  • wp_rml_get_object_by_id
  • wp_rml_get_parent_id
  • wp_rml_is_type
  • wp_rml_move
  • wp_rml_objects
  • wp_rml_register_creatable
  • wp_rml_rename
  • wp_rml_root_childs
  • wp_rml_structure
  • wp_rml_structure_reset
  • wp_rml_update_count
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 
<?php
namespace MatthiasWeb\RealMediaLibrary\comp;
use MatthiasWeb\RealMediaLibrary\general;
use MatthiasWeb\RealMediaLibrary\attachment;
use MatthiasWeb\RealMediaLibrary\base;

defined( 'ABSPATH' ) or die( 'No script kiddies please!' );

/**
 * This class handles the compatibility for Poly Lang plugin.
 */
class PolyLang extends base\Base {
    
    private static $me = null;
    
    private $active = false;
    
    /**
     * Avoid duplicate call of move action.
     */
    private $previousIds = null;
    
    /**
     * Avoid duplicate call of move action.
     */
    private $previousFolderId = null;
    
    private function __construct($root = null) {
        // Silence is golden.
    }
    
    /**
     * Initialize actions.
     */
    public function init() {
        $this->active = function_exists("pll_get_post_translations");
        
        if ($this->active) {
            add_action('pll_translate_media',       array($this, 'pll_translate_media'), 10, 3);
            add_action('RML/Options/Register',      array($this, 'options_register'));
            add_action('RML/Item/MoveFinished',     array($this, 'item_move_finished'), 10, 4);
        }
    }
    
    /**
     * Register option for PolyLang.
     */
    public function options_register() {
        register_setting( 'media', 'rml_polylang_move', 'esc_attr' );
        add_settings_field(
            'rml_polylang_move',
            '<label for="rml_polylang_move">'.__('PolyLang: Automatically move translations' , RML_TD ).'</label>' ,
            array($this, 'html_options_move'),
            'media',
            'rml_options_general'
        );
    }
    
    public function html_options_move() {
        $value = get_option( 'rml_polylang_move', '1' );
        echo '<input type="checkbox" id="rml_polylang_move"
                name="rml_polylang_move" value="1" ' . checked(1, $value, false) . ' />
                <label>' . __('If you move a file also move the associated translation files.', RML_TD) . '</label>';
    }
    
    /**
     * A file is moved (not copied) and then move also all the translations.
     */
    public function item_move_finished($folderId, $ids, $folder, $isShortcut) {
        if (!$isShortcut && get_option( 'rml_polylang_move', '1' ) === '1'
            && json_encode($ids) !== json_encode($this->previousIds)
            && $folderId !== $this->previousFolderId) {
            $moveToFolder = array();
            $this->previousFolderId = $folderId;
            $this->previousIds = $ids;
            
            // Iterate all moved ids
            foreach ($ids as $post_id) {
                $translations = pll_get_post_translations($post_id);
                
                // Iterate all translation ids
                foreach ($translations as $tr_id) {
                    if (!in_array($tr_id, $ids)) {
                        $moveToFolder[] = $tr_id;
                    }
                }
            }
            
            if (count($moveToFolder) > 0) {
                $this->debug("Polylang: While moving to folder $folderId there are some translations which also must be moved: " . json_encode($moveToFolder), __METHOD__);
                wp_rml_move($folderId, $moveToFolder);
            }
        }
    }
    
    /**
     * New translation created => synchronize with original post.
     * Then reset the count cache for the unogranized folder.
     */
    public function pll_translate_media($post_id, $tr_id, $lang_slug) {
        $folderId = wp_attachment_folder($post_id);
        _wp_rml_synchronize_attachment($tr_id, $folderId);
        $this->debug("Polylang: Move translation id " . $tr_id . " to the original file (" . $post_id . ") folder id " . $folderId, __METHOD__);
        
        attachment\CountCache::getInstance()->addNewAttachment($tr_id)
            ->resetCountCacheOnWpDie(_wp_rml_root());
    }
    
    public static function getInstance() {
        if (self::$me == null) {
            self::$me = new PolyLang();
        }
        return self::$me;
    }
}

?>
API documentation generated by ApiGen