ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
ilPCParagraph Class Reference

Class ilPCParagraph. More...

+ Inheritance diagram for ilPCParagraph:
+ Collaboration diagram for ilPCParagraph:

Public Member Functions

 init ()
 Init page content component. More...
 
 setNode ($a_node)
 Set Page Content Node. More...
 
 createAtNode (&$node)
 Create new page content (incl. More...
 
 createBeforeNode (&$node)
 Create new page content (incl. More...
 
 createAfter ($node)
 Create paragraph node (incl. More...
 
 create (&$a_pg_obj, $a_hier_id, $a_pc_id="")
 Create paragraph node (incl. More...
 
 setText ($a_text, $a_auto_split=false)
 Set (xml) content of text paragraph. More...
 
 getText ($a_short_mode=false)
 Get (xml) content of paragraph. More...
 
 getParagraphSequenceContent ($a_pg_obj)
 Get paragraph sequenc of current paragraph. More...
 
 setCharacteristic ($a_char)
 Set Characteristic of paragraph. More...
 
 getCharacteristic ()
 Get characteristic of paragraph. More...
 
 setSubCharacteristic ($a_char)
 set attribute subcharacteristic More...
 
 getAutoIndent ()
 Get AutoIndent (Code Paragraphs) More...
 
 setAutoIndent ($a_char)
 
 getSubCharacteristic ()
 get attribute subcharacteristic More...
 
 setDownloadTitle ($a_char)
 set attribute download title More...
 
 getDownloadTitle ()
 get attribute download title More...
 
 setShowLineNumbers ($a_char)
 set attribute showlinenumbers More...
 
 getShowLineNumbers ()
 get attribute showlinenumbers More...
 
 setLanguage ($a_lang)
 set language More...
 
 getLanguage ()
 get language More...
 
 input2xml ($a_text, $a_wysiwyg=0, $a_handle_lists=true)
 
 autoSplit ($a_text)
 This function splits a paragraph text that has been already processed with input2xml at each header position =header1=, ==header2== or ===header3=== and returns an array that contains the single chunks. More...
 
 handleNextBr ($a_str)
 Remove preceding
More...
 
 removeTrailingBr ($a_str)
 Remove trailing
More...
 
 getType ()
 Need to override getType from ilPageContent to distinguish between Pararagraph and Source. More...
 
 saveJS ($a_pg_obj, $a_content, $a_char, $a_pc_id, $a_insert_at="")
 Save input coming from ajax. More...
 
 getLastSavedPCId ($a_pg_obj, $a_as_ajax_str=false)
 Get last inserted pc ids. More...
 
 updatePage ($a_page)
 Update page object (it would be better to have this centralized and to change the constructors and pass the page object instead the dom object) More...
 
 autoLinkGlossaries ($a_glos)
 Auto link glossaries. More...
 
 getJavascriptFiles ($a_mode)
 Get Javascript files. More...
 
 getOnloadCode ($a_mode)
 Get onload code. More...
 
- Public Member Functions inherited from ilPageContent
 __construct ($a_pg_obj)
 Constructor. More...
 
 setPage ($a_val)
 Set page. More...
 
 getPage ()
 Get page. More...
 
 init ()
 Init object. More...
 
 getType ()
 Get type of page content. More...
 
 setNode ($a_node)
 Set xml node of page content. More...
 
getNode ()
 Get xml node of page content. More...
 
 getJavascriptFiles ($a_mode)
 Get Javascript files. More...
 
 getCssFiles ($a_mode)
 Get css files. More...
 
 getOnloadCode ($a_mode)
 Get on load code. More...
 
 setHierId ($a_hier_id)
 Set hierarchical ID in xml structure. More...
 
 getHierId ()
 Get hierarchical id. More...
 
 lookupHierId ()
 Get hierarchical id from dom. More...
 
 readHierId ()
 Read PC Id. More...
 
 setPcId ($a_pcid)
 Set PC Id. More...
 
 getPCId ()
 Get PC Id. More...
 
 setFileDownloadLink ($a_download_link)
 Set file download link. More...
 
 getFileDownloadLink ()
 Get file download link. More...
 
 setFullscreenLink ($a_fullscreen_link)
 Set fullscreen link. More...
 
 getFullscreenLink ()
 Get fullscreen link. More...
 
 setSourcecodeDownloadScript ($script_name)
 Set sourcecode download script. More...
 
 getSourcecodeDownloadScript ()
 Get sourcecode download script. More...
 
 readPCId ()
 Read PC Id. More...
 
 writePCId ($a_pc_id)
 Write pc id. More...
 
 setEnabled ($value)
 Set Enabled value for page content component. More...
 
 enable ()
 Enable page content. More...
 
 disable ()
 Disable page content. More...
 
 isEnabled ()
 Check whether page content is enabled. More...
 
 createPageContentNode ($a_set_this_node=true)
 Create page content node (always use this method first when adding a new element) More...
 
 modifyPageContentPostXsl ($a_output, $a_mode)
 Modify page content after xsl. More...
 

Static Public Member Functions

static _input2xml ($a_text, $a_lang, $a_wysiwyg=0, $a_handle_lists=true)
 converts user input to xml More...
 
static intLinks2xml ($a_text)
 internal links to xml More...
 
static input2xmlReplaceLists ($a_text)
 Converts xml from DB to output in edit textarea. More...
 
static xml2outputReplaceLists ($a_text)
 Replaces

with *. More...

 
static segmentString ($a_haystack, $a_needles)
 Segments a string into an array at each position of a substring. More...
 
static xml2output ($a_text, $a_wysiwyg=false, $a_replace_lists=true, $unmask=true)
 Converts xml from DB to output in edit textarea. More...
 
static handleAjaxContent ($a_content)
 Handle ajax content. More...
 
static handleAjaxContentPost ($text)
 Post input2xml handling of ajax content. More...
 
static autoLinkGlossariesPage ($a_page, $a_terms)
 Auto link glossary of whole page. More...
 
static afterPageUpdate ($a_page, DOMDocument $a_domdoc, $a_xml, $a_creation)
 After page has been updated (or created) More...
 
static beforePageDelete ($a_page)
 Before page is being deleted. More...
 
static afterPageHistoryEntry ($a_page, DOMDocument $a_old_domdoc, $a_old_xml, $a_old_nr)
 After page history entry has been created. More...
 
static saveAnchors ($a_page, $a_domdoc)
 Save anchors. More...
 
static _deleteAnchors ($a_parent_type, $a_page_id, $a_page_lang)
 Delete anchors of a page. More...
 
static _saveAnchor ($a_parent_type, $a_page_id, $a_page_lang, $a_anchor_name)
 Save an anchor. More...
 
static _readAnchors ($a_parent_type, $a_page_id, $a_page_lang="-")
 Read anchors of a page. More...
 
static saveMetaKeywords ($a_page, $a_domdoc)
 save all keywords More...
 
- Static Public Member Functions inherited from ilPageContent
static incEdId ($ed_id)
 Increases an hierarchical editing id at lowest level (last number) More...
 
static decEdId ($ed_id)
 Decreases an hierarchical editing id at lowest level (last number) More...
 
static haveSameContainer ($ed_id1, $ed_id2)
 Check, if two ids are in same container. More...
 
static sortHierIds ($a_array)
 Sort an array of Hier IDS in ascending order. More...
 
static isGreaterHierId ($a, $b)
 Check whether Hier ID $a is greater than Hier ID $b. More...
 
static getLangVars ()
 Get lang vars needed for editing. More...
 
static handleCopiedContent (DOMDocument $a_domdoc, $a_self_ass=true, $a_clone_mobs=false)
 Handle copied content. More...
 
static afterPageUpdate ($a_page, DOMDocument $a_domdoc, $a_xml, $a_creation)
 After page has been updated (or created) More...
 
static beforePageDelete ($a_page)
 Before page is being deleted. More...
 
static afterPageHistoryEntry ($a_page, DOMDocument $a_old_domdoc, $a_old_xml, $a_old_nr)
 After page history entry has been created. More...
 

Data Fields

 $dom
 
 $par_node
 
- Data Fields inherited from ilPageContent
 $hier_id
 
 $node
 
 $dom
 
 $page_lang
 

Static Protected Member Functions

static getBBMap ()
 Get bb to xml tag map. More...
 
static getXMLTagMap ()
 Get tag to bb map. More...
 
static replaceBBCode ($a_text, $a_bb, $a_tag)
 Replace bb code. More...
 
static linkTermsInDom ($a_dom, $a_terms, $a_par_node=null)
 Link terms in a dom page object in bb style. More...
 

Protected Attributes

 $user
 
- Protected Attributes inherited from ilPageContent
 $file_download_link
 
 $fullscreen_link
 
 $sourcecode_download_script
 
 $log
 

Static Protected Attributes

static $bb_tags
 

Additional Inherited Members

- Protected Member Functions inherited from ilPageContent
 setType ($a_type)
 Set Type. More...
 

Detailed Description

Class ilPCParagraph.

Paragraph of ilPageObject

Author
Alex Killing alex..nosp@m.kill.nosp@m.ing@g.nosp@m.mx.d.nosp@m.e
Version
$Id$

Definition at line 16 of file class.ilPCParagraph.php.

Member Function Documentation

◆ _deleteAnchors()

static ilPCParagraph::_deleteAnchors (   $a_parent_type,
  $a_page_id,
  $a_page_lang 
)
static

Delete anchors of a page.

Definition at line 1873 of file class.ilPCParagraph.php.

1874 {
1875 global $DIC;
1876
1877 $ilDB = $DIC->database();
1878
1879 $ilDB->manipulate(
1880 "DELETE FROM page_anchor WHERE " .
1881 " page_parent_type = " . $ilDB->quote($a_parent_type, "text") .
1882 " AND page_id = " . $ilDB->quote($a_page_id, "integer") .
1883 " AND page_lang = " . $ilDB->quote($a_page_lang, "text")
1884 );
1885 }
global $DIC
Definition: saml.php:7
global $ilDB

References $DIC, and $ilDB.

Referenced by beforePageDelete(), and saveAnchors().

+ Here is the caller graph for this function:

◆ _input2xml()

static ilPCParagraph::_input2xml (   $a_text,
  $a_lang,
  $a_wysiwyg = 0,
  $a_handle_lists = true 
)
static

converts user input to xml

Definition at line 511 of file class.ilPCParagraph.php.

512 {
513 if (!$a_wysiwyg) {
514 $a_text = ilUtil::stripSlashes($a_text, false);
515 }
516
517 if ($a_wysiwyg) {
518 $a_text = str_replace("<br />", chr(10), $a_text);
519 }
520
521 // note: the order of the processing steps is crucial
522 // and should be the same as in xml2output() in REVERSE order!
523 $a_text = trim($a_text);
524
525 //echo "<br>between:".htmlentities($a_text);
526
527 // mask html
528 if (!$a_wysiwyg) {
529 $a_text = str_replace("&", "&amp;", $a_text);
530 }
531 $a_text = str_replace("<", "&lt;", $a_text);
532 $a_text = str_replace(">", "&gt;", $a_text);
533
534 // Reconvert PageTurn and BibItemIdentifier
535 $a_text = preg_replace('/&lt;([\s\/]*?PageTurn.*?)&gt;/i', "<$1>", $a_text);
536 $a_text = preg_replace('/&lt;([\s\/]*?BibItemIdentifier.*?)&gt;/i', "<$1>", $a_text);
537
538 //echo "<br>second:".htmlentities($a_text);
539
540 // mask curly brackets
541 /*
542 echo htmlentities($a_text);
543 $a_text = str_replace("{", "&#123;", $a_text);
544 $a_text = str_replace("}", "&#125;", $a_text);
545 echo htmlentities($a_text);*/
546 // linefeed to br
547 $a_text = str_replace(chr(13) . chr(10), "<br />", $a_text);
548 $a_text = str_replace(chr(13), "<br />", $a_text);
549 $a_text = str_replace(chr(10), "<br />", $a_text);
550
551 if ($a_handle_lists) {
552 $a_text = ilPCParagraph::input2xmlReplaceLists($a_text);
553 }
554
555 foreach (self::getBBMap() as $bb => $tag) {
556 // remove empty tags
557 $a_text = str_replace("[" . $bb . "][/" . $bb . "]", "", $a_text);
558
559 // replace bb code by tag
560 $a_text = self::replaceBBCode($a_text, $bb, $tag);
561 }
562
563 $a_text = self::intLinks2xml($a_text);
564
565 // external link
566 $ws = "[ \t\r\f\v\n]*";
567 // remove empty external links
568 while (preg_match("~\[(xln$ws(url$ws=$ws\"([^\"])*\")$ws(target$ws=$ws(\"(Glossary|FAQ|Media)\"))?$ws)\]\[\/xln\]~i", $a_text, $found)) {
569 $a_text = str_replace($found[0], "", $a_text);
570 }
571 while (preg_match('~\[(xln$ws(url$ws=$ws(([^]])*)))$ws\]\[\/xln\]~i', $a_text, $found)) {
572 $a_text = str_replace($found[0], "", $a_text);
573 }
574 // external links
575 while (preg_match("~\[(xln$ws(url$ws=$ws\"([^\"])*\")$ws(target$ws=$ws(\"(Glossary|FAQ|Media)\"))?$ws)\]~i", $a_text, $found)) {
576 $attribs = ilUtil::attribsToArray($found[2]);
577 if (isset($attribs["url"])) {
578 $a2 = ilUtil::attribsToArray($found[4]);
579 $tstr = "";
580 if (in_array($a2["target"], array("FAQ", "Glossary", "Media"))) {
581 $tstr = ' TargetFrame="' . $a2["target"] . '"';
582 }
583 $a_text = str_replace("[" . $found[1] . "]", "<ExtLink Href=\"" . $attribs["url"] . "\"$tstr>", $a_text);
584 } else {
585 $a_text = str_replace("[" . $found[1] . "]", "[error: xln" . $found[1] . "]", $a_text);
586 }
587 }
588
589 // ie/tinymce fix for links without "", see bug #8391
590 while (preg_match('~\[(xln$ws(url$ws=$ws(([^]])*)))$ws\]~i', $a_text, $found)) {
591 if ($found[3] != "") {
592 $a_text = str_replace("[" . $found[1] . "]", "<ExtLink Href=\"" . $found[3] . "\">", $a_text);
593 } else {
594 $a_text = str_replace("[" . $found[1] . "]", "[error: xln" . $found[1] . "]", $a_text);
595 }
596 }
597 $a_text = preg_replace('~\[\/xln\]~i', "</ExtLink>", $a_text);
598
599 // anchor
600 $ws = "[ \t\r\f\v\n]*";
601 while (preg_match("~\[(anc$ws(name$ws=$ws\"([^\"])*\")$ws)\]~i", $a_text, $found)) {
602 $attribs = ilUtil::attribsToArray($found[2]);
603 $a_text = str_replace("[" . $found[1] . "]", "<Anchor Name=\"" . $attribs["name"] . "\">", $a_text);
604 }
605 $a_text = preg_replace("~\[\/anc\]~i", "</Anchor>", $a_text);
606
607 // marked text
608 while (preg_match("~\[(marked$ws(class$ws=$ws\"([^\"])*\")$ws)\]~i", $a_text, $found)) {
609 $attribs = ilUtil::attribsToArray($found[2]);
610 if (isset($attribs["class"])) {
611 $a_text = str_replace("[" . $found[1] . "]", "<Marked Class=\"" . $attribs["class"] . "\">", $a_text);
612 } else {
613 $a_text = str_replace("[" . $found[1] . "]", "[error:marked" . $found[1] . "]", $a_text);
614 }
615 }
616 $a_text = preg_replace('~\[\/marked\]~i', "</Marked>", $a_text);
617
618
619 //echo htmlentities($a_text); exit;
620 return $a_text;
621 }
static intLinks2xml($a_text)
internal links to xml
static input2xmlReplaceLists($a_text)
Converts xml from DB to output in edit textarea.
static replaceBBCode($a_text, $a_bb, $a_tag)
Replace bb code.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ... into an array
if(function_exists( 'posix_getuid') &&posix_getuid()===0) if(!array_key_exists('t', $options)) $tag
Definition: cron.php:35

References $tag, ilUtil\attribsToArray(), input2xmlReplaceLists(), intLinks2xml(), replaceBBCode(), and ilUtil\stripSlashes().

Referenced by input2xml(), ilPCDataTableGUI\update(), and ilPCDataTableGUI\updateJS().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ _readAnchors()

static ilPCParagraph::_readAnchors (   $a_parent_type,
  $a_page_id,
  $a_page_lang = "-" 
)
static

Read anchors of a page.

Definition at line 1908 of file class.ilPCParagraph.php.

1909 {
1910 global $DIC;
1911
1912 $ilDB = $DIC->database();
1913
1914 $and_lang = ($a_page_lang != "")
1915 ? " AND page_lang = " . $ilDB->quote($a_page_lang, "text")
1916 : "";
1917
1918 $set = $ilDB->query(
1919 "SELECT * FROM page_anchor " .
1920 " WHERE page_parent_type = " . $ilDB->quote($a_parent_type, "text") .
1921 " AND page_id = " . $ilDB->quote($a_page_id, "integer") .
1922 $and_lang
1923 );
1924 $anchors = array();
1925 while ($rec = $ilDB->fetchAssoc($set)) {
1926 $anchors[] = $rec["anchor_name"];
1927 }
1928 return $anchors;
1929 }

References $DIC, and $ilDB.

Referenced by ilInternalLinkGUI\showLinkHelp().

+ Here is the caller graph for this function:

◆ _saveAnchor()

static ilPCParagraph::_saveAnchor (   $a_parent_type,
  $a_page_id,
  $a_page_lang,
  $a_anchor_name 
)
static

Save an anchor.

Definition at line 1890 of file class.ilPCParagraph.php.

1891 {
1892 global $DIC;
1893
1894 $ilDB = $DIC->database();
1895
1896 $ilDB->manipulate("INSERT INTO page_anchor " .
1897 "(page_parent_type, page_id, page_lang, anchor_name) VALUES (" .
1898 $ilDB->quote($a_parent_type, "text") . "," .
1899 $ilDB->quote($a_page_id, "integer") . "," .
1900 $ilDB->quote($a_page_lang, "text") . "," .
1901 $ilDB->quote($a_anchor_name, "text") .
1902 ")");
1903 }

References $DIC, and $ilDB.

Referenced by saveAnchors().

+ Here is the caller graph for this function:

◆ afterPageHistoryEntry()

static ilPCParagraph::afterPageHistoryEntry (   $a_page,
DOMDocument  $a_old_domdoc,
  $a_old_xml,
  $a_old_nr 
)
static

After page history entry has been created.

Parameters
object$a_pagepage object
DOMDocument$a_old_domdocold dom document
string$a_old_xmlold xml
integer$a_old_nrhistory number

Reimplemented from ilPageContent.

Definition at line 1844 of file class.ilPCParagraph.php.

1845 {
1846 }

◆ afterPageUpdate()

static ilPCParagraph::afterPageUpdate (   $a_page,
DOMDocument  $a_domdoc,
  $a_xml,
  $a_creation 
)
static

After page has been updated (or created)

Parameters
object$a_pagepage object
DOMDocument$a_domdocdom document
string$a_xmlxml
bool$a_creationtrue on creation, otherwise false

Reimplemented from ilPageContent.

Definition at line 1818 of file class.ilPCParagraph.php.

1819 {
1820 // pc paragraph
1821 self::saveMetaKeywords($a_page, $a_domdoc);
1822 self::saveAnchors($a_page, $a_domdoc);
1823 }
static saveAnchors($a_page, $a_domdoc)
Save anchors.
static saveMetaKeywords($a_page, $a_domdoc)
save all keywords

References saveAnchors(), and saveMetaKeywords().

+ Here is the call graph for this function:

◆ autoLinkGlossaries()

ilPCParagraph::autoLinkGlossaries (   $a_glos)

Auto link glossaries.

Parameters

return

Definition at line 1629 of file class.ilPCParagraph.php.

1630 {
1631 if (is_array($a_glos) && count($a_glos) > 0) {
1632 include_once("./Modules/Glossary/classes/class.ilGlossaryTerm.php");
1633
1634 // check which terms occur in the text (we may
1635 // get some false positives due to the strip_tags, but
1636 // we do not want to find strong or list or other stuff
1637 // within the tags
1638 $text = strip_tags($this->getText());
1639 $found_terms = array();
1640 foreach ($a_glos as $glo) {
1641 if (ilObject::_lookupType($glo) == "glo") {
1642 $ref_ids = ilObject::_getAllReferences($glo);
1643 $glo_ref_id = current($ref_ids);
1644 if ($glo_ref_id > 0) {
1645 $terms = ilGlossaryTerm::getTermList($glo_ref_id);
1646 foreach ($terms as $t) {
1647 if (is_int(stripos($text, $t["term"]))) {
1648 $found_terms[$t["id"]] = $t;
1649 }
1650 }
1651 }
1652 }
1653 }
1654
1655 // did we find anything? -> modify content
1656 if (count($found_terms) > 0) {
1657 self::linkTermsInDom($this->dom, $found_terms, $this->par_node);
1658 }
1659 }
1660 }
static getTermList( $a_glo_ref_id, $searchterm="", $a_first_letter="", $a_def="", $a_tax_node=0, $a_add_amet_fields=false, array $a_amet_filter=null, $a_include_references=false)
Get all terms for given set of glossary ids.
static _getAllReferences($a_id)
get all reference ids of object
static _lookupType($a_id, $a_reference=false)
lookup object type
getText($a_short_mode=false)
Get (xml) content of paragraph.
static linkTermsInDom($a_dom, $a_terms, $a_par_node=null)
Link terms in a dom page object in bb style.
$text
Definition: errorreport.php:18

References $t, $text, ilObject\_getAllReferences(), ilObject\_lookupType(), ilGlossaryTerm\getTermList(), getText(), and linkTermsInDom().

+ Here is the call graph for this function:

◆ autoLinkGlossariesPage()

static ilPCParagraph::autoLinkGlossariesPage (   $a_page,
  $a_terms 
)
static

Auto link glossary of whole page.

Parameters

return

Definition at line 1801 of file class.ilPCParagraph.php.

1802 {
1803 $a_page->buildDom();
1804 $a_dom = $a_page->getDom();
1805 self::linkTermsInDom($a_dom, $a_terms);
1806
1807 $a_page->update();
1808 }

References linkTermsInDom().

Referenced by ilObjGlossary\autoLinkGlossaryTerms(), and ilObjContentObject\autoLinkGlossaryTerms().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ autoSplit()

ilPCParagraph::autoSplit (   $a_text)

This function splits a paragraph text that has been already processed with input2xml at each header position =header1=, ==header2== or ===header3=== and returns an array that contains the single chunks.

Definition at line 1162 of file class.ilPCParagraph.php.

1163 {
1164 $a_text = str_replace("=<SimpleBulletList>", "=<br /><SimpleBulletList>", $a_text);
1165 $a_text = str_replace("=<SimpleNumberedList>", "=<br /><SimpleNumberedList>", $a_text);
1166 $a_text = str_replace("</SimpleBulletList>=", "</SimpleBulletList><br />=", $a_text);
1167 $a_text = str_replace("</SimpleNumberedList>=", "</SimpleNumberedList><br />=", $a_text);
1168 $a_text = "<br />" . $a_text . "<br />"; // add preceding and trailing br
1169
1170 $chunks = array();
1171 $c_text = $a_text;
1172 //echo "0";
1173 while ($c_text != "") {
1174 //var_dump($c_text); flush();
1175 //echo "1";
1176 $s1 = strpos($c_text, "<br />=");
1177 if (is_int($s1)) {
1178 //echo "2";
1179 $s2 = strpos($c_text, "<br />==");
1180 if (is_int($s2) && $s2 <= $s1) {
1181 //echo "3";
1182 $s3 = strpos($c_text, "<br />===");
1183 if (is_int($s3) && $s3 <= $s2) { // possible level three header
1184 //echo "4";
1185 $n = strpos($c_text, "<br />", $s3 + 1);
1186 if ($n > ($s3 + 9) && substr($c_text, $n - 3, 9) == "===<br />") {
1187 //echo "5";
1188 // found level three header
1189 if ($s3 > 0 || $head != "") {
1190 //echo "6";
1191 $chunks[] = array("level" => 0,
1192 "text" => $this->removeTrailingBr($head . substr($c_text, 0, $s3)));
1193 $head = "";
1194 }
1195 $chunks[] = array("level" => 3,
1196 "text" => trim(substr($c_text, $s3 + 9, $n - $s3 - 12)));
1197 $c_text = $this->handleNextBr(substr($c_text, $n + 6));
1198 } else {
1199 //echo "7";
1200 $head .= substr($c_text, 0, $n);
1201 $c_text = substr($c_text, $n);
1202 }
1203 } else { // possible level two header
1204 //echo "8";
1205 $n = strpos($c_text, "<br />", $s2 + 1);
1206 if ($n > ($s2 + 8) && substr($c_text, $n - 2, 8) == "==<br />") {
1207 //echo "9";
1208 // found level two header
1209 if ($s2 > 0 || $head != "") {
1210 //echo "A";
1211 $chunks[] = array("level" => 0,
1212 "text" => $this->removeTrailingBr($head . substr($c_text, 0, $s2)));
1213 $head = "";
1214 }
1215 $chunks[] = array("level" => 2, "text" => trim(substr($c_text, $s2 + 8, $n - $s2 - 10)));
1216 $c_text = $this->handleNextBr(substr($c_text, $n + 6));
1217 } else {
1218 //echo "B";
1219 $head .= substr($c_text, 0, $n);
1220 $c_text = substr($c_text, $n);
1221 }
1222 }
1223 } else { // possible level one header
1224 //echo "C";
1225 $n = strpos($c_text, "<br />", $s1 + 1);
1226 if ($n > ($s1 + 7) && substr($c_text, $n - 1, 7) == "=<br />") {
1227 //echo "D";
1228 // found level one header
1229 if ($s1 > 0 || $head != "") {
1230 //echo "E";
1231 $chunks[] = array("level" => 0,
1232 "text" => $this->removeTrailingBr($head . substr($c_text, 0, $s1)));
1233 $head = "";
1234 }
1235 $chunks[] = array("level" => 1, "text" => trim(substr($c_text, $s1 + 7, $n - $s1 - 8)));
1236 $c_text = $this->handleNextBr(substr($c_text, $n + 6));
1237 //echo "<br>ctext:".htmlentities($c_text)."<br>";
1238 } else {
1239 $head .= substr($c_text, 0, $n);
1240 $c_text = substr($c_text, $n);
1241 //echo "<br>head:".$head."c_text:".$c_text."<br>";
1242 }
1243 }
1244 } else {
1245 //echo "G";
1246 $chunks[] = array("level" => 0, "text" => $head . $c_text);
1247 $head = "";
1248 $c_text = "";
1249 }
1250 }
1251 if (count($chunks) == 0) {
1252 $chunks[] = array("level" => 0, "text" => "");
1253 }
1254
1255
1256 // remove preceding br
1257 if (substr($chunks[0]["text"], 0, 6) == "<br />") {
1258 $chunks[0]["text"] = substr($chunks[0]["text"], 6);
1259 }
1260
1261 // remove trailing br
1262 if (substr(
1263 $chunks[count($chunks) - 1]["text"],
1264 strlen($chunks[count($chunks) - 1]["text"]) - 6,
1265 6
1266 ) == "<br />") {
1267 $chunks[count($chunks) - 1]["text"] =
1268 substr($chunks[count($chunks) - 1]["text"], 0, strlen($chunks[count($chunks) - 1]["text"]) - 6);
1269 if ($chunks[count($chunks) - 1]["text"] == "") {
1270 unset($chunks[count($chunks) - 1]);
1271 }
1272 }
1273 return $chunks;
1274 }
$n
Definition: RandomTest.php:85
handleNextBr($a_str)
Remove preceding
removeTrailingBr($a_str)
Remove trailing

References $n, handleNextBr(), and removeTrailingBr().

Referenced by setText().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ beforePageDelete()

static ilPCParagraph::beforePageDelete (   $a_page)
static

Before page is being deleted.

Parameters
object$a_pagepage object

Reimplemented from ilPageContent.

Definition at line 1830 of file class.ilPCParagraph.php.

1831 {
1832 // delete anchors
1833 self::_deleteAnchors($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage());
1834 }
static _deleteAnchors($a_parent_type, $a_page_id, $a_page_lang)
Delete anchors of a page.

References _deleteAnchors().

+ Here is the call graph for this function:

◆ create()

ilPCParagraph::create ( $a_pg_obj,
  $a_hier_id,
  $a_pc_id = "" 
)

Create paragraph node (incl.

page content node) at given hierarchical ID.

Parameters
object$a_pg_objPage Object
string$a_hier_idHierarchical ID

Definition at line 146 of file class.ilPCParagraph.php.

147 {
148 //echo "-$a_pc_id-";
149 //echo "<br>-".htmlentities($a_pg_obj->getXMLFromDom())."-<br><br>"; mk();
150 $this->node = $this->dom->create_element("PageContent");
151
152 // this next line kicks out placeholders, if something is inserted
153 $a_pg_obj->insertContent($this, $a_hier_id, IL_INSERT_AFTER, $a_pc_id);
154
155 $this->par_node = $this->dom->create_element("Paragraph");
156 $this->par_node = $this->node->append_child($this->par_node);
157 $this->par_node->set_attribute("Language", "");
158 }
const IL_INSERT_AFTER

References IL_INSERT_AFTER.

◆ createAfter()

ilPCParagraph::createAfter (   $node)

Create paragraph node (incl.

page content node) after given node.

Parameters
object$nodePredecessing node

Definition at line 125 of file class.ilPCParagraph.php.

126 {
127 $this->node = $this->createPageContentNode(false);
128 if ($succ_node = $node->next_sibling()) {
129 $this->node = $succ_node->insert_before($this->node, $succ_node);
130 } else {
131 $parent_node = $node->parent_node();
132 $this->node = $parent_node->append_child($this->node);
133 }
134 $this->par_node = $this->dom->create_element("Paragraph");
135 $this->par_node = $this->node->append_child($this->par_node);
136 $this->par_node->set_attribute("Language", "");
137 }
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element)

References ilPageContent\$node, and ilPageContent\createPageContentNode().

+ Here is the call graph for this function:

◆ createAtNode()

ilPCParagraph::createAtNode ( $node)

Create new page content (incl.

paragraph) node at node

Parameters
object$nodeParent Node for Page Content

Definition at line 96 of file class.ilPCParagraph.php.

97 {
98 $this->node = $this->createPageContentNode();
99 $this->par_node = $this->dom->create_element("Paragraph");
100 $this->par_node = $this->node->append_child($this->par_node);
101 $this->par_node->set_attribute("Language", "");
102 $node->append_child($this->node);
103 }

References ilPageContent\$node, and ilPageContent\createPageContentNode().

+ Here is the call graph for this function:

◆ createBeforeNode()

ilPCParagraph::createBeforeNode ( $node)

Create new page content (incl.

paragraph) node at node

Parameters
object$nodeParent Node for Page Content

Definition at line 110 of file class.ilPCParagraph.php.

111 {
112 $this->node = $this->createPageContentNode();
113 $this->par_node = $this->dom->create_element("Paragraph");
114 $this->par_node = $this->node->append_child($this->par_node);
115 $this->par_node->set_attribute("Language", "");
116 $node->insert_before($this->node, $node);
117 }

References ilPageContent\$node, and ilPageContent\createPageContentNode().

+ Here is the call graph for this function:

◆ getAutoIndent()

ilPCParagraph::getAutoIndent ( )

Get AutoIndent (Code Paragraphs)

Parameters
stringAuto Indent attribute

Definition at line 404 of file class.ilPCParagraph.php.

405 {
406 return $this->par_node->get_attribute("AutoIndent");
407 }

◆ getBBMap()

static ilPCParagraph::getBBMap ( )
staticprotected

Get bb to xml tag map.

Returns
array map

Definition at line 56 of file class.ilPCParagraph.php.

57 {
58 return self::$bb_tags;
59 }

References $bb_tags.

◆ getCharacteristic()

ilPCParagraph::getCharacteristic ( )

Get characteristic of paragraph.

Returns
string characteristic

Definition at line 377 of file class.ilPCParagraph.php.

378 {
379 if (is_object($this->par_node)) {
380 return $this->par_node->get_attribute("Characteristic");
381 }
382 }

Referenced by getType(), and setText().

+ Here is the caller graph for this function:

◆ getDownloadTitle()

ilPCParagraph::getDownloadTitle ( )

get attribute download title

Definition at line 446 of file class.ilPCParagraph.php.

447 {
448 return $this->par_node->get_attribute("DownloadTitle");
449 }

◆ getJavascriptFiles()

ilPCParagraph::getJavascriptFiles (   $a_mode)

Get Javascript files.

Reimplemented from ilPageContent.

Definition at line 1999 of file class.ilPCParagraph.php.

2000 {
2001 $adve_settings = new ilSetting("adve");
2002
2003 if ($a_mode != "edit" && $adve_settings->get("auto_url_linking")) {
2004 include_once("./Services/Link/classes/class.ilLinkifyUtil.php");
2006 }
2007
2008 return array();
2009 }
static getLocalJsPaths()
Get paths of necessary js files.
ILIAS Setting Class.

References ilLinkifyUtil\getLocalJsPaths().

+ Here is the call graph for this function:

◆ getLanguage()

ilPCParagraph::getLanguage ( )

get language

Definition at line 482 of file class.ilPCParagraph.php.

483 {
484 return $this->par_node->get_attribute("Language");
485 }

Referenced by input2xml(), and setText().

+ Here is the caller graph for this function:

◆ getLastSavedPCId()

ilPCParagraph::getLastSavedPCId (   $a_pg_obj,
  $a_as_ajax_str = false 
)

Get last inserted pc ids.

Parameters

return

Definition at line 1382 of file class.ilPCParagraph.php.

1383 {
1384 if ($a_as_ajax_str) {
1385 $a_pg_obj->stripHierIDs();
1386 $a_pg_obj->addHierIds();
1387 $ids = "###";
1388 //var_dump($this->inserted_pc_ids);
1389 $combined = $a_pg_obj->getHierIdsForPCIds(
1390 array($this->inserted_pc_id)
1391 );
1392 foreach ($combined as $pc_id => $hier_id) {
1393 //echo "1";
1394 $ids .= $sep . $hier_id . ":" . $pc_id;
1395 $sep = ";";
1396 }
1397 $ids .= "###";
1398 return $ids;
1399 }
1400
1401 return $this->inserted_pc_id;
1402 }

References ilPageContent\$hier_id.

◆ getOnloadCode()

ilPCParagraph::getOnloadCode (   $a_mode)

Get onload code.

Parameters

return

Reimplemented from ilPageContent.

Definition at line 2017 of file class.ilPCParagraph.php.

2018 {
2019 $adve_settings = new ilSetting("adve");
2020
2021 if ($a_mode != "edit" && $adve_settings->get("auto_url_linking")) {
2022 return array("il.ExtLink.autolink('.ilc_Paragraph, .ilc_page_fn_Footnote','ilc_link_ExtLink');");
2023 }
2024
2025 return array();
2026 }

◆ getParagraphSequenceContent()

ilPCParagraph::getParagraphSequenceContent (   $a_pg_obj)

Get paragraph sequenc of current paragraph.

Definition at line 301 of file class.ilPCParagraph.php.

302 {
303 $childs = $this->par_node->parent_node()->parent_node()->child_nodes();
304 $seq = array();
305 $cur_seq = array();
306 $found = false;
307 $pc_id = $this->readPCId();
308 $hier_id = $this->readHierId();
309 for ($i = 0; $i < count($childs); $i++) {
310 $pchilds = $childs[$i]->child_nodes();
311 if ($pchilds[0]->node_name() == "Paragraph" &&
312 $pchilds[0]->get_attribute("Characteristic") != "Code") {
313 $cur_seq[] = $childs[$i];
314
315 // check whether this is the sequence of the current paragraph
316 if ($childs[$i]->get_attribute("PCID") == $pc_id &&
317 $childs[$i]->get_attribute("HierId") == $hier_id) {
318 $found = true;
319 }
320
321 // if this is the current sequenc, get it
322 if ($found) {
323 $seq = $cur_seq;
324 }
325 } else {
326 // non-paragraph element found -> init the current sequence
327 $cur_seq = array();
328 $found = false;
329 }
330 }
331
332 $content = "";
333 $ids = "###";
334 $id_sep = "";
335 foreach ($seq as $p_node) {
336 $ids .= $id_sep . $p_node->get_attribute("HierId") . ":" . $p_node->get_attribute("PCID");
337 $po = $a_pg_obj->getContentObject(
338 $p_node->get_attribute("HierId"),
339 $p_node->get_attribute("PCID")
340 );
341 $s_text = $po->getText();
342 $s_text = $po->xml2output($s_text, true, false);
343 $char = $po->getCharacteristic();
344 if ($char == "") {
345 $char = "Standard";
346 }
347 $s_text = ilPCParagraphGUI::xml2outputJS($s_text, $char, $po->readPCId());
348 $content .= $s_text;
349 $id_sep = ";";
350 }
351 $ids .= "###";
352
353 return $ids . $content;
354 }
static xml2outputJS($s_text, $char, $a_pc_id)
Prepare content for js output.
readHierId()
Read PC Id.
readPCId()
Read PC Id.
$i
Definition: disco.tpl.php:19

References ilPageContent\$hier_id, $i, ilPageContent\readHierId(), ilPageContent\readPCId(), and ilPCParagraphGUI\xml2outputJS().

+ Here is the call graph for this function:

◆ getShowLineNumbers()

ilPCParagraph::getShowLineNumbers ( )

get attribute showlinenumbers

Definition at line 466 of file class.ilPCParagraph.php.

467 {
468 return $this->par_node->get_attribute("ShowLineNumbers");
469 }

◆ getSubCharacteristic()

ilPCParagraph::getSubCharacteristic ( )

get attribute subcharacteristic

Definition at line 423 of file class.ilPCParagraph.php.

424 {
425 return $this->par_node->get_attribute("SubCharacteristic");
426 }

◆ getText()

ilPCParagraph::getText (   $a_short_mode = false)

Get (xml) content of paragraph.

Returns
string Paragraph Content.

Definition at line 284 of file class.ilPCParagraph.php.

285 {
286 if (is_object($this->par_node)) {
287 $content = "";
288 $childs = $this->par_node->child_nodes();
289 for ($i = 0; $i < count($childs); $i++) {
290 $content .= $this->dom->dump_node($childs[$i]);
291 }
292 return $content;
293 } else {
294 return "";
295 }
296 }

References $i.

Referenced by autoLinkGlossaries().

+ Here is the caller graph for this function:

◆ getType()

ilPCParagraph::getType ( )

Need to override getType from ilPageContent to distinguish between Pararagraph and Source.

Reimplemented from ilPageContent.

Definition at line 1309 of file class.ilPCParagraph.php.

1310 {
1311 return ($this->getCharacteristic() == "Code")?"src":parent::getType();
1312 }
getCharacteristic()
Get characteristic of paragraph.

References getCharacteristic().

+ Here is the call graph for this function:

◆ getXMLTagMap()

static ilPCParagraph::getXMLTagMap ( )
staticprotected

Get tag to bb map.

Returns
array map

Definition at line 66 of file class.ilPCParagraph.php.

67 {
68 return array_flip(self::$bb_tags);
69 }

Referenced by handleAjaxContent().

+ Here is the caller graph for this function:

◆ handleAjaxContent()

static ilPCParagraph::handleAjaxContent (   $a_content)
static

Handle ajax content.

Definition at line 1408 of file class.ilPCParagraph.php.

1409 {
1410 $a_content = "<dummy>" . $a_content . "</dummy>";
1411
1412 $doc = new DOMDocument();
1413
1414 $content = ilUtil::stripSlashes($a_content, false);
1415
1416 // $content = str_replace("&lt;", "<", $content);
1417 // $content = str_replace("&gt;", ">", $content);
1418 //echo "<br><br>".htmlentities($content); mk();
1419 $res = $doc->loadXML($content);
1420
1421 if (!$res) {
1422 return false;
1423 }
1424
1425 // convert tags
1426 $xpath = new DOMXpath($doc);
1427
1429
1430 $elements = $xpath->query("//span");
1431 include_once("./Services/Utilities/classes/class.ilDOM2Util.php");
1432 while (!is_null($elements) && !is_null($element = $elements->item(0))) {
1433 //$element = $elements->item(0);
1434 $class = $element->getAttribute("class");
1435 if (substr($class, 0, 16) == "ilc_text_inline_") {
1436 $class_arr = explode(" ", $class);
1437 $tag = substr($class_arr[0], 16);
1438 if (isset($tags[$tag])) { // known tag like strong
1439 $cnode = ilDOM2Util::changeName($element, "il" . substr($class_arr[0], 16), false);
1440 } else { // unknown tag -> marked text
1441 $cnode = ilDOM2Util::changeName($element, "ilMarked", false);
1442 $cnode->setAttribute("Class", substr($class_arr[0], 16));
1443 }
1444 for ($i = 1; $i < count($class_arr); $i++) {
1445 $tag = substr($class_arr[$i], 16);
1446 if (isset($tags[$tag])) { // known tag like strong
1447 $cnode = ilDOM2Util::addParent($cnode, "il" . substr($class_arr[$i], 16));
1448 } else { // unknown tag -> marked element
1449 $cnode = ilDOM2Util::addParent($cnode, "ilMarked");
1450 $cnode->setAttribute("Class", substr($class_arr[$i], 16));
1451 }
1452 }
1453 } else {
1455 }
1456
1457 $elements = $xpath->query("//span");
1458 }
1459
1460 // convert tags
1461 $xpath = new DOMXpath($doc);
1462 $elements = $xpath->query("/dummy/div");
1463
1464 $ret = array();
1465 if (!is_null($elements)) {
1466 foreach ($elements as $element) {
1467 $id = $element->getAttribute("id");
1468 $class = $element->getAttribute("class");
1469 $class = substr($class, 15);
1470 if (trim($class) == "") {
1471 $class = "Standard";
1472 }
1473
1474 $text = $doc->saveXML($element);
1475 $text = str_replace("<br/>", "\n", $text);
1476
1477 // remove wrapping div
1478 $pos = strpos($text, ">");
1479 $text = substr($text, $pos + 1);
1480 $pos = strrpos($text, "<");
1481 $text = substr($text, 0, $pos);
1482
1483 // todo: remove empty spans <span ...> </span>
1484
1485 // replace tags by bbcode
1486 foreach (ilPageContentGUI::_getCommonBBButtons() as $bb => $cl) {
1487 if (!in_array($bb, array("code", "tex", "fn", "xln"))) {
1488 $text = str_replace(
1489 "<il" . $cl . ">",
1490 "[" . $bb . "]",
1491 $text
1492 );
1493 $text = str_replace(
1494 "</il" . $cl . ">",
1495 "[/" . $bb . "]",
1496 $text
1497 );
1498 $text = str_replace("<il" . $cl . "/>", "", $text);
1499 }
1500 }
1501 $text = str_replace(
1502 array("<code>", "</code>"),
1503 array("[code]", "[/code]"),
1504 $text
1505 );
1506 $text = str_replace(
1507 array('<sup class="ilc_sup_Sup">', "</sup>"),
1508 array("[sup]", "[/sup]"),
1509 $text
1510 );
1511 $text = str_replace(
1512 array('<sub class="ilc_sub_Sub">', "</sub>"),
1513 array("[sub]", "[/sub]"),
1514 $text
1515 );
1516
1517 $text = str_replace("<code/>", "", $text);
1518 $text = str_replace('<ul class="ilc_list_u_BulletedList"/>', "", $text);
1519 $text = str_replace('<ul class="ilc_list_o_NumberedList"/>', "", $text);
1520
1521 // replace marked text
1522 // external links
1523 $any = "[^>]*";
1524 while (preg_match('~<ilMarked(' . $any . ')>~i', $text, $found)) {
1525 $found[0];
1526 $attribs = ilUtil::attribsToArray($found[1]);
1527 $text = str_replace("<ilMarked" . $found[1] . ">", "[marked class=\"" . $attribs["Class"] . "\"]", $text);
1528 }
1529 $text = str_replace("</ilMarked>", "[/marked]", $text);
1530
1531
1532 $ret[] = array("text" => $text, "id" => $id, "class" => $class);
1533 }
1534 }
1535
1536 // we should only have one here!
1537 return $ret[0];
1538 }
static addParent($node, $name)
Add parent.
static replaceByChilds($node)
Replace a node by its child.
static changeName($node, $name, $keep_attributes=true)
Change name of a node.
static getXMLTagMap()
Get tag to bb map.
static _getCommonBBButtons()
Get common bb buttons.
$tags
Definition: croninfo.php:19
if(!array_key_exists('StateId', $_REQUEST)) $id
$ret
Definition: parser.php:6
foreach($_POST as $key=> $value) $res
$a_content
Definition: workflow.php:93

References $a_content, $i, $id, $res, $ret, $tag, $tags, $text, ilPageContentGUI\_getCommonBBButtons(), ilDOM2Util\addParent(), ilUtil\attribsToArray(), ilDOM2Util\changeName(), getXMLTagMap(), ilDOM2Util\replaceByChilds(), and ilUtil\stripSlashes().

Referenced by saveJS(), and ilPCDataTableGUI\updateJS().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handleAjaxContentPost()

static ilPCParagraph::handleAjaxContentPost (   $text)
static

Post input2xml handling of ajax content.

Definition at line 1543 of file class.ilPCParagraph.php.

1544 {
1545 $text = str_replace(
1546 array("&lt;ul&gt;", "&lt;/ul&gt;"),
1547 array("<SimpleBulletList>", "</SimpleBulletList>"),
1548 $text
1549 );
1550 $text = str_replace(
1551 array("&lt;ul class='ilc_list_u_BulletedList'&gt;", "&lt;/ul&gt;"),
1552 array("<SimpleBulletList>", "</SimpleBulletList>"),
1553 $text
1554 );
1555 $text = str_replace(
1556 array("&lt;ul class=\"ilc_list_u_BulletedList\"&gt;", "&lt;/ul&gt;"),
1557 array("<SimpleBulletList>", "</SimpleBulletList>"),
1558 $text
1559 );
1560 $text = str_replace(
1561 array("&lt;ol&gt;", "&lt;/ol&gt;"),
1562 array("<SimpleNumberedList>", "</SimpleNumberedList>"),
1563 $text
1564 );
1565 $text = str_replace(
1566 array("&lt;ol class='ilc_list_o_NumberedList'&gt;", "&lt;/ol&gt;"),
1567 array("<SimpleNumberedList>", "</SimpleNumberedList>"),
1568 $text
1569 );
1570 $text = str_replace(
1571 array("&lt;ol class=\"ilc_list_o_NumberedList\"&gt;", "&lt;/ol&gt;"),
1572 array("<SimpleNumberedList>", "</SimpleNumberedList>"),
1573 $text
1574 );
1575 $text = str_replace(
1576 array("&lt;li&gt;", "&lt;/li&gt;"),
1577 array("<SimpleListItem>", "</SimpleListItem>"),
1578 $text
1579 );
1580 $text = str_replace(
1581 array("&lt;li class='ilc_list_item_StandardListItem'&gt;", "&lt;/li&gt;"),
1582 array("<SimpleListItem>", "</SimpleListItem>"),
1583 $text
1584 );
1585 $text = str_replace(
1586 array("&lt;li class=\"ilc_list_item_StandardListItem\"&gt;", "&lt;/li&gt;"),
1587 array("<SimpleListItem>", "</SimpleListItem>"),
1588 $text
1589 );
1590
1591 $text = str_replace(
1592 array("&lt;li class=\"ilc_list_item_StandardListItem\"/&gt;"),
1593 array("<SimpleListItem></SimpleListItem>"),
1594 $text
1595 );
1596
1597 $text = str_replace("<SimpleBulletList><br />", "<SimpleBulletList>", $text);
1598 $text = str_replace("<SimpleNumberedList><br />", "<SimpleNumberedList>", $text);
1599 $text = str_replace("<br /><SimpleBulletList>", "<SimpleBulletList>", $text);
1600 $text = str_replace("<br /><SimpleNumberedList>", "<SimpleNumberedList>", $text);
1601 $text = str_replace("</SimpleBulletList><br />", "</SimpleBulletList>", $text);
1602 $text = str_replace("</SimpleNumberedList><br />", "</SimpleNumberedList>", $text);
1603 $text = str_replace("</SimpleListItem><br />", "</SimpleListItem>", $text);
1604
1605 return $text;
1606 }

References $text.

Referenced by saveJS(), and ilPCDataTableGUI\updateJS().

+ Here is the caller graph for this function:

◆ handleNextBr()

ilPCParagraph::handleNextBr (   $a_str)

Remove preceding

Definition at line 1279 of file class.ilPCParagraph.php.

1280 {
1281 // do not remove, if next line starts with a "=", otherwise two
1282 // headlines in a row will not be recognized
1283 if (substr($a_str, 0, 6) == "<br />" && substr($a_str, 6, 1) != "=") {
1284 $a_str = substr($a_str, 6);
1285 } else {
1286 // if next line starts with a "=" we need to reinsert the <br />
1287 // otherwise it will not be recognized
1288 if (substr($a_str, 0, 1) == "=") {
1289 $a_str = "<br />" . $a_str;
1290 }
1291 }
1292 return $a_str;
1293 }

Referenced by autoSplit().

+ Here is the caller graph for this function:

◆ init()

ilPCParagraph::init ( )

Init page content component.

Reimplemented from ilPageContent.

Reimplemented in ilPCSourceCode.

Definition at line 43 of file class.ilPCParagraph.php.

44 {
45 global $DIC;
46
47 $this->user = $DIC->user();
48 $this->setType("par");
49 }
user()
Definition: user.php:4
setType($a_type)
Set Type.

References $DIC, ilPageContent\setType(), and user().

+ Here is the call graph for this function:

◆ input2xml()

ilPCParagraph::input2xml (   $a_text,
  $a_wysiwyg = 0,
  $a_handle_lists = true 
)

Definition at line 487 of file class.ilPCParagraph.php.

488 {
489 return $this->_input2xml($a_text, $this->getLanguage(), $a_wysiwyg, $a_handle_lists);
490 }
static _input2xml($a_text, $a_lang, $a_wysiwyg=0, $a_handle_lists=true)
converts user input to xml
getLanguage()
get language

References _input2xml(), and getLanguage().

+ Here is the call graph for this function:

◆ input2xmlReplaceLists()

static ilPCParagraph::input2xmlReplaceLists (   $a_text)
static

Converts xml from DB to output in edit textarea.

Parameters
string$a_textxml from db
Returns
string string ready for edit textarea

Definition at line 809 of file class.ilPCParagraph.php.

810 {
811 $rows = explode("<br />", $a_text . "<br />");
812 //var_dump($a_text);
813
814 $old_level = 0;
815
816 $text = "";
817
818 foreach ($rows as $row) {
819 $level = 0;
820 if (str_replace("#", "*", substr($row, 0, 3)) == "***") {
821 $level = 3;
822 } elseif (str_replace("#", "*", substr($row, 0, 2)) == "**") {
823 $level = 2;
824 } elseif (str_replace("#", "*", substr($row, 0, 1)) == "*") {
825 $level = 1;
826 }
827
828 // end previous line
829 if ($level < $old_level) {
830 for ($i = $old_level; $i > $level; $i--) {
831 $text .= "</SimpleListItem></" . $clist[$i] . ">";
832 }
833 if ($level > 0) {
834 $text .= "</SimpleListItem>";
835 }
836 } elseif ($old_level > 0 && $level > 0 && ($level == $old_level)) {
837 $text .= "</SimpleListItem>";
838 } elseif (($level == $old_level) && $text != "") {
839 $text .= "<br />";
840 }
841
842 // start next line
843 if ($level > $old_level) {
844 for ($i = $old_level + 1; $i <= $level; $i++) {
845 if (substr($row, $i - 1, 1) == "*") {
846 $clist[$i] = "SimpleBulletList";
847 } else {
848 $clist[$i] = "SimpleNumberedList";
849 }
850 $text .= "<" . $clist[$i] . "><SimpleListItem>";
851 }
852 } elseif ($old_level > 0 && $level > 0) {
853 $text .= "<SimpleListItem>";
854 }
855 $text .= substr($row, $level);
856
857 $old_level = $level;
858 }
859
860 // remove "<br />" at the end
861 if (substr($text, strlen($text) - 6) == "<br />") {
862 $text = substr($text, 0, strlen($text) - 6);
863 }
864
865 return $text;
866 }
$row
$rows
Definition: xhr_table.php:10

References $i, $row, $rows, and $text.

Referenced by _input2xml(), and ilSCORM2004Asset\convertLists().

+ Here is the caller graph for this function:

◆ intLinks2xml()

static ilPCParagraph::intLinks2xml (   $a_text)
static

internal links to xml

Parameters

return

Definition at line 629 of file class.ilPCParagraph.php.

630 {
631 global $DIC;
632
633 $objDefinition = $DIC["objDefinition"];
634
635 $rtypes = $objDefinition->getAllRepositoryTypes();
636
637 // internal links
638 //$any = "[^\]]*"; // this doesn't work :-(
639 $ws = "[ \t\r\f\v\n]*";
640 $ltypes = "page|chap|term|media|obj|dfile|sess|wpage|ppage|" . implode($rtypes, "|");
641 // empty internal links
642 while (preg_match('~\[(iln' . $ws . '((inst' . $ws . '=' . $ws . '([\"0-9])*)?' . $ws .
643 "((" . $ltypes . ")$ws=$ws([\"0-9])*)$ws" .
644 "(target$ws=$ws(\"(New|FAQ|Media)\"))?$ws(anchor$ws=$ws(\"([^\"])*\"))?$ws))\]\[\/iln\]~i", $a_text, $found)) {
645 $a_text = str_replace($found[0], "", $a_text);
646 }
647 while (preg_match('~\[(iln' . $ws . '((inst' . $ws . '=' . $ws . '([\"0-9])*)?' . $ws .
648 "((" . $ltypes . ")$ws=$ws([\"0-9])*)$ws" .
649 "(target$ws=$ws(\"(New|FAQ|Media)\"))?$ws(anchor$ws=$ws(\"([^\"])*\"))?$ws))\]~i", $a_text, $found)) {
650 $attribs = ilUtil::attribsToArray($found[2]);
651 $inst_str = $attribs["inst"];
652 // pages
653 if (isset($attribs["page"])) {
654 $tframestr = "";
655 if (!empty($found[10])) {
656 $tframestr = " TargetFrame=\"" . $found[10] . "\" ";
657 }
658 $ancstr = "";
659 if ($attribs["anchor"] != "") {
660 $ancstr = ' Anchor="' . $attribs["anchor"] . '" ';
661 }
662 // see 26066 for addcslashes
663 $a_text = preg_replace(
664 '/\[' . addcslashes($found[1], '/') . '\]/i',
665 "<IntLink Target=\"il_" . $inst_str . "_pg_" . $attribs['page'] . "\" Type=\"PageObject\"" . $tframestr . $ancstr . ">",
666 $a_text
667 );
668 }
669 // chapters
670 elseif (isset($attribs["chap"])) {
671 if (!empty($found[10])) {
672 $tframestr = " TargetFrame=\"" . $found[10] . "\" ";
673 } else {
674 $tframestr = "";
675 }
676 $a_text = preg_replace(
677 '/\[' . $found[1] . '\]/i',
678 "<IntLink Target=\"il_" . $inst_str . "_st_" . $attribs['chap'] . "\" Type=\"StructureObject\"" . $tframestr . ">",
679 $a_text
680 );
681 }
682 // glossary terms
683 elseif (isset($attribs["term"])) {
684 switch ($found[10]) {
685 case "New":
686 $tframestr = " TargetFrame=\"New\" ";
687 break;
688
689 default:
690 $tframestr = " TargetFrame=\"Glossary\" ";
691 break;
692 }
693 $a_text = preg_replace(
694 '/\[' . $found[1] . '\]/i',
695 "<IntLink Target=\"il_" . $inst_str . "_git_" . $attribs['term'] . "\" Type=\"GlossaryItem\" $tframestr>",
696 $a_text
697 );
698 }
699 // wiki pages
700 elseif (isset($attribs["wpage"])) {
701 $tframestr = "";
702 $a_text = preg_replace(
703 '/\[' . $found[1] . '\]/i',
704 "<IntLink Target=\"il_" . $inst_str . "_wpage_" . $attribs['wpage'] . "\" Type=\"WikiPage\" $tframestr>",
705 $a_text
706 );
707 }
708 // portfolio pages
709 elseif (isset($attribs["ppage"])) {
710 $tframestr = "";
711 $a_text = preg_replace(
712 '/\[' . $found[1] . '\]/i',
713 "<IntLink Target=\"il_" . $inst_str . "_ppage_" . $attribs['ppage'] . "\" Type=\"PortfolioPage\" $tframestr>",
714 $a_text
715 );
716 }
717 // media object
718 elseif (isset($attribs["media"])) {
719 if (!empty($found[10])) {
720 $tframestr = " TargetFrame=\"" . $found[10] . "\" ";
721 $a_text = preg_replace(
722 '/\[' . $found[1] . '\]/i',
723 "<IntLink Target=\"il_" . $inst_str . "_mob_" . $attribs['media'] . "\" Type=\"MediaObject\"" . $tframestr . ">",
724 $a_text
725 );
726 } else {
727 $a_text = preg_replace(
728 '/\[' . $found[1] . '\]/i',
729 "<IntLink Target=\"il_" . $inst_str . "_mob_" . $attribs['media'] . "\" Type=\"MediaObject\"/>",
730 $a_text
731 );
732 }
733 }
734 // direct download file (no repository object)
735 elseif (isset($attribs["dfile"])) {
736 $a_text = preg_replace(
737 '/\[' . $found[1] . '\]/i',
738 "<IntLink Target=\"il_" . $inst_str . "_dfile_" . $attribs['dfile'] . "\" Type=\"File\">",
739 $a_text
740 );
741 }
742 // repository items (id is ref_id (will be used internally but will
743 // be replaced by object id for export purposes)
744 else {
745 foreach ($objDefinition->getAllRepositoryTypes() as $t) {
746 if (isset($attribs[$t])) {
747 $obj_id = $attribs[$t];
748 }
749 }
750 if (isset($attribs["obj"])) {
751 $obj_id = $attribs["obj"];
752 }
753
754 if ($obj_id > 0) {
755 if ($inst_str == "") {
756 $a_text = preg_replace(
757 '/\[' . $found[1] . '\]/i',
758 "<IntLink Target=\"il_" . $inst_str . "_obj_" . $obj_id . "\" Type=\"RepositoryItem\">",
759 $a_text
760 );
761 } else {
762 $a_text = preg_replace(
763 '/\[' . $found[1] . '\]/i',
764 "<IntLink Target=\"il_" . $inst_str . "_" . $found[6] . "_" . $obj_id . "\" Type=\"RepositoryItem\">",
765 $a_text
766 );
767 }
768 } else {
769 $a_text = preg_replace('/\[' . $found[1] . '\]/i', "[error: iln" . $found[1] . "]", $a_text);
770 }
771 }
772 }
773
774 while (preg_match("~\[(iln$ws((inst$ws=$ws([\"0-9])*)?" . $ws . "media$ws=$ws([\"0-9])*)$ws)/\]~i", $a_text, $found)) {
775 $attribs = ilUtil::attribsToArray($found[2]);
776 $inst_str = $attribs["inst"];
777 $a_text = preg_replace(
778 '~\[' . $found[1] . '/\]~i',
779 "<IntLink Target=\"il_" . $inst_str . "_mob_" . $attribs['media'] . "\" Type=\"MediaObject\"/>",
780 $a_text
781 );
782 }
783
784 // user
785 while (preg_match("~\[(iln$ws((inst$ws=$ws([\"0-9])*)?" . $ws . "user$ws=$ws(\"([^\"])*)\")$ws)/\]~i", $a_text, $found)) {
786 $attribs = ilUtil::attribsToArray($found[2]);
787 $inst_str = $attribs["inst"];
788 include_once("./Services/User/classes/class.ilObjUser.php");
789 $user_id = ilObjUser::_lookupId($attribs['user']);
790 $a_text = preg_replace(
791 '~\[' . $found[1] . '/\]~i',
792 "<IntLink Target=\"il_" . $inst_str . "_user_" . $user_id . "\" Type=\"User\"/>",
793 $a_text
794 );
795 }
796
797 $a_text = preg_replace('~\[\/iln\]~i', "</IntLink>", $a_text);
798 return $a_text;
799 }
static _lookupId($a_user_str)
Lookup id by login.

References $DIC, $t, ilObjUser\_lookupId(), and ilUtil\attribsToArray().

Referenced by _input2xml(), and linkTermsInDom().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ linkTermsInDom()

static ilPCParagraph::linkTermsInDom (   $a_dom,
  $a_terms,
  $a_par_node = null 
)
staticprotected

Link terms in a dom page object in bb style.

Parameters

return

Definition at line 1668 of file class.ilPCParagraph.php.

1669 {
1670 // sort terms by their length (shortes first)
1671 // to prevent that nested tags are builded
1672 foreach ($a_terms as $k => $t) {
1673 $a_terms[$k]["termlength"] = strlen($t["term"]);
1674 }
1675 $a_terms = ilUtil::sortArray($a_terms, "termlength", "asc", true);
1676
1677
1678 if ($a_dom instanceof php4DOMDocument) {
1679 $a_dom = $a_dom->myDOMDocument;
1680 }
1681 if ($a_par_node instanceof php4DOMElement) {
1682 $a_par_node = $a_par_node->myDOMNode;
1683 }
1684
1685 $xpath = new DOMXPath($a_dom);
1686
1687 if ($a_par_node == null) {
1688 $parnodes = $xpath->query("//Paragraph[@Characteristic != 'Code']");
1689 } else {
1690 $parnodes = $xpath->query(".//Paragraph[@Characteristic != 'Code']", $a_par_node->parentNode);
1691 }
1692
1693 include_once("./Services/Utilities/classes/class.ilStr.php");
1694
1695 foreach ($parnodes as $parnode) {
1696 $textnodes = $xpath->query('.//text()', $parnode);
1697 foreach ($textnodes as $node) {
1698 $p = $node->getNodePath();
1699
1700 // we do not change text nodes inside of links
1701 if (!is_int(strpos($p, "/IntLink")) &&
1702 !is_int(strpos($p, "/ExtLink"))) {
1703 $node_val = $node->nodeValue;
1704
1705 // all terms
1706 foreach ($a_terms as $t) {
1707 $pos = ilStr::strIPos($node_val, $t["term"]);
1708
1709 // if term found
1710 while (is_int($pos)) {
1711 // check if we are in a tex tag, see #22261
1712 $tex_bpos = ilStr::strrPos(ilStr::subStr($node_val, 0, $pos), "[tex]");
1713 $tex_epos = ilStr::strPos($node_val, "[/tex]", $tex_bpos);
1714 if ($tex_bpos > 0 && $tex_epos > 0 && $tex_bpos < $pos && $tex_epos > $pos) {
1715 $pos += ilStr::strLen($t["term"]);
1716 } else {
1717
1718 // check if the string is not included in another word
1719 // note that []
1720 $valid_limiters = array("", " ", "&nbsp;", ".", ",", ":", ";", "!", "?", "\"", "'", "(", ")");
1721 $b = ($pos > 0)
1722 ? ilStr::subStr($node_val, $pos - 1, 1)
1723 : "";
1724 $a = ilStr::subStr($node_val, $pos + ilStr::strLen($t["term"]), 1);
1725 if ((in_array($b, $valid_limiters) || htmlentities($b, null, 'utf-8') == "&nbsp;") && in_array($a, $valid_limiters)) {
1726 $mid = '[iln term="' . $t["id"] . '"]' .
1727 ilStr::subStr($node_val, $pos, ilStr::strLen($t["term"])) .
1728 "[/iln]";
1729
1730 $node_val = ilStr::subStr($node_val, 0, $pos) .
1731 $mid .
1732 ilStr::subStr($node_val, $pos + ilStr::strLen($t["term"]));
1733
1734 $pos += ilStr::strLen($mid);
1735 } else {
1736 $pos += ilStr::strLen($t["term"]);
1737 }
1738 }
1739 $pos = ilStr::strIPos($node_val, $t["term"], $pos);
1740 }
1741
1742 // insert [iln] tags
1743 }
1744
1745 $node->nodeValue = $node_val;
1746 }
1747
1748 // var_dump($p);
1749// var_dump($node->nodeValue);
1750 }
1751
1752
1753 // dump paragraph node
1754 $text = $a_dom->saveXML($parnode);
1755 $text = substr($text, 0, strlen($text) - strlen("</Paragraph>"));
1756 $text = substr($text, strpos($text, ">") + 1);
1757
1758 // replace [iln] by tags with xml representation
1760
1761 // "set text"
1762 $temp_dom = domxml_open_mem(
1763 '<?xml version="1.0" encoding="UTF-8"?><Paragraph>' . $text . '</Paragraph>',
1765 $error
1766 );
1767 $temp_dom = $temp_dom->myDOMDocument;
1768
1769 if (empty($error)) {
1770 // delete children of paragraph node
1771 $children = $parnode->childNodes;
1772 while ($parnode->hasChildNodes()) {
1773 $parnode->removeChild($parnode->firstChild);
1774 }
1775
1776 // copy new content children in paragraph node
1777 $xpath_temp = new DOMXPath($temp_dom);
1778 $temp_pars = $xpath_temp->query("//Paragraph");
1779
1780 foreach ($temp_pars as $new_par_node) {
1781 $new_childs = $new_par_node->childNodes;
1782
1783 foreach ($new_childs as $new_child) {
1784 //$cloned_child = $new_child->cloneNode(true);
1785 $cloned_child = $a_dom->importNode($new_child, true);
1786 $parnode->appendChild($cloned_child);
1787 }
1788 }
1789 }
1790 }
1791 // exit;
1792 }
static strPos($a_haystack, $a_needle, $a_offset=null)
Definition: class.ilStr.php:30
static strrPos($a_haystack, $a_needle, $a_offset=null)
Definition: class.ilStr.php:39
static strIPos($a_haystack, $a_needle, $a_offset=null)
Definition: class.ilStr.php:48
static subStr($a_str, $a_start, $a_length=null)
Definition: class.ilStr.php:15
static strLen($a_string)
Definition: class.ilStr.php:78
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
domxml_open_mem($str, $mode=0, &$error=null)
const DOMXML_LOAD_PARSING

References ilPageContent\$node, $t, $text, DOMXML_LOAD_PARSING, domxml_open_mem(), intLinks2xml(), ilUtil\sortArray(), ilStr\strIPos(), ilStr\strLen(), ilStr\strPos(), ilStr\strrPos(), and ilStr\subStr().

Referenced by autoLinkGlossaries(), and autoLinkGlossariesPage().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ removeTrailingBr()

ilPCParagraph::removeTrailingBr (   $a_str)

Remove trailing

Definition at line 1298 of file class.ilPCParagraph.php.

1299 {
1300 if (substr($a_str, strlen($a_str) - 6) == "<br />") {
1301 $a_str = substr($a_str, 0, strlen($a_str) - 6);
1302 }
1303 return $a_str;
1304 }

Referenced by autoSplit().

+ Here is the caller graph for this function:

◆ replaceBBCode()

static ilPCParagraph::replaceBBCode (   $a_text,
  $a_bb,
  $a_tag 
)
staticprotected

Replace bb code.

Parameters
string$a_texttext
string$a_bbbb tag
string$a_tagxml tag
Returns
string

Definition at line 500 of file class.ilPCParagraph.php.

501 {
502 $a_text = preg_replace('/\[' . $a_bb . '\]/i', "<" . $a_tag . ">", $a_text);
503 $a_text = preg_replace('/\[\/' . $a_bb . '\]/i', "</" . $a_tag . ">", $a_text);
504 return $a_text;
505 }

Referenced by _input2xml().

+ Here is the caller graph for this function:

◆ saveAnchors()

static ilPCParagraph::saveAnchors (   $a_page,
  $a_domdoc 
)
static

Save anchors.

Parameters
stringxml page code

Definition at line 1853 of file class.ilPCParagraph.php.

1854 {
1855 self::_deleteAnchors($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage());
1856
1857 // get all anchors
1858 $xpath = new DOMXPath($a_domdoc);
1859 $nodes = $xpath->query('//Anchor');
1860 $saved = array();
1861 foreach ($nodes as $node) {
1862 $name = $node->getAttribute("Name");
1863 if (trim($name) != "" && !in_array($name, $saved)) {
1864 self::_saveAnchor($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage(), $name);
1865 $saved[] = $name;
1866 }
1867 }
1868 }
static _saveAnchor($a_parent_type, $a_page_id, $a_page_lang, $a_anchor_name)
Save an anchor.

References $name, ilPageContent\$node, $nodes, _deleteAnchors(), and _saveAnchor().

Referenced by afterPageUpdate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ saveJS()

ilPCParagraph::saveJS (   $a_pg_obj,
  $a_content,
  $a_char,
  $a_pc_id,
  $a_insert_at = "" 
)

Save input coming from ajax.

Parameters

return

Definition at line 1324 of file class.ilPCParagraph.php.

1325 {
1327
1328 $this->log->debug("step 1: " . substr($a_content, 0, 1000));
1330 $this->log->debug("step 2: " . substr($t["text"], 0, 1000));
1331 if ($t === false) {
1332 return false;
1333 }
1334
1335 $pc_id = explode(":", $a_pc_id);
1336 $insert_at = explode(":", $a_insert_at);
1337 $t_id = explode(":", $t["id"]);
1338
1339 // insert new paragraph
1340 if ($a_insert_at != "") {
1341 $par = new ilPCParagraph($this->getPage());
1342 $par->create($a_pg_obj, $insert_at[0], $insert_at[1]);
1343 } else {
1344 $par = $a_pg_obj->getContentObject($pc_id[0], $pc_id[1]);
1345 }
1346
1347 if ($a_insert_at != "") {
1348 $pc_id = $a_pg_obj->generatePCId();
1349 $par->writePCId($pc_id);
1350 $this->inserted_pc_id = $pc_id;
1351 } else {
1352 $this->inserted_pc_id = $pc_id[1];
1353 }
1354
1355 $par->setLanguage($ilUser->getLanguage());
1356 $par->setCharacteristic($t["class"]);
1357
1358 $t2 = $par->input2xml($t["text"], true, false);
1359 $this->log->debug("step 3: " . substr($t2, 0, 1000));
1360
1362 $this->log->debug("step 4: " . substr($t2, 0, 1000));
1363
1364 $updated = $par->setText($t2, true);
1365
1366 if ($updated !== true) {
1367 echo $updated;
1368 exit;
1369 return false;
1370 }
1371 $updated = $par->updatePage($a_pg_obj);
1372 //$updated = $a_pg_obj->update();
1373 return $updated;
1374 }
exit
Definition: backend.php:16
Class ilPCParagraph.
static handleAjaxContent($a_content)
Handle ajax content.
static handleAjaxContentPost($text)
Post input2xml handling of ajax content.
$ilUser
Definition: imgupload.php:18

References $a_content, $ilUser, $t, $user, exit, ilPageContent\getPage(), handleAjaxContent(), and handleAjaxContentPost().

+ Here is the call graph for this function:

◆ saveMetaKeywords()

static ilPCParagraph::saveMetaKeywords (   $a_page,
  $a_domdoc 
)
static

save all keywords

Parameters
object$a_pagepage object
object$a_domdocdom document

Definition at line 1937 of file class.ilPCParagraph.php.

1938 {
1939 // not nice, should be set by context per method
1940 if ($a_page->getParentType() == "gdf" ||
1941 $a_page->getParentType() == "lm") {
1942 // get existing keywords
1943 $keywords = array();
1944
1945 // find all Keyw tags
1946 $xpath = new DOMXPath($a_domdoc);
1947 $nodes = $xpath->query('//Keyw');
1948 foreach ($nodes as $node) {
1949 $k = trim(strip_tags($node->nodeValue));
1950 if (!in_array($k, $keywords)) {
1951 $keywords[] = $k;
1952 }
1953 }
1954
1955 $meta_type = ($a_page->getParentType() == "gdf")
1956 ? "gdf"
1957 : "pg";
1958 $meta_rep_id = $a_page->getParentId();
1959 $meta_id = $a_page->getId();
1960
1961 include_once("./Services/MetaData/classes/class.ilMD.php");
1962 $md_obj = new ilMD($meta_rep_id, $meta_id, $meta_type);
1963 $mkeywords = array();
1964 $lang = "";
1965 if (is_object($md_section = $md_obj->getGeneral())) {
1966 foreach ($ids = $md_section->getKeywordIds() as $id) {
1967 $md_key = $md_section->getKeyword($id);
1968 $mkeywords[] = strtolower($md_key->getKeyword());
1969 if ($lang == "") {
1970 $lang = $md_key->getKeywordLanguageCode();
1971 }
1972 }
1973 if ($lang == "") {
1974 foreach ($ids = $md_section->getLanguageIds() as $id) {
1975 $md_lang = $md_section->getLanguage($id);
1976 if ($lang == "") {
1977 $lang = $md_lang->getLanguageCode();
1978 }
1979 }
1980 }
1981 foreach ($keywords as $k) {
1982 if (!in_array(strtolower($k), $mkeywords)) {
1983 if (trim($k) != "" && $lang != "") {
1984 $md_key = $md_section->addKeyword();
1985 $md_key->setKeyword(ilUtil::stripSlashes($k));
1986 $md_key->setKeywordLanguage(new ilMDLanguageItem($lang));
1987 $md_key->save();
1988 }
1989 $mkeywords[] = strtolower($k);
1990 }
1991 }
1992 }
1993 }
1994 }
for($i=1; $i<=count($kw_cases_sel); $i+=1) $lang
Definition: langwiz.php:349

References $id, $lang, ilPageContent\$node, $nodes, and ilUtil\stripSlashes().

Referenced by afterPageUpdate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segmentString()

static ilPCParagraph::segmentString (   $a_haystack,
  $a_needles 
)
static

Segments a string into an array at each position of a substring.

Definition at line 946 of file class.ilPCParagraph.php.

947 {
948 $segments = array();
949
950 $nothing_found = false;
951 while (!$nothing_found) {
952 $nothing_found = true;
953 $found = -1;
954 foreach ($a_needles as $needle) {
955 $pos = stripos($a_haystack, $needle);
956 if (is_int($pos) && ($pos < $found || $found == -1)) {
957 $found = $pos;
958 $found_needle = $needle;
959 $nothing_found = false;
960 }
961 }
962 if ($found > 0) {
963 $segments[] = substr($a_haystack, 0, $found);
964 $a_haystack = substr($a_haystack, $found);
965 }
966 if ($found > -1) {
967 $segments[] = substr($a_haystack, 0, strlen($found_needle));
968 $a_haystack = substr($a_haystack, strlen($found_needle));
969 }
970 }
971 if ($a_haystack != "") {
972 $segments[] = $a_haystack;
973 }
974
975 return $segments;
976 }

Referenced by xml2outputReplaceLists().

+ Here is the caller graph for this function:

◆ setAutoIndent()

ilPCParagraph::setAutoIndent (   $a_char)

Definition at line 409 of file class.ilPCParagraph.php.

410 {
411 if (!empty($a_char)) {
412 $this->par_node->set_attribute("AutoIndent", $a_char);
413 } else {
414 if ($this->par_node->has_attribute("AutoIndent")) {
415 $this->par_node->remove_attribute("AutoIndent");
416 }
417 }
418 }

◆ setCharacteristic()

ilPCParagraph::setCharacteristic (   $a_char)

Set Characteristic of paragraph.

Parameters
string$a_charCharacteristic

Definition at line 361 of file class.ilPCParagraph.php.

362 {
363 if (!empty($a_char)) {
364 $this->par_node->set_attribute("Characteristic", $a_char);
365 } else {
366 if ($this->par_node->has_attribute("Characteristic")) {
367 $this->par_node->remove_attribute("Characteristic");
368 }
369 }
370 }

◆ setDownloadTitle()

ilPCParagraph::setDownloadTitle (   $a_char)

set attribute download title

Definition at line 432 of file class.ilPCParagraph.php.

433 {
434 if (!empty($a_char)) {
435 $this->par_node->set_attribute("DownloadTitle", $a_char);
436 } else {
437 if ($this->par_node->has_attribute("DownloadTitle")) {
438 $this->par_node->remove_attribute("DownloadTitle");
439 }
440 }
441 }

◆ setLanguage()

ilPCParagraph::setLanguage (   $a_lang)

set language

Definition at line 474 of file class.ilPCParagraph.php.

475 {
476 $this->par_node->set_attribute("Language", $a_lang);
477 }

◆ setNode()

ilPCParagraph::setNode (   $a_node)

Set Page Content Node.

Parameters
object$a_nodePage Content DOM Node

Reimplemented from ilPageContent.

Definition at line 78 of file class.ilPCParagraph.php.

79 {
80 parent::setNode($a_node); // this is the PageContent node
81
82 $childs = $a_node->child_nodes();
83 for ($i = 0; $i < count($childs); $i++) {
84 if ($childs[$i]->node_name() == "Paragraph") {
85 $this->par_node = $childs[$i]; //... and this the Paragraph node
86 }
87 }
88 }

References $i.

◆ setShowLineNumbers()

ilPCParagraph::setShowLineNumbers (   $a_char)

set attribute showlinenumbers

Definition at line 455 of file class.ilPCParagraph.php.

456 {
457 $a_char = empty($a_char)?"n":$a_char;
458
459 $this->par_node->set_attribute("ShowLineNumbers", $a_char);
460 }

◆ setSubCharacteristic()

ilPCParagraph::setSubCharacteristic (   $a_char)

set attribute subcharacteristic

Definition at line 388 of file class.ilPCParagraph.php.

389 {
390 if (!empty($a_char)) {
391 $this->par_node->set_attribute("SubCharacteristic", $a_char);
392 } else {
393 if ($this->par_node->has_attribute("SubCharacteristic")) {
394 $this->par_node->remove_attribute("SubCharacteristic");
395 }
396 }
397 }

◆ setText()

ilPCParagraph::setText (   $a_text,
  $a_auto_split = false 
)

Set (xml) content of text paragraph.

Parameters
string$a_texttext content
boolean$a_auto_splitauto split paragraph at headlines true/false

Definition at line 166 of file class.ilPCParagraph.php.

167 {
168 if (!is_array($a_text)) {
169 $text = array(array("level" => 0, "text" => $a_text));
170 } else {
171 $text = $a_text;
172 }
173
174 if ($a_auto_split) {
175 $text = $this->autoSplit($a_text);
176 }
177
178 // DOMXML_LOAD_PARSING, DOMXML_LOAD_VALIDATING, DOMXML_LOAD_RECOVERING
179 $check = "";
180 foreach ($text as $t) {
181 $check .= "<Paragraph>" . $t["text"] . "</Paragraph>";
182 }
183 /*$temp_dom = domxml_open_mem('<?xml version="1.0" encoding="UTF-8"?><Paragraph>'.$text[0]["text"].'</Paragraph>',
184 DOMXML_LOAD_PARSING, $error);*/
185 $temp_dom = domxml_open_mem(
186 '<?xml version="1.0" encoding="UTF-8"?><Paragraph>' . $check . '</Paragraph>',
188 $error
189 );
190 //$this->text = $a_text;
191
192 // remove all childs
193 if (empty($error)) {
194 $temp_dom = domxml_open_mem(
195 '<?xml version="1.0" encoding="UTF-8"?><Paragraph>' . $text[0]["text"] . '</Paragraph>',
197 $error
198 );
199
200 // delete children of paragraph node
201 $children = $this->par_node->child_nodes();
202 for ($i = 0; $i < count($children); $i++) {
203 $this->par_node->remove_child($children[$i]);
204 }
205
206 // copy new content children in paragraph node
207 $xpc = xpath_new_context($temp_dom);
208 $path = "//Paragraph";
209 $res = xpath_eval($xpc, $path);
210 if (count($res->nodeset) == 1) {
211 $new_par_node = $res->nodeset[0];
212 $new_childs = $new_par_node->child_nodes();
213
214 for ($i = 0; $i < count($new_childs); $i++) {
215 $cloned_child = $new_childs[$i]->clone_node(true);
216 $this->par_node->append_child($cloned_child);
217 }
218 $orig_characteristic = $this->getCharacteristic();
219
220 // if headlines are entered and current characteristic is a headline
221 // use no characteristic as standard
222 if ((count($text) > 1) && (substr($orig_characteristic, 0, 8) == "Headline")) {
223 $orig_characteristic = "";
224 }
225 if ($text[0]["level"] > 0) {
226 $this->par_node->set_attribute("Characteristic", 'Headline' . $text[0]["level"]);
227 }
228 }
229
230 $ok = true;
231
232 $c_node = $this->node;
233 // add other chunks afterwards
234 for ($i = 1; $i < count($text); $i++) {
235 if ($ok) {
236 $next_par = new ilPCParagraph($this->getPage());
237 $next_par->createAfter($c_node);
238 $next_par->setLanguage($this->getLanguage());
239 if ($text[$i]["level"] > 0) {
240 $next_par->setCharacteristic("Headline" . $text[$i]["level"]);
241 } else {
242 $next_par->setCharacteristic($orig_characteristic);
243 }
244 $ok = $next_par->setText($text[$i]["text"], false);
245 $c_node = $next_par->node;
246 }
247 }
248
249 return true;
250 } else {
251 // We want the correct number of \n here to have the real lines numbers
252 $text = str_replace("<br>", "\n", $check); // replace <br> with \n to get correct line
253 $text = str_replace("<br/>", "\n", $text);
254 $text = str_replace("<br />", "\n", $text);
255 $text = str_replace("</SimpleListItem>", "</SimpleListItem>\n", $text);
256 $text = str_replace("<SimpleBulletList>", "\n<SimpleBulletList>", $text);
257 $text = str_replace("<SimpleNumberedList>", "\n<SimpleNumberedList>", $text);
258 $text = str_replace("<Paragraph>\n", "<Paragraph>", $text);
259 $text = str_replace("</Paragraph>", "</Paragraph>\n", $text);
260 include_once("./Services/Dom/classes/class.ilDomDocument.php");
261 $doc = new ilDOMDocument();
262 $text = '<?xml version="1.0" encoding="UTF-8"?><Paragraph>' . $text . '</Paragraph>';
263 //echo htmlentities($text);
264 $this->success = $doc->loadXML($text);
265 $error = $doc->errors;
266 $estr = "";
267 foreach ($error as $e) {
268 $e = str_replace(" in Entity", "", $e);
269 $estr .= $e . "<br />";
270 }
271 if (DEVMODE) {
272 $estr .= "<br />" . $text;
273 }
274
275 return $estr;
276 }
277 }
$path
Definition: aliased.php:25
autoSplit($a_text)
This function splits a paragraph text that has been already processed with input2xml at each header p...
xpath_eval($xpath_context, $eval_str, $contextnode=null)
xpath_new_context($dom_document)
success()
Definition: success.php:2

References $i, ilPageContent\$node, $ok, $path, $res, $t, $text, autoSplit(), DOMXML_LOAD_PARSING, domxml_open_mem(), getCharacteristic(), getLanguage(), ilPageContent\getPage(), success(), xpath_eval(), and xpath_new_context().

+ Here is the call graph for this function:

◆ updatePage()

ilPCParagraph::updatePage (   $a_page)

Update page object (it would be better to have this centralized and to change the constructors and pass the page object instead the dom object)

Parameters

return

Definition at line 1615 of file class.ilPCParagraph.php.

1616 {
1617 $a_page->beforePageContentUpdate($this);
1618
1619 $ret = $a_page->update();
1620 return $ret;
1621 }

References $ret.

◆ xml2output()

static ilPCParagraph::xml2output (   $a_text,
  $a_wysiwyg = false,
  $a_replace_lists = true,
  $unmask = true 
)
static

Converts xml from DB to output in edit textarea.

Parameters
string$a_textxml from db
Returns
string string ready for edit textarea

Definition at line 985 of file class.ilPCParagraph.php.

986 {
987 // note: the order of the processing steps is crucial
988 // and should be the same as in input2xml() in REVERSE order!
989
990 // xml to bb code
991 $any = "[^>]*";
992
993 foreach (self::getBBMap() as $bb => $tag) {
994 $a_text = preg_replace('~<' . $tag . '[^>]*>~i', "[" . $bb . "]", $a_text);
995 $a_text = preg_replace('~</' . $tag . '>~i', "[/" . $bb . "]", $a_text);
996 $a_text = preg_replace('~<' . $tag . '/>~i', "[" . $bb . "][/" . $bb . "]", $a_text);
997 }
998
999 // replace lists
1000 if ($a_replace_lists) {
1001 //echo "<br>".htmlentities($a_text);
1002 $a_text = ilPCParagraph::xml2outputReplaceLists($a_text);
1003 //echo "<br>".htmlentities($a_text);
1004 }
1005
1006 // internal links
1007 while (preg_match('~<IntLink(' . $any . ')>~i', $a_text, $found)) {
1008 $found[0];
1009 $attribs = ilUtil::attribsToArray($found[1]);
1010 $target = explode("_", $attribs["Target"]);
1011 $target_id = $target[count($target) - 1];
1012 $inst_str = (!is_int(strpos($attribs["Target"], "__")))
1013 ? $inst_str = "inst=\"" . $target[1] . "\" "
1014 : $inst_str = "";
1015 switch ($attribs["Type"]) {
1016 case "PageObject":
1017 $tframestr = (!empty($attribs["TargetFrame"]))
1018 ? " target=\"" . $attribs["TargetFrame"] . "\""
1019 : "";
1020 $ancstr = (!empty($attribs["Anchor"]))
1021 ? ' anchor="' . $attribs["Anchor"] . '"'
1022 : "";
1023 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "page=\"" . $target_id . "\"$tframestr$ancstr]", $a_text);
1024 break;
1025
1026 case "StructureObject":
1027 $tframestr = (!empty($attribs["TargetFrame"]))
1028 ? " target=\"" . $attribs["TargetFrame"] . "\""
1029 : "";
1030 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "chap=\"" . $target_id . "\"$tframestr]", $a_text);
1031 break;
1032
1033 case "GlossaryItem":
1034 $tframestr = (empty($attribs["TargetFrame"]) || $attribs["TargetFrame"] == "Glossary")
1035 ? ""
1036 : " target=\"" . $attribs["TargetFrame"] . "\"";
1037 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "term=\"" . $target_id . "\"" . $tframestr . "]", $a_text);
1038 break;
1039
1040 case "WikiPage":
1041 $tframestr = "";
1042 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "wpage=\"" . $target_id . "\"" . $tframestr . "]", $a_text);
1043 break;
1044
1045 case "PortfolioPage":
1046 $tframestr = "";
1047 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "ppage=\"" . $target_id . "\"" . $tframestr . "]", $a_text);
1048 break;
1049
1050 case "MediaObject":
1051 if (empty($attribs["TargetFrame"])) {
1052 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "media=\"" . $target_id . "\"/]", $a_text);
1053 } else {
1054 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln media=\"" . $target_id . "\"" .
1055 " target=\"" . $attribs["TargetFrame"] . "\"]", $a_text);
1056 }
1057 break;
1058
1059 // Repository Item (using ref id)
1060 case "RepositoryItem":
1061 if ($inst_str == "") {
1063 } else {
1064 $rtype = $target[count($target) - 2];
1065 $target_type = $rtype;
1066 }
1067 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "$target_type=\"" . $target_id . "\"" . $tframestr . "]", $a_text);
1068 break;
1069
1070 // Download File (not in repository, Object ID)
1071 case "File":
1072 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "dfile=\"" . $target_id . "\"" . $tframestr . "]", $a_text);
1073 break;
1074
1075 // User
1076 case "User":
1077 include_once("./Services/User/classes/class.ilObjUser.php");
1078 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln " . $inst_str . "user=\"" . ilObjUser::_lookupLogin($target_id) . "\"/]", $a_text);
1079 break;
1080
1081 default:
1082 $a_text = preg_replace('~<IntLink' . $found[1] . '>~i', "[iln]", $a_text);
1083 break;
1084 }
1085 }
1086 $a_text = str_replace("</IntLink>", "[/iln]", $a_text);
1087
1088 // external links
1089 while (preg_match('~<ExtLink(' . $any . ')>~i', $a_text, $found)) {
1090 $found[0];
1091 $attribs = ilUtil::attribsToArray($found[1]);
1092 //$found[1] = str_replace("?", "\?", $found[1]);
1093 $tstr = "";
1094 if (in_array($attribs["TargetFrame"], array("FAQ", "Glossary", "Media"))) {
1095 $tstr = ' target="' . $attribs["TargetFrame"] . '"';
1096 }
1097 $a_text = str_replace("<ExtLink" . $found[1] . ">", "[xln url=\"" . $attribs["Href"] . "\"$tstr]", $a_text);
1098 }
1099 $a_text = str_replace("</ExtLink>", "[/xln]", $a_text);
1100
1101 // anchor
1102 while (preg_match('~<Anchor(' . $any . '/)>~i', $a_text, $found)) {
1103 $found[0];
1104 $attribs = ilUtil::attribsToArray($found[1]);
1105 $a_text = str_replace("<Anchor" . $found[1] . ">", "[anc name=\"" . $attribs["Name"] . "\"][/anc]", $a_text);
1106 }
1107 while (preg_match('~<Anchor(' . $any . ')>~i', $a_text, $found)) {
1108 $found[0];
1109 $attribs = ilUtil::attribsToArray($found[1]);
1110 $a_text = str_replace("<Anchor" . $found[1] . ">", "[anc name=\"" . $attribs["Name"] . "\"]", $a_text);
1111 }
1112 $a_text = str_replace("</Anchor>", "[/anc]", $a_text);
1113
1114 // marked text
1115 while (preg_match('~<Marked(' . $any . ')>~i', $a_text, $found)) {
1116 $found[0];
1117 $attribs = ilUtil::attribsToArray($found[1]);
1118 $a_text = str_replace("<Marked" . $found[1] . ">", "[marked class=\"" . $attribs["Class"] . "\"]", $a_text);
1119 }
1120 $a_text = str_replace("</Marked>", "[/marked]", $a_text);
1121
1122 // br to linefeed
1123 if (!$a_wysiwyg) {
1124 $a_text = str_replace("<br />", "\n", $a_text);
1125 $a_text = str_replace("<br/>", "\n", $a_text);
1126 }
1127
1128 if (!$a_wysiwyg) {
1129 // prevent curly brackets from being swallowed up by template engine
1130 $a_text = str_replace("{", "&#123;", $a_text);
1131 $a_text = str_replace("}", "&#125;", $a_text);
1132
1133 // unmask html
1134 if ($unmask) {
1135 $a_text = str_replace("&lt;", "<", $a_text);
1136 $a_text = str_replace("&gt;", ">", $a_text);
1137 }
1138
1139 // this is needed to allow html like <tag attribute="value">... in paragraphs
1140 $a_text = str_replace("&quot;", "\"", $a_text);
1141
1142 // make ampersands in (enabled) html attributes work
1143 // e.g. <a href="foo.php?n=4&t=5">hhh</a>
1144 $a_text = str_replace("&amp;", "&", $a_text);
1145
1146 // make &gt; and $lt; work to allow (disabled) html descriptions
1147 if ($unmask) {
1148 $a_text = str_replace("&lt;", "&amp;lt;", $a_text);
1149 $a_text = str_replace("&gt;", "&amp;gt;", $a_text);
1150 }
1151 }
1152 return $a_text;
1153 //return str_replace("<br />", chr(13).chr(10), $a_text);
1154 }
static _lookupLogin($a_user_id)
lookup login
static xml2outputReplaceLists($a_text)
Replaces with *.
$target_id
Definition: goto.php:49
$target_type
Definition: goto.php:48
$target
Definition: test.php:19

References $tag, $target, $target_id, $target_type, ilObjUser\_lookupLogin(), ilObject\_lookupType(), ilUtil\attribsToArray(), and xml2outputReplaceLists().

Referenced by ilPCDataTableGUI\editData(), ilPCDataTableGUI\editDataCl(), ilPresentationListTableGUI\fillRow(), ilTermListTableGUI\fillRow(), and ilPageObject\getPageContentsHashes().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ xml2outputReplaceLists()

static ilPCParagraph::xml2outputReplaceLists (   $a_text)
static

Replaces

with *.

Parameters
string$a_textxml from db
Returns
string string containing * for lists

Definition at line 875 of file class.ilPCParagraph.php.

876 {
877 $segments = ilPCParagraph::segmentString($a_text, array("<SimpleBulletList>", "</SimpleBulletList>",
878 "</SimpleListItem>", "<SimpleListItem>", "<SimpleListItem/>", "<SimpleNumberedList>", "</SimpleNumberedList>"));
879
880 $current_list = array();
881 $text = "";
882 for ($i = 0; $i <= count($segments); $i++) {
883 if ($segments[$i] == "<SimpleBulletList>") {
884 if (count($current_list) == 0) {
885 $list_start = true;
886 }
887 array_push($current_list, "*");
888 $li = false;
889 } elseif ($segments[$i] == "<SimpleNumberedList>") {
890 if (count($current_list) == 0) {
891 $list_start = true;
892 }
893 array_push($current_list, "#");
894 $li = false;
895 } elseif ($segments[$i] == "</SimpleBulletList>") {
896 array_pop($current_list);
897 $li = false;
898 } elseif ($segments[$i] == "</SimpleNumberedList>") {
899 array_pop($current_list);
900 $li = false;
901 } elseif ($segments[$i] == "<SimpleListItem>") {
902 $li = true;
903 } elseif ($segments[$i] == "</SimpleListItem>") {
904 $li = false;
905 } elseif ($segments[$i] == "<SimpleListItem/>") {
906 if ($list_start) {
907 $text .= "<br />";
908 $list_start = false;
909 }
910 foreach ($current_list as $list) {
911 $text .= $list;
912 }
913 $text .= "<br />";
914 $li = false;
915 } else {
916 if ($li) {
917 if ($list_start) {
918 $text .= "<br />";
919 $list_start = false;
920 }
921 foreach ($current_list as $list) {
922 $text .= $list;
923 }
924 }
925 $text .= $segments[$i];
926 if ($li) {
927 $text .= "<br />";
928 }
929 $li = false;
930 }
931 }
932
933 // remove trailing <br />, if text ends with list
934 if ($segments[count($segments) - 1] == "</SimpleBulletList>" ||
935 $segments[count($segments) - 1] == "</SimpleNumberedList>" &&
936 substr($text, strlen($text) - 6) == "<br />") {
937 $text = substr($text, 0, strlen($text) - 6);
938 }
939
940 return $text;
941 }
static segmentString($a_haystack, $a_needles)
Segments a string into an array at each position of a substring.
$li
Definition: langwiz.php:233
if(isset($_REQUEST['delete'])) $list
Definition: registry.php:41

References $i, $li, $list, $text, and segmentString().

Referenced by xml2output().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $bb_tags

ilPCParagraph::$bb_tags
staticprotected
Initial value:
= array(
"com" => "Comment",
"emp" => "Emph",
"str" => "Strong",
"fn" => "Footnote",
"code" => "Code",
"acc" => "Accent",
"imp" => "Important",
"kw" => "Keyw",
"sub" => "Sub",
"sup" => "Sup",
"quot" => "Quotation",
)

Definition at line 26 of file class.ilPCParagraph.php.

Referenced by getBBMap().

◆ $dom

ilPCParagraph::$dom

Definition at line 23 of file class.ilPCParagraph.php.

Referenced by ilPCSourceCode\modifyPageContentPostXsl().

◆ $par_node

ilPCParagraph::$par_node

Definition at line 24 of file class.ilPCParagraph.php.

◆ $user

ilPCParagraph::$user
protected

Definition at line 21 of file class.ilPCParagraph.php.

Referenced by saveJS().


The documentation for this class was generated from the following file: