ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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)
 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...
 

Static Protected Attributes

static $bb_tags
 

Additional Inherited Members

- Protected Member Functions inherited from ilPageContent
 setType ($a_type)
 Set Type. More...
 
- Protected Attributes inherited from ilPageContent
 $file_download_link
 
 $fullscreen_link
 
 $sourcecode_download_script
 
 $log
 

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 2022 of file class.ilPCParagraph.php.

References $ilDB.

2023  {
2024  global $ilDB;
2025 
2026  $ilDB->manipulate("DELETE FROM page_anchor WHERE ".
2027  " page_parent_type = ".$ilDB->quote($a_parent_type, "text").
2028  " AND page_id = ".$ilDB->quote($a_page_id, "integer").
2029  " AND page_lang = ".$ilDB->quote($a_page_lang, "text")
2030  );
2031  }
global $ilDB

◆ _input2xml()

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

converts user input to xml

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

References array, ilUtil\attribsToArray(), input2xmlReplaceLists(), and ilUtil\stripSlashes().

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

551  {
552  if (!$a_wysiwyg)
553  {
554  $a_text = ilUtil::stripSlashes($a_text, false);
555  }
556 
557  if ($a_wysiwyg)
558  {
559  $a_text = str_replace("<br />", chr(10), $a_text);
560  }
561 
562  // note: the order of the processing steps is crucial
563  // and should be the same as in xml2output() in REVERSE order!
564  $a_text = trim($a_text);
565 
566 //echo "<br>between:".htmlentities($a_text);
567 
568  // mask html
569 if (!$a_wysiwyg)
570 {
571  $a_text = str_replace("&","&amp;",$a_text);
572 }
573  $a_text = str_replace("<","&lt;",$a_text);
574  $a_text = str_replace(">","&gt;",$a_text);
575 
576  // Reconvert PageTurn and BibItemIdentifier
577  $a_text = preg_replace('/&lt;([\s\/]*?PageTurn.*?)&gt;/i',"<$1>",$a_text);
578  $a_text = preg_replace('/&lt;([\s\/]*?BibItemIdentifier.*?)&gt;/i',"<$1>",$a_text);
579 
580 //echo "<br>second:".htmlentities($a_text);
581 
582  // mask curly brackets
583 /*
584 echo htmlentities($a_text);
585  $a_text = str_replace("{", "&#123;", $a_text);
586  $a_text = str_replace("}", "&#125;", $a_text);
587 echo htmlentities($a_text);*/
588  // linefeed to br
589  $a_text = str_replace(chr(13).chr(10),"<br />",$a_text);
590  $a_text = str_replace(chr(13),"<br />", $a_text);
591  $a_text = str_replace(chr(10),"<br />", $a_text);
592 
593  if ($a_handle_lists)
594  {
595  $a_text = ilPCParagraph::input2xmlReplaceLists($a_text);
596  }
597 
598  foreach (self::getBBMap() as $bb => $tag)
599  {
600  // remove empty tags
601  $a_text = str_replace("[".$bb."][/".$bb."]", "", $a_text);
602 
603  // replace bb code by tag
604  $a_text = self::replaceBBCode($a_text, $bb, $tag);
605  }
606 
607  $a_text = self::intLinks2xml($a_text);
608 
609  // external link
610  $ws= "[ \t\r\f\v\n]*";
611  // remove empty external links
612  while (preg_match("~\[(xln$ws(url$ws=$ws\"([^\"])*\")$ws(target$ws=$ws(\"(Glossary|FAQ|Media)\"))?$ws)\]\[\/xln\]~i", $a_text, $found))
613  {
614  $a_text = str_replace($found[0], "",$a_text);
615  }
616  while (preg_match('~\[(xln$ws(url$ws=$ws(([^]])*)))$ws\]\[\/xln\]~i', $a_text, $found))
617  {
618  $a_text = str_replace($found[0], "",$a_text);
619  }
620  // external links
621  while (preg_match("~\[(xln$ws(url$ws=$ws\"([^\"])*\")$ws(target$ws=$ws(\"(Glossary|FAQ|Media)\"))?$ws)\]~i", $a_text, $found))
622  {
623  $attribs = ilUtil::attribsToArray($found[2]);
624  if (isset($attribs["url"]))
625  {
626  $a2 = ilUtil::attribsToArray($found[4]);
627  $tstr = "";
628  if (in_array($a2["target"], array("FAQ", "Glossary", "Media")))
629  {
630  $tstr = ' TargetFrame="'.$a2["target"].'"';
631  }
632  $a_text = str_replace("[".$found[1]."]", "<ExtLink Href=\"".$attribs["url"]."\"$tstr>", $a_text);
633  }
634  else
635  {
636  $a_text = str_replace("[".$found[1]."]", "[error: xln".$found[1]."]",$a_text);
637  }
638  }
639 
640  // ie/tinymce fix for links without "", see bug #8391
641  while (preg_match('~\[(xln$ws(url$ws=$ws(([^]])*)))$ws\]~i', $a_text, $found))
642  {
643  if ($found[3] != "")
644  {
645  $a_text = str_replace("[".$found[1]."]", "<ExtLink Href=\"".$found[3]."\">", $a_text);
646  }
647  else
648  {
649  $a_text = str_replace("[".$found[1]."]", "[error: xln".$found[1]."]",$a_text);
650  }
651  }
652  $a_text = preg_replace('~\[\/xln\]~i',"</ExtLink>",$a_text);
653 
654  // anchor
655  $ws= "[ \t\r\f\v\n]*";
656  while (preg_match("~\[(anc$ws(name$ws=$ws\"([^\"])*\")$ws)\]~i", $a_text, $found))
657  {
658  $attribs = ilUtil::attribsToArray($found[2]);
659  $a_text = str_replace("[".$found[1]."]", "<Anchor Name=\"".$attribs["name"]."\">", $a_text);
660  }
661  $a_text = preg_replace("~\[\/anc\]~i", "</Anchor>",$a_text);
662 
663  // marked text
664  while (preg_match("~\[(marked$ws(class$ws=$ws\"([^\"])*\")$ws)\]~i", $a_text, $found))
665  {
666  $attribs = ilUtil::attribsToArray($found[2]);
667  if (isset($attribs["class"]))
668  {
669  $a_text = str_replace("[".$found[1]."]", "<Marked Class=\"".$attribs["class"]."\">", $a_text);
670  }
671  else
672  {
673  $a_text = str_replace("[".$found[1]."]", "[error:marked".$found[1]."]",$a_text);
674  }
675  }
676  $a_text = preg_replace('~\[\/marked\]~i',"</Marked>",$a_text);
677 
678 
679 //echo htmlentities($a_text); exit;
680  return $a_text;
681  }
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
static input2xmlReplaceLists($a_text)
Converts xml from DB to output in edit textarea.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
Create styles array
The data for the language used.
+ 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 2052 of file class.ilPCParagraph.php.

References $ilDB, and array.

Referenced by ilInternalLinkGUI\showLinkHelp().

2053  {
2054  global $ilDB;
2055 
2056  $and_lang = ($a_page_lang != "")
2057  ? " AND page_lang = ".$ilDB->quote($a_page_lang, "text")
2058  : "";
2059 
2060  $set = $ilDB->query("SELECT * FROM page_anchor ".
2061  " WHERE page_parent_type = ".$ilDB->quote($a_parent_type, "text").
2062  " AND page_id = ".$ilDB->quote($a_page_id, "integer").
2063  $and_lang
2064  );
2065  $anchors = array();
2066  while ($rec = $ilDB->fetchAssoc($set))
2067  {
2068  $anchors[] = $rec["anchor_name"];
2069  }
2070  return $anchors;
2071  }
Create styles array
The data for the language used.
global $ilDB
+ 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 2036 of file class.ilPCParagraph.php.

References $ilDB.

2037  {
2038  global $ilDB;
2039 
2040  $ilDB->manipulate("INSERT INTO page_anchor ".
2041  "(page_parent_type, page_id, page_lang, anchor_name) VALUES (".
2042  $ilDB->quote($a_parent_type, "text").",".
2043  $ilDB->quote($a_page_id, "integer").",".
2044  $ilDB->quote($a_page_lang, "text").",".
2045  $ilDB->quote($a_anchor_name, "text").
2046  ")");
2047  }
global $ilDB

◆ 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

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

1991  {
1992  }

◆ 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

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

1965  {
1966  // pc paragraph
1967  self::saveMetaKeywords($a_page, $a_domdoc);
1968  self::saveAnchors($a_page, $a_domdoc);
1969  }

◆ autoLinkGlossaries()

ilPCParagraph::autoLinkGlossaries (   $a_glos)

Auto link glossaries.

Parameters

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

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

1756  {
1757  if (is_array($a_glos) && count($a_glos) > 0)
1758  {
1759  include_once("./Modules/Glossary/classes/class.ilGlossaryTerm.php");
1760 
1761  // check which terms occur in the text (we may
1762  // get some false positives due to the strip_tags, but
1763  // we do not want to find strong or list or other stuff
1764  // within the tags
1765  $text = strip_tags($this->getText());
1766  $found_terms = array();
1767  foreach ($a_glos as $glo)
1768  {
1769  if (ilObject::_lookupType($glo) == "glo")
1770  {
1771  $terms = ilGlossaryTerm::getTermList($glo);
1772  foreach ($terms as $t)
1773  {
1774  if (is_int(stripos($text, $t["term"])))
1775  {
1776  $found_terms[$t["id"]] = $t;
1777  }
1778  }
1779  }
1780  }
1781 
1782  // did we find anything? -> modify content
1783  if (count($found_terms) > 0)
1784  {
1785  self::linkTermsInDom($this->dom, $found_terms, $this->par_node);
1786  }
1787  }
1788  }
getText($a_short_mode=false)
Get (xml) content of paragraph.
static getTermList($a_glo_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.
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
$text
+ Here is the call graph for this function:

◆ autoLinkGlossariesPage()

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

Auto link glossary of whole page.

Parameters

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

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

1947  {
1948  $a_page->buildDom();
1949  $a_dom = $a_page->getDom();
1950 
1951  self::linkTermsInDom($a_dom, $a_terms);
1952 
1953  $a_page->update();
1954  }
+ 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 1279 of file class.ilPCParagraph.php.

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

Referenced by setText().

1280  {
1281  $a_text = str_replace ("=<SimpleBulletList>", "=<br /><SimpleBulletList>", $a_text);
1282  $a_text = str_replace ("=<SimpleNumberedList>", "=<br /><SimpleNumberedList>", $a_text);
1283  $a_text = str_replace ("</SimpleBulletList>=", "</SimpleBulletList><br />=", $a_text);
1284  $a_text = str_replace ("</SimpleNumberedList>=", "</SimpleNumberedList><br />=", $a_text);
1285  $a_text = "<br />".$a_text."<br />"; // add preceding and trailing br
1286 
1287  $chunks = array();
1288  $c_text = $a_text;
1289 //echo "0";
1290  while ($c_text != "")
1291  {
1292 //var_dump($c_text); flush();
1293 //echo "1";
1294  $s1 = strpos($c_text, "<br />=");
1295  if (is_int($s1))
1296  {
1297 //echo "2";
1298  $s2 = strpos($c_text, "<br />==");
1299  if (is_int($s2) && $s2 <= $s1)
1300  {
1301 //echo "3";
1302  $s3 = strpos($c_text, "<br />===");
1303  if (is_int($s3) && $s3 <= $s2) // possible level three header
1304  {
1305 //echo "4";
1306  $n = strpos($c_text, "<br />", $s3 + 1);
1307  if ($n > ($s3+9) && substr($c_text, $n-3, 9) == "===<br />")
1308  {
1309 //echo "5";
1310  // found level three header
1311  if ($s3 > 0 || $head != "")
1312  {
1313 //echo "6";
1314  $chunks[] = array("level" => 0,
1315  "text" => $this->removeTrailingBr($head.substr($c_text, 0, $s3)));
1316  $head = "";
1317  }
1318  $chunks[] = array("level" => 3,
1319  "text" => trim(substr($c_text, $s3+9, $n-$s3-12)));
1320  $c_text = $this->handleNextBr(substr($c_text, $n+6));
1321  }
1322  else
1323  {
1324 //echo "7";
1325  $head.= substr($c_text, 0, $n);
1326  $c_text = substr($c_text, $n);
1327  }
1328  }
1329  else // possible level two header
1330  {
1331 //echo "8";
1332  $n = strpos($c_text, "<br />", $s2 + 1);
1333  if ($n > ($s2+8) && substr($c_text, $n-2, 8) == "==<br />")
1334  {
1335 //echo "9";
1336  // found level two header
1337  if ($s2 > 0 || $head != "")
1338  {
1339 //echo "A";
1340  $chunks[] = array("level" => 0,
1341  "text" => $this->removeTrailingBr($head.substr($c_text, 0, $s2)));
1342  $head = "";
1343  }
1344  $chunks[] = array("level" => 2, "text" => trim(substr($c_text, $s2+8, $n-$s2-10)));
1345  $c_text = $this->handleNextBr(substr($c_text, $n+6));
1346  }
1347  else
1348  {
1349 //echo "B";
1350  $head.= substr($c_text, 0, $n);
1351  $c_text = substr($c_text, $n);
1352  }
1353  }
1354  }
1355  else // possible level one header
1356  {
1357 //echo "C";
1358  $n = strpos($c_text, "<br />", $s1 + 1);
1359  if ($n > ($s1+7) && substr($c_text, $n-1, 7) == "=<br />")
1360  {
1361 //echo "D";
1362  // found level one header
1363  if ($s1 > 0 || $head != "")
1364  {
1365 //echo "E";
1366  $chunks[] = array("level" => 0,
1367  "text" => $this->removeTrailingBr($head.substr($c_text, 0, $s1)));
1368  $head = "";
1369  }
1370  $chunks[] = array("level" => 1, "text" => trim(substr($c_text, $s1+7, $n-$s1-8)));
1371  $c_text = $this->handleNextBr(substr($c_text, $n+6));
1372 //echo "<br>ctext:".htmlentities($c_text)."<br>";
1373  }
1374  else
1375  {
1376  $head.= substr($c_text, 0, $n);
1377  $c_text = substr($c_text, $n);
1378 //echo "<br>head:".$head."c_text:".$c_text."<br>";
1379  }
1380  }
1381  }
1382  else
1383  {
1384 //echo "G";
1385  $chunks[] = array("level" => 0, "text" => $head.$c_text);
1386  $head = "";
1387  $c_text = "";
1388  }
1389  }
1390  if (count($chunks) == 0)
1391  {
1392  $chunks[] = array("level" => 0, "text" => "");
1393  }
1394 
1395 
1396  // remove preceding br
1397  if (substr($chunks[0]["text"], 0, 6) == "<br />")
1398  {
1399  $chunks[0]["text"] = substr($chunks[0]["text"], 6);
1400  }
1401 
1402  // remove trailing br
1403  if (substr($chunks[count($chunks) - 1]["text"],
1404  strlen($chunks[count($chunks) - 1]["text"]) - 6, 6) == "<br />")
1405  {
1406  $chunks[count($chunks) - 1]["text"] =
1407  substr($chunks[count($chunks) - 1]["text"], 0, strlen($chunks[count($chunks) - 1]["text"]) - 6);
1408  if ($chunks[count($chunks) - 1]["text"] == "")
1409  {
1410  unset($chunks[count($chunks) - 1]);
1411  }
1412  }
1413  return $chunks;
1414  }
removeTrailingBr($a_str)
Remove trailing
$n
Definition: RandomTest.php:80
Create styles array
The data for the language used.
handleNextBr($a_str)
Remove preceding
+ 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

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

1977  {
1978  // delete anchors
1979  self::_deleteAnchors($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage());
1980  }

◆ 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 144 of file class.ilPCParagraph.php.

References IL_INSERT_AFTER.

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

◆ createAfter()

ilPCParagraph::createAfter (   $node)

Create paragraph node (incl.

page content node) after given node.

Parameters
object$nodePredecessing node

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

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

121  {
122  $this->node = $this->createPageContentNode(false);
123  if($succ_node = $node->next_sibling())
124  {
125  $this->node = $succ_node->insert_before($this->node, $succ_node);
126  }
127  else
128  {
129  $parent_node = $node->parent_node();
130  $this->node = $parent_node->append_child($this->node);
131  }
132  $this->par_node = $this->dom->create_element("Paragraph");
133  $this->par_node = $this->node->append_child($this->par_node);
134  $this->par_node->set_attribute("Language", "");
135  }
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element) ...
+ 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 91 of file class.ilPCParagraph.php.

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

92  {
93  $this->node = $this->createPageContentNode();
94  $this->par_node = $this->dom->create_element("Paragraph");
95  $this->par_node = $this->node->append_child($this->par_node);
96  $this->par_node->set_attribute("Language", "");
97  $node->append_child ($this->node);
98  }
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element) ...
+ 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 105 of file class.ilPCParagraph.php.

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

106  {
107  $this->node = $this->createPageContentNode();
108  $this->par_node = $this->dom->create_element("Paragraph");
109  $this->par_node = $this->node->append_child($this->par_node);
110  $this->par_node->set_attribute("Language", "");
111  $node->insert_before($this->node, $node);
112  }
createPageContentNode($a_set_this_node=true)
Create page content node (always use this method first when adding a new element) ...
+ Here is the call graph for this function:

◆ getAutoIndent()

ilPCParagraph::getAutoIndent ( )

Get AutoIndent (Code Paragraphs)

Parameters
stringAuto Indent attribute

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

436  {
437  return $this->par_node->get_attribute("AutoIndent");
438  }

◆ getBBMap()

static ilPCParagraph::getBBMap ( )
staticprotected

Get bb to xml tag map.

Returns
array map

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

50  {
51  return self::$bb_tags;
52  }

◆ getCharacteristic()

ilPCParagraph::getCharacteristic ( )

Get characteristic of paragraph.

Returns
string characteristic

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

Referenced by getType(), and setText().

404  {
405  if (is_object($this->par_node))
406  {
407  return $this->par_node->get_attribute("Characteristic");
408  }
409  }
+ Here is the caller graph for this function:

◆ getDownloadTitle()

ilPCParagraph::getDownloadTitle ( )

get attribute download title

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

486  {
487  return $this->par_node->get_attribute("DownloadTitle");
488  }

◆ getJavascriptFiles()

ilPCParagraph::getJavascriptFiles (   $a_mode)

Get Javascript files.

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

References array, and ilLinkifyUtil\getLocalJsPaths().

2154  {
2155  $adve_settings = new ilSetting("adve");
2156 
2157  if ($a_mode != "edit" && $adve_settings->get("auto_url_linking"))
2158  {
2159  include_once("./Services/Link/classes/class.ilLinkifyUtil.php");
2161  }
2162 
2163  return array();
2164  }
ILIAS Setting Class.
static getLocalJsPaths()
Get paths of necessary js files.
Create styles array
The data for the language used.
+ Here is the call graph for this function:

◆ getLanguage()

ilPCParagraph::getLanguage ( )

get language

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

Referenced by input2xml(), and setText().

522  {
523  return $this->par_node->get_attribute("Language");
524  }
+ 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

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

References ilPageContent\$hier_id, and array.

1535  {
1536  if ($a_as_ajax_str)
1537  {
1538  $a_pg_obj->stripHierIDs();
1539  $a_pg_obj->addHierIds();
1540  $ids = "###";
1541 //var_dump($this->inserted_pc_ids);
1542  $combined = $a_pg_obj->getHierIdsForPCIds(
1543  array($this->inserted_pc_id));
1544  foreach ($combined as $pc_id => $hier_id)
1545  {
1546 //echo "1";
1547  $ids.= $sep.$hier_id.":".$pc_id;
1548  $sep = ";";
1549  }
1550  $ids.= "###";
1551  return $ids;
1552  }
1553 
1554  return $this->inserted_pc_id;
1555  }
Create styles array
The data for the language used.

◆ getOnloadCode()

ilPCParagraph::getOnloadCode (   $a_mode)

Get onload code.

Parameters

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

References array.

2173  {
2174  $adve_settings = new ilSetting("adve");
2175 
2176  if ($a_mode != "edit" && $adve_settings->get("auto_url_linking"))
2177  {
2178  return array("il.ExtLink.autolink('.ilc_Paragraph','ilc_link_ExtLink');");
2179  }
2180 
2181  return array();
2182  }
ILIAS Setting Class.
Create styles array
The data for the language used.

◆ getParagraphSequenceContent()

ilPCParagraph::getParagraphSequenceContent (   $a_pg_obj)

Get paragraph sequenc of current paragraph.

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

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

318  {
319  $childs = $this->par_node->parent_node()->parent_node()->child_nodes();
320  $seq = array();
321  $cur_seq = array();
322  $found = false;
323  $pc_id = $this->readPCId();
324  $hier_id = $this->readHierId();
325  for($i=0; $i<count($childs); $i++)
326  {
327  $pchilds = $childs[$i]->child_nodes();
328  if ($pchilds[0]->node_name() == "Paragraph" &&
329  $pchilds[0]->get_attribute("Characteristic") != "Code")
330  {
331  $cur_seq[] = $childs[$i];
332 
333  // check whether this is the sequence of the current paragraph
334  if ($childs[$i]->get_attribute("PCID") == $pc_id &&
335  $childs[$i]->get_attribute("HierId") == $hier_id)
336  {
337  $found = true;
338  }
339 
340  // if this is the current sequenc, get it
341  if ($found)
342  {
343  $seq = $cur_seq;
344  }
345  }
346  else
347  {
348  // non-paragraph element found -> init the current sequence
349  $cur_seq = array();
350  $found = false;
351  }
352  }
353 
354  $content = "";
355  $ids = "###";
356  $id_sep = "";
357  foreach ($seq as $p_node)
358  {
359  $ids.= $id_sep.$p_node->get_attribute("HierId").":".$p_node->get_attribute("PCID");
360  $po = $a_pg_obj->getContentObject($p_node->get_attribute("HierId"),
361  $p_node->get_attribute("PCID"));
362  $s_text = $po->getText();
363  $s_text = $po->xml2output($s_text, true, false);
364  $char = $po->getCharacteristic();
365  if ($char == "")
366  {
367  $char = "Standard";
368  }
369  $s_text = ilPCParagraphGUI::xml2outputJS($s_text, $char, $po->readPCId());
370  $content.= $s_text;
371  $id_sep = ";";
372  }
373  $ids.= "###";
374 
375  return $ids.$content;
376  }
static xml2outputJS($s_text, $char, $a_pc_id)
Prepare content for js output.
readPCId()
Read PC Id.
Create styles array
The data for the language used.
readHierId()
Read PC Id.
+ Here is the call graph for this function:

◆ getShowLineNumbers()

ilPCParagraph::getShowLineNumbers ( )

get attribute showlinenumbers

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

506  {
507  return $this->par_node->get_attribute("ShowLineNumbers");
508  }

◆ getSubCharacteristic()

ilPCParagraph::getSubCharacteristic ( )

get attribute subcharacteristic

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

459  {
460  return $this->par_node->get_attribute("SubCharacteristic");
461  }

◆ getText()

ilPCParagraph::getText (   $a_short_mode = false)

Get (xml) content of paragraph.

Returns
string Paragraph Content.

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

Referenced by autoLinkGlossaries().

297  {
298  if (is_object($this->par_node))
299  {
300  $content = "";
301  $childs = $this->par_node->child_nodes();
302  for($i=0; $i<count($childs); $i++)
303  {
304  $content .= $this->dom->dump_node($childs[$i]);
305  }
306  return $content;
307  }
308  else
309  {
310  return "";
311  }
312  }
+ Here is the caller graph for this function:

◆ getType()

ilPCParagraph::getType ( )

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

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

References getCharacteristic().

1455  {
1456  return ($this->getCharacteristic() == "Code")?"src":parent::getType();
1457  }
getCharacteristic()
Get characteristic of paragraph.
+ Here is the call graph for this function:

◆ getXMLTagMap()

static ilPCParagraph::getXMLTagMap ( )
staticprotected

Get tag to bb map.

Returns
array map

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

60  {
61  return array_flip(self::$bb_tags);
62  }

◆ handleAjaxContent()

static ilPCParagraph::handleAjaxContent (   $a_content)
static

Handle ajax content.

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

References $a_content, $res, $ret, $text, ilPageContentGUI\_getCommonBBButtons(), ilDOM2Util\addParent(), array, ilUtil\attribsToArray(), ilDOM2Util\changeName(), ilDOM2Util\replaceByChilds(), and ilUtil\stripSlashes().

Referenced by ilPCDataTableGUI\updateJS().

1562  {
1563  $a_content = "<dummy>".$a_content."</dummy>";
1564 
1565  $doc = new DOMDocument();
1566 
1567  $content = ilUtil::stripSlashes($a_content, false);
1568 
1569 // $content = str_replace("&lt;", "<", $content);
1570 // $content = str_replace("&gt;", ">", $content);
1571 //echo "<br><br>".htmlentities($content); mk();
1572  $res = $doc->loadXML($content);
1573 
1574  if (!$res)
1575  {
1576  return false;
1577  }
1578 
1579  // convert tags
1580  $xpath = new DOMXpath($doc);
1581 
1582  $tags = self::getXMLTagMap();
1583 
1584  $elements = $xpath->query("//span");
1585  include_once("./Services/Utilities/classes/class.ilDOM2Util.php");
1586  while (!is_null($elements) && !is_null($element = $elements->item(0)))
1587  {
1588  //$element = $elements->item(0);
1589  $class = $element->getAttribute("class");
1590  if (substr($class, 0, 16) == "ilc_text_inline_")
1591  {
1592  $class_arr = explode(" ", $class);
1593  $tag = substr($class_arr[0], 16);
1594  if (isset($tags[$tag])) // known tag like strong
1595  {
1596  $cnode = ilDOM2Util::changeName($element, "il" . substr($class_arr[0], 16), false);
1597  }
1598  else // unknown tag -> marked text
1599  {
1600  $cnode = ilDOM2Util::changeName($element, "ilMarked", false);
1601  $cnode->setAttribute("Class", substr($class_arr[0], 16));
1602  }
1603  for ($i = 1; $i < count($class_arr); $i++)
1604  {
1605  $tag = substr($class_arr[$i], 16);
1606  if (isset($tags[$tag])) // known tag like strong
1607  {
1608  $cnode = ilDOM2Util::addParent($cnode, "il" . substr($class_arr[$i], 16));
1609  }
1610  else // unknown tag -> marked element
1611  {
1612  $cnode = ilDOM2Util::addParent($cnode, "ilMarked");
1613  $cnode->setAttribute("Class", substr($class_arr[$i], 16));
1614  }
1615  }
1616  }
1617  else
1618  {
1619  ilDOM2Util::replaceByChilds($element);
1620  }
1621 
1622  $elements = $xpath->query("//span");
1623  }
1624 
1625  // convert tags
1626  $xpath = new DOMXpath($doc);
1627  $elements = $xpath->query("/dummy/div");
1628 
1629  $ret = array();
1630  if (!is_null($elements))
1631  {
1632  foreach ($elements as $element)
1633  {
1634  $id = $element->getAttribute("id");
1635  $class = $element->getAttribute("class");
1636  $class = substr($class, 15);
1637  if (trim($class) == "")
1638  {
1639  $class = "Standard";
1640  }
1641 
1642  $text = $doc->saveXML($element);
1643  $text = str_replace("<br/>", "\n", $text);
1644 
1645  // remove wrapping div
1646  $pos = strpos($text, ">");
1647  $text = substr($text, $pos + 1);
1648  $pos = strrpos($text, "<");
1649  $text = substr($text, 0, $pos);
1650 
1651  // todo: remove empty spans <span ...> </span>
1652 
1653  // replace tags by bbcode
1654  foreach (ilPageContentGUI::_getCommonBBButtons() as $bb => $cl)
1655  {
1656  if (!in_array($bb, array("code", "tex", "fn", "xln")))
1657  {
1658  $text = str_replace("<il".$cl.">",
1659  "[".$bb."]", $text);
1660  $text = str_replace("</il".$cl.">",
1661  "[/".$bb."]", $text);
1662  $text = str_replace("<il".$cl."/>", "", $text);
1663  }
1664  }
1665  $text = str_replace(array("<code>", "</code>"),
1666  array("[code]", "[/code]"), $text);
1667  $text = str_replace(array('<sup class="ilc_sup_Sup">', "</sup>"),
1668  array("[sup]", "[/sup]"), $text);
1669  $text = str_replace(array('<sub class="ilc_sub_Sub">', "</sub>"),
1670  array("[sub]", "[/sub]"), $text);
1671 
1672  $text = str_replace("<code/>", "", $text);
1673  $text = str_replace('<ul class="ilc_list_u_BulletedList"/>', "", $text);
1674  $text = str_replace('<ul class="ilc_list_o_NumberedList"/>', "", $text);
1675 
1676  // replace marked text
1677  // external links
1678  $any = "[^>]*";
1679  while (preg_match('~<ilMarked('.$any.')>~i', $text, $found))
1680  {
1681  $found[0];
1682  $attribs = ilUtil::attribsToArray($found[1]);
1683  $text = str_replace("<ilMarked".$found[1].">","[marked class=\"".$attribs["Class"]."\"]",$text);
1684  }
1685  $text = str_replace("</ilMarked>","[/marked]", $text);
1686 
1687 
1688  $ret[] = array("text" => $text, "id" => $id, "class" => $class);
1689  }
1690  }
1691 
1692  // we should only have one here!
1693  return $ret[0];
1694  }
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
static replaceByChilds($node)
Replace a node by its child.
$a_content
Definition: workflow.php:94
static changeName($node, $name, $keep_attributes=true)
Change name of a node.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
Create styles array
The data for the language used.
static addParent($node, $name)
Add parent.
static _getCommonBBButtons()
Get common bb buttons.
$ret
Definition: parser.php:6
$text
+ 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 1699 of file class.ilPCParagraph.php.

References $text, and array.

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

1700  {
1701  $text = str_replace(array("&lt;ul&gt;", "&lt;/ul&gt;"),
1702  array("<SimpleBulletList>", "</SimpleBulletList>"), $text);
1703  $text = str_replace(array("&lt;ul class='ilc_list_u_BulletedList'&gt;", "&lt;/ul&gt;"),
1704  array("<SimpleBulletList>", "</SimpleBulletList>"), $text);
1705  $text = str_replace(array("&lt;ul class=\"ilc_list_u_BulletedList\"&gt;", "&lt;/ul&gt;"),
1706  array("<SimpleBulletList>", "</SimpleBulletList>"), $text);
1707  $text = str_replace(array("&lt;ol&gt;", "&lt;/ol&gt;"),
1708  array("<SimpleNumberedList>", "</SimpleNumberedList>"), $text);
1709  $text = str_replace(array("&lt;ol class='ilc_list_o_NumberedList'&gt;", "&lt;/ol&gt;"),
1710  array("<SimpleNumberedList>", "</SimpleNumberedList>"), $text);
1711  $text = str_replace(array("&lt;ol class=\"ilc_list_o_NumberedList\"&gt;", "&lt;/ol&gt;"),
1712  array("<SimpleNumberedList>", "</SimpleNumberedList>"), $text);
1713  $text = str_replace(array("&lt;li&gt;", "&lt;/li&gt;"),
1714  array("<SimpleListItem>", "</SimpleListItem>"), $text);
1715  $text = str_replace(array("&lt;li class='ilc_list_item_StandardListItem'&gt;", "&lt;/li&gt;"),
1716  array("<SimpleListItem>", "</SimpleListItem>"), $text);
1717  $text = str_replace(array("&lt;li class=\"ilc_list_item_StandardListItem\"&gt;", "&lt;/li&gt;"),
1718  array("<SimpleListItem>", "</SimpleListItem>"), $text);
1719 
1720  $text = str_replace(array("&lt;li class=\"ilc_list_item_StandardListItem\"/&gt;"),
1721  array("<SimpleListItem></SimpleListItem>"), $text);
1722 
1723  $text = str_replace("<SimpleBulletList><br />", "<SimpleBulletList>", $text);
1724  $text = str_replace("<SimpleNumberedList><br />", "<SimpleNumberedList>", $text);
1725  $text = str_replace("<br /><SimpleBulletList>", "<SimpleBulletList>", $text);
1726  $text = str_replace("<br /><SimpleNumberedList>", "<SimpleNumberedList>", $text);
1727  $text = str_replace("</SimpleBulletList><br />", "</SimpleBulletList>", $text);
1728  $text = str_replace("</SimpleNumberedList><br />", "</SimpleNumberedList>", $text);
1729  $text = str_replace("</SimpleListItem><br />", "</SimpleListItem>", $text);
1730 
1731  return $text;
1732  }
Create styles array
The data for the language used.
$text
+ Here is the caller graph for this function:

◆ handleNextBr()

ilPCParagraph::handleNextBr (   $a_str)

Remove preceding

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

Referenced by autoSplit().

1420  {
1421  // do not remove, if next line starts with a "=", otherwise two
1422  // headlines in a row will not be recognized
1423  if (substr($a_str, 0, 6) == "<br />" && substr($a_str, 6, 1) != "=")
1424  {
1425  $a_str = substr($a_str, 6);
1426  }
1427  else
1428  {
1429  // if next line starts with a "=" we need to reinsert the <br />
1430  // otherwise it will not be recognized
1431  if (substr($a_str, 0, 1) == "=")
1432  {
1433  $a_str = "<br />".$a_str;
1434  }
1435  }
1436  return $a_str;
1437  }
+ Here is the caller graph for this function:

◆ init()

ilPCParagraph::init ( )

Init page content component.

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

References ilPageContent\setType().

40  {
41  $this->setType("par");
42  }
setType($a_type)
Set Type.
+ Here is the call graph for this function:

◆ input2xml()

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

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

References _input2xml(), and getLanguage().

527  {
528  return $this->_input2xml($a_text, $this->getLanguage(), $a_wysiwyg, $a_handle_lists);
529  }
getLanguage()
get language
static _input2xml($a_text, $a_lang, $a_wysiwyg=0, $a_handle_lists=true)
converts user input to xml
+ 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 863 of file class.ilPCParagraph.php.

References $row, and $text.

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

864  {
865  $rows = explode("<br />", $a_text."<br />");
866 //var_dump($a_text);
867 
868  $old_level = 0;
869 
870  $text = "";
871 
872  foreach ($rows as $row)
873  {
874  $level = 0;
875  if (str_replace("#", "*", substr($row, 0, 3)) == "***")
876  {
877  $level = 3;
878  }
879  else if (str_replace("#", "*", substr($row, 0, 2)) == "**")
880  {
881  $level = 2;
882  }
883  else if (str_replace("#", "*", substr($row, 0, 1)) == "*")
884  {
885  $level = 1;
886  }
887 
888  // end previous line
889  if ($level < $old_level)
890  {
891  for ($i = $old_level; $i > $level; $i--)
892  {
893  $text.= "</SimpleListItem></".$clist[$i].">";
894  }
895  if ($level > 0)
896  {
897  $text.= "</SimpleListItem>";
898  }
899  }
900  else if ($old_level > 0 && $level > 0 && ($level == $old_level))
901  {
902  $text.= "</SimpleListItem>";
903  }
904  else if (($level == $old_level) && $text != "")
905  {
906  $text.= "<br />";
907  }
908 
909  // start next line
910  if ($level > $old_level)
911  {
912  for($i = $old_level + 1; $i <= $level; $i++)
913  {
914  if (substr($row, $i - 1, 1) == "*")
915  {
916  $clist[$i] = "SimpleBulletList";
917  }
918  else
919  {
920  $clist[$i] = "SimpleNumberedList";
921  }
922  $text.= "<".$clist[$i]."><SimpleListItem>";
923  }
924  }
925  else if ($old_level > 0 && $level > 0)
926  {
927  $text.= "<SimpleListItem>";
928  }
929  $text.= substr($row, $level);
930 
931  $old_level = $level;
932  }
933 
934  // remove "<br />" at the end
935  if (substr($text, strlen($text) - 6) == "<br />")
936  {
937  $text = substr($text, 0, strlen($text) - 6);
938  }
939 
940  return $text;
941  }
$text
+ Here is the caller graph for this function:

◆ intLinks2xml()

static ilPCParagraph::intLinks2xml (   $a_text)
static

internal links to xml

Parameters

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

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

690  {
691  global $objDefinition;
692 
693  $rtypes = $objDefinition->getAllRepositoryTypes();
694 
695  // internal links
696  //$any = "[^\]]*"; // this doesn't work :-(
697  $ws= "[ \t\r\f\v\n]*";
698  $ltypes = "page|chap|term|media|obj|dfile|sess|wpage|".implode($rtypes, "|");
699  // empty internal links
700  while (preg_match('~\[(iln'.$ws.'((inst'.$ws.'='.$ws.'([\"0-9])*)?'.$ws.
701  "((".$ltypes.")$ws=$ws([\"0-9])*)$ws".
702  "(target$ws=$ws(\"(New|FAQ|Media)\"))?$ws(anchor$ws=$ws(\"([^\"])*\"))?$ws))\]\[\/iln\]~i", $a_text, $found))
703  {
704  $a_text = str_replace($found[0], "",$a_text);
705  }
706  while (preg_match('~\[(iln'.$ws.'((inst'.$ws.'='.$ws.'([\"0-9])*)?'.$ws.
707  "((".$ltypes.")$ws=$ws([\"0-9])*)$ws".
708  "(target$ws=$ws(\"(New|FAQ|Media)\"))?$ws(anchor$ws=$ws(\"([^\"])*\"))?$ws))\]~i", $a_text, $found))
709  {
710  $attribs = ilUtil::attribsToArray($found[2]);
711  $inst_str = $attribs["inst"];
712  // pages
713  if (isset($attribs["page"]))
714  {
715  $tframestr = "";
716  if (!empty($found[10]))
717  {
718  $tframestr = " TargetFrame=\"".$found[10]."\" ";
719  }
720  $ancstr = "";
721  if ($attribs["anchor"] != "")
722  {
723  $ancstr = ' Anchor="'.$attribs["anchor"].'" ';
724  }
725  $a_text = preg_replace('/\['.$found[1].'\]/i',
726  "<IntLink Target=\"il_".$inst_str."_pg_".$attribs[page]."\" Type=\"PageObject\"".$tframestr.$ancstr.">", $a_text);
727  }
728  // chapters
729  else if (isset($attribs["chap"]))
730  {
731  if (!empty($found[10]))
732  {
733  $tframestr = " TargetFrame=\"".$found[10]."\" ";
734  }
735  else
736  {
737  $tframestr = "";
738  }
739  $a_text = preg_replace('/\['.$found[1].'\]/i',
740  "<IntLink Target=\"il_".$inst_str."_st_".$attribs[chap]."\" Type=\"StructureObject\"".$tframestr.">", $a_text);
741  }
742  // glossary terms
743  else if (isset($attribs["term"]))
744  {
745  switch ($found[10])
746  {
747  case "New":
748  $tframestr = " TargetFrame=\"New\" ";
749  break;
750 
751  default:
752  $tframestr = " TargetFrame=\"Glossary\" ";
753  break;
754  }
755  $a_text = preg_replace('/\['.$found[1].'\]/i',
756  "<IntLink Target=\"il_".$inst_str."_git_".$attribs[term]."\" Type=\"GlossaryItem\" $tframestr>", $a_text);
757  }
758  // wiki pages
759  else if (isset($attribs["wpage"]))
760  {
761  $tframestr = "";
762 /* switch ($found[10])
763  {
764  case "New":
765  $tframestr = " TargetFrame=\"New\" ";
766  break;
767 
768  default:
769  $tframestr = " TargetFrame=\"Glossary\" ";
770  break;
771  }*/
772  $a_text = preg_replace('/\['.$found[1].'\]/i',
773  "<IntLink Target=\"il_".$inst_str."_wpage_".$attribs[wpage]."\" Type=\"WikiPage\" $tframestr>", $a_text);
774  }
775  // media object
776  else if (isset($attribs["media"]))
777  {
778  if (!empty($found[10]))
779  {
780  $tframestr = " TargetFrame=\"".$found[10]."\" ";
781  $a_text = preg_replace('/\['.$found[1].'\]/i',
782  "<IntLink Target=\"il_".$inst_str."_mob_".$attribs[media]."\" Type=\"MediaObject\"".$tframestr.">", $a_text);
783  }
784  else
785  {
786  $a_text = preg_replace('/\['.$found[1].'\]/i',
787  "<IntLink Target=\"il_".$inst_str."_mob_".$attribs[media]."\" Type=\"MediaObject\"/>", $a_text);
788  }
789  }
790  // direct download file (no repository object)
791  else if (isset($attribs["dfile"]))
792  {
793  $a_text = preg_replace('/\['.$found[1].'\]/i',
794  "<IntLink Target=\"il_".$inst_str."_dfile_".$attribs[dfile]."\" Type=\"File\">", $a_text);
795  }
796  // repository items (id is ref_id (will be used internally but will
797  // be replaced by object id for export purposes)
798  else
799  {
800  foreach ($objDefinition->getAllRepositoryTypes() as $t)
801  {
802  if (isset($attribs[$t]))
803  {
804  $obj_id = $attribs[$t];
805  }
806  }
807  if (isset($attribs["obj"]))
808  {
809  $obj_id = $attribs["obj"];
810  }
811 
812  if ($obj_id > 0)
813  {
814  if ($inst_str == "")
815  {
816  $a_text = preg_replace('/\['.$found[1].'\]/i',
817  "<IntLink Target=\"il_".$inst_str."_obj_".$obj_id."\" Type=\"RepositoryItem\">", $a_text);
818  }
819  else
820  {
821  $a_text = preg_replace('/\['.$found[1].'\]/i',
822  "<IntLink Target=\"il_".$inst_str."_".$found[6]."_".$obj_id."\" Type=\"RepositoryItem\">", $a_text);
823  }
824  }
825  else
826  {
827  $a_text = preg_replace('/\['.$found[1].'\]/i', "[error: iln".$found[1]."]",$a_text);
828  }
829  }
830  }
831 
832  while (preg_match("~\[(iln$ws((inst$ws=$ws([\"0-9])*)?".$ws."media$ws=$ws([\"0-9])*)$ws)/\]~i", $a_text, $found))
833  {
834  $attribs = ilUtil::attribsToArray($found[2]);
835  $inst_str = $attribs["inst"];
836  $a_text = preg_replace('~\['.$found[1].'/\]~i',
837  "<IntLink Target=\"il_".$inst_str."_mob_".$attribs[media]."\" Type=\"MediaObject\"/>", $a_text);
838  }
839 
840  // user
841  while (preg_match("~\[(iln$ws((inst$ws=$ws([\"0-9])*)?".$ws."user$ws=$ws(\"([^\"])*)\")$ws)/\]~i", $a_text, $found))
842  {
843  $attribs = ilUtil::attribsToArray($found[2]);
844  $inst_str = $attribs["inst"];
845  include_once("./Services/User/classes/class.ilObjUser.php");
846  $user_id = ilObjUser::_lookupId($attribs[user]);
847  $a_text = preg_replace('~\['.$found[1].'/\]~i',
848  "<IntLink Target=\"il_".$inst_str."_user_".$user_id."\" Type=\"User\"/>", $a_text);
849  }
850 
851  $a_text = preg_replace('~\[\/iln\]~i',"</IntLink>",$a_text);
852  return $a_text;
853  }
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
static _lookupId($a_user_str)
Lookup id by login.
user()
Definition: user.php:4
+ Here is the call 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

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

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

1797  {
1798  // sort terms by their length (shortes first)
1799  // to prevent that nested tags are builded
1800  foreach ($a_terms as $k => $t)
1801  {
1802  $a_terms[$k]["termlength"] = strlen($t["term"]);
1803  }
1804  $a_terms = ilUtil::sortArray($a_terms, "termlength", "asc", true);
1805 
1806 
1807  if ($a_dom instanceof php4DOMDocument)
1808  {
1809  $a_dom = $a_dom->myDOMDocument;
1810  }
1811  if ($a_par_node instanceof php4DOMElement)
1812  {
1813  $a_par_node = $a_par_node->myDOMNode;
1814  }
1815 
1816  $xpath = new DOMXPath($a_dom);
1817 
1818  if ($a_par_node == null)
1819  {
1820  $parnodes = $xpath->query("//Paragraph[@Characteristic != 'Code']");
1821  }
1822  else
1823  {
1824  $parnodes = $xpath->query(".//Paragraph[@Characteristic != 'Code']", $a_par_node->parentNode);
1825  }
1826 
1827  include_once("./Services/Utilities/classes/class.ilStr.php");
1828 
1829  foreach ($parnodes as $parnode)
1830  {
1831  $textnodes = $xpath->query('.//text()', $parnode);
1832  foreach ($textnodes as $node)
1833  {
1834  $p = $node->getNodePath();
1835 
1836  // we do not change text nodes inside of links
1837  if (!is_int(strpos($p, "/IntLink")) &&
1838  !is_int(strpos($p, "/ExtLink")))
1839  {
1840  $node_val = $node->nodeValue;
1841 
1842  // all terms
1843  foreach ($a_terms as $t)
1844  {
1845  $pos = ilStr::strIPos($node_val, $t["term"]);
1846 
1847  // if term found
1848  while (is_int($pos))
1849  {
1850  // check if we are in a tex tag, see #22261
1851  $tex_bpos = ilStr::strrPos(ilStr::subStr($node_val, 0, $pos), "[tex]");
1852  $tex_epos = ilStr::strPos($node_val, "[/tex]", $tex_bpos);
1853  if ($tex_bpos > 0 && $tex_epos > 0 && $tex_bpos < $pos && $tex_epos > $pos)
1854  {
1855  $pos+= ilStr::strLen($t["term"]);
1856  }
1857  else
1858  {
1859 
1860  // check if the string is not included in another word
1861  // note that []
1862  $valid_limiters = array("", " ", "&nbsp;", ".", ",", ":", ";", "!", "?", "\"", "'", "(", ")");
1863  $b = ($pos > 0)
1864  ? ilStr::subStr($node_val, $pos - 1, 1)
1865  : "";
1866  $a = ilStr::subStr($node_val, $pos + ilStr::strLen($t["term"]), 1);
1867  if ((in_array($b, $valid_limiters) || htmlentities($b, null, 'utf-8') == "&nbsp;") && in_array($a, $valid_limiters))
1868  {
1869  $mid = '[iln term="' . $t["id"] . '"]' .
1870  ilStr::subStr($node_val, $pos, ilStr::strLen($t["term"])) .
1871  "[/iln]";
1872 
1873  $node_val = ilStr::subStr($node_val, 0, $pos) .
1874  $mid .
1875  ilStr::subStr($node_val, $pos + ilStr::strLen($t["term"]));
1876 
1877  $pos += ilStr::strLen($mid);
1878  } else
1879  {
1880  $pos += ilStr::strLen($t["term"]);
1881  }
1882  }
1883  $pos = ilStr::strIPos($node_val, $t["term"], $pos);
1884  }
1885 
1886  // insert [iln] tags
1887  }
1888 
1889  $node->nodeValue = $node_val;
1890  }
1891 
1892 // var_dump($p);
1893 // var_dump($node->nodeValue);
1894  }
1895 
1896 
1897  // dump paragraph node
1898  $text = $a_dom->saveXML($parnode);
1899  $text = substr($text, 0, strlen($text) - strlen("</Paragraph>"));
1900  $text = substr($text, strpos($text, ">") + 1);
1901 
1902  // replace [iln] by tags with xml representation
1903  $text = self::intLinks2xml($text);
1904 
1905  // "set text"
1906  $temp_dom = domxml_open_mem('<?xml version="1.0" encoding="UTF-8"?><Paragraph>'.$text.'</Paragraph>',
1907  DOMXML_LOAD_PARSING, $error);
1908  $temp_dom = $temp_dom->myDOMDocument;
1909 
1910  if(empty($error))
1911  {
1912  // delete children of paragraph node
1913  $children = $parnode->childNodes;
1914  while ($parnode->hasChildNodes())
1915  {
1916  $parnode->removeChild($parnode->firstChild);
1917  }
1918 
1919  // copy new content children in paragraph node
1920  $xpath_temp = new DOMXPath($temp_dom);
1921  $temp_pars = $xpath_temp->query("//Paragraph");
1922 
1923  foreach ($temp_pars as $new_par_node)
1924  {
1925  $new_childs = $new_par_node->childNodes;
1926 
1927  foreach($new_childs as $new_child)
1928  {
1929  //$cloned_child = $new_child->cloneNode(true);
1930  $cloned_child = $a_dom->importNode($new_child, true);
1931  $parnode->appendChild($cloned_child);
1932  }
1933  }
1934  }
1935  }
1936 // exit;
1937  }
$error
Definition: Error.php:17
static strrPos($a_haystack, $a_needle, $a_offset=NULL)
Definition: class.ilStr.php:46
static strLen($a_string)
Definition: class.ilStr.php:91
static strPos($a_haystack, $a_needle, $a_offset=NULL)
Definition: class.ilStr.php:34
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
php4DomElement
Create styles array
The data for the language used.
static strIPos($a_haystack, $a_needle, $a_offset=NULL)
Definition: class.ilStr.php:58
$text
domxml_open_mem($str, $mode=0, &$error=NULL)
static subStr($a_str, $a_start, $a_length=NULL)
Definition: class.ilStr.php:15
+ Here is the call graph for this function:

◆ removeTrailingBr()

ilPCParagraph::removeTrailingBr (   $a_str)

Remove trailing

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

Referenced by autoSplit().

1443  {
1444  if (substr($a_str, strlen($a_str) - 6) == "<br />")
1445  {
1446  $a_str = substr($a_str, 0, strlen($a_str) - 6);
1447  }
1448  return $a_str;
1449  }
+ 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 539 of file class.ilPCParagraph.php.

540  {
541  $a_text = preg_replace('/\['.$a_bb.'\]/i',"<".$a_tag.">",$a_text);
542  $a_text = preg_replace('/\[\/'.$a_bb.'\]/i',"</".$a_tag.">",$a_text);
543  return $a_text;
544  }

◆ saveAnchors()

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

Save anchors.

Parameters
stringxml page code

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

References ilPageContent\$node, and array.

2000  {
2001  self::_deleteAnchors($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage());
2002 
2003  // get all anchors
2004  $xpath = new DOMXPath($a_domdoc);
2005  $nodes = $xpath->query('//Anchor');
2006  $saved = array();
2007  foreach ($nodes as $node)
2008  {
2009  $name = $node->getAttribute("Name");
2010  if (trim($name) != "" && !in_array($name, $saved))
2011  {
2012  self::_saveAnchor($a_page->getParentType(), $a_page->getId(), $a_page->getLanguage(), $name);
2013  $saved[] = $name;
2014  }
2015  }
2016 
2017  }
Create styles array
The data for the language used.

◆ saveJS()

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

Save input coming from ajax.

Parameters

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

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

1470  {
1471  global $ilUser;
1472 
1473  $this->log->debug("step 1: ".substr($a_content, 0, 1000));
1474  $t = self::handleAjaxContent($a_content);
1475  $this->log->debug("step 2: ".substr($t["text"], 0, 1000));
1476  if ($t === false)
1477  {
1478  return false;
1479  }
1480 
1481  $pc_id = explode(":", $a_pc_id);
1482  $insert_at = explode(":", $a_insert_at);
1483  $t_id = explode(":", $t["id"]);
1484 
1485  // insert new paragraph
1486  if ($a_insert_at != "")
1487  {
1488  $par = new ilPCParagraph($this->getPage());
1489  $par->create($a_pg_obj, $insert_at[0], $insert_at[1]);
1490  }
1491  else
1492  {
1493  $par = $a_pg_obj->getContentObject($pc_id[0], $pc_id[1]);
1494  }
1495 
1496  if ($a_insert_at != "")
1497  {
1498  $pc_id = $a_pg_obj->generatePCId();
1499  $par->writePCId($pc_id);
1500  $this->inserted_pc_id = $pc_id;
1501  }
1502  else
1503  {
1504  $this->inserted_pc_id = $pc_id[1];
1505  }
1506 
1507  $par->setLanguage($ilUser->getLanguage());
1508  $par->setCharacteristic($t["class"]);
1509 
1510  $t2 = $par->input2xml($t["text"], true, false);
1511  $this->log->debug("step 3: ".substr($t2, 0, 1000));
1512 
1514  $this->log->debug("step 4: ".substr($t2, 0, 1000));
1515 
1516  $updated = $par->setText($t2, true);
1517 
1518  if ($updated !== true)
1519  {
1520  echo $updated; exit;
1521  return false;
1522  }
1523  $updated = $par->updatePage($a_pg_obj);
1524  //$updated = $a_pg_obj->update();
1525  return $updated;
1526  }
static handleAjaxContentPost($text)
Post input2xml handling of ajax content.
Class ilPCParagraph.
$a_content
Definition: workflow.php:94
$ilUser
Definition: imgupload.php:18
+ 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 2079 of file class.ilPCParagraph.php.

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

2080  {
2081  // not nice, should be set by context per method
2082  if ($a_page->getParentType() == "gdf" ||
2083  $a_page->getParentType() == "lm")
2084  {
2085  // get existing keywords
2086  $keywords = array();
2087 
2088  // find all Keyw tags
2089  $xpath = new DOMXPath($a_domdoc);
2090  $nodes = $xpath->query('//Keyw');
2091  foreach($nodes as $node)
2092  {
2093  $k = trim(strip_tags($node->nodeValue));
2094  if (!in_array($k, $keywords))
2095  {
2096  $keywords[] = $k;
2097  }
2098  }
2099 
2100  $meta_type = ($a_page->getParentType() == "gdf")
2101  ? "gdf"
2102  : "pg";
2103  $meta_rep_id = $a_page->getParentId();
2104  $meta_id = $a_page->getId();
2105 
2106  include_once("./Services/MetaData/classes/class.ilMD.php");
2107  $md_obj = new ilMD($meta_rep_id, $meta_id, $meta_type);
2108  $mkeywords = array();
2109  $lang = "";
2110  if(is_object($md_section = $md_obj->getGeneral()))
2111  {
2112  foreach($ids = $md_section->getKeywordIds() as $id)
2113  {
2114  $md_key = $md_section->getKeyword($id);
2115  $mkeywords[] = strtolower($md_key->getKeyword());
2116  if ($lang == "")
2117  {
2118  $lang = $md_key->getKeywordLanguageCode();
2119  }
2120  }
2121  if ($lang == "")
2122  {
2123  foreach($ids = $md_section->getLanguageIds() as $id)
2124  {
2125  $md_lang = $md_section->getLanguage($id);
2126  if ($lang == "")
2127  {
2128  $lang = $md_lang->getLanguageCode();
2129  }
2130  }
2131  }
2132  foreach ($keywords as $k)
2133  {
2134  if (!in_array(strtolower($k), $mkeywords))
2135  {
2136  if (trim($k) != "" && $lang != "")
2137  {
2138  $md_key = $md_section->addKeyword();
2139  $md_key->setKeyword(ilUtil::stripSlashes($k));
2140  $md_key->setKeywordLanguage(new ilMDLanguageItem($lang));
2141  $md_key->save();
2142  }
2143  $mkeywords[] = strtolower($k);
2144  }
2145  }
2146  }
2147  }
2148  }
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
Create styles array
The data for the language used.
for($i=1; $i<=count($kw_cases_sel); $i+=1) $lang
Definition: langwiz.php:349
+ Here is the call 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 1046 of file class.ilPCParagraph.php.

References array.

Referenced by xml2outputReplaceLists().

1047  {
1048  $segments = array();
1049 
1050  $nothing_found = false;
1051  while (!$nothing_found)
1052  {
1053  $nothing_found = true;
1054  $found = -1;
1055  foreach($a_needles as $needle)
1056  {
1057  $pos = stripos($a_haystack, $needle);
1058  if (is_int($pos) && ($pos < $found || $found == -1))
1059  {
1060  $found = $pos;
1061  $found_needle = $needle;
1062  $nothing_found = false;
1063  }
1064  }
1065  if ($found > 0)
1066  {
1067  $segments[] = substr($a_haystack, 0, $found);
1068  $a_haystack = substr($a_haystack, $found);
1069  }
1070  if ($found > -1)
1071  {
1072  $segments[] = substr($a_haystack, 0, strlen($found_needle));
1073  $a_haystack = substr($a_haystack, strlen($found_needle));
1074  }
1075  }
1076  if ($a_haystack != "")
1077  {
1078  $segments[] = $a_haystack;
1079  }
1080 
1081  return $segments;
1082  }
Create styles array
The data for the language used.
+ Here is the caller graph for this function:

◆ setAutoIndent()

ilPCParagraph::setAutoIndent (   $a_char)

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

441  {
442  if (!empty($a_char))
443  {
444  $this->par_node->set_attribute("AutoIndent", $a_char);
445  }
446  else
447  {
448  if ($this->par_node->has_attribute("AutoIndent"))
449  {
450  $this->par_node->remove_attribute("AutoIndent");
451  }
452  }
453  }

◆ setCharacteristic()

ilPCParagraph::setCharacteristic (   $a_char)

Set Characteristic of paragraph.

Parameters
string$a_charCharacteristic

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

384  {
385  if (!empty($a_char))
386  {
387  $this->par_node->set_attribute("Characteristic", $a_char);
388  }
389  else
390  {
391  if ($this->par_node->has_attribute("Characteristic"))
392  {
393  $this->par_node->remove_attribute("Characteristic");
394  }
395  }
396  }

◆ setDownloadTitle()

ilPCParagraph::setDownloadTitle (   $a_char)

set attribute download title

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

468  {
469  if (!empty($a_char))
470  {
471  $this->par_node->set_attribute("DownloadTitle", $a_char);
472  }
473  else
474  {
475  if ($this->par_node->has_attribute("DownloadTitle"))
476  {
477  $this->par_node->remove_attribute("DownloadTitle");
478  }
479  }
480  }

◆ setLanguage()

ilPCParagraph::setLanguage (   $a_lang)

set language

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

514  {
515  $this->par_node->set_attribute("Language", $a_lang);
516  }

◆ setNode()

ilPCParagraph::setNode (   $a_node)

Set Page Content Node.

Parameters
object$a_nodePage Content DOM Node

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

72  {
73  parent::setNode($a_node); // this is the PageContent node
74 
75  $childs = $a_node->child_nodes();
76  for ($i=0; $i<count($childs); $i++)
77  {
78  if ($childs[$i]->node_name() == "Paragraph")
79  {
80  $this->par_node = $childs[$i]; //... and this the Paragraph node
81  }
82  }
83  }

◆ setShowLineNumbers()

ilPCParagraph::setShowLineNumbers (   $a_char)

set attribute showlinenumbers

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

495  {
496  $a_char = empty($a_char)?"n":$a_char;
497 
498  $this->par_node->set_attribute("ShowLineNumbers", $a_char);
499  }

◆ setSubCharacteristic()

ilPCParagraph::setSubCharacteristic (   $a_char)

set attribute subcharacteristic

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

416  {
417  if (!empty($a_char))
418  {
419  $this->par_node->set_attribute("SubCharacteristic", $a_char);
420  }
421  else
422  {
423  if ($this->par_node->has_attribute("SubCharacteristic"))
424  {
425  $this->par_node->remove_attribute("SubCharacteristic");
426  }
427  }
428  }

◆ 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 164 of file class.ilPCParagraph.php.

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

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

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

References $ret.

1742  {
1743  $a_page->beforePageContentUpdate($this);
1744 
1745  $ret = $a_page->update();
1746  return $ret;
1747  }
$ret
Definition: parser.php:6

◆ xml2output()

static ilPCParagraph::xml2output (   $a_text,
  $a_wysiwyg = false,
  $a_replace_lists = 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 1091 of file class.ilPCParagraph.php.

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

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

1092  {
1093  // note: the order of the processing steps is crucial
1094  // and should be the same as in input2xml() in REVERSE order!
1095 
1096  // xml to bb code
1097  $any = "[^>]*";
1098 
1099  foreach (self::getBBMap() as $bb => $tag)
1100  {
1101  $a_text = preg_replace('~<'.$tag.'[^>]*>~i',"[".$bb."]", $a_text);
1102  $a_text = preg_replace('~</'.$tag.'>~i',"[/".$bb."]", $a_text);
1103  $a_text = preg_replace('~<'.$tag.'/>~i',"[".$bb."][/".$bb."]", $a_text);
1104  }
1105 
1106  // replace lists
1107  if ($a_replace_lists)
1108  {
1109 //echo "<br>".htmlentities($a_text);
1110  $a_text = ilPCParagraph::xml2outputReplaceLists($a_text);
1111 //echo "<br>".htmlentities($a_text);
1112  }
1113 
1114  // internal links
1115  while (preg_match('~<IntLink('.$any.')>~i', $a_text, $found))
1116  {
1117  $found[0];
1118  $attribs = ilUtil::attribsToArray($found[1]);
1119  $target = explode("_", $attribs["Target"]);
1120  $target_id = $target[count($target) - 1];
1121  $inst_str = (!is_int(strpos($attribs["Target"], "__")))
1122  ? $inst_str = "inst=\"".$target[1]."\" "
1123  : $inst_str = "";
1124  switch($attribs["Type"])
1125  {
1126  case "PageObject":
1127  $tframestr = (!empty($attribs["TargetFrame"]))
1128  ? " target=\"".$attribs["TargetFrame"]."\""
1129  : "";
1130  $ancstr = (!empty($attribs["Anchor"]))
1131  ? ' anchor="'.$attribs["Anchor"].'"'
1132  : "";
1133  $a_text = preg_replace('~<IntLink'.$found[1].'>~i',"[iln ".$inst_str."page=\"".$target_id."\"$tframestr$ancstr]",$a_text);
1134  break;
1135 
1136  case "StructureObject":
1137  $tframestr = (!empty($attribs["TargetFrame"]))
1138  ? " target=\"".$attribs["TargetFrame"]."\""
1139  : "";
1140  $a_text = preg_replace('~<IntLink'.$found[1].'>~i',"[iln ".$inst_str."chap=\"".$target_id."\"$tframestr]",$a_text);
1141  break;
1142 
1143  case "GlossaryItem":
1144  $tframestr = (empty($attribs["TargetFrame"]) || $attribs["TargetFrame"] == "Glossary")
1145  ? ""
1146  : " target=\"".$attribs["TargetFrame"]."\"";
1147  $a_text = preg_replace('~<IntLink'.$found[1].'>~i',"[iln ".$inst_str."term=\"".$target_id."\"".$tframestr."]",$a_text);
1148  break;
1149 
1150  case "WikiPage":
1151  $tframestr = "";
1152  /*$tframestr = (empty($attribs["TargetFrame"]) || $attribs["TargetFrame"] == "Glossary")
1153  ? ""
1154  : " target=\"".$attribs["TargetFrame"]."\"";*/
1155  $a_text = preg_replace('~<IntLink'.$found[1].'>~i',"[iln ".$inst_str."wpage=\"".$target_id."\"".$tframestr."]",$a_text);
1156  break;
1157 
1158  case "MediaObject":
1159  if (empty($attribs["TargetFrame"]))
1160  {
1161  $a_text = preg_replace('~<IntLink'.$found[1].'>~i',"[iln ".$inst_str."media=\"".$target_id."\"/]",$a_text);
1162  }
1163  else
1164  {
1165  $a_text = preg_replace('~<IntLink'.$found[1].'>~i',"[iln media=\"".$target_id."\"".
1166  " target=\"".$attribs["TargetFrame"]."\"]",$a_text);
1167  }
1168  break;
1169 
1170  // Repository Item (using ref id)
1171  case "RepositoryItem":
1172  if ($inst_str == "")
1173  {
1175  }
1176  else
1177  {
1178  $rtype = $target[count($target) - 2];
1179  $target_type = $rtype;
1180  }
1181  $a_text = preg_replace('~<IntLink'.$found[1].'>~i',"[iln ".$inst_str."$target_type=\"".$target_id."\"".$tframestr."]",$a_text);
1182  break;
1183 
1184  // Download File (not in repository, Object ID)
1185  case "File":
1186  $a_text = preg_replace('~<IntLink'.$found[1].'>~i',"[iln ".$inst_str."dfile=\"".$target_id."\"".$tframestr."]",$a_text);
1187  break;
1188 
1189  // User
1190  case "User":
1191  include_once("./Services/User/classes/class.ilObjUser.php");
1192  $a_text = preg_replace('~<IntLink'.$found[1].'>~i',"[iln ".$inst_str."user=\"".ilObjUser::_lookupLogin($target_id)."\"/]",$a_text);
1193  break;
1194 
1195  default:
1196  $a_text = preg_replace('~<IntLink'.$found[1].'>~i',"[iln]",$a_text);
1197  break;
1198  }
1199  }
1200  $a_text = str_replace("</IntLink>","[/iln]",$a_text);
1201 
1202  // external links
1203  while (preg_match('~<ExtLink('.$any.')>~i', $a_text, $found))
1204  {
1205  $found[0];
1206  $attribs = ilUtil::attribsToArray($found[1]);
1207  //$found[1] = str_replace("?", "\?", $found[1]);
1208  $tstr = "";
1209  if (in_array($attribs["TargetFrame"], array("FAQ", "Glossary", "Media")))
1210  {
1211  $tstr = ' target="'.$attribs["TargetFrame"].'"';
1212  }
1213  $a_text = str_replace("<ExtLink".$found[1].">","[xln url=\"".$attribs["Href"]."\"$tstr]",$a_text);
1214  }
1215  $a_text = str_replace("</ExtLink>","[/xln]",$a_text);
1216 
1217  // anchor
1218  while (preg_match('~<Anchor('.$any.'/)>~i', $a_text, $found))
1219  {
1220  $found[0];
1221  $attribs = ilUtil::attribsToArray($found[1]);
1222  $a_text = str_replace("<Anchor".$found[1].">","[anc name=\"".$attribs["Name"]."\"][/anc]",$a_text);
1223  }
1224  while (preg_match('~<Anchor('.$any.')>~i', $a_text, $found))
1225  {
1226  $found[0];
1227  $attribs = ilUtil::attribsToArray($found[1]);
1228  $a_text = str_replace("<Anchor".$found[1].">","[anc name=\"".$attribs["Name"]."\"]",$a_text);
1229  }
1230  $a_text = str_replace("</Anchor>","[/anc]",$a_text);
1231 
1232  // marked text
1233  while (preg_match('~<Marked('.$any.')>~i', $a_text, $found))
1234  {
1235  $found[0];
1236  $attribs = ilUtil::attribsToArray($found[1]);
1237  $a_text = str_replace("<Marked".$found[1].">","[marked class=\"".$attribs["Class"]."\"]",$a_text);
1238  }
1239  $a_text = str_replace("</Marked>","[/marked]",$a_text);
1240 
1241  // br to linefeed
1242  if (!$a_wysiwyg)
1243  {
1244  $a_text = str_replace("<br />", "\n", $a_text);
1245  $a_text = str_replace("<br/>", "\n", $a_text);
1246  }
1247 
1248 if (!$a_wysiwyg)
1249 {
1250  // prevent curly brackets from being swallowed up by template engine
1251  $a_text = str_replace("{", "&#123;", $a_text);
1252  $a_text = str_replace("}", "&#125;", $a_text);
1253 
1254  // unmask html
1255  $a_text = str_replace("&lt;", "<", $a_text);
1256  $a_text = str_replace("&gt;", ">",$a_text);
1257 
1258  // this is needed to allow html like <tag attribute="value">... in paragraphs
1259  $a_text = str_replace("&quot;", "\"", $a_text);
1260 
1261  // make ampersands in (enabled) html attributes work
1262  // e.g. <a href="foo.php?n=4&t=5">hhh</a>
1263  $a_text = str_replace("&amp;", "&", $a_text);
1264 
1265  // make &gt; and $lt; work to allow (disabled) html descriptions
1266  $a_text = str_replace("&lt;", "&amp;lt;", $a_text);
1267  $a_text = str_replace("&gt;", "&amp;gt;", $a_text);
1268 }
1269  return $a_text;
1270  //return str_replace("<br />", chr(13).chr(10), $a_text);
1271  }
static _lookupLogin($a_user_id)
lookup login
static attribsToArray($a_str)
converts a string of format var1 = "val1" var2 = "val2" ...
static xml2outputReplaceLists($a_text)
Replaces with *.
$target_type
Definition: goto.php:50
$target_id
Definition: goto.php:51
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
+ 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 950 of file class.ilPCParagraph.php.

References $li, $text, array, and segmentString().

Referenced by xml2output().

951  {
952  $segments = ilPCParagraph::segmentString($a_text, array("<SimpleBulletList>", "</SimpleBulletList>",
953  "</SimpleListItem>", "<SimpleListItem>", "<SimpleListItem/>", "<SimpleNumberedList>", "</SimpleNumberedList>"));
954 
955  $current_list = array();
956  $text = "";
957  for ($i=0; $i<= count($segments); $i++)
958  {
959  if ($segments[$i] == "<SimpleBulletList>")
960  {
961  if (count($current_list) == 0)
962  {
963  $list_start = true;
964  }
965  array_push($current_list, "*");
966  $li = false;
967  }
968  else if ($segments[$i] == "<SimpleNumberedList>")
969  {
970  if (count($current_list) == 0)
971  {
972  $list_start = true;
973  }
974  array_push($current_list, "#");
975  $li = false;
976  }
977  else if ($segments[$i] == "</SimpleBulletList>")
978  {
979  array_pop($current_list);
980  $li = false;
981  }
982  else if ($segments[$i] == "</SimpleNumberedList>")
983  {
984  array_pop($current_list);
985  $li = false;
986  }
987  else if ($segments[$i] == "<SimpleListItem>")
988  {
989  $li = true;
990  }
991  else if ($segments[$i] == "</SimpleListItem>")
992  {
993  $li = false;
994  }
995  else if ($segments[$i] == "<SimpleListItem/>")
996  {
997  if ($list_start)
998  {
999  $text.= "<br />";
1000  $list_start = false;
1001  }
1002  foreach($current_list as $list)
1003  {
1004  $text.= $list;
1005  }
1006  $text.= "<br />";
1007  $li = false;
1008  }
1009  else
1010  {
1011  if ($li)
1012  {
1013  if ($list_start)
1014  {
1015  $text.= "<br />";
1016  $list_start = false;
1017  }
1018  foreach($current_list as $list)
1019  {
1020  $text.= $list;
1021  }
1022  }
1023  $text.= $segments[$i];
1024  if ($li)
1025  {
1026  $text.= "<br />";
1027  }
1028  $li = false;
1029  }
1030  }
1031 
1032  // remove trailing <br />, if text ends with list
1033  if ($segments[count($segments) - 1] == "</SimpleBulletList>" ||
1034  $segments[count($segments) - 1] == "</SimpleNumberedList>" &&
1035  substr($text, strlen($text) - 6) == "<br />")
1036  {
1037  $text = substr($text, 0, strlen($text) - 6);
1038  }
1039 
1040  return $text;
1041  }
static segmentString($a_haystack, $a_needles)
Segments a string into an array at each position of a substring.
$li
Definition: langwiz.php:233
Create styles array
The data for the language used.
$text
+ 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:
"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 22 of file class.ilPCParagraph.php.

◆ $dom

ilPCParagraph::$dom

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

Referenced by ilPCSourceCode\modifyPageContentPostXsl().

◆ $par_node

ilPCParagraph::$par_node

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


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