PhpOffice\PhpPresentation\Writer\PowerPoint2007\LayoutPack\TemplateBased::__construct PHP Method

__construct() public method

\PhpOffice\PhpPresentation\Writer\PowerPoint2007\LayoutPack\TemplateBased
public __construct ( string $fileName = '' )
$fileName string
    public function __construct($fileName = '')
    {
        // Check if file exists
        if (!file_exists($fileName)) {
            throw new \Exception("Could not open " . $fileName . " for reading! File does not exist.");
        }
        // Master slide relations
        $this->masterSlideRels = array();
        // Theme relations
        $this->themeRelations = array();
        // Layout relations
        $this->layoutRelations = array();
        // Open package
        $package = new \ZipArchive();
        $package->open($fileName);
        // Read relations and search for officeDocument
        $relations = simplexml_load_string($package->getFromName("_rels/.rels"));
        foreach ($relations->Relationship as $rel) {
            if ($rel["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument") {
                // Found office document! Search for master slide...
                $presentationRels = simplexml_load_string($package->getFromName($this->absoluteZipPath(dirname($rel["Target"]) . "/_rels/" . basename($rel["Target"]) . ".rels")));
                foreach ($presentationRels->Relationship as $presRel) {
                    if ($presRel["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster") {
                        // Found slide master!
                        $slideMasterId = str_replace('slideMaster', '', basename($presRel["Target"], '.xml'));
                        $this->masterSlides[] = array('masterid' => $slideMasterId, 'body' => $package->getFromName($this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($presRel["Target"]) . "/" . basename($presRel["Target"]))));
                        // Search for theme & slide layouts
                        $masterRelations = simplexml_load_string($package->getFromName($this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($presRel["Target"]) . "/_rels/" . basename($presRel["Target"]) . ".rels")));
                        foreach ($masterRelations->Relationship as $masterRel) {
                            if ($masterRel["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme") {
                                // Found theme!
                                $themeId = str_replace('theme', '', basename($masterRel["Target"], '.xml'));
                                $this->themes[$themeId - 1] = array('masterid' => $slideMasterId, 'body' => $package->getFromName($this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($presRel["Target"]) . "/" . dirname($masterRel["Target"]) . "/" . basename($masterRel["Target"]))));
                                // Search for theme relations
                                $themeRelations = @simplexml_load_string($package->getFromName($this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($presRel["Target"]) . "/" . dirname($masterRel["Target"]) . "/_rels/" . basename($masterRel["Target"]) . ".rels")));
                                if ($themeRelations && $themeRelations->Relationship) {
                                    foreach ($themeRelations->Relationship as $themeRel) {
                                        if ($themeRel["Type"] != "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" && $themeRel["Type"] != "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" && $themeRel["Type"] != "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme") {
                                            // Theme relation
                                            $this->themeRelations[] = array('masterid' => $slideMasterId, 'id' => $themeRel["Id"], 'type' => $themeRel["Type"], 'contentType' => '', 'target' => $themeRel["Target"], 'contents' => $package->getFromName($this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($presRel["Target"]) . "/" . dirname($masterRel["Target"]) . "/" . dirname($themeRel["Target"]) . "/" . basename($themeRel["Target"]))));
                                        }
                                    }
                                }
                            } elseif ($masterRel["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout") {
                                // Found slide layout!
                                $layoutId = str_replace('slideLayout', '', basename($masterRel["Target"], '.xml'));
                                $layout = array('id' => $layoutId, 'masterid' => $slideMasterId, 'name' => '-unknown-', 'body' => $package->getFromName($this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($presRel["Target"]) . "/" . dirname($masterRel["Target"]) . "/" . basename($masterRel["Target"]))));
                                if (utf8_encode(utf8_decode($layout['body'])) == $layout['body']) {
                                    $layoutXml = simplexml_load_string($layout['body']);
                                } else {
                                    $layoutXml = simplexml_load_string(utf8_encode($layout['body']));
                                }
                                $layoutXml->registerXPathNamespace("p", "http://schemas.openxmlformats.org/presentationml/2006/main");
                                $slide = $layoutXml->xpath('/p:sldLayout/p:cSld');
                                $layout['name'] = (string) $slide[0]['name'];
                                $this->layouts[$layoutId] = $layout;
                                // Search for slide layout relations
                                $layoutRelations = @simplexml_load_string($package->getFromName($this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($presRel["Target"]) . "/" . dirname($masterRel["Target"]) . "/_rels/" . basename($masterRel["Target"]) . ".rels")));
                                if ($layoutRelations && $layoutRelations->Relationship) {
                                    foreach ($layoutRelations->Relationship as $layoutRel) {
                                        if ($layoutRel["Type"] != "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster" && $layoutRel["Type"] != "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" && $layoutRel["Type"] != "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme") {
                                            // Layout relation
                                            $this->layoutRelations[] = array('layoutId' => $layoutId, 'id' => $layoutRel["Id"], 'type' => $layoutRel["Type"], 'contentType' => '', 'target' => $layoutRel["Target"], 'contents' => $package->getFromName($this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($presRel["Target"]) . "/" . dirname($masterRel["Target"]) . "/" . dirname($layoutRel["Target"]) . "/" . basename($layoutRel["Target"]))));
                                        }
                                    }
                                }
                            } else {
                                // Master slide relation
                                $this->masterSlideRels[] = array('masterid' => $slideMasterId, 'id' => $masterRel["Id"], 'type' => $masterRel["Type"], 'contentType' => '', 'target' => $masterRel["Target"], 'contents' => $package->getFromName($this->absoluteZipPath(dirname($rel["Target"]) . "/" . dirname($presRel["Target"]) . "/" . dirname($masterRel["Target"]) . "/" . basename($masterRel["Target"]))));
                            }
                        }
                    }
                }
                break;
            }
        }
        // Sort master slides
        usort($this->masterSlides, array("\\PhpOffice\\PhpPresentation\\Writer\\PowerPoint2007\\LayoutPack\\TemplateBased", "cmpMaster"));
        // Close package
        $package->close();
    }