Index: trunk/extensions/EducationProgram/includes/EPOrgPager.php |
— | — | @@ -63,7 +63,7 @@ |
64 | 64 | case 'name': |
65 | 65 | $value = Linker::linkKnown( |
66 | 66 | SpecialPage::getTitleFor( 'Institution', $value ), |
67 | | - $value |
| 67 | + htmlspecialchars( $value ) |
68 | 68 | ); |
69 | 69 | break; |
70 | 70 | case 'country': |
— | — | @@ -118,13 +118,13 @@ |
119 | 119 | |
120 | 120 | $links[] = $value = Linker::linkKnown( |
121 | 121 | SpecialPage::getTitleFor( 'Institution', $item->getField( 'name' ) ), |
122 | | - wfMsg( 'view' ) |
| 122 | + wfMsgHtml( 'view' ) |
123 | 123 | ); |
124 | 124 | |
125 | 125 | if ( $this->getUser()->isAllowed( 'epadmin' ) ) { |
126 | 126 | $links[] = $value = Linker::linkKnown( |
127 | 127 | SpecialPage::getTitleFor( 'EditInstitution', $item->getField( 'name' ) ), |
128 | | - wfMsg( 'edit' ) |
| 128 | + wfMsgHtml( 'edit' ) |
129 | 129 | ); |
130 | 130 | |
131 | 131 | $links[] = $this->getDeletionLink( 'org', $item->getId() ); |
Index: trunk/extensions/EducationProgram/includes/EPTermPager.php |
— | — | @@ -65,7 +65,7 @@ |
66 | 66 | case 'id': |
67 | 67 | $value = Linker::linkKnown( |
68 | 68 | SpecialPage::getTitleFor( 'Term', $value ), |
69 | | - $value |
| 69 | + htmlspecialchars( $value ) |
70 | 70 | ); |
71 | 71 | break; |
72 | 72 | case 'course_id': |
— | — | @@ -73,7 +73,7 @@ |
74 | 74 | |
75 | 75 | $value = Linker::linkKnown( |
76 | 76 | SpecialPage::getTitleFor( 'Course', $value ), |
77 | | - $value |
| 77 | + htmlspecialchars( $value ) |
78 | 78 | ); |
79 | 79 | break; |
80 | 80 | case 'year': |
— | — | @@ -140,13 +140,13 @@ |
141 | 141 | |
142 | 142 | $links[] = $value = Linker::linkKnown( |
143 | 143 | SpecialPage::getTitleFor( 'Term', $item->getId() ), |
144 | | - wfMsg( 'view' ) |
| 144 | + wfMsgHtml( 'view' ) |
145 | 145 | ); |
146 | 146 | |
147 | 147 | if ( $this->getUser()->isAllowed( 'epadmin' ) ) { |
148 | 148 | $links[] = $value = Linker::linkKnown( |
149 | 149 | SpecialPage::getTitleFor( 'EditTerm', $item->getId() ), |
150 | | - wfMsg( 'edit' ) |
| 150 | + wfMsgHtml( 'edit' ) |
151 | 151 | ); |
152 | 152 | |
153 | 153 | $links[] = $this->getDeletionLink( 'term', $item->getId() ); |
Index: trunk/extensions/EducationProgram/includes/EPOrg.php |
— | — | @@ -111,5 +111,35 @@ |
112 | 112 | return array(); |
113 | 113 | } |
114 | 114 | } |
| 115 | + |
| 116 | + public static function displayAddNewControl( IContextSource $context, $name = false ) { |
| 117 | + $out = $context->getOutput(); |
| 118 | + |
| 119 | + $out->addHTML( Html::openElement( |
| 120 | + 'form', |
| 121 | + array( |
| 122 | + 'method' => 'post', |
| 123 | + 'action' => SpecialPage::getTitleFor( 'EditInstitution' )->getLocalURL(), |
| 124 | + ) |
| 125 | + ) ); |
115 | 126 | |
| 127 | + $out->addHTML( '<fieldset>' ); |
| 128 | + |
| 129 | + $out->addHTML( '<legend>' . wfMsgHtml( 'ep-institutions-addnew' ) . '</legend>' ); |
| 130 | + |
| 131 | + $out->addHTML( Html::element( 'p', array(), wfMsg( 'ep-institutions-namedoc' ) ) ); |
| 132 | + |
| 133 | + $out->addHTML( Xml::inputLabel( wfMsg( 'ep-institutions-newname' ), 'newname', 'newname', false, $name ) ); |
| 134 | + |
| 135 | + $out->addHTML( ' ' . Html::input( |
| 136 | + 'addneworg', |
| 137 | + wfMsg( 'ep-institutions-add' ), |
| 138 | + 'submit' |
| 139 | + ) ); |
| 140 | + |
| 141 | + $out->addHTML( Html::hidden( 'newEditToken', $context->getUser()->editToken() ) ); |
| 142 | + |
| 143 | + $out->addHTML( '</fieldset></form>' ); |
| 144 | + } |
| 145 | + |
116 | 146 | } |
Index: trunk/extensions/EducationProgram/includes/EPPager.php |
— | — | @@ -245,6 +245,12 @@ |
246 | 246 | public function getFilterControl( $hideWhenNoResults = true ) { |
247 | 247 | $filterOptions = $this->getFilterOptions(); |
248 | 248 | |
| 249 | + foreach ( $this->conds as $name => $value ) { |
| 250 | + if ( array_key_exists( $name, $filterOptions ) ) { |
| 251 | + unset( $filterOptions[$name] ); |
| 252 | + } |
| 253 | + } |
| 254 | + |
249 | 255 | if ( count( $filterOptions ) < 1 ) { |
250 | 256 | return ''; |
251 | 257 | } |
Index: trunk/extensions/EducationProgram/includes/EPCoursePager.php |
— | — | @@ -62,7 +62,7 @@ |
63 | 63 | case 'name': |
64 | 64 | $value = Linker::linkKnown( |
65 | 65 | SpecialPage::getTitleFor( 'Course', $value ), |
66 | | - $value |
| 66 | + htmlspecialchars( $value ) |
67 | 67 | ); |
68 | 68 | break; |
69 | 69 | case 'org_id': |
— | — | @@ -70,7 +70,7 @@ |
71 | 71 | |
72 | 72 | $value = Linker::linkKnown( |
73 | 73 | SpecialPage::getTitleFor( 'Institution', $value ), |
74 | | - $value |
| 74 | + htmlspecialchars( $value ) |
75 | 75 | ); |
76 | 76 | break; |
77 | 77 | } |
— | — | @@ -119,13 +119,13 @@ |
120 | 120 | |
121 | 121 | $links[] = $value = Linker::linkKnown( |
122 | 122 | SpecialPage::getTitleFor( 'Course', $item->getField( 'name' ) ), |
123 | | - wfMsg( 'view' ) |
| 123 | + wfMsgHtml( 'view' ) |
124 | 124 | ); |
125 | 125 | |
126 | 126 | if ( $this->getUser()->isAllowed( 'epadmin' ) ) { |
127 | 127 | $links[] = $value = Linker::linkKnown( |
128 | 128 | SpecialPage::getTitleFor( 'EditCourse', $item->getField( 'name' ) ), |
129 | | - wfMsg( 'edit' ) |
| 129 | + wfMsgHtml( 'edit' ) |
130 | 130 | ); |
131 | 131 | |
132 | 132 | $links[] = $this->getDeletionLink( 'term', $item->getId() ); |
— | — | @@ -133,5 +133,24 @@ |
134 | 134 | |
135 | 135 | return $links; |
136 | 136 | } |
| 137 | + |
| 138 | + public static function displayWithAddControl( IContextSource $context, array $conditions = array() ) { |
137 | 139 | |
| 140 | + |
| 141 | + $pager = new self( $this->getContext() ); |
| 142 | + |
| 143 | + if ( $pager->getNumRows() ) { |
| 144 | + $this->getOutput()->addHTML( |
| 145 | + $pager->getFilterControl() . |
| 146 | + $pager->getNavigationBar() . |
| 147 | + $pager->getBody() . |
| 148 | + $pager->getNavigationBar() |
| 149 | + ); |
| 150 | + } |
| 151 | + else { |
| 152 | + $this->getOutput()->addHTML( $pager->getFilterControl( true ) ); |
| 153 | + $this->getOutput()->addWikiMsg( 'ep-courses-noresults' ); |
| 154 | + } |
| 155 | + } |
| 156 | + |
138 | 157 | } |
Index: trunk/extensions/EducationProgram/includes/EPCourse.php |
— | — | @@ -121,5 +121,115 @@ |
122 | 122 | |
123 | 123 | return $cache[$userId]; |
124 | 124 | } |
| 125 | + |
| 126 | + /** |
| 127 | + * Adds a control to add a new course to the provided context. |
| 128 | + * An org id can be provided to set the initially selected org. |
| 129 | + * |
| 130 | + * @since 0.1 |
| 131 | + * |
| 132 | + * @param IContextSource $context |
| 133 | + * @param array $args |
| 134 | + */ |
| 135 | + public static function displayAddNewControl( IContextSource $context, array $args = array() ) { |
| 136 | + $out = $this->getOutput(); |
125 | 137 | |
| 138 | + $out->addHTML( Html::openElement( |
| 139 | + 'form', |
| 140 | + array( |
| 141 | + 'method' => 'post', |
| 142 | + 'action' => SpecialPage::getTitleFor( 'EditCourse' )->getLocalURL(), |
| 143 | + ) |
| 144 | + ) ); |
| 145 | + |
| 146 | + $out->addHTML( '<fieldset>' ); |
| 147 | + |
| 148 | + $out->addHTML( '<legend>' . wfMsgHtml( 'ep-courses-addnew' ) . '</legend>' ); |
| 149 | + |
| 150 | + $out->addHTML( Html::element( 'p', array(), wfMsg( 'ep-courses-namedoc' ) ) ); |
| 151 | + |
| 152 | + $out->addHTML( Html::element( 'label', array( 'for' => 'neworg' ), wfMsg( 'ep-courses-neworg' ) ) ); |
| 153 | + |
| 154 | + $out->addHTML( ' ' ); |
| 155 | + |
| 156 | + $select = new XmlSelect( |
| 157 | + 'neworg', |
| 158 | + 'neworg', |
| 159 | + array_key_exists( 'org', $args ) ? $args['org'] : false |
| 160 | + ); |
| 161 | + |
| 162 | + $select->addOptions( EPOrg::getOrgOptions( EPOrg::getEditableOrgs( $context->getUser() ) ) ); |
| 163 | + $out->addHTML( $select->getHTML() ); |
| 164 | + |
| 165 | + $out->addHTML( ' ' ); |
| 166 | + |
| 167 | + $out->addHTML( Xml::inputLabel( |
| 168 | + wfMsg( 'ep-courses-newname' ), |
| 169 | + 'newname', |
| 170 | + 'newname', |
| 171 | + false, |
| 172 | + array_key_exists( 'name', $args ) ? $args['name'] : false |
| 173 | + ) ); |
| 174 | + |
| 175 | + $out->addHTML( ' ' ); |
| 176 | + |
| 177 | + $out->addHTML( Html::input( |
| 178 | + 'addneworg', |
| 179 | + wfMsg( 'ep-courses-add' ), |
| 180 | + 'submit' |
| 181 | + ) ); |
| 182 | + |
| 183 | + $out->addHTML( Html::hidden( 'newEditToken', $this->getUser()->editToken() ) ); |
| 184 | + |
| 185 | + $out->addHTML( '</fieldset></form>' ); |
| 186 | + } |
| 187 | + |
| 188 | + /** |
| 189 | + * Adds a control to add a new course to the provided context |
| 190 | + * or show a message if this is not possible for some reason. |
| 191 | + * |
| 192 | + * @since 0.1 |
| 193 | + * |
| 194 | + * @param IContextSource $context |
| 195 | + * @param array $args |
| 196 | + */ |
| 197 | + public static function displayAddNewRegion( IContextSource $context, array $args = array() ) { |
| 198 | + $orgs = EPOrg::getEditableOrgs( $context->getUser() ); |
| 199 | + |
| 200 | + if ( count( $orgs ) > 0 ) { |
| 201 | + EPCourse::displayAddNewControl( $context, $args ); |
| 202 | + } |
| 203 | + elseif ( $context->getUser()->isAllowed( 'epadmin' ) ) { |
| 204 | + $context->getOutput()->addWikiMsg( 'ep-courses-noorgs' ); |
| 205 | + } |
| 206 | + elseif ( $context->getUser()->isAllowed( 'epmentor' ) ) { |
| 207 | + $context->getOutput()->addWikiMsg( 'ep-courses-addorgfirst' ); |
| 208 | + } |
| 209 | + } |
| 210 | + |
| 211 | + /** |
| 212 | + * Display a pager with courses. |
| 213 | + * |
| 214 | + * @since 0.1 |
| 215 | + * |
| 216 | + * @param IContextSource $context |
| 217 | + * @param array $conditions |
| 218 | + */ |
| 219 | + public static function displayPager( IContextSource $context, array $conditions = array() ) { |
| 220 | + $pager = new EPCoursePager( $context, $conditions ); |
| 221 | + |
| 222 | + if ( $pager->getNumRows() ) { |
| 223 | + $context->getOutput()->addHTML( |
| 224 | + $pager->getFilterControl() . |
| 225 | + $pager->getNavigationBar() . |
| 226 | + $pager->getBody() . |
| 227 | + $pager->getNavigationBar() |
| 228 | + ); |
| 229 | + } |
| 230 | + else { |
| 231 | + $context->getOutput()->addHTML( $pager->getFilterControl( true ) ); |
| 232 | + $context->getOutput()->addWikiMsg( 'ep-courses-noresults' ); |
| 233 | + } |
| 234 | + } |
| 235 | + |
126 | 236 | } |
Index: trunk/extensions/EducationProgram/EducationProgram.i18n.php |
— | — | @@ -150,6 +150,12 @@ |
151 | 151 | // ep.pager |
152 | 152 | 'ep-pager-confirm-delete' => 'Are you sure you want to delete this item?', |
153 | 153 | 'ep-pager-delete-fail' => 'Could not delete this item.', |
| 154 | + |
| 155 | + // Special:Institution |
| 156 | + 'ep-institution-none' => 'There is no institution with name "$1".', |
| 157 | + 'ep-institution-create' => 'There is no institution with name "$1" yet, but you can create it.', |
| 158 | + 'ep-institution-title' => 'Institution: $1', |
| 159 | + 'ep-institution-courses' => 'Courses', |
154 | 160 | ); |
155 | 161 | |
156 | 162 | /** Message documentation (Message documentation) |
Index: trunk/extensions/EducationProgram/specials/SpecialInstitution.php |
— | — | @@ -14,6 +14,8 @@ |
15 | 15 | */ |
16 | 16 | class SpecialInstitution extends SpecialEPPage { |
17 | 17 | |
| 18 | + protected $org; |
| 19 | + |
18 | 20 | /** |
19 | 21 | * Constructor. |
20 | 22 | * |
— | — | @@ -34,8 +36,40 @@ |
35 | 37 | parent::execute( $subPage ); |
36 | 38 | |
37 | 39 | $out = $this->getOutput(); |
38 | | - |
39 | | - // TODO: AUTH |
| 40 | + |
| 41 | + $out->setPageTitle( wfMsgExt( 'ep-institution-title', 'parsemag', $this->subPage ) ); |
| 42 | + |
| 43 | + $org = EPOrg::selectRow( null, array( 'name' => $this->subPage ) ); |
| 44 | + |
| 45 | + if ( $org === false ) { |
| 46 | + if ( $this->getUser()->isAllowed( 'epadmin' ) ) { |
| 47 | + $out->addWikiMsg( 'ep-institution-create', 'parsemag', $this->subPage ); |
| 48 | + EPOrg::displayAddNewControl( $this->getContext(), $this->subPage ); |
| 49 | + } |
| 50 | + else { |
| 51 | + $out->addWikiMsg( 'ep-institution-none', 'parsemag', $this->subPage ); |
| 52 | + } |
| 53 | + } |
| 54 | + else { |
| 55 | + $this->displayInfo( $org ); |
| 56 | + |
| 57 | + $out->addHTML( Html::element( 'h2', array(), wfMsg( 'ep-institution-courses' ) ) ); |
| 58 | + |
| 59 | + EPCourse::displayPager( $this->getContext(), array( 'org_id' => $org->getId() ) ); |
| 60 | + } |
40 | 61 | } |
41 | | - |
| 62 | + |
| 63 | + /** |
| 64 | + * Display the orgs info. |
| 65 | + * |
| 66 | + * @since 0.1 |
| 67 | + * |
| 68 | + * @param EPOrg $org |
| 69 | + */ |
| 70 | + protected function displayInfo( EPOrg $org ) { |
| 71 | + $out = $this->getOutput(); |
| 72 | + |
| 73 | + |
| 74 | + } |
| 75 | + |
42 | 76 | } |
Index: trunk/extensions/EducationProgram/specials/SpecialInstitutions.php |
— | — | @@ -57,59 +57,7 @@ |
58 | 58 | * @since 0.1 |
59 | 59 | */ |
60 | 60 | protected function displayPage() { |
61 | | - if ( $this->getUser()->isAllowed( 'epadmin' ) ) { |
62 | | - $this->displayAddNewControl(); |
63 | | - } |
64 | | - |
65 | | - $pager = new EPOrgPager( $this->getContext() ); |
66 | | - |
67 | | - if ( $pager->getNumRows() ) { |
68 | | - $this->getOutput()->addHTML( |
69 | | - $pager->getFilterControl() . |
70 | | - $pager->getNavigationBar() . |
71 | | - $pager->getBody() . |
72 | | - $pager->getNavigationBar() |
73 | | - ); |
74 | | - } |
75 | | - else { |
76 | | - $this->getOutput()->addHTML( $pager->getFilterControl( true ) ); |
77 | | - $this->getOutput()->addWikiMsg( 'ep-institutions-noresults' ); |
78 | | - } |
79 | | - } |
80 | | - |
81 | | - /** |
82 | | - * Displays a small form to add a new institution. |
83 | | - * |
84 | | - * @since 0.1 |
85 | | - */ |
86 | | - protected function displayAddNewControl() { |
87 | | - $out = $this->getOutput(); |
88 | 61 | |
89 | | - $out->addHTML( Html::openElement( |
90 | | - 'form', |
91 | | - array( |
92 | | - 'method' => 'post', |
93 | | - 'action' => SpecialPage::getTitleFor( 'EditInstitution' )->getLocalURL(), |
94 | | - ) |
95 | | - ) ); |
96 | | - |
97 | | - $out->addHTML( '<fieldset>' ); |
98 | | - |
99 | | - $out->addHTML( '<legend>' . wfMsgHtml( 'ep-institutions-addnew' ) . '</legend>' ); |
100 | | - |
101 | | - $out->addHTML( Html::element( 'p', array(), wfMsg( 'ep-institutions-namedoc' ) ) ); |
102 | | - |
103 | | - $out->addHTML( Xml::inputLabel( wfMsg( 'ep-institutions-newname' ), 'newname', 'newname' ) ); |
104 | | - |
105 | | - $out->addHTML( ' ' . Html::input( |
106 | | - 'addneworg', |
107 | | - wfMsg( 'ep-institutions-add' ), |
108 | | - 'submit' |
109 | | - ) ); |
110 | | - |
111 | | - $out->addHTML( Html::hidden( 'newEditToken', $this->getUser()->editToken() ) ); |
112 | | - |
113 | | - $out->addHTML( '</fieldset></form>' ); |
114 | 62 | } |
115 | 63 | |
116 | 64 | } |
Index: trunk/extensions/EducationProgram/specials/SpecialEPPage.php |
— | — | @@ -41,7 +41,6 @@ |
42 | 42 | public function setHeaders() { |
43 | 43 | $out = $this->getOutput(); |
44 | 44 | $out->setArticleRelated( false ); |
45 | | - $out->setRobotPolicy( 'noindex,nofollow' ); |
46 | 45 | $out->setPageTitle( $this->getDescription() ); |
47 | 46 | } |
48 | 47 | |
Index: trunk/extensions/EducationProgram/specials/SpecialCourses.php |
— | — | @@ -36,14 +36,14 @@ |
37 | 37 | $out = $this->getOutput(); |
38 | 38 | |
39 | 39 | if ( $this->subPage === '' ) { |
40 | | - $this->displayPage(); |
| 40 | + EPCourse::displayPager() |
41 | 41 | } |
42 | 42 | else { |
43 | 43 | $org = EPOrg::has( array( 'name' => $this->subPage ) ); |
44 | 44 | |
45 | 45 | if ( $org === false ) { |
46 | 46 | $this->showError( wfMessage( 'ep-courses-nosuchcourses', $this->subPage ) ); |
47 | | - $this->displayPage(); |
| 47 | + EPCourse::displayAddNewRegion( $this->getContext() ); |
48 | 48 | } |
49 | 49 | else { |
50 | 50 | $out->redirect( SpecialPage::getTitleFor( 'Course', $this->subPage )->getLocalURL() ); |
— | — | @@ -51,89 +51,4 @@ |
52 | 52 | } |
53 | 53 | } |
54 | 54 | |
55 | | - /** |
56 | | - * Display all the stuff that should be on the page. |
57 | | - * |
58 | | - * @since 0.1 |
59 | | - */ |
60 | | - protected function displayPage() { |
61 | | - $user = $this->getUser(); |
62 | | - |
63 | | - $orgs = EPOrg::getEditableOrgs( $this->getUser() ); |
64 | | - |
65 | | - if ( count( $orgs ) > 0 ) { |
66 | | - $this->displayAddNewControl( $orgs ); |
67 | | - } |
68 | | - elseif ( $user->isAllowed( 'epadmin' ) ) { |
69 | | - $this->getOutput()->addWikiMsg( 'ep-courses-noorgs' ); |
70 | | - } |
71 | | - elseif ( $user->isAllowed( 'epmentor' ) ) { |
72 | | - $this->getOutput()->addWikiMsg( 'ep-courses-addorgfirst' ); |
73 | | - } |
74 | | - |
75 | | - $pager = new EPCoursePager( $this->getContext() ); |
76 | | - |
77 | | - if ( $pager->getNumRows() ) { |
78 | | - $this->getOutput()->addHTML( |
79 | | - $pager->getFilterControl() . |
80 | | - $pager->getNavigationBar() . |
81 | | - $pager->getBody() . |
82 | | - $pager->getNavigationBar() |
83 | | - ); |
84 | | - } |
85 | | - else { |
86 | | - $this->getOutput()->addHTML( $pager->getFilterControl( true ) ); |
87 | | - $this->getOutput()->addWikiMsg( 'ep-courses-noresults' ); |
88 | | - } |
89 | | - } |
90 | | - |
91 | | - /** |
92 | | - * Displays a small form to add a new institution. |
93 | | - * |
94 | | - * @since 0.1 |
95 | | - * |
96 | | - * @param array $orgs |
97 | | - */ |
98 | | - protected function displayAddNewControl( array /* of EPOrg */ $orgs ) { |
99 | | - $out = $this->getOutput(); |
100 | | - |
101 | | - $out->addHTML( Html::openElement( |
102 | | - 'form', |
103 | | - array( |
104 | | - 'method' => 'post', |
105 | | - 'action' => SpecialPage::getTitleFor( 'EditCourse' )->getLocalURL(), |
106 | | - ) |
107 | | - ) ); |
108 | | - |
109 | | - $out->addHTML( '<fieldset>' ); |
110 | | - |
111 | | - $out->addHTML( '<legend>' . wfMsgHtml( 'ep-courses-addnew' ) . '</legend>' ); |
112 | | - |
113 | | - $out->addHTML( Html::element( 'p', array(), wfMsg( 'ep-courses-namedoc' ) ) ); |
114 | | - |
115 | | - $out->addHTML( Html::element( 'label', array( 'for' => 'neworg' ), wfMsg( 'ep-courses-neworg' ) ) ); |
116 | | - |
117 | | - $out->addHTML( ' ' ); |
118 | | - |
119 | | - $select = new XmlSelect( 'neworg', 'neworg' ); |
120 | | - $select->addOptions( EPOrg::getOrgOptions( $orgs ) ); |
121 | | - $out->addHTML( $select->getHTML() ); |
122 | | - |
123 | | - $out->addHTML( ' ' ); |
124 | | - |
125 | | - $out->addHTML( Xml::inputLabel( wfMsg( 'ep-courses-newname' ), 'newname', 'newname' ) ); |
126 | | - |
127 | | - $out->addHTML( ' ' ); |
128 | | - |
129 | | - $out->addHTML( Html::input( |
130 | | - 'addneworg', |
131 | | - wfMsg( 'ep-courses-add' ), |
132 | | - 'submit' |
133 | | - ) ); |
134 | | - |
135 | | - $out->addHTML( Html::hidden( 'newEditToken', $this->getUser()->editToken() ) ); |
136 | | - |
137 | | - $out->addHTML( '</fieldset></form>' ); |
138 | | - } |
139 | | - |
140 | 55 | } |