/**
  * @return string
  */
 public function getDiffHTMLForODS()
 {
     if ($this->zeile_von !== null && $this->zeile_bis !== null) {
         $str_pre = "<div class='ae_absatz_header'>Im Absatz von Zeile " . $this->zeile_von . " bis " . $this->zeile_bis . "</div>";
     } else {
         $str_pre = "";
     }
     $str = DiffUtils::renderBBCodeDiff2HTML($this->str_bbcode_vorher, $this->str_bbcode_nachher, false, 0, "", false);
     return $str_pre . "<div>" . $str . "</div>";
 }
 public function run($args)
 {
     foreach ($GLOBALS["TESTS"] as $test) {
         /** @var Antrag $antrag */
         $antrag = Antrag::model()->findByPk($test["antrag_id"]);
         $diffs = array();
         /** @var array|AntragAbsatz[] $pars */
         $pars = $antrag->getParagraphs();
         $diffs[$test["absatz_nr"]] = DiffUtils::renderBBCodeDiff2HTML($pars[$test["absatz_nr"]]->str_bbcode, $test["text_neu"], false, 0, "", true, true);
         var_dump($diffs);
     }
 }
Example #3
0
        if (!isset($aes2absaetze[IntVal($ant->id)])) {
            $aes2absaetze[IntVal($ant->id)] = array();
            $aes[IntVal($ant->id)] = $ant;
        }
        $aes2absaetze[IntVal($ant->id)][] = IntVal($i);
        $par = $ant->getDiffParagraphs();
        if ($par[$i] != "") {
            $ae_link = "<a href=\"" . CHtml::encode($this->createUrl("aenderungsantrag/anzeige", array("antrag_id" => $antrag->id, "aenderungsantrag_id" => $ant->id))) . "\" target=\"_blank\">" . CHtml::encode($ant->revision_name) . "</a>";
            $antragstellerInnen = $ant->getAntragstellerInnen();
            $x = array();
            foreach ($antragstellerInnen as $a) {
                $x[] = $a->name;
            }
            $von = implode(", ", $x);
            echo "<label><input type='radio' name='absatz_typ[{$i}]' value='" . $ant->id . "'> " . $ae_link . " (von " . CHtml::encode($von) . ")</label>";
            $full_texts .= "<blockquote class='aenderung ae_" . $ant->id . "'>" . DiffUtils::renderBBCodeDiff2HTML($abs->str_bbcode, $par[$i]) . "</blockquote>";
        }
    }
    echo "<label><input type='radio' name='absatz_typ[{$i}]' value='neu'> Neuer Text</label><br>";
    echo "<blockquote class='original'>" . $abs->str_html_plain . "</blockquote>" . $full_texts;
    echo "<div><textarea class='neu_text' name='neu_text[{$i}]' id='neu_text_{$i}' style='width: 550px; height: 200px;'>" . CHtml::encode($abs->str_bbcode) . "</textarea></div>";
    echo "</div>";
}
echo "<h3>Begründung</h3><div class='absatz_selector_holder content absatz_begruendung'>";
/** @var AntragAbsatz $abs */
$full_texts = "";
echo "<label><input type='radio' name='begruendung_typ' value='original' checked> Original beibehalten</label>";
echo "<label><input type='radio' name='begruendung_typ' value='neu'> Neuer Text</label><br>";
echo "<blockquote class='original'>" . HtmlBBcodeUtils::bbcode2html($antrag->begruendung) . "</blockquote>" . $full_texts;
echo "<div><textarea class='neu_text' name='neu_begruendung' id='neu_begruendung' style='width: 550px; height: 200px;'>" . CHtml::encode($antrag->begruendung) . "</textarea></div>";
echo "</div>";
Example #4
0
 /**
  * @static
  * @param string $text_alt
  * @param string $text_neu
  * @param bool $compact
  * @param int $css_width_hack
  * @param string $pre_str_html
  * @param bool $wrapWithCssClass
  * @param bool $debug
  * @return string
  */
 public static function renderBBCodeDiff2HTML($text_alt, $text_neu, $compact = false, $css_width_hack = 0, $pre_str_html = "", $wrapWithCssClass = true, $debug = false)
 {
     $text_alt = static::bbNormalizeForDiff($text_alt);
     $text_neu = static::bbNormalizeForDiff($text_neu);
     $diff = DiffUtils::getTextDiff($text_alt, $text_neu);
     if ($compact) {
         $renderer = new Horde_Text_Diff_Renderer_Inline_Antrag15();
         $absatz = $renderer->render($diff);
     } else {
         $absatz = DiffUtils::renderAbsatzDiff($diff);
     }
     if ($debug) {
         echo "\n\n============== Nach DIFF ===============\n\n";
         var_dump($absatz);
     }
     $split_lists = function ($matches) use($debug) {
         $lis = explode("[*]", $matches["inhalt"]);
         if (count($lis) == 1) {
             return $matches[0];
         }
         $output = "";
         for ($i = 0; $i < count($lis); $i++) {
             if ($i == 0) {
                 if (trim($lis[$i]) == "") {
                     $output .= $lis[$i];
                 } else {
                     $output .= $matches["anfang"] . $lis[$i] . $matches["ende"];
                 }
             } elseif ($i == count($lis) - 1) {
                 if (trim($lis[$i]) == "") {
                     $output .= "[*]" . $lis[$i];
                 } else {
                     $output .= "[*]" . $matches["anfang"] . $lis[$i] . $matches["ende"];
                 }
             } else {
                 $output .= "[*]" . $matches["anfang"] . $lis[$i] . $matches["ende"];
             }
         }
         if ($debug) {
             echo "-----------------\n";
             var_dump($matches);
             var_dump($lis);
             var_dump($output);
         }
         return $output;
     };
     $absatz = preg_replace_callback("/(?<anfang><del>)(?<inhalt>.*)(?<ende><\\/del>)/siU", $split_lists, $absatz);
     $absatz = preg_replace_callback("/(?<anfang><ins>)(?<inhalt>.*)(?<ende><\\/ins>)/siU", $split_lists, $absatz);
     $diffstr = HtmlBBcodeUtils::bbcode2html($absatz);
     $diffstr = str_ireplace(array("&lt;ins&gt;", "&lt;/ins&gt;", "&lt;del&gt;", "&lt;/del&gt;"), array("<ins>", "</ins>", "<del>", "</del>"), $diffstr);
     if ($debug) {
         echo "\n\n============== In HTML ===============\n\n";
         var_dump($diffstr);
     }
     static::$ins_mode_active = false;
     static::$del_mode_active = false;
     $diffstr = preg_replace_callback("/(<li>)(.*)(<\\/li>)/siuU", function ($matches) {
         $pos_del_open = mb_stripos($matches[2], "<del>");
         $pos_del_close = mb_stripos($matches[2], "</del>");
         $pos_ins_open = mb_stripos($matches[2], "<ins>");
         $pos_ins_close = mb_stripos($matches[2], "</ins>");
         $middle = $matches[2];
         if ($pos_del_close !== false && ($pos_del_open === false || $pos_del_open > $pos_del_close)) {
             $middle = "<del>" . $middle;
             static::$del_mode_active = false;
         }
         if ($pos_del_open !== false && ($pos_del_close === false || $pos_del_open > $pos_del_close)) {
             $middle .= "</del>";
             static::$del_mode_active = true;
         }
         if ($pos_del_close === false && $pos_del_open === false && static::$del_mode_active) {
             $middle = "<del>{$middle}</del>";
         }
         if ($pos_ins_close !== false && ($pos_ins_open === false || $pos_ins_open > $pos_ins_close)) {
             $middle = "<ins>" . $middle;
             static::$ins_mode_active = false;
         }
         if ($pos_ins_open !== false && ($pos_ins_close === false || $pos_ins_open > $pos_ins_close)) {
             $middle .= "</ins>";
             static::$ins_mode_active = true;
         }
         if ($pos_ins_close === false && $pos_ins_open === false && static::$ins_mode_active) {
             $middle = "<ins>{$middle}</ins>";
         }
         return $matches[1] . $middle . $matches[3];
     }, $diffstr);
     if ($diffstr == "") {
         $diffstr = HtmlBBcodeUtils::bbcode2html($text_alt);
     }
     if ($wrapWithCssClass) {
         $diffstr = HtmlBBcodeUtils::wrapWithTextClass($pre_str_html . $diffstr, $css_width_hack);
     }
     return $diffstr;
 }
Example #5
0
		<div style="text-align: center; display: none;" id="antrags_diff_closer">
			<a href="#"
			   onClick="$('#antrags_diff_holder').hide(); $('#antrags_diff_opener').show(); $('#antrags_diff_closer').hide(); return false;"><i
					class="icon-up-open"></i> Antragstext mit Änderungen anzeigen</a>
		</div>
		<div id="antrags_diff_holder" class="content" style="display: none;">
			<?php 
$abs_alt = $aenderungsantrag->antrag->getParagraphs();
$abs_neu = json_decode($aenderungsantrag->text_neu);
$letztes_leer = false;
foreach ($abs_alt as $i => $abs) {
    if (isset($abs_neu[$i]) && $abs_neu[$i] != "") {
        $letztes_leer = false;
        echo "<div class='row-fluid'>";
        /** @var AntragAbsatz $abs */
        echo DiffUtils::renderBBCodeDiff2HTML($abs->str_bbcode, $abs_neu[$i]);
        echo "</div>\n";
    } else {
        if (!$letztes_leer) {
            $letztes_leer = true;
            echo "<div class='absatz_ueberspringen'>.<br>.<br>.</div>";
        }
    }
}
?>
		</div>
	</div>

	<div class="begruendungs_text_holder">
		<h3>Begründung</h3>
Example #6
0
        echo "checked";
    }
    echo "> Ändern<br></label>\n\t\t\t<h4>Neue Fassung</h4>\n\t\t\t<textarea id='neu_text_{$i}' name='neu_text[{$i}]' style='width: 550px; height: 200px;'>";
    $str_neu = $text_pre && $text_pre[$i] != "" ? $text_pre[$i] : $abs->str_bbcode;
    echo CHtml::encode($str_neu) . "</textarea>";
    echo "<a href='#' class='ae_verwerfen' style='float: right;'>Unverändert lassen</a>";
    echo "<div style='text-align: center;'>";
    $this->widget('bootstrap.widgets.TbButton', array('type' => 'success', 'icon' => 'chevron-right white', 'label' => 'Weiter', 'url' => '#begruendungs_holder'));
    echo "</div></div>\n";
    echo "<div class='antragstext_diff antrags_text_holder_keinenummern absatz_text' ";
    if (!$text_pre || $text_pre[$i] == "") {
        echo "style='display: none;'";
    }
    echo ">";
    if ($text_pre && $text_pre[$i] != "") {
        echo DiffUtils::renderBBCodeDiff2HTML($abs->str_bbcode, $text_pre[$i]);
    } else {
        echo $abs->str_html_plain;
    }
    echo "</div>";
    echo "</div>";
}
?>
</div>

<div id="ae_metatext_holder" style="display: none;">
	<h3><label for="ae_metatext"><?php 
echo $sprache->get("Redaktioneller Antrag");
?>
</label></h3>
        }
        $html .= "<br><br>";
    }
    $letztes_leer = true;
    foreach ($abs_alt as $i => $abs) {
        if (isset($abs_neu[$i]) && $abs_neu[$i] != "") {
            if ($letztes_leer) {
                $letztes_leer = false;
                preg_match_all("/<span class='zeilennummer'>([0-9]+)<\\/span>/siu", $abs->str_html, $matches);
                $zeile_von = isset($matches[1][0]) ? IntVal($matches[1][0]) : "????";
                $zeile_bis = isset($matches[1]) ? $matches[1][count($matches[1]) - 1] : "???";
                $html .= "Im Absatz von Zeile {$zeile_von} - {$zeile_bis}:";
            }
            $html .= "<div class='row-fluid' style=\"line-height: 18px;\">";
            /** @var AntragAbsatz $abs */
            $str = DiffUtils::renderBBCodeDiff2HTML($abs->str_bbcode, $abs_neu[$i], true);
            if (function_exists("normalizer_normalize")) {
                $str = normalizer_normalize($str);
            }
            $replaces = array("<ins> " => " <span style=\"color: green; text-decoration: underline; font-weight: bold;\">", "<ins>" => "<span style=\"color: green; text-decoration: underline; font-weight: bold;\">", "</ins>" => "</span>", " </ins>" => "</span> ", "<del>" => "<span style=\"color: red; text-decoration: line-through;\">", "</del>" => "</span>");
            $html .= str_replace(array_keys($replaces), array_values($replaces), $str);
            $html .= "</div>\n";
        }
    }
    $pdf->writeHTML($html);
} else {
    $linenr = 1;
    $absae = $aenderungsantrag->getAntragstextParagraphs_flat();
    foreach ($absae as $i => $abs) {
        /** @var AntragAbsatz $abs */
        $text = $abs->str_html;
Example #8
0
 /**
  * @return int
  */
 public function getFirstDiffLine()
 {
     if ($this->aenderung_first_line_cache > -1) {
         return $this->aenderung_first_line_cache;
     }
     $text_vorher = $this->antrag->text;
     $paragraphs = $this->antrag->getParagraphs(false, false);
     $text_neu = array();
     $diff = $this->getDiffParagraphs();
     foreach ($paragraphs as $i => $para) {
         if (isset($diff[$i]) && $diff[$i] != "") {
             $text_neu[] = $diff[$i];
         } else {
             $text_neu[] = $para->str_bbcode;
         }
     }
     $diff = DiffUtils::getTextDiffMitZeilennummern(trim($text_vorher), trim(implode("\n\n", $text_neu)), $this->antrag->veranstaltung->getEinstellungen()->zeilenlaenge);
     $this->aenderung_first_line_cache = DiffUtils::getFistDiffLine($diff, $this->antrag->getFirstLineNo());
     $this->save();
     return $this->aenderung_first_line_cache;
 }
 /**
  * @param string $veranstaltungsreihe_id
  * @param string $veranstaltung_id
  * @param int $antrag_id
  * @param int $adoptInitiators
  */
 public function actionNeu($veranstaltungsreihe_id = "", $veranstaltung_id, $antrag_id, $adoptInitiators = 0)
 {
     $this->layout = '//layouts/column2';
     $this->testeWartungsmodus();
     $antrag_id = IntVal($antrag_id);
     /** @var Antrag $antrag */
     $antrag = Antrag::model()->findByPk($antrag_id);
     $this->loadVeranstaltung($veranstaltungsreihe_id, $veranstaltung_id, $antrag);
     if (!$antrag->veranstaltung->getPolicyAenderungsantraege()->checkCurUserHeuristically()) {
         $msg = $antrag->veranstaltung->getPolicyAenderungsantraege()->getPermissionDeniedMsg();
         Yii::app()->user->setFlash("error", "Es kann kein Änderungsantrag werden: " . $msg);
         $this->redirect($this->createUrl("antrag/anzeige", array("antrag_id" => $antrag->id)));
     }
     $aenderungsantrag = new Aenderungsantrag();
     $aenderungsantrag->aenderung_first_line_cache = -1;
     $aenderungsantrag->antrag = $antrag;
     $aenderungsantrag->antrag_id = $antrag->id;
     $aenderungsantrag->status = Aenderungsantrag::$STATUS_UNBESTAETIGT;
     $aenderungsantrag->status_string = "";
     $unterstuetzerInnen = array();
     $changed = false;
     if (AntiXSS::isTokenSet("antragneu")) {
         $aenderungsantrag->name_neu = $_REQUEST["Aenderungsantrag"]["name_neu"];
         $aenderungsantrag->begruendung_neu = "";
         $aenderungsantrag->aenderung_metatext = HtmlBBcodeUtils::html_normalize($_REQUEST["ae_metatext"]);
         if ($aenderungsantrag->antrag->veranstaltung->getEinstellungen()->begruendung_in_html && isset($_REQUEST["ae_begruendung_html"])) {
             $aenderungsantrag->aenderung_begruendung_html = 1;
             $aenderungsantrag->aenderung_begruendung = HtmlBBcodeUtils::html_normalize($_REQUEST["ae_begruendung"]);
         } else {
             $aenderungsantrag->aenderung_begruendung_html = 0;
             $aenderungsantrag->aenderung_begruendung = HtmlBBcodeUtils::bbcode_normalize($_REQUEST["ae_begruendung"]);
         }
         if ($aenderungsantrag->name_neu != $antrag->name) {
             $changed = true;
         }
         if (trim($aenderungsantrag->aenderung_metatext) != "") {
             $changed = true;
         }
         $orig_absaetze = $antrag->getParagraphs();
         $neue_absaetze = array();
         $neuer_text = "";
         for ($i = 0; $i < count($orig_absaetze); $i++) {
             /** @var AntragAbsatz $abs */
             $abs = $orig_absaetze[$i];
             if (isset($_REQUEST["change_text"][$i])) {
                 $abs_text = HtmlBBcodeUtils::bbcode_normalize($_REQUEST["neu_text"][$i]);
                 $neue_absaetze[$i] = $abs_text;
                 $neuer_text .= $abs_text . "\n\n";
                 $changed = true;
             } else {
                 $neue_absaetze[$i] = "";
                 $neuer_text .= $abs->str_bbcode . "\n\n";
             }
         }
         if ($changed) {
             $aenderungsantrag->setDiffParagraphs($neue_absaetze);
             $diff = DiffUtils::getTextDiffMitZeilennummern($antrag->text, $neuer_text, $antrag->veranstaltung->getEinstellungen()->zeilenlaenge);
             $diff_text = "";
             if ($aenderungsantrag->name_neu != $antrag->name) {
                 $diff_text .= "Neuer Titel des Antrags:\n[QUOTE]" . $aenderungsantrag->name_neu . "[/QUOTE]\n\n";
             }
             if (trim($aenderungsantrag->aenderung_metatext) != "") {
                 $diff_text = $aenderungsantrag->aenderung_metatext . "\n\n";
             }
             $diff_text .= DiffUtils::diff2text($diff, $antrag->getFirstLineNo());
             $aenderungsantrag->aenderung_text = $diff_text;
             $aenderungsantrag->datum_einreichung = new CDbExpression('NOW()');
         } else {
             Yii::app()->user->setFlash("error", "Es wurde nichts am Text geändert.");
         }
         if (!$this->veranstaltung->getPolicyAenderungsantraege()->checkAenderungsantragSubmit()) {
             Yii::app()->user->setFlash("error", "Keine Berechtigung zum Anlegen von Änderungsanträgen.");
             $changed = false;
         }
     }
     $hiddens = array("antrag_id" => $antrag->id);
     $js_protection = Yii::app()->user->isGuest;
     if ($js_protection) {
         $hiddens["form_token"] = AntiXSS::createToken("antragneu");
     } else {
         $hiddens[AntiXSS::createToken("antragneu")] = "1";
     }
     if ($changed) {
         if (!$aenderungsantrag->save()) {
             foreach ($aenderungsantrag->getErrors() as $val) {
                 foreach ($val as $val2) {
                     Yii::app()->user->setFlash("error", "Änderungsantrag konnte nicht angelegt werden: " . $val2);
                 }
             }
             $antragstellerIn = Yii::app()->user->isGuest ? null : Person::model()->findByAttributes(array("auth" => Yii::app()->user->id));
             if ($antragstellerIn === null) {
                 $antragstellerIn = new Person();
             }
             $this->render('bearbeiten_form', array("mode" => "neu", "antrag" => $antrag, "aenderungsantrag" => $aenderungsantrag, "antragstellerIn" => $antragstellerIn, "unterstuetzerInnen" => $unterstuetzerInnen, "hiddens" => $hiddens, "js_protection" => $js_protection, "sprache" => $aenderungsantrag->antrag->veranstaltung->getSprache()));
             return;
         }
         $this->veranstaltung->getPolicyAenderungsantraege()->submitAntragsstellerInView_Aenderungsantrag($aenderungsantrag);
         $this->redirect($this->createUrl("aenderungsantrag/neuConfirm", array("antrag_id" => $antrag_id, "aenderungsantrag_id" => $aenderungsantrag->id)));
     } else {
         if (Yii::app()->user->isGuest || $this->veranstaltung->isAdminCurUser()) {
             $antragstellerIn = new Person();
             $antragstellerIn->typ = Person::$TYP_PERSON;
         } else {
             $antragstellerIn = Person::model()->findByAttributes(array("auth" => Yii::app()->user->id));
         }
         if ($adoptInitiators > 0 && $this->veranstaltung->isAdminCurUser()) {
             $templateAmendment = $this->veranstaltung->getAmendment($adoptInitiators);
             if ($templateAmendment) {
                 foreach ($templateAmendment->aenderungsantragUnterstuetzerInnen as $unt) {
                     if ($unt->rolle == AenderungsantragUnterstuetzerInnen::$ROLLE_INITIATORIN) {
                         $antragstellerIn = $unt->person;
                     }
                     if ($unt->rolle == AenderungsantragUnterstuetzerInnen::$ROLLE_UNTERSTUETZERIN) {
                         $unterstuetzerInnen[] = $unt->person;
                     }
                 }
             }
         }
         $aenderungsantrag->name_neu = $antrag->name;
         $this->render('bearbeiten_form', array("mode" => "neu", "antrag" => $antrag, "aenderungsantrag" => $aenderungsantrag, "antragstellerIn" => $antragstellerIn, "unterstuetzerInnen" => $unterstuetzerInnen, "hiddens" => $hiddens, "js_protection" => $js_protection, "sprache" => $aenderungsantrag->antrag->veranstaltung->getSprache()));
     }
 }
Example #10
0
    ?>

			</div>

			<?php 
    foreach ($abs->aenderungsantraege as $ant) {
        $par = $ant->getDiffParagraphs();
        if ($par[$i] != "") {
            ?>
					<div
						class="absatz_text diff ae_<?php 
            echo $ant->id;
            ?>
" style="display: none; position: relative; border-right: solid 1px lightgray; margin-left: 0;">
						<?php 
            echo DiffUtils::renderBBCodeDiff2HTML($abs->str_bbcode, $par[$i], false, $this->veranstaltung->getEinstellungen()->zeilenlaenge);
            ?>
					</div>
				<?php 
        }
    }
    $this->renderPartial("anzeige_kommentare", array("antrag" => $antrag, "absatz_nr" => $abs->absatz_nr, "komm_del_link" => $komm_del_link, "js_protection" => $js_protection, "hiddens" => $hiddens, "kommentar_person" => $kommentar_person, "kommentare" => $abs->kommentare));
    ?>

		</div>
	<?php 
}
?>
</div>

<?php