phpWord; } /** * Set PhpWord as reference. * * @param \PhpOffice\PhpWord\PhpWord $phpWord */ public function setPhpWord(PhpWord $phpWord = null) { $this->phpWord = $phpWord; } /** * Get section number * * @return int */ public function getSectionId() { return $this->sectionId; } /** * Set doc part. * * @param string $docPart * @param int $docPartId */ public function setDocPart($docPart, $docPartId = 1) { $this->docPart = $docPart; $this->docPartId = $docPartId; } /** * Get doc part * * @return string */ public function getDocPart() { return $this->docPart; } /** * Get doc part Id * * @return int */ public function getDocPartId() { return $this->docPartId; } /** * Return media element (image, object, link) container name * * @return string section|headerx|footerx|footnote|endnote */ private function getMediaPart() { $mediaPart = $this->docPart; if ($mediaPart == 'Header' || $mediaPart == 'Footer') { $mediaPart .= $this->docPartId; } return strtolower($mediaPart); } /** * Get element index * * @return int */ public function getElementIndex() { return $this->elementIndex; } /** * Set element index. * * @param int $value */ public function setElementIndex($value) { $this->elementIndex = $value; } /** * Get element unique ID * * @return string */ public function getElementId() { return $this->elementId; } /** * Set element unique ID from 6 first digit of md5. */ public function setElementId() { $this->elementId = substr(md5(rand()), 0, 6); } /** * Get relation Id * * @return int */ public function getRelationId() { return $this->relationId; } /** * Set relation Id. * * @param int $value */ public function setRelationId($value) { $this->relationId = $value; } /** * Get nested level * * @return int */ public function getNestedLevel() { return $this->nestedLevel; } /** * Get comment start * * @return Comment */ public function getCommentRangeStart() { return $this->commentRangeStart; } /** * Set comment start * * @param Comment $value */ public function setCommentRangeStart(Comment $value) { if ($this instanceof Comment) { throw new \InvalidArgumentException('Cannot set a Comment on a Comment'); } $this->commentRangeStart = $value; $this->commentRangeStart->setStartElement($this); } /** * Get comment end * * @return Comment */ public function getCommentRangeEnd() { return $this->commentRangeEnd; } /** * Set comment end * * @param Comment $value */ public function setCommentRangeEnd(Comment $value) { if ($this instanceof Comment) { throw new \InvalidArgumentException('Cannot set a Comment on a Comment'); } $this->commentRangeEnd = $value; $this->commentRangeEnd->setEndElement($this); } /** * Get parent element * * @return AbstractElement|null */ public function getParent() { return $this->parent; } /** * Set parent container * * Passed parameter should be a container, except for Table (contain Row) and Row (contain Cell) * * @param \PhpOffice\PhpWord\Element\AbstractElement $container */ public function setParentContainer(self $container) { $this->parentContainer = substr(get_class($container), strrpos(get_class($container), '\\') + 1); $this->parent = $container; // Set nested level $this->nestedLevel = $container->getNestedLevel(); if ($this->parentContainer == 'Cell') { $this->nestedLevel++; } // Set phpword $this->setPhpWord($container->getPhpWord()); // Set doc part if (!$this instanceof Footnote) { $this->setDocPart($container->getDocPart(), $container->getDocPartId()); } $this->setMediaRelation(); $this->setCollectionRelation(); } /** * Set relation Id for media elements (link, image, object; legacy of OOXML) * * - Image element needs to be passed to Media object * - Icon needs to be set for Object element */ private function setMediaRelation() { if (!$this instanceof Link && !$this instanceof Image && !$this instanceof OLEObject) { return; } $elementName = substr(get_class($this), strrpos(get_class($this), '\\') + 1); if ($elementName == 'OLEObject') { $elementName = 'Object'; } $mediaPart = $this->getMediaPart(); $source = $this->getSource(); $image = null; if ($this instanceof Image) { $image = $this; } $rId = Media::addElement($mediaPart, strtolower($elementName), $source, $image); $this->setRelationId($rId); if ($this instanceof OLEObject) { $icon = $this->getIcon(); $rId = Media::addElement($mediaPart, 'image', $icon, new Image($icon)); $this->setImageRelationId($rId); } } /** * Set relation Id for elements that will be registered in the Collection subnamespaces. */ private function setCollectionRelation() { if ($this->collectionRelation === true && $this->phpWord instanceof PhpWord) { $elementName = substr(get_class($this), strrpos(get_class($this), '\\') + 1); $addMethod = "add{$elementName}"; $rId = $this->phpWord->$addMethod($this); $this->setRelationId($rId); } } /** * Check if element is located in Section doc part (as opposed to Header/Footer) * * @return bool */ public function isInSection() { return $this->docPart == 'Section'; } /** * Set new style value * * @param mixed $styleObject Style object * @param mixed $styleValue Style value * @param bool $returnObject Always return object * @return mixed */ protected function setNewStyle($styleObject, $styleValue = null, $returnObject = false) { if (!is_null($styleValue) && is_array($styleValue)) { $styleObject->setStyleByArray($styleValue); $style = $styleObject; } else { $style = $returnObject ? $styleObject : $styleValue; } return $style; } /** * Sets the trackChange information * * @param TrackChange $trackChange */ public function setTrackChange(TrackChange $trackChange) { $this->trackChange = $trackChange; } /** * Gets the trackChange information * * @return TrackChange */ public function getTrackChange() { return $this->trackChange; } /** * Set changed * * @param string $type INSERTED|DELETED * @param string $author * @param null|int|\DateTime $date allways in UTC */ public function setChangeInfo($type, $author, $date = null) { $this->trackChange = new TrackChange($type, $author, $date); } /** * Set enum value * * @param string|null $value * @param string[] $enum * @param string|null $default * * @throws \InvalidArgumentException * @return string|null * * @todo Merge with the same method in AbstractStyle */ protected function setEnumVal($value = null, $enum = array(), $default = null) { if ($value !== null && trim($value) != '' && !empty($enum) && !in_array($value, $enum)) { throw new \InvalidArgumentException("Invalid style value: {$value}"); } elseif ($value === null || trim($value) == '') { $value = $default; } return $value; } }